スワップ3倍デーを狙う逆張り×キャリー獲得EA入門

FX

本稿では、毎週一度の“スワップ3倍デー”の前後にだけ売買する超限定型デイトレ戦略「Triple‑Swap Carry Swing」を解説します。投機とキャリー(受取スワップ)を両取りしやすい時間帯に絞り、方向はブローカーのスワップテーブルから自動的に有利側だけを選択します。さらに、エントリーはロールオーバー直前、エグジットは付与直後という、明確な時間設計で再現性を高めます。

1. 戦略の骨子(30秒で理解)

  1. 多くのFXブローカーは週1回の“3倍スワップ”を付与します(一般的には水曜、ブローカーによっては金曜)。
  2. 付与直前はポジティブスワップ側へポジションが傾きやすく、直後は一時的な「スプレッド拡大→縮小」や逆指値の巻き込みが発生します。
  3. そこでロールオーバー直前に参入し、付与直後の正常化スワップ受取の両方を狙います。
  4. 方向は「そのブローカーでスワップが正の側」だけ(例:AUD/JPYの買い、MXN/JPYの買い等)。両側マイナスなら見送り。
  5. 時間はロールオーバー基準で決め打ち:前後数時間のみ売買。それ以外は完全に休む。

2. なぜ優位性が生まれるのか(メカニクス)

FXのスワップポイントは、通貨ペアの金利差とブローカーのロール仕様で決まります。週末・祝日を跨ぐ補正として、週に一度「3日分まとめて」付与される日(通称:3倍デー)が設定されています。この日に向けて、正のスワップを得られる方向の建玉が増えやすい一方、付与直後は利食い・反対勢力の巻き返し・スプレッド正常化が同時に進み、短い時間軸で統計的な押し戻し(ミーンリバージョン)が観測されることが多いです。

本戦略はこの需給の“偏り→解消”に時間軸を合わせ、受取スワップで負けにくさを底上げしながら、ごく短時間の価格のゆがみを取りに行く設計になっています。

3. 取引対象とペア選定

基本は「正のスワップ側が恒常的に存在する高金利通貨 × 円(またはドル)」が中心です。例としては、AUD/JPY、NZD/JPY、MXN/JPY、ZAR/JPYなどが代表的です。超高金利通貨はボラティリティも高いため、初心者はまずメジャー系(AUD/JPYやNZD/JPY)から始めてください。

  • スワップの正負はブローカー次第:同じ通貨ペアでも業者により差が出ます。口座内の「スワップ一覧」を必ず確認してください。
  • 両側マイナスの場合:本戦略では取引を見送るのが原則です(キャリーの恩恵がないため)。
  • ロットは小さく:ロール付近はスプレッド拡大や約定遅延が起きやすいので、最小ロットから漸増がおすすめです。

4. 時間設計(エントリー/エグジット)

以下は最も単純で再現性の高い運用ルールです。

前提:ブローカーの「サーバー時間」でロールオーバー時刻(多くは23:59~00:05の間)を把握しておきます。

  1. 参入(Entry):3倍デーの前日終盤(例:サーバー23:00~23:59)に、正のスワップ側のみ成行or指値で建てる。スプレッドが事前閾値以下であることを確認。
  2. 保有(Hold):ロールオーバーを跨いでスワップを受け取りつつ、直後の気配正常化を待つ。
  3. 決済(Exit):ロール後の1~10時間の間で利確。ルールは(a)固定TP、(b)時間決済、(c)ボラ基準のトレーリングのいずれかで統一。

ブローカーによっては3倍デーが金曜のこともあります。EA実装では「3倍デーの曜日」と「ロール時刻」を入力で切り替え可能にしておくと安全です。

5. リスク管理(初心者向けの現実解)

  • スプレッド拡大:直前直後は一時的に拡大します。参入は「現在スプレッド ≤ 閾値」のときのみ許可。
  • ギャップ:付与直後は小ギャップが起きがちです。成行で飛び付かない、ロットを抑える、時間決済を徹底。
  • 両側マイナススワップ:取引しない(戦略適用外)。
  • 祝日とメンテ:ロールがずれる場合があります。毎週、口座側のお知らせを確認してください。

6. バックテスト設計

MT4のストラテジーテスターはロール特有の挙動(スプレッド拡大や約定遅延)を完全には再現しません。そのため、以下の簡易設計を推奨します。

  1. モデル:M15足の始値/全ティック(ブローカー履歴に依存)。
  2. 変動スプレッド:スプレッド閾値を厳しく設定(例:AUD/JPYなら2.0pips以下)。
  3. パラメータ探索:参入時刻(ロール前60~10分)、決済時刻(ロール後1~10時間)、TP/SL幅(ATR比)をグリッド探索。
  4. 評価指標:勝率よりも、最大ドローダウン/PF/月次安定性を重視。

