エキスパートアドバイザーのパラメーター(入力項目)
Babi Ngepetは、ユーザーがその動作を制御するために変更できるいくつかの外部パラメーターを提供しています。
一般的なパラメーター
| パラメーター | タイプ | 説明 |
|---|---|---|
| MagicNumber | int | このEAの取引を識別するユニークな番号です。 |
| InitialLot | double | シリーズ内の最初の取引のための初期ロットサイズです。 |
| AllowBuy | bool | EAが初期およびマーチンゲールの買い取引を行うことを許可するフラグです。 |
| AllowSell | bool | EAが初期およびマーチンゲールの売り取引を行うことを許可するフラグです。 |
| TakeProfit | int | 保留注文を出す際に使用する固定のテイクプロフィット(ポイント/ピップ)です。 |
| FindHighLowBackBars | int | 初期保留注文を配置するための最高値と最低値を決定するために遡る過去のバーの数です。 |
| ResetAfterBars | int | 初期保留注文が削除され再評価されるまでのバーの数(ポジションが開かれていない場合)です。 |
マーチンゲール戦略
| パラメーター | タイプ | 説明 |
|---|---|---|
| ReverseMartingale | bool | これがtrueの場合、次のマーチンゲール取引は前の取引とは逆の方向になります(通常はアンチマーチンゲールまたはヘッジアプローチですが、falseの場合は同じ方向に開かれます)。現在のロジックでは、ReverseMartingaleがfalseの場合、同じ方向に開くことを示唆しています。 |
| LotMultiplier | double | 損失の出たシリーズにおける次の取引のロットサイズを乗じるファクター(例:2.0はロットを倍増させることを意味します)。 |
| SecureProfitMartingaleTarget | double | オープンされた取引のすべてを閉じるべき浮動利益の合計(アカウント通貨)です。 |
| DistanceMartingalePips | int | 新しいマーチンゲール取引を開くために、価格が最後の取引のオープン価格に対してどれだけ動かなければならないか(ピップ単位)です。 |
| MaxTradesInSeries | int | 1つのマーチンゲールシリーズで許可される最大取引数です。 |
時間戦略
| パラメーター | タイプ | 説明 |
|---|---|---|
| AllowMonday... AllowFriday | bool | 特定の曜日の取引を有効または無効にするフラグです。 |
| ForbiddenDates | string | 取引が禁止されている日付のコンマ区切りリスト(フォーマットYYYY.MM.DD)です。 |
コア機能の概要
OnInit()(初期化)
このEAのMagicNumber、マージンモード、デビエーションを設定します。これにより、マーチンゲールの状態変数(s_currentLot、s_totalTradesInSeriesなど)が初期値にリセットされ、新しいスタートの準備が整います。
OnDeinit()(非初期化)
簡単なクリーンアップ機能で、EAが停止または削除されるときにメッセージを表示します。
IsTradingDateAllowed()およびIsTradingDayAllowed()(取引フィルター)
これらの関数は、現在の日付と曜日がユーザー定義の入力(AllowMondayからAllowFridayおよびForbiddenDates)に対して取引が許可されているかどうかを確認します。
OpenTradeLogic(ENUM_ORDER_TYPE type, string tradeComment)(マーケット実行)
この関数は新しい市場ポジション(買いまたは売り)のオープンを扱います。
- ロットサイズをブローカーの最小、最大、ステップサイズに対して検証し、正規化します。
- 十分なフリーマージンがあるかCheckMargin()を使用して確認します。
- 固定のテイクプロフィットまたはストップロスなしで取引を実行します(tp_calculatedは0です)。
- グローバルなマーチンゲール状態変数(s_currentLot、s_lastOpenPrice、s_seriesType、s_totalTradesInSeries)を更新します。
CloseAllPositions()
現在オープンしているすべてのポジションを繰り返し処理し、このEAによってオープンされたもの(MagicNumberが一致するもの)を閉じます。
PendingOrders(ENUM_ORDER_TYPE type, double price, double lotSize, string comment)(保留注文の配置)
この関数は、Buy LimitまたはSell Limitの注文を配置します:
- ロットサイズを検証し、十分なマージンを確認します。
- ブローカーの最小距離(SYMBOL_TRADE_STOPS_LEVEL)に対してエントリ価格を検証します。
- TakeProfit入力に基づいて固定のテイクプロフィット(tp)を計算します。
- 取引リクエストを送信します。注意:UpdateHighLowAndOrders関数がこれを呼び出して初期のBuy LimitおよびSell Limit注文を配置します。
UpdateHighLowAndOrders()(初期エントリロジック)
オープンポジションがないときの初期エントリメカニズムです:
- FindHighLowBackBarsを遡って最高値と最低値を見つけます。
- 価格のSellLimit(最高値 + 1 tick)およびBuyLimit(最低値 - 1 tick)を計算します。
- このEAのMagicNumberで既に存在するBuy LimitおよびSell Limitの注文があるか確認します。
- 最近の最高値のすぐ上に初期のSell Limit注文を、最近の最低値のすぐ下にBuy Limit注文を、各々InitialLotを使用して配置します。
OnTick()(メインロジック)
このEAの実行ロジックの核心です:
- 時間チェック:同じティックでの冗長な計算を防ぎます。
- フィルター確認:取引が曜日または日付によって許可されていない場合、すべての保留注文を削除します。
- 利益目標確認(シリーズ終了):eaHasOpenPositionsがtrueであり、totalFloatingProfitが≥ SecureProfitMartingaleTargetの場合、CloseAllPositions()を呼び出し、すべてのマーチンゲール状態変数をリセットして新しいシリーズを開始します。
- 初期注文配置:!eaHasOpenPositionsかつ取引が許可されている場合、マーチンゲールの状態をリセットし、新しいバーが形成されているか確認します。
- 新しいバーが形成された場合、barsCountが≥ ResetAfterBarsであるか確認します。そうであれば、保留注文を削除し、UpdateHighLowAndOrders()を呼び出して新しい初期注文を配置します。そうでなければ、ただUpdateHighLowAndOrders()を呼び出します。
- マーチンゲールステップロジック:eaHasOpenPositionsがtrueであり、s_totalTradesInSeriesがMaxTradesInSeriesより小さい場合:
- totalFloatingProfitが負であり、価格が最後のオープン取引に対して少なくともDistanceMartingalePips動いているか確認します。
- 両方の条件が満たされている場合、次のロットをs_currentLotにLotMultiplierを掛けて計算します。
- orderToOpenの方向(シリーズと同じ方向または逆、ReverseMartingaleに基づく)を決定します。
- OpenTradeLogic()を呼び出して、新しい増加したポジションを開き、マーチンゲールシリーズを継続します。
戦略の要約
「Babi Ngepet」EAは、リスクが高いが高い報酬の可能性を持つマーチンゲール戦略とブレイクアウト/レンジ逆張りの初期エントリーを組み合わせています:
初期エントリー:EAは、初期のBuy Limit(最近の最低値の下)とSell Limit(最近の最高値の上)を配置します。これは、初期的にレンジバウンドの動作を仮定していることを示唆しています。価格が低下したときに買い、価格が上昇したときに売るというアプローチです。
取引管理:初期の取引のいずれかがトリガーされ、ポジションが合計損失に移動し(浮動利益が負)、価格が定義された距離だけオープンポジションに逆行し続けると、EAは同じ方向に新しいポジションをより大きなロットサイズで開きます(マーチンゲール)。
出口戦略:取引シリーズは、すべての取引の浮動利益合計がSecureProfitMartingaleTargetに達するまでロットサイズを増加させ続け、その時点で全てのポジションを閉じ、EAが新しいシリーズのためにリセットされます。
警告:マーチンゲール戦略は高いドローダウンと資本損失のリスクで知られています。なぜなら、ロットサイズは毎回の損失後に増加するからです。