MENU

FX自動化開発(ワイコフ)05・注文と資金管理ロジックの実装

前回でワイコフEAのプロトタイプのロジックが完成しました。
今回はいよいよプログラムが弾き出した値でのTP(テイクプロフィット:利食い)とSL(ストップロス:損切り)の機能を実装して、実際に注文できるようにします。

前回の記事

目次

実行と資金管理(Execution & Money Management)

FX開発特化型LMの回答

現状のコードでは、シグナルが出た際に Print と矢印表示のみを行っています。
次はいよいよ、「実際に注文を発注し、適切な損切り(SL)と利食い(TP)を設定する」工程に進みます。

ワイコフ理論における損切り設定は非常に明確です。

  • 買い(Spring)の場合 : Springを作ったローソク足の最安値の少し下
  • 売り(Upthrust)の場合: Upthrustを作ったローソク足の最高値の少し上

これにより、リスクを限定しつつ、高いリスクリワード比(損小利大)を狙います。

Main.mq5 のエントリーロジックを更新

OnTick 関数内の「アクション」部分を、実際の注文コードに書き換えます。以下のコードを Main.mq5 の該当部分に上書きしてください。

Main.mq5上書きするコード
 // ---------------------------------------------------
   // 5. アクション (注文発注 & リスク管理)
   // ---------------------------------------------------
   
   // 二重エントリー防止(既にポジションがある場合はエントリーしない)
   if(PositionsTotal() == 0)
   {
      double sl_price = 0;
      double tp_price = 0;
      double entry_price = 0;
      double risk_reward_ratio = 2.0; // リスクリワード比 1:2

      // --- 買いエントリー (Spring) ---
      if(isBullTrigger)
      {
         entry_price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
         
         // SL設定: Springの安値 - 余白(例: 50ポイント)
         double spring_low = iLow(_Symbol, PERIOD_CURRENT, 1);
         sl_price = spring_low - 50 * _Point; 
         
         // TP設定: リスク幅の2倍
         double risk = entry_price - sl_price;
         tp_price = entry_price + (risk * risk_reward_ratio);

         // 注文実行
         if(trade.Buy(InpLots, _Symbol, entry_price, sl_price, tp_price, "Wyckoff Spring"))
         {
            Print("BUY Entry Success! SL:", sl_price, " TP:", tp_price);
            
            // 矢印の描画(視覚確認用)
            string objName = "Buy_" + TimeToString(current_bar_time);
            ObjectCreate(0, objName, OBJ_ARROW, 0, iTime(_Symbol, PERIOD_CURRENT, 1), iLow(_Symbol, PERIOD_CURRENT, 1));
            ObjectSetInteger(0, objName, OBJPROP_ARROWCODE, 233); 
            ObjectSetInteger(0, objName, OBJPROP_COLOR, clrBlue);
         }
      }
      
      // --- 売りエントリー (Upthrust) ---
      else if(isBearTrigger)
      {
         entry_price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
         
         // SL設定: Upthrustの高値 + 余白
         double upthrust_high = iHigh(_Symbol, PERIOD_CURRENT, 1);
         sl_price = upthrust_high + 50 * _Point;
         
         // TP設定: リスク幅の2倍
         double risk = sl_price - entry_price;
         tp_price = entry_price - (risk * risk_reward_ratio);

         // 注文実行
         if(trade.Sell(InpLots, _Symbol, entry_price, sl_price, tp_price, "Wyckoff Upthrust"))
         {
            Print("SELL Entry Success! SL:", sl_price, " TP:", tp_price);
            
            // 矢印の描画
            string objName = "Sell_" + TimeToString(current_bar_time);
            ObjectCreate(0, objName, OBJ_ARROW, 0, iTime(_Symbol, PERIOD_CURRENT, 1), iHigh(_Symbol, PERIOD_CURRENT, 1));
            ObjectSetInteger(0, objName, OBJPROP_ARROWCODE, 234); 
            ObjectSetInteger(0, objName, OBJPROP_COLOR, clrRed);
         }
      }
   }

このコードのポイント

1. SL(損切り)の自動計算

Springの安値、Upthrustの高値を基準にSLを自動設定します。これがワイコフ理論の鉄則「セットアップが崩れたら即撤退」を自動化します。

2. TP(利食い)の自動計算

SL幅に基づいて、リスクリワード比 1:2 の位置にTPを置きます。

3. ポジション重複の防止

if(PositionsTotal() == 0) により、1つポジションを持っている間は追加エントリーしないように制限しています(テスト中の混乱を防ぐため)。

つくる人

頼むぜCursor!

CursorのAI

該当部分を、ご指定の注文ロジックに差し替えました。

変更内容
  1. 二重エントリー防止

if(PositionsTotal() == 0) のブロック内でのみ注文・矢印描画を行うようにしました。

  1. 買いエントリー (Spring)
  • エントリー価格: SYMBOL_ASK
  • SL: 確定足の安値 − 50×_Point
  • TP: エントリー + (エントリー − SL)×2(リスクリワード 1:2)
  • trade.Buy(InpLots, _Symbol, entry_price, sl_price, tp_price, “Wyckoff Spring”) で成行買い
  • 約定時のみ Print と青い上矢印(ObjectCreate の戻り値は if でチェック)
  1. 売りエントリー (Upthrust)
  • エントリー価格: SYMBOL_BID
  • SL: 確定足の高値 + 50×_Point
  • TP: エントリー − (SL − エントリー)×2(1:2)
  • trade.Sell(…) で成行売り
  • 約定時のみ Print と赤い下矢印(同様に ObjectCreate をチェック)
  1. else if(isBearTrigger)

Buy と Sell が同時に成立しないよう、売りは else if にしています。

  1. ObjectCreate の戻り値

矢印描画の 2 箇所とも if(ObjectCreate(…)) で囲み、警告が出ないようにしています。SL/TP の 50 ポイントやリスクリワード比は、必要なら input パラメータにすると調整しやすくなります。

実施事項と結果

これで、「ニュースを避け、レンジブレイクのダマシを狙い、損小利大でトレードする」 完全な自律型EAになりました。

  • コードを更新し、コンパイルしてください。
  • デモ口座のチャートにセットし、「アルゴリズム取引」ボタンがONになっていることを確認してください。
  • まずは放置して、最初のトレードが行われるのを待ちましょう(またはテスターのビジュアルモードで挙動を確認してください)。

無事に注文が入りましたら、開発は一区切りです。次のフェーズとして「トレーリングストップ(利益を伸ばす機能)」の追加も可能ですが、まずはこの「基本の完成形」で挙動を見てみてください。

結果

つくる人

注文動作は良好!
次はリスクリワードの微調整!これからはカスタマイズの時間です!

作:chatGPT5.2

EAワイコフ:プロトタイプの完成です!
最初の勝率は25%! さぁどこまで伸ばせるかな。ここからはカスタマイズの時間です

よかったらシェアしてね!
  • URLをコピーしました!
目次