本稿では、東京市場の仲値(9:55)決定前後に発生しやすい需給の偏りを利用する「東京仲値トレード」を、投資初心者でも再現できるレベルまで丁寧に解説します。USD/JPYを中心に、メカニズム、具体的な売買ルール例、口座準備、実行手順、リスク管理、検証方法、そして参考となる自動売買コード(MQL4 EA)と可視化用のPine Scriptまでまとめました。なお、本稿は学習・研究目的での情報提供に徹し、個別の投資判断は各自で行ってください。
1. 東京仲値とは何か:9:55の為替フィクシングの仕組み
東京の主要銀行は、午前9時55分に当日の対顧客レート(いわゆる仲値)を基準として外貨両替を行います。輸入企業のドル買い需要や、銀行のカバー取引が集中しやすく、USD/JPYの上昇圧力(円安方向)が強まりやすい時間帯として知られています。もっとも、毎日必ず上がるわけではなく、地合いや突発ニュース、日銀関連イベント、米金利動向などで逆に振れることもあります。
2. 期待値の源泉:なぜ歪みが生じるのか
市場参加者の中でも、期日までに確実にドルを買わなければならない実需は、価格弾力性が低くなります。需給が偏ると、短時間ながら一定方向へのフローが生まれやすく、これが時間帯アノマリー(統計的な偏り)の根拠となります。特に五・十日(5日、10日、15日、20日、25日、30日)は決済ニーズが重なりやすく、仲値に向けたフローが強まる傾向が観察されます。
3. 用語の基礎整理
- 仲値(Fixing):9:55に主要行が公表する対顧客基準レート。
- スプレッド:買値(Ask)と売値(Bid)の差。コストの最重要要素。
- pips:価格の最小単位。USD/JPYでは通常0.01円=1 pip。
- スリッページ:発注レートと約定レートの差。流動性や成行の影響で発生。
- ロールオーバー/スワップ:持ち越し時の金利調整。短時間戦略では通常影響小。
- ATR:平均的な変動幅(ボラティリティ指標)。フィルターとして有用。
4. 初心者向け基本戦略の全体像
ここではもっとも単純化した仲値トレードのフレームを提示します。
- 対象:USD/JPY(他通貨は拡張で検討)。
- エントリー時間:東京時間9:20〜9:54の間。
- 方向:原則は買い(USD買い/JPY売り)。ただしフィルターにより回避。
- イグジット:9:56〜10:10の範囲で時間決済、または利確/損切り到達。
- フィルター:重要指標(日銀会合、要人発言、米雇用統計等)の直近時刻は回避。ATRが極端に低い/高い日は見送り。
- コスト管理:スプレッドが閾値超過時は実行しない。
5. 具体的ルール例(プロトタイプ)
以下は検証用の参考設計です。運用前に必ず自分でデータに対して検証してください。
- 時間ウィンドウ:9:25〜9:40の間に成行買いで1回エントリー。
- 分割実行:0.5ロット×2回に分け、平均建値を作る。
- 損切り:建値から-12〜-18 pips。
- 利確:+10〜+20 pips、または10:00に時間決済。
- スプレッド上限:1.2 pips(12ポイント相当)を超えたら見送り。
- ATRフィルター:直近14期間のM15 ATRが7〜25 pipsの範囲。
- イベント回避:日銀関連、重要指標の前後±30分は取引しない。
6. 口座開設と準備:国内FXの一般的な流れ
- 本人確認書類とマイナンバーを用意。
- 口座申込(PC/スマホ)。取引ツール(MT4/MT5/独自アプリ)の有無を確認。
- 審査通過後に入金テスト(少額)。
- 取引ツールをインストールし、ログイン、気配値表示にUSDJPYを追加。
- チャートの時間表示がブローカー時間である点に注意(東京時間との時差を把握)。
- 発注数量の最小単位、スプレッド、約定力、両建可否、追証ルールを確認。
7. ポジションサイズとリスク管理
口座残高に対して1回の損失許容割合を1%以下に抑える初学者向けルールを推奨します。
許容損失額 = 口座残高 × 1%
必要ロット = 許容損失額 ÷ (損切りpips × 1pipsあたりの価値)
例:口座100,000円、損切り15pips、1pips=100円なら、
必要ロット ≈ 100,000 × 1% ÷ (15 × 100) = 0.066ロット
連敗時はロットを下げ、最大ドローダウン(例:口座の-10%)に達したら停止・検証に戻るなど、資金曲線を守る設計が最重要です。
8. 検証の考え方:バックテストとフォワードテスト
時間帯戦略はスプレッドとスリッページの影響を強く受けます。過去チャートでの理想約定ではなく、バックテストでは現実的なコストを上乗せするのが肝要です。さらに数ヶ月のフォワードテストで再現性を確認し、モンテカルロ・シミュレーションで損益のばらつきを把握します。
9. MQL4 EA(完全自動売買)の参考実装
以下は最小限のプロトタイプです。ブローカー時間と東京時間のズレはパラメータで調整してください。実運用前にストラテジーテスター等で検証が必須です。
#property strict
input string SymbolToTrade = "USDJPY";
input int EntryStartHour = 3; // ブローカー時間(例:東京09:25に相当)
input int EntryStartMinute = 25;
input int EntryEndHour = 3; // 〜東京09:40に相当
input int EntryEndMinute = 40;
input int ExitHour = 4; // 東京10:00に相当
input int ExitMinute = 0;
input double RiskPercent = 1.0;
input int StopPips = 15;
input int TakePips = 15;
input int MaxSpreadPoints = 12; // 1.2pips相当(ブローカー仕様に合わせる)
input int Magic = 95509;
input int ATRPeriod = 14;
input double ATRMinPips = 7.0;
input double ATRMaxPips = 25.0;
input bool UseTwoEntries = true;
datetime lastTradeDay = 0;
double PipSize() {
if(Digits == 3 || Digits == 5) return 10 * Point;
return Point;
}
double PipsToPrice(int pips){ return pips * PipSize(); }
double AtrPips(){
double atr = iATR(SymbolToTrade, PERIOD_M15, ATRPeriod, 0);
return atr / PipSize();
}
bool InEntryWindow(datetime t){
int h = TimeHour(t);
int m = TimeMinute(t);
int start = EntryStartHour*60 + EntryStartMinute;
int end = EntryEndHour*60 + EntryEndMinute;
int nowm = h*60 + m;
return (nowm >= start && nowm <= end);
}
bool IsExitTime(datetime t){
int h = TimeHour(t);
int m = TimeMinute(t);
return (h == ExitHour && m >= ExitMinute);
}
bool AlreadyTradedToday(datetime t){
if(lastTradeDay == 0) return false;
return (TimeDay(lastTradeDay) == TimeDay(t) && TimeMonth(lastTradeDay) == TimeMonth(t) && TimeYear(lastTradeDay) == TimeYear(t));
}
double CalcLotByRisk(int stopPips){
double acc = AccountBalance();
double riskMoney = acc * RiskPercent / 100.0;
// USDJPY想定の簡易計算:1pips ≒ 100円/1ロット(ブローカーにより差異あり)
double yenPerPipPerLot = 100.0;
double lots = riskMoney / (stopPips * yenPerPipPerLot);
// 最小・ステップに合わせて調整
double minLot = MarketInfo(SymbolToTrade, MODE_MINLOT);
double lotStep = MarketInfo(SymbolToTrade, MODE_LOTSTEP);
if(lots < minLot) lots = minLot;
// ステップ丸め
lots = MathFloor(lots / lotStep) * lotStep;
return lots;
}
void OnTick(){
if(Symbol() != SymbolToTrade) return;
if(!IsTradeAllowed()) return;
datetime now = TimeCurrent();
// 平日判定
int dow = TimeDayOfWeek(now);
if(dow == 0 || dow == 6) return; // 日曜・土曜は取引しない
// ATRフィルター
double atrP = AtrPips();
if(atrP < ATRMinPips || atrP > ATRMaxPips) return;
// スプレッドフィルター
double spread = MarketInfo(SymbolToTrade, MODE_SPREAD);
if(spread > MaxSpreadPoints) return;
// 時間決済
for(int i=OrdersTotal()-1; i>=0; i--){
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderSymbol()!=SymbolToTrade || OrderMagicNumber()!=Magic) continue;
if(IsExitTime(now)){
OrderClose(OrderTicket(), OrderLots(), Bid, 5);
}
}
// エントリー(1日1回)
if(AlreadyTradedToday(now)) return;
if(InEntryWindow(now)){
// ポジションがなければ新規BUY
bool hasPos = false;
for(int j=OrdersTotal()-1; j>=0; j--){
if(!OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderSymbol()==SymbolToTrade && OrderMagicNumber()==Magic) { hasPos = true; break; }
}
if(!hasPos){
double lot = CalcLotByRisk(StopPips);
double sl = 0, tp = 0;
double ask = Ask;
sl = ask - PipsToPrice(StopPips);
tp = ask + PipsToPrice(TakePips);
int ticket = OrderSend(SymbolToTrade, OP_BUY, lot, ask, 5, sl, tp, "TokyoFix", Magic, 0, clrGreen);
if(ticket > 0){
lastTradeDay = now;
if(UseTwoEntries){
// 数秒遅れて0.5ロット追加
double lot2 = MathMax(MarketInfo(SymbolToTrade, MODE_MINLOT), lot/2.0);
double ask2 = Ask;
double sl2 = ask2 - PipsToPrice(StopPips);
double tp2 = ask2 + PipsToPrice(TakePips);
OrderSend(SymbolToTrade, OP_BUY, lot2, ask2, 5, sl2, tp2, "TokyoFix2", Magic, 0, clrBlue);
}
}
}
}
}
10. Pine Script(補足)での可視化・検証
//@version=5
strategy("Tokyo Fixing Prototype", overlay=true, initial_capital=100000)
inSession = time(timeframe.period, "Asia/Tokyo:0930-0954")
buyCond = inSession
if (buyCond and strategy.position_size == 0)
strategy.entry("BUY", strategy.long)
exitTime = time(timeframe.period, "Asia/Tokyo:0956-1010")
if (exitTime and strategy.position_size > 0)
strategy.close("BUY")
plot(vwap, title="VWAP")
11. 実行フロー(初心者向けチェックリスト)
- 取引停止条件(重要イベント、広スプレッド、急変時)を先に定義。
- 口座・プラットフォームを準備し、東京時間とブローカー時間のオフセットを把握。
- 最小ロットでフォワードテストを2〜4週間。
- 損益のばらつきを記録し、パラメータ調整(損切り/利確/時間)。
- 許容ドローダウンと再開基準をドキュメント化。
12. よくある失敗と対処
- 毎日必ず勝てると思い込み → イベント日・地合いで勝率が崩れる。回避ルールを優先。
- ロットの入れすぎ → 想定外の逆行で口座毀損。損失1%ルールの徹底。
- 時差の誤設定 → 予定外の時間帯にエントリー。テストでログ確認。
- スプレッド拡大時の突入 → コスト超過。閾値を超えたら何もしない勇気。
13. 拡張アイデア
- 五・十日カレンダーの導入と季節性の確認。
- トレンド指標(VWAP、前日高安、前場寄付の位置)と併用。
- 通貨分散:EUR/JPY、GBP/JPYへ横展開。ただしコストと挙動差を検証。
- 部分利確、ブレークイーブン移動、トレーリングストップの導入。
東京仲値は、実需フローに根ざした代表的な時間帯アノマリーです。コスト管理と回避ルールを徹底し、最小ロットで検証から始めれば、初心者でも体系的に学べます。本稿のフレームとコードを土台に、あなた自身のデータで最適化し、再現性のある自分の戦略を形にしてください。
コメント