これらの機能をどのように活用するつもりか:
プロップファームで稼働させているすべてのEAにおいて、「第1部: ニュース制限時間帯中の新規トレードの開始および既存ポジションの決済を停止する」 という記事の内容を適用する予定です。
一方、「パート2および パート3(ニュース制限時間帯の前後でSL/TPを一旦解除し、その後再設定する)」については、別のEAで使用する予定です。このコードは口座内の全建玉を順次処理するため、複数のチャートを同時に開いている場合でも、必要以上に何度も実行する必要がないようにするためです。シンボル選択を「USD、GBP、EUR」に手動で上書きします。これは、経験上、すでにフィルタリングが必要だと分かっている「赤いフォルダ」のニュースがこれらだけだからです(皆様の場合は異なるでしょう)。
そこで、RestoreStops()関数に1行の修正を加えました。
SuspendStops()関数については修正の必要はありませんでした。
状況を見る限り、Part3については何も変更する必要はなさそうです。必要なのは、チケット番号、SL、TPだけだからです。
@Solomon Anietie Sundayさん、どうもありがとうございました。
デモ口座で実際にテストしてみます!
// I won't need this if statement, in the 2nd EA, as the 2nd EA only modifies trades,
// only need this is statement in the first EA (that opens trades)
if(!CanOpenNewTrade(_Symbol))
return; //+------------------------------------------------------------------+ //| ニュース終了後の放送再開(元の記事に基づいて編集) | //+------------------------------------------------------------------+ bool RestoreStops(ulong ticket, double sl, double tp) { if (!PositionSelectByTicket(ticket)) return(false); string symbol= PositionGetString(POSITION_SYMBOL); // 元の変数「_Symbol」を「symbol」に置き換えた ENUM_POSITION_TYPE type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); double price = (type == POSITION_TYPE_BUY) ? SymbolInfoDouble(symbol, SYMBOL_BID) : //例:「_Symbol」は現在「symbol」となっています SymbolInfoDouble(symbol, SYMBOL_ASK); double point = SymbolInfoDouble(symbol, SYMBOL_POINT); double minStopDist = SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL) * point; // 安全確認:価格が保存済みのSL/TPを超えた場合は、有効な水準に調整する if(type == POSITION_TYPE_BUY) { if(sl != 0 && price <= sl) sl = price - minStopDist; if(tp != 0 && price >= tp) tp = price + minStopDist; } else // 売り { if(sl != 0 && price >= sl) sl = price + minStopDist; if(tp != 0 && price <= tp) tp = price - minStopDist; } // ストップの完全復元 if(trade.PositionModify(ticket, sl, tp)) { PrintFormat("Restored SL/TP for #%I64u | SL=%.5f, TP=%.5f", ticket, sl, tp); return true; } else { PrintFormat("Failed to restore SL/TP for #%I64u | Error=%d", ticket, GetLastError()); return false; } }
Discussing the article: "Using the MQL5 Economic Calendar for News Filtering (Part 1): Implementing Pre- and Post-News Windows in MQL5"
- 2026.02.18
- www.mql5.com
Check out the new article: Using the MQL5 Economic Calendar for News Filtering (Part 1): Implementing Pre- and Post-News Windows in MQL5...
はい!、それは非常に効果的なアプローチですね。マジックナンバーを使って特定のEAをブロックすることも可能です。しかし、取引している主要な3つの銘柄、特にボラティリティが最も高い銘柄に焦点を当てることは、ポートフォリオ全体を守るための強力な手段となります。
本記事シリーズで紹介する手法は、適切に実施すれば、非常に柔軟でカスタマイズ性の高いものになります。
テストは過去のデータ(バックテスト)で行うこともできますが、これはやや難しく、ある程度の作業を要します。ニュースイベントを用いたバックテストを行いたい方のために、今後の記事でその方法を紹介できるよう努めます。
どういたしまして、フィリップさん。アルゴリズム取引 に関する話題があれば、いつでもご相談ください。
返信が少し遅くなってしまいました。時々忙しくなってしまうので…すみません。
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事「MQL5経済指標カレンダーを用いたニュースフィルタリング(第2回):ニュースリリース中に管理ポジションを停止する」はパブリッシュされました:
第2回の目的は、制限されたニュースウィンドウ中にSLとTPを一時的に停止し、ニュースウィンドウ終了後に安全に復元することです。
このアプローチは、ニュースによる相場の方向性を判断しようとするものではありません。異常な市場環境によって発生するストップロスの早期執行を防ぐことだけを目的としています。
ストップ復元の原則
ストップ復元のロジックは決定論的です。
これにより、次の性質が保証されます。
この仕組みは一貫してルールベースで動作します。
作者: Solomon Anietie Sunday