7. 実運用チェックリスト

  • 口座のサーバー時間ロールオーバー時刻を確認済みか。
  • 今週の3倍デーの曜日(水曜 or 金曜)がEAに反映されているか。
  • 対象ペアのスワップ表を更新済みか(正の側のみ取る)。
  • 参入直前のスプレッド ≤ 閾値を確認できるか。
  • ロットは口座残高の0.1~0.5%相当のリスクに留めているか。

8. MQL4 EA(完全自動売買・初心者向けに簡素化)

以下のEAは、スワップが正の方向のみで、3倍デー前日終盤に参入し、付与後に時間決済します。ブローカーのサーバー時間に合わせて入力を調整してください。


//+------------------------------------------------------------------+
//| TripleSwapCarrySwing.mq4                                         |
//| 3倍スワップ前後の短期キャリー & リバージョン戦略(MT4)            |
//+------------------------------------------------------------------+
#property strict
input string   TradeSymbol            = "AUDJPY";
input double   Lots                   = 0.10;
input int      Magic                  = 3650123;
input int      TripleSwapWeekday      = 3;   // 0=Sun ... 6=Sat, 一般は3=Wed, 金曜型は5
input int      EntryDaysBefore        = 1;   // 3倍デーの何日前に入るか(通常=1)
input int      RolloverHourServer     = 23;  // サーバー時間(例:23)
input int      RolloverMinuteServer   = 59;  // サーバー時間(例:59)
input int      EntryWindowMinutes     = 60;  // ロール直前 60分間で参入
input int      ExitHoursAfterRollover = 6;   // 付与後 6時間で時間決済
input double   MaxSpreadPips          = 2.0; // 参入許容スプレッド
input double   SL_Pips                = 60;  // 損切り(pips)
input double   TP_Pips                = 120; // 利確(pips)
input bool     UseTimeExit            = true;// 時間決済ON/OFF
input bool     OnePositionPerSymbol   = true;// 一銘柄同時1ポジ
//--- 内部
datetime g_lastOpen = 0;

double PipToPoint(double pips){
   double p = pips;
   if(StringFind(TradeSymbol, "JPY") >= 0){
      return p * 0.01 / MarketInfo(TradeSymbol, MODE_POINT); // 1pips=0.01
   }
   return p * 0.0001 / MarketInfo(TradeSymbol, MODE_POINT);  // 1pips=0.0001
}

bool SpreadOK(){
   double spreadPoints = MarketInfo(TradeSymbol, MODE_SPREAD);
   double spreadPips;
   if(StringFind(TradeSymbol, "JPY") >= 0) spreadPips = spreadPoints * MarketInfo(TradeSymbol, MODE_POINT) / 0.01;
   else spreadPips = spreadPoints * MarketInfo(TradeSymbol, MODE_POINT) / 0.0001;
   return (spreadPips <= MaxSpreadPips);
}

int WeekdayServer(datetime t){   // 0=Sun ... 6=Sat
   return TimeDayOfWeek(t);
}

datetime TodayAt(int hh, int mm){
   datetime now = TimeCurrent();
   datetime d0 = StrToTime(TimeToString(now, TIME_DATE) + " " + IntegerToString(hh) + ":" + IntegerToString(mm));
   return d0;
}

bool IsEntryDay(datetime now){
   int w = WeekdayServer(now);
   int target = TripleSwapWeekday - EntryDaysBefore;
   if(target < 0) target += 7;
   return (w == target);
}

bool IsInEntryWindow(datetime now){
   datetime roll = TodayAt(RolloverHourServer, RolloverMinuteServer);
   datetime start = roll - EntryWindowMinutes*60;
   return (now >= start && now <= roll);
}

bool IsExitTime(datetime now){
   if(!UseTimeExit) return false;
   datetime roll = TodayAt(RolloverHourServer, RolloverMinuteServer);
   datetime exit_t = roll + ExitHoursAfterRollover*3600;
   // ロール直後(翌日0~1時を跨ぐ可能性)でも安全に比較
   return (now >= exit_t);
}

int CountMyPositions(){
   int c=0;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
         if(OrderMagicNumber()==Magic && OrderSymbol()==TradeSymbol) c++;
      }
   }
   return c;
}

