東京時間の9:55(仲値)は、日本の金融機関が当日の対顧客取引レートを決めるため、実需フローが一時的に集中しやすい時間帯です。流動性が偏り、価格が一方向に走ることがあり、短時間のイベントドリブン戦略として個人投資家でも再現可能です。本稿は、その仕組みから実装・検証までを一気通貫で提示します。
仲値とは何か:9:55に何が起きているのか
多くの国内銀行は午前9:55頃に当日の対顧客基準レート(いわゆる「仲値」)を決定します。企業の貿易決済や機関の資金需要がこの時刻に向けて集約されるため、短時間にドル買い・売りの偏りが出やすいのが特徴です。個人の裁量ではなく、実需起点のフローである点が、再現性の源泉になり得ます。
優位性の源泉:なぜ取れるのか
- フローの時間集中:指値や成行が9:50〜9:55に向けて積み上がりやすい。
- 情報の非対称性:店頭フローの全容は見えないが、時間が特定されているだけで充分なエッジになる。
- リスクが短時間で閉じる:イベント終了(10:00目安)で強制クローズがしやすい。
基本プレイブック(時間軸・執行・サイズ)
時間窓
- 観察:9:30〜9:45(短期の方向と値幅を把握)
- 仕掛け:9:46〜9:54(条件合致でエントリー)
- 手仕舞い:9:55〜10:00(時間で原則クローズ)
方向判定(シンプル・ルール)
以下は初心者でも実装しやすい判定例です。
- 9:30の始値から9:44の終値までの変化率が+0.15%以上かつ現在値が5分足VWAP上 → ロング
- 同変化率が-0.15%以下かつ現在値が5分足VWAP下 → ショート
- どちらでもない(±0.15%以内)→ 見送り
リスク管理(目安)
- 想定レンジ(当日9:00〜9:30の高安)の25〜35%を初期ストップに。
- テイクプロフィットは同レンジの40〜60%。到達しなくても10:00で強制決済。
- 一回の損失は口座の0.25〜0.5%に抑制。
やってはいけない日(フィルタ)
- 重要指標の直前直後(米CPI、雇用統計、FOMC声明など)。
- 日本の祝日・連休の谷間で板が薄い日。
- 当日・前日で日銀の政策観測が急浮上している日。
執行の実際:スリッページと板の癖
9:50〜9:55はスプレッドが拡がる瞬間があります。成行・逆指値の位置が近すぎると意図しない滑りが出るため、事前に最悪スリッページを想定したサイズに限定します。約定速度・約定力はブローカー差が出やすいので、デモと小ロットで検証を。
検証の進め方(初心者向けの最短ルート)
- データ:USD/JPYの1分足で十分。9:00〜10:05のみ切り出し。
- 特徴量:9:30→9:44の変化率、5分足VWAP比、当日レンジ比。
- ルール:上記シンプル判定+時間決済。
- 評価:勝率、平均損益(Expectancy)、最大DD、MAE/MFE。
MQL4(MT4)による自動売買EA例
以下は学習用の最小実装です。ブローカー時間と東京時間のオフセットは必ず調整してください(例:サーバーがGMT+2なら、東京(+9)との差は+7)。
// --- Tokyo Fix 9:55 USDJPY EA (Educational / MQL4) ---
#property strict
extern double Lots = 0.10;
extern double RiskPerTradePct = 0.4; // 口座に対する想定最大損失(%)
extern int Slippage = 5;
extern int TokyoOffsetH = 7; // ブローカー時刻 -> 東京時刻の時間差(例)
extern int ObsStartH = 9; // 観察窓 9:30〜
extern int ObsStartM = 30;
extern int ObsEndH = 9; // 観察窓 〜9:44
extern int ObsEndM = 44;
extern int EntryStartH = 9; // 仕掛け 9:46〜9:54
extern int EntryStartM = 46;
extern int EntryEndH = 9;
extern int EntryEndM = 54;
extern int ForceExitH = 10; // 強制決済 10:00
extern int ForceExitM = 0;
extern double ThreshPct = 0.15; // 方向判定の閾値(%)
extern double StopFrac = 0.30; // 当日レンジの何割をSLに
extern double TakeFrac = 0.50; // 当日レンジの何割をTPに
datetime lastBarTime = 0;
bool IsNewBar(){
if(Time[0] != lastBarTime){ lastBarTime = Time[0]; return(true); }
return(false);
}
int start(){
if(!IsNewBar()) return(0);
datetime server = TimeCurrent();
datetime tokyo = server + TokyoOffsetH*3600;
int th = TimeHour(tokyo);
int tm = TimeMinute(tokyo);
int td = TimeDayOfWeek(tokyo);
if(td==0 || td==6) return(0); // 日曜・土曜
// 観察窓の始値と終値(9:30〜9:44 東京時刻)
double obsOpen=0, obsClose=0;
if( th>ObsEndH || (th==ObsEndH && tm>=ObsEndM) ){
datetime ts = server + ((ObsStartH - th)*3600 + (ObsStartM - tm)*60);
datetime te = server + ((ObsEndH - th)*3600 + (ObsEndM - tm)*60);
int iStart = iBarShift(Symbol(), PERIOD_M1, ts, true);
int iEnd = iBarShift(Symbol(), PERIOD_M1, te, true);
if(iStart>=0 && iEnd>=0){
obsOpen = iOpen(Symbol(), PERIOD_M1, iStart);
obsClose = iClose(Symbol(), PERIOD_M1, iEnd);
}
}
// 当日レンジ(9:00〜9:30 東京時刻)
double dayRange=0;
{
int iS = iBarShift(Symbol(), PERIOD_M1, server + ((9 - th)*3600 + (30 - tm)*60), true);
int iE = iBarShift(Symbol(), PERIOD_M1, server + ((9 - th)*3600 + (0 - tm)*60), true);
double hi=-1e9, lo=1e9;
for(int i=iE; i<=iS; i++){
if(i<0) continue;
double h = iHigh(Symbol(), PERIOD_M1, i);
double l = iLow(Symbol(), PERIOD_M1, i);
if(h>hi) hi=h;
if(l<lo) lo=l;
}
if(hi>0 && lo<1e9) dayRange = hi - lo;
}
// 強制決済
if( th>ForceExitH || (th==ForceExitH && tm>=ForceExitM) ){
for(int k=OrdersTotal()-1; k>=0; k--){
if(OrderSelect(k, SELECT_BY_POS, MODE_TRADES) && OrderSymbol()==Symbol()){
if(OrderType()==OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clrRed);
if(OrderType()==OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clrBlue);
}
}
return(0);
}
// エントリー時間帯のみ
bool inEntry = ( th>EntryStartH || (th==EntryStartH && tm>=EntryStartM) ) &&
( th<EntryEndH || (th==EntryEndH && tm<=EntryEndM) );
if(!inEntry || OrdersTotal()>0 || obsOpen==0 || obsClose==0 || dayRange==0) return(0);
double changePct = (obsClose - obsOpen) / obsOpen * 100.0;
bool goLong = (changePct >= ThreshPct);
bool goShort = (changePct <= -ThreshPct);
double stop = dayRange*StopFrac;
double take = dayRange*TakeFrac;
if(goLong){
double price = Ask;
double sl = price - stop;
double tp = price + take;
OrderSend(Symbol(), OP_BUY, Lots, price, Slippage, sl, tp, "TFixLong", 0, 0, clrNONE);
}else if(goShort){
double price = Bid;
double sl = price + stop;
double tp = price - take;
OrderSend(Symbol(), OP_SELL, Lots, price, Slippage, sl, tp, "TFixShort", 0, 0, clrNONE);
}
return(0);
}
※ 上記コードは学習用のひな型です。実運用では、ポジション管理、例外処理、スプレッド監視、約定失敗時のリトライ、DST対応、手数料考慮などを拡張してください。
パフォーマンス評価:何を見ればよいか
- Expectancy(平均損益):1トレードあたりいくら増えるか。
- 勝率×損益比:勝率が低くても損益比で補えるか。
- 連敗耐性:最大ドローダウンと心理的・資金的許容度。
典型的な落とし穴と回避策
- スプレッド拡大を無視 → 指値幅に余裕、ロット縮小。
- 重要イベント日を見落とす → 週間カレンダーで事前除外。
- 執行遅延 → 成行依存を減らしIFD/逆指値を活用。
拡張:強さ判定の高度化
5分足のVWAPに加え、前場の日経先物寄り付き方向やアジア株の寄付きを補助シグナルに。複合で同方向ならサイズを増やし、逆なら見送り。
チェックリスト(印刷用)
- 重要指標なしを確認
- 9:30→9:44の変化率とVWAP方向一致
- サイズ=口座×0.25〜0.5%損失に収まる
- 9:55〜10:00の時間決済予約
まとめ
仲値は「時間が決まっているイベント」という明確な強みがあります。フィルタ+時間決済+サイズ制御の3点を守れば、初心者でも検証・再現が可能です。まずはデモと小ロットで、50〜100回のサンプルを集めて評価しましょう。


コメント