記事「MQL5での取引戦略の自動化(第3回):ダイナミック取引管理のためのZone Recovery RSIシステム」についてのディスカッション

 

新しい記事「MQL5での取引戦略の自動化(第3回):ダイナミック取引管理のためのZone Recovery RSIシステム」はパブリッシュされました:

この記事では、MQL5を使ってZone Recovery RSI EAシステムを構築し、RSIシグナルによって取引を開始し、損失を管理するためのリカバリーストラテジーを実装します。取引エントリー、リカバリーロジック、ポジション管理を自動化するために、ZoneRecoveryクラスを作成します。この記事の最後では、EAのパフォーマンスを最適化し、その有効性を高めるためのバックテストの洞察を紹介します。

Zone Recovery RSIシステムは、取引エントリ用の相対強度指数(RSI)インジケーターと、不利な価格変動を管理するためのZone Recoveryメカニズムを組み合わせたものです。RSIが特定の閾値をクロスしたときにエントリーシグナルが発生します。一般的には、RSIが30を下回ると「売られすぎ」と判断され買いエントリー、70を上回ると「買われすぎ」とされ売りエントリーがおこなわれます。しかし、このシステムの真価は、損失が発生した場合に、それをリカバリーする能力にあります。そのために用いられるのが、構造化されたZone Recoveryモデルです。

Zone Recoveryシステムは、各取引に対してZone High、Zone Low、Target High、Target Lowの4つの重要な価格レベルを確立します。取引が開始されると、これらのレベルはエントリー価格を基準にして計算されます。買い取引の場合、Zone Lowはエントリー価格より下に、Zone Highはエントリー価格に設定されます。逆に、売り取引の場合、Zone Highはエントリー価格より上に、Zone Lowはエントリー価格に設定されます。市場がZone Low(買いの場合)またはZone High(売りの場合)を超えると、あらかじめ定義された乗数に基づいてロットサイズを増やし、反対方向のカウンタートレードが発動されます。Target HighおよびTarget Lowは、買いと売りポジションの利益確定ポイントを示しており、市場が有利な方向に動いた際に取引が利益で終了することを確実にします。このアプローチにより、ポジションサイズと価格レベルを体系的に調整しながら、リスクを管理しつつ損失のリカバリーを可能にします。以下に、このモデル全体を要約した図を示します。

Zone Recoveryイラスト


作者: Allan Munene Mutiiria

 
このEAはマーチンゲールをベースにしているので、大きな損失をコントロール するのは難しい。
 
wupan123898 コントロールする のは難しいです。

評価とフィードバックありがとうございます。ストラテジー通りです。あなたのトレードスタイルに合わせて変更してください。

 

tradqのmqファイルが見つかりません。

 
Amir Jafary #:

tradqのmqファイルが見つかりません。

それは画像でも完璧に説明されています。

 
wupan123898 コントロールする のは難しい。

よく言った。この戦略では、損失を回復するために、価格が最初に取引されたレンジをブレイクアウトすることを想定しています。ご存知のように、少なくとも外国為替市場では、価格はトレンドよりもレンジの方が多いのです。破滅的なマーチンゲールの損失を軽減する方法は、最初の取引にボラティリティ・フィルターを加えることだろう。

 
Ryan L Johnson #:

よく言った。この戦略は、価格が損失を回復するために、最初に取引されたレンジから抜け出すことを前提としている。ご存知のように、少なくとも外為市場に関しては、価格はトレンドよりもレンジの方が多い。破滅的なマーチンゲールの損失を軽減する方法は、最初の取引にボラティリティ・フィルターを追加することだろう。

確かに。

 
Allan Munene Mutiiria 関数に することも大したことではなく、ATRに組み込まれたものよりも、より良く、より速く、より柔軟な方法で動作するでしょう ...
ENUM_TIMEFRAMES _atrTimeFrame = PERIOD_D1;
int             _atrPeriod    = 20;
double          _atrValue     = 0;
   MqlRates _rates[]; int _ratesCopied = CopyRates(_Symbol,_atrTimeFrame,0,_atrPeriod+1,_rates);
                      if (_ratesCopied>0)
                           for (int i=1; i<_ratesCopied; i++) _atrValue += MathMax(_rates[i].high,_rates[i-1].close)-MathMin(_rates[i].low,_rates[i-1].close);
                                                              _atrValue /= MathMax(_ratesCopied,1);

 

コードをざっと読んでみたのですが、買いの場合、なぜアスク価格を計算に使わないのでしょうか?これを変更した場合、何か矛盾が生じますか?ありがとうございました。