int DirectionBySwap(){ // 1=BUY, -1=SELL, 0=NoTrade
   double swLong  = MarketInfo(TradeSymbol, MODE_SWAPLONG);
   double swShort = MarketInfo(TradeSymbol, MODE_SWAPSHORT);
   if(swLong>0 && swShort<=0) return 1;
   if(swShort>0 && swLong<=0) return -1;
   if(swLong>0 && swShort>0){ // 両方正:大きい方
      return (swLong >= swShort) ? 1 : -1;
   }
   // 両方負:見送り
   return 0;
}

void OpenIfNeeded(){
   datetime now = TimeCurrent();
   if(!IsEntryDay(now)) return;
   if(!IsInEntryWindow(now)) return;
   if(!SpreadOK()) return;
   if(OnePositionPerSymbol && CountMyPositions()>=1) return;
   int dir = DirectionBySwap();
   if(dir==0) return;
   double ask = MarketInfo(TradeSymbol, MODE_ASK);
   double bid = MarketInfo(TradeSymbol, MODE_BID);
   double ptSL = PipToPoint(SL_Pips);
   double ptTP = PipToPoint(TP_Pips);
   int    slippage = 3;
   int    ticket;
   if(dir==1){
      double sl = ask - ptSL*MarketInfo(TradeSymbol, MODE_POINT);
      double tp = ask + ptTP*MarketInfo(TradeSymbol, MODE_POINT);
      ticket = OrderSend(TradeSymbol, OP_BUY, Lots, ask, slippage, sl, tp, "TSCS", Magic, 0, clrBlue);
   }else{
      double sl2 = bid + ptSL*MarketInfo(TradeSymbol, MODE_POINT);
      double tp2 = bid - ptTP*MarketInfo(TradeSymbol, MODE_POINT);
      ticket = OrderSend(TradeSymbol, OP_SELL, Lots, bid, slippage, sl2, tp2, "TSCS", Magic, 0, clrRed);
   }
   if(ticket>0) g_lastOpen = TimeCurrent();
}

void TimeExitIfNeeded(){
   if(!UseTimeExit) return;
   datetime now = TimeCurrent();
   if(!IsExitTime(now)) return;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
         if(OrderMagicNumber()==Magic && OrderSymbol()==TradeSymbol){
            int type = OrderType();
            double price = (type==OP_BUY) ? MarketInfo(TradeSymbol, MODE_BID) : MarketInfo(TradeSymbol, MODE_ASK);
            OrderClose(OrderTicket(), OrderLots(), price, 5, clrWhite);
         }
      }
   }
}

int OnInit(){ return(INIT_SUCCEEDED); }
int OnDeinit(){ return(0); }
void OnTick(){
   OpenIfNeeded();
   TimeExitIfNeeded();
}
    

使い方:パラメータのTripleSwapWeekday(水曜=3, 金曜=5)とRolloverHour/Minuteをブローカー仕様に合わせてください。DirectionBySwap()が口座のスワップ表を読み取り、正の側だけエントリーします。両側マイナスなら自動スキップします。

9. 具体的な運用フロー(チェックリスト型)

  1. 週の初めに対象ペアのスワップ表を確認(正の側が明確なペアを採用)。
  2. EAの曜日/時刻を今週の3倍デーに合わせて更新。
  3. 口座残高に対しロットを調整(1トレードの最大損失が0.3~0.5%以内)。
  4. 当日、参入ウィンドウでスプレッドが閾値以下なら自動参入。
  5. ロール直後は無操作。時間決済またはTPで自動クローズ。
  6. 週末に成績レビュー—スプレッド・約定遅延が常に大きい場合はブローカー変更も検討。

10. よくある質問(FAQ)

Q. 3倍デーが水曜ではないブローカーもありますか?

A. あります。5日稼働型のサーバーでは金曜付与となる例が知られています。EAの入力で必ず切替えてください。

Q. 両側マイナススワップのペアでも稼げますか?

A. 本戦略では非推奨です。キャリーの下支えがないと、ロール特有のスプレッド拡大が不利に働きやすく、期待値が悪化します。

Q. 決済は時間とTP/SLのどちらが良いですか?

A. 初心者は時間決済を推奨します。ロール後1~6時間の間で固定時刻クローズにし、TP/SLは保険として小さめに。

Q. 祝日が絡む週はどう扱いますか?

A. 付与ロジックがずれる可能性があるため、原則休みにするのが無難です。ブローカーのお知らせを確認してください。

11. まとめ

「Triple‑Swap Carry Swing」は、週1回の明確なイベントに絞り、方向をスワップ表で自動判定し、ロール前後の数時間だけ淡々と実行するシステムです。裁量判断を極力排除し、パラメータは“時間”と“最大スプレッド”中心に管理します。初心者でも再現しやすい構造でありながら、キャリーを味方に付けるため、負けにくい設計になっています。

コメント

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