仲値アノマリー完全入門:USD/JPY 9:55の需給を可視化して狙う初心者向け戦略【EA付き】

FX

本記事では、日本時間9:55の「仲値(Tokyo Fixing)」前後でUSD/JPYに発生しやすい需給偏りを、初学者でも実践しやすい形に落とし込みます。仲値は銀行が顧客(輸入企業・輸出企業・機関投資家など)に当日適用する為替レートを決定する社内業務プロセスに由来します。この時間帯は、実需フローのヘッジやポジション調整が一時的に集中しやすく、短い時間ウィンドウに価格の歪みが生じることがあります。

重要な前提として、本稿は特定の利益を保証するものではありません。短時間のイベントを狙う戦略は、スプレッド拡大・滑り(スリッページ)・約定拒否・サーバー遅延などの実務的リスクに敏感です。再現性は執行品質に依存しやすく、取引コストを含めた検証が不可欠です。本記事は、初心者でも段階的に検証・改善できる「実装ベース」のガイドとして構成しています。

仲値(Tokyo Fixing)とは何か

仲値は一般に日本時間9:55頃に各行が提示・確定する対顧客レートを指します。銀行は顧客注文の片側に立つため、顧客フローの偏りが大きい日は自らの市場リスクを調整する必要があり、9:30〜9:55の過程でスポット市場にヘッジフローが出ることがあります。結果的に、特定方向へ短期的な需給の歪みが出現し、9:55直前〜直後に一時的なトレンド・反転が観測されることがあります。

戦略コンセプト:時間×簡易トレンドフィルター

本稿の戦略は極めてシンプルです。時間条件(東京9:40〜9:58)と、簡易トレンドフィルター(移動平均)を組み合わせ、価格に追随するモメンタム型のエントリーを行い、9:55〜9:58で手仕舞う設計です。方向は「直近30分のモメンタムに追随」を基本とし、レンジ日はエントリーを見送る頻度を上げます。

推奨する基本ルール(手動運用)

  1. 監視時間:日本時間9:35からチャート監視を開始します。5分足または1分足を利用します。
  2. フィルター:EMA20とEMA60を5分足に適用。EMA20がEMA60を上回り、かつ価格が両者の上にあれば「上昇モメンタム」、逆は「下降モメンタム」とみなします。
  3. エントリー:9:45〜9:52の間、直近高値/安値のブレイクで成行または指値で片側のみエントリー(多ポジ禁止)。
  4. 手仕舞い:時間決済を優先し、9:56:30までに全決済。利確/損切りと併用します。
  5. 損切り:エントリーから8〜15 pipsの固定SL。過度に広げないこと。
  6. 利確:時間決済が優先ですが、10〜25 pipsのTPを入れておき、急変に備えます。
  7. 見送り条件:重要イベント(日本のGDP、雇用統計、CPIなど)が9:30〜10:00に近接する日、スプレッドが通常の2倍以上、主要祝日・月末最終営業日で流動性やフローが極端に偏りやすい日。

なぜ「時間条件」が効きやすいのか

多くの戦略が価格情報のみを用いるのに対し、仲値戦略は時間という独立変数を使います。ヘッジフローや社内決定プロセスは人為的なスケジュールに依存し、市場が完全に効率的でない限り、時間帯固定の需給偏りが断続的に現れます。このため、価格×時間の2軸で条件を定義すると優位性が生まれる可能性があります。

口座・ツール準備(初心者向け)

  • 口座:USD/JPYが取引でき、東京時間帯のスプレッドが安定している口座を選びます。デモ口座で先に練習します。
  • プラットフォーム:MT4/MT5またはTradingView。今回はMT4を前提にEAも付属します。
  • 時間設定:ブローカーサーバー時間とJSTの差を必ず把握します(EAのパラメータで補正)。
  • データ:過去の1分足・5分足の品質が検証の成否を左右します。欠落データや異常ヒゲの有無を確認します。

資金管理:ロット計算と最大ドローダウン想定

短時間戦略は「勝率」と「平均損益比」の微小な差でエッジを作ります。1トレードの許容損失額を資金の0.5〜1.0%に制限し、SL(pips)と1pipsあたりの価値からロットを逆算します。連敗を前提とし、最大ドローダウン=(連敗数×1トレード損失)を常時モニター。連敗時にロットを上げるマーチン系は採用しません。

実践オペレーション:分単位の行動表

時刻(JST) やること
09:35 チャート準備(5分足・1分足、EMA20/60)。経済指標カレンダー確認。
09:40 モメンタム判定(EMA20≷EMA60、価格の位置)。
09:45 直近高値/安値を更新し始めたらブレイク指値準備。スプレッド監視。
09:50 過度な乱高下なら見送り判断。建玉は1ポジのみ。
09:55 時間経過とともに決済方針を固定。突発変動に備えSL/TP確認。
09:56〜09:58 時間決済でクローズ。再エントリーしない。

回避・調整ルール

  • 月末営業日:実需フローが通常と異なる挙動を示しやすく、ギャップや急反転が増える傾向。経験を積むまでは回避。
  • 主要指標・要人発言:仲値前に日本のマクロ指標発表がある日は、イベント主導のボラでルールが無効化されやすい。
  • 急なスプレッド拡大:スプレッドが一時的に3桁(0.3→1.0pipsなど)へ拡大したら成行は避け、指値活用か見送り。
  • 通信遅延:VPS未使用で家庭回線の場合、遅延・約定品質の不安定さが増す。裁量は成行でなくブレイク指値を中心に。

検証(バックテスト)手順

  1. 期間:直近2〜3年を最低ラインに、可能なら5年。
  2. データ品質:1分足の欠損や異常スパイクを手修正(または高品質データを再取得)。
  3. ロジック固定:時間条件・EMA条件・SL/TPを固定。パラメータの過剰最適化は禁止。
  4. コスト反映:平均スプレッド、想定スリッページ(例:±0.2〜0.5pips)を加味。
  5. 評価:勝率、平均損益比、PF、最大DD、連敗数、年次ごとの安定性。

MQL4 EA(完全自動売買)サンプル

以下は本戦略の最小構成EAです。教育目的で提供しており、実運用前に必ずデモ検証を行ってください。ブローカーサーバー時間とJSTの差をBrokerToJSTHoursで補正します。


//+------------------------------------------------------------------+
//|  TokyoFix_955_MomentumEA.mq4                                    |
//|  Simple educational EA for USDJPY Tokyo Fix (9:55 JST)          |
//+------------------------------------------------------------------+
#property strict

extern string  __SECTION1 = "=== Time Settings ===";
extern int     TokyoFixHourJST = 9;      // 9:55 JST
extern int     TokyoFixMinuteJST = 55;
extern int     PreEntryStartMin = 45;    // enter window start (minutes) JST
extern int     PreEntryEndMin   = 52;    // enter window end (minutes) JST
extern int     BrokerToJSTHours = 7;     // Example: if broker is 2:55 when JST is 9:55 -> 7

extern string  __SECTION2 = "=== Filters ===";
extern int     EMAfast = 20;
extern int     EMAslow = 60;
extern int     TimeframeFilter = PERIOD_M5;
extern double  MinRangePips = 5;         // avoid dead-flat

extern string  __SECTION3 = "=== Risk Settings ===";
extern double  RiskPerTradePct = 0.7;
extern double  StopLossPips    = 12;
extern double  TakeProfitPips  = 18;
extern bool    UseTimeExit     = true;   // force exit before 9:58 JST
extern int     ExitMinuteJST   = 58;

extern string  __SECTION4 = "=== Misc ===";
extern int     Magic = 955001;
extern bool    OnePositionOnly = true;
extern double  SlipPips = 2;

int ticket;

//--- Convert broker time to JST
datetime ToJST(datetime bt) {
   return bt + (BrokerToJSTHours*3600);
}
datetime ToBroker(datetime jt) {
   return jt - (BrokerToJSTHours*3600);
}

bool IsWithinPreEntryWindow(datetime jt) {
   int h = TimeHour(jt);
   int m = TimeMinute(jt);
   if(h!=TokyoFixHourJST) return false;
   return (m>=PreEntryStartMin && m<=PreEntryEndMin);
}

bool IsTimeToForceExit(datetime jt) {
   int h = TimeHour(jt);
   int m = TimeMinute(jt);
   return (UseTimeExit && h==TokyoFixHourJST && m>=ExitMinuteJST);
}

bool HasOpenPosition() {
   for(int i=OrdersTotal()-1;i>=0;i--) {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol()) return true;
   }
   return false;
}

//--- Pips value helper
double PipValue(){ return (MarketInfo(Symbol(), MODE_POINT) * (Digits==3 || Digits==5 ? 10 : 1)); }
double ToPoints(double pips){ return pips * (1.0 / PipValue()); }

//--- Position sizing (fixed % risk)
double CalcLots(double stop_pips) {
   double acc = AccountBalance();
   double risk = MathMax(0.01, RiskPerTradePct/100.0) * acc;
   double tickvalue = MarketInfo(Symbol(), MODE_TICKVALUE);
   double pip_value_per_lot = tickvalue * (ToPoints(1.0)); // rough
   if(pip_value_per_lot<=0) return 0.01;
   double lots = risk / (stop_pips * pip_value_per_lot);
   // normalize
   double step = MarketInfo(Symbol(), MODE_LOTSTEP);
   double minl = MarketInfo(Symbol(), MODE_MINLOT);
   double maxl = MarketInfo(Symbol(), MODE_MAXLOT);
   lots = MathFloor(lots/step)*step;
   lots = MathMax(minl, MathMin(maxl, lots));
   return lots;
}

//--- Trend filter on M5 EMA20/60
int TrendSignal() {
   int tf = TimeframeFilter;
   int fast = iMA(Symbol(), tf, EMAfast, 0, MODE_EMA, PRICE_CLOSE, 0);
   int slow = iMA(Symbol(), tf, EMAslow, 0, MODE_EMA, PRICE_CLOSE, 0);
   double emaFast0 = iMA(Symbol(), tf, EMAfast, 0, MODE_EMA, PRICE_CLOSE, 0);
   double emaSlow0 = iMA(Symbol(), tf, EMAslow, 0, MODE_EMA, PRICE_CLOSE, 0);
   double emaFast1 = iMA(Symbol(), tf, EMAfast, 0, MODE_EMA, PRICE_CLOSE, 1);
   double emaSlow1 = iMA(Symbol(), tf, EMAslow, 0, MODE_EMA, PRICE_CLOSE, 1);
   // basic direction by position of price vs EMAs
   double close0 = iClose(Symbol(), tf, 0);
   double rangePips = (iHigh(Symbol(), PERIOD_M5, 0) - iLow(Symbol(), PERIOD_M5, 0))/PipValue();
   if(rangePips < MinRangePips) return 0; // flat
   if(close0>emaFast0 && emaFast0>emaSlow0) return 1;  // long bias
   if(close00) {
      t = OrderSend(Symbol(), OP_BUY, lots, priceAsk, slip, priceAsk - sl*Point, priceAsk + tp*Point, "TF955 Buy", Magic, 0, clrNONE);
   } else if(dir<0) {
      t = OrderSend(Symbol(), OP_SELL, lots, priceBid, slip, priceBid + sl*Point, priceBid - tp*Point, "TF955 Sell", Magic, 0, clrNONE);
   }
}

//--- Time exit
void ForceExitAll(){
   for(int i=OrdersTotal()-1;i>=0;i--) {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue;
      if(OrderType()==OP_BUY)  OrderClose(OrderTicket(), OrderLots(), Bid, (int)ToPoints(SlipPips), clrNONE);
      if(OrderType()==OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, (int)ToPoints(SlipPips), clrNONE);
   }
}

int OnInit(){ return(INIT_SUCCEEDED); }
int OnDeinit(){ return(0); }

int start(){
   datetime bt = TimeCurrent();
   datetime jt = ToJST(bt);

   // Force exit window
   if(IsTimeToForceExit(jt)) {
      ForceExitAll();
      return(0);
   }

   // Pre-entry window
   if(IsWithinPreEntryWindow(jt)) {
      int dir = TrendSignal();
      if(dir!=0) TryEnter(dir);
   }
   return(0);
}
//+------------------------------------------------------------------+
  

EAの使い方(超要約)

  1. USDJPYのM5チャートに適用します。
  2. BrokerToJSTHoursをブローカーのサーバー時間に合わせて調整します。
  3. デモ口座で2〜4週間検証し、約定品質・スリッページ・スプレッドの癖を把握します。
  4. 連敗やDDが資金管理許容内かを必ず確認します。

発展:改良アイデア

  • ボラティリティフィルター:ATRベースで「閾値未満は見送り」。
  • イベントフィルター:カレンダーフィードから回避日を自動判定。
  • 時間分散:9:44・9:48・9:52の3回に分割して小口で仕掛ける。
  • 決済強化:部分利確+残り時間決済、もしくは急変時の非常決済(トレイリング)。

よくある失敗

  • 一発勝負のフルレバ:短期イベントで最大ロットは厳禁です。
  • スプレッド非監視:通常の2倍以上に拡大しているのに成行で突撃しない。
  • 時間誤認:ブローカー時間とJSTの変換ミスで全てが崩れます。まずここを固定。

まとめ

仲値アノマリーは「時間に縛られた需給」という構造を利用するシンプルな戦略です。時間条件+簡易モメンタム+厳格なリスク上限の組み合わせを守れば、初心者でも検証・運用の土台を築けます。過度な期待は禁物ですが、学習コストに対して得られる示唆は大きく、裁量・自動売買の双方に展開しやすいテーマです。

コメント

タイトルとURLをコピーしました