記事「MQL5での取引戦略の自動化(第24回):リスク管理とトレーリングストップを備えたロンドンセッションブレイクアウトシステム」についてのディスカッション

 

新しい記事「MQL5での取引戦略の自動化(第24回):リスク管理とトレーリングストップを備えたロンドンセッションブレイクアウトシステム」はパブリッシュされました:

本記事では、ロンドン市場開場前のレンジブレイクアウトを検出し、任意の取引タイプおよびリスク設定に基づいてペンディング注文(指値・逆指値注文)を自動で発注する「ロンドンセッションブレイクアウトシステム」を開発します。トレーリングストップ、リスクリワード比率、最大ドローダウン制限、そしてリアルタイム監視と管理をおこなうためのコントロールパネルなどの機能も組み込みます。

ロンドンセッションブレイクアウト戦略は、ロンドン市場の開場時に発生するボラティリティの上昇を狙う手法です。ロンドン市場が開く前の時間帯に形成される価格レンジを特定し、そのレンジからのブレイクアウトを捉えるためにペンディング注文を配置します。この戦略が重要である理由は、ロンドンセッションが一般的に高い流動性と活発な価格変動を伴うため、安定した利益機会を提供する可能性が高い点にあります。ただし、偽のブレイクアウトやドローダウンを回避するためには、慎重なリスク管理が欠かせません。

本システムでは、ロンドン開場前の高値と安値を計算し、一定のオフセットを加えた位置に買いストップおよび売りストップ注文を設定します。さらに、利益確定にはリスクリワード比率を基にしたテイクプロフィットを採用し、利益を確保するためのトレーリングストップを組み込みます。また、保有ポジション数および1日のドローダウンに上限を設け、資金を保護します。リアルタイム監視をおこなうためのコントロールパネルと、セッション特有の条件チェックを組み合わせることで、取引が定義された範囲内でのみおこなわれるよう制御します。これにより、変化する市場環境にも柔軟に対応できるシステムを構築します。要約すると、私たちが目指すのは次のような構成を持つシステムです。

戦略設計図


作者: Allan Munene Mutiiria

 
etherxp #:
ありがとう;)

ようこそ

 
インジケーターをここにアップロードできますか?
 
hungxiro #:
インジケーターをここにアップロードできますか?

上の記事を見てください。

 
いい記事だ。ご苦労様!
 
Kyle Young Sangster #:
いい記事だ。ご苦労様でした!

もちろんです。ようこそ。

 

このコードをダウンロードして、そのままストラテジーテスターで動かして みた。毎日レンジを見つけ、チャートにボックスを描画します。しかし、毎日トレードはしない(するはずの)。ヶ月半の間、たった3回しかトレードしていない。


貿易記録


2つ目の問題は、コントロール・パネルの高値・安値レベルと売買レベルが更新されないことです。

コントロールパネルが更新されない


高値・安値のレンジレベルは明らかにチャート上に表示されているので、売買レベルもチャート上に表示され、高値・安値のレンジレベルから直接派生しているので、コントロールパネルで更新されるはずだと思います。

これを正しく動作させるために、何か提案はありますか?

よろしくお願いします。

 
Kyle Young Sangster ストラテジーテスターで動かして みた。毎日レンジを見つけ、チャートにボックスを描画します。しかし、毎日トレードはしない(するはずの)。ヶ月半の間、たった3回しかトレードしていない。



2つ目の問題は、コントロール・パネルの高値・安値レベルと売買レベルが更新されないことです。


高値/安値レンジのレベルは明らかにチャート上に表示されているので、売買レベルもチャート上に表示され、高値/安値レンジのレベルから直接派生しているため、コントロールパネルで更新されるはずだと思います。

これを正しく動作させるために、何か提案はありますか?

よろしくお願いします。

私はMT5のバージョン5.00、ビルド5214を使用しています。

 
Kyle Young Sangster ストラテジーテスターで動かして みた。毎日レンジを見つけ、チャートにボックスを描画します。しかし、毎日トレードはしない(するはずの)。ヶ月半の間、たった3回しかトレードしていない。



つ目の問題は、コントロール・パネルの高値・安値レベルと売買レベルが更新されないことです。


高値/安値レンジのレベルは明らかにチャート上に表示されているので、売買レベルもチャート上に表示され、高値/安値レンジのレベルから直接派生しているため、コントロールパネルで更新されるはずだと思います。

これを正しく動作させるために、何か提案はありますか?

よろしくお願いします。

こんにちは。ご丁寧なお返事とご意見をありがとうございます。このプログラムはAUDUSDシンボルで開発されたので、他の通貨に行く前にまずそこでテストしてください。プログラムがAUDUSDのシンボルで開発されたので、他の通貨に行く前にまずそこでテストしてください。設定が間違っている可能性もありますが、どうやらAUDUSDとEURUSDのポイントはほとんど同じように動作するはずです。例えば、EURUSDで実行されているので、同じようなテストをして見ます。

EURUSDテスト

画像から、そこにエラーがあることがわかります。このような場合、テストが正しく実行されません。

もう一つの原因として考えられるのは、信頼性の低いヒストリカルデータ、特に非常に古いデータを使用して実行している場合です。あなたの例では、2020年から実行している。では、スクリーンショットで明らかな期間についてテストして見ましょう。

過去のデータが乏しい

期間2020.01.01から2020.01.31まで、テクニカル的には2020年1月ですが、実際には取引は行われていません。ご覧の通り、データの質は悪く、15%は非常に信頼できません。赤いセクションは完全に0データを示し、その上にカーソルを置くと空白期間が表示されます。では、2025年1月のデータでテストして見よう。

100 DATA

画像から、100%のヒストリー・クオリティで、1ヶ月に19の取引があることがわかります。

デフォルト設定がEURUSDシンボルで問題なく機能することが証明されたので、あなたの問題からすると、テストデータの品質をチェックする必要があるのかもしれません。これが物事を明確にし、役立つことを願っています。ありがとうございます。良い取引を。

 
Kyle Young Sangster ストラテジーテスターで動かして みた。毎日レンジを見つけ、チャートにボックスを描画します。しかし、毎日トレードはしない(するはずの)。ヶ月半の間、たった3回しかトレードしていない。



つ目の問題は、コントロール・パネルの高値・安値レベルと売買レベルが更新されないことです。


高値/安値レンジのレベルは明らかにチャート上に表示されているので、売買レベルもチャート上に表示され、高値/安値レンジのレベルから直接派生しているため、コントロールパネルで更新されるはずだと思います。

これを正しく動作させるために、何か提案はありますか?

よろしくお願いします。

あなたの2つ目の問題については、記事で説明されていますが、あなたの問題が貧弱なテストデータから生じていると仮定し、ヒントを与えると、レンジが計算中である場合、ロンドン・レンジ・セッションまたは入力で定義したセッションを設定するのに十分なデータがあるまで、常に "Calculating... "ステータスが表示されます。デフォルトの設定を使用していると仮定すると、ロンドン前の時間は3時間で、共有されたスクリーンショットの時間は2月13日で、22:00の2小節後は2*15分=30となり、したがって22:30はレンジ計算の時間外であるため、最初のセッションがまだ見つかっていない場合を除き、前の設定されたレンジがまだ有効であるため、パネル上のデータはまだ表示されているはずです。以下を参照してください:

const int PreLondonStartHour = 3; //--- ロンドン・スタート前の固定時間
const int PreLondonStartMinute = 0; //--- ロンドン・スタート前の分を固定

レンジを見つけるための以下のロジックを参照してください。

//+------------------------------------------------------------------+
//| 取引条件を確認し、注文を出す
//+------------------------------------------------------------------+
void CheckTradingConditions(datetime currentTime) {
   MqlDateTime timeStruct;            //--- 時間構造
   TimeToStruct(currentTime, timeStruct); //--- 時間を変換する
   datetime today = StringToTime(StringFormat("%04d.%02d.%02d", timeStruct.year, timeStruct.mon, timeStruct.day)); //--- 今日入手する

   datetime preLondonStart = today + PreLondonStartHour * 3600 + PreLondonStartMinute * 60; //--- ロンドン・プレ・スタート
   datetime londonStart = today + LondonStartHour * 3600 + LondonStartMinute * 60; //--- ロンドン・スタート
   datetime londonEnd = today + LondonEndHour * 3600 + LondonEndMinute * 60; //--- ロンドン終了
   analysisTime = londonStart;        //--- 分析時間の設定

   if (currentTime < analysisTime) return; //--- 分析前なら終了

   double preLondonRange = GetRange(preLondonStart, currentTime, PreLondonHigh, PreLondonLow, PreLondonHighTime, PreLondonLowTime); //--- 範囲を取得する
   if (preLondonRange < MinRangePoints || preLondonRange > MaxRangePoints) { //--- 範囲制限のチェック
      noTradeToday = true;            //--- ノートレードを設定する
      sessionChecksDone = true;       //--- セット・チェック完了
      DrawSessionRanges(preLondonStart, londonEnd); //--- 描画範囲
      return;                         //--- 終了
   }

   LondonRangePoints = preLondonRange; //--- レンジポイントの設定
   PlacePendingOrders(PreLondonHigh, PreLondonLow, today); //--- 注文を出す
   noTradeToday = true;               //--- ノートレードを設定する
   sessionChecksDone = true;          //--- セット・チェック完了
   DrawSessionRanges(preLondonStart, londonEnd); //--- 描画範囲
}

そしてどのように設定されるのか。

//+------------------------------------------------------------------+
//| 現在のデータでパネルを更新|
//+------------------------------------------------------------------+
void UpdatePanel() {
   string rangeText = "Range (points): " + (LondonRangePoints > 0 ? DoubleToString(LondonRangePoints, 0) : "Calculating..."); //--- 範囲テキストをフォーマットする
   ObjectSetString(0, panelPrefix + "RangePoints", OBJPROP_TEXT, rangeText); //--- 範囲テキストを更新する

   //---

}

下の画像をご覧ください。あなたのテストの年がわかりませんが、2025年とします。あなたのケースのように2020年であれば、そのための質の高いデータがありませんので、いずれにせよ、2025年を使用し、その結果、範囲計算は真夜中から始まるはずです。

23:55

画像から、23時55分のデータはそのままであることがわかります。しかし、午前0時になるとリセットされます。下をご覧ください。

深夜データ 00:00

他の範囲計算のために午前0時にデータをリセットしていることがわかります。実際、範囲計算が終了したとき、視覚化することによって、実際に何が行われたかを知ることができます。例えば、デフォルトの設定を使用した場合、0300 時から 0800 時までのラネッグ・バーが表示されます。以下をご覧ください:

レンジ時間

これでまたはっきりしたかと思います。ご自分の取引スタイルに合わせて、すべてを調整することができます。あなたが直面している問題を避けるためには、信頼できるテストデータを使用することをお勧めします。ありがとうございました。