多くの日中トレンド システムは、個別のトレンド フィルターで強化できます。 これは、最近の価格動向を見て、全体的な傾向が上昇、下降、または中立のいずれであるかを判断する指標です。 このフィルタ EA を使用した MQL4 トレンド インジケーターの記事で、EA が大きなトレンドに逆らって取引するときに不必要な損失を回避する方法を学びましょう。
トレンド フィルターは、システムが全体的なトレンドの方向にトレードし、トレンドに反するトレードを除外する方法です (これが証明されていれば幸いです)。バックテスト) トレンドフィルターにより、勝ちトレードよりも負けトレードが多く除外されます .
私たちのシステムトレーダーは、M30 などのより短い時間枠チャートを検索または作成することがよくあります。バックテストを通じて、この比較的短い時間枠で多くのトレンドの機会から利益を得ることができます。
しかし、視覚的なバックテストから、システムは最終的には利益を上げますが、一般的な傾向に反して取引されるたびに、多くの不必要な損失を被ることもわかります。 これを確認した場合、より大きな時間枠または期間に設定された同じ指標または代替指標のトレンド フィルターを探す必要があります。これにより、システムが市場のより大きなトレンドを特定し、取引のみを許可できるようになります。より大きな時間枠または期間での、一般的な傾向の方向。
そのトレンド フィルターの true/false ブール値も作成すると、フィルターをオフにして簡単に Or バックテストを実行して、追加によって強化されるかどうかを確認できるようになると便利です。それ。
トレンド フィルターの作成と実装のプロセスを段階的に説明するために、単純なトレンド フィルターである移動平均トレンド フィルターの構築を検討します。 。 このトレンド フィルターの作成方法を理解すると、最終的にすべてのトレンド戦略をテストするための適切なトレンド フィルターのセットが見つかるまで、さまざまな指標に基づいて多くの代替フィルターを簡単に作成できます。
移動平均トレンド フィルター
移動平均フィルターを作成します。これを true に設定すると、終値が移動平均を上回っており、終値が低い場合にのみロング取引が行われます。移動平均線の場合は空売り取引を行います。 とてもシンプルです。
ロングポジション: 終値が移動平均を上回っている場合。
ショートポジション: 価格が移動平均を下回って終了した場合。
パラメータ
フィルター
Bool:移動平均フィルターをオンにするかオフにするかを示します。 システムに入力される主な取引は移動平均の方向のみです。価格が移動平均を上回って終了した場合にのみロングになり、価格が移動平均を下回って終了した場合にのみショートになります。 デフォルトは false。
フィルタのバージョン
Bool: 移動平均フィルターの反転をオンにするかオフにするかを示します。 メインエントリーシステムは、移動平均の逆方向にのみ取引します。つまり、価格が移動平均を下回って終了した場合にのみロングになり、価格が移動平均を上回って終了した場合にのみショートになります。 デフォルトは false。 この逆フィルターはあまり使用されませんが、バックテストを通じて、上記の MAFilter を適用すると戦略が大幅に弱くなることが判明した場合には便利です。 次に、MAFilterRev を適用して充電できるかどうかを確認したい場合があります。
MATime
Int:これは移動平均線の時間枠です。 デフォルトは 0 で、チャートの同じ時間枠を意味します。 同じ時間枠でテストすることから始めて、次にテストを進めて、より大きな時間枠ごとにテストする必要があります。 たとえば、メイン戦略が M30 チャートに設定されている場合、デフォルト値の 0 (M30) で移動平均をテストし、次に 60 (H1) でテストし、次に 240 でテストします。だろう は H4、14440 は D1。
MAPeriod
Int:これは移動平均の期間です。 デフォルトは 50 で、これはトレンドの方向を決定するための移動平均の一般的な長期期間です。 もう 1 つの一般的な長い期間は 200 です。 オプティマイザーを 25 または 50 のステップ間隔で 50 ~ 200 に設定し、どの長い MA 期間が各時間枠でその通貨のトレンドを最もよく識別できるかを確認することをお勧めします テスト。
方法
int:これは移動平均の方法またはモードです。デフォルトは 1、指数移動平均です。 覚えておいてください: メソッドパラメータでは、0=単純、1=指数関数、2=滑らか、3=線形重み付け。 1 または指数関数が移動平均の最良のタイプだと思います。 もう 1 つのテストに適したものは、0 (単純移動平均) です。 どちらも非常に人気があり効果的な移動平均パターンです。
MT4 代码片段
次のコード ブロックは外部変数セクションに配置されます。 外部ブール値 MAFilter=true; ext boolean MAFilterRev = false; ext int MATime = 0; ext int MAPeriod = 50; ext int MAMethod=1; 以下のコードブロックはインジケーター呼び出しセクションにあります。 if (mafilter1 || mafilter1rev) 双 mafilter=iMA(NULL,MATime,MAPeriod,0,MAMethod,PRICE_CLOSE,shift);
MT4コード使用例
以下は、移動平均クロスオーバー戦略のコードにインターリーブされた MAFilter の例です。 移動平均クロスオーバー戦略の構築方法については以前に詳しく説明したので、よく知られているはずです。 移動平均クロスオーバー手法に MAFilter を追加するのは冗長であると考える人もいるかもしれません; ただし、それが褒め言葉として機能する場合もあります。 たとえば、移動平均クロスオーバーが M30 タイムフレームの 30 期間に基づいて取引される場合、H4 タイムフレームの 200 期間 MAFilter で補完すると強化される可能性があります。 より短い時間枠やサイクルでトレンドに逆らって取引し、最終的にはより長い時間枠やサイクルの方向に向かうことで利益を得る可能性があります。
bool BuyCondition = false;
bool SellCondition = false;
if (
FastMACurrent > SlowMACurrent && FastMAPrevious < SlowMAPrevious){
BuyCondition=true;
if (OppositeClose) CloseSell=true;
}
if (
FastMACurrent < SlowMACurrent && FastMAPrevious > SlowMAPrevious){
SellCondition=true;
if (OppositeClose) CloseBuy=true;
}
if (BuyCondition
&&
(MAFilter==false || (MAFilter && Ask>mafilter))
&&
(MAFilterRev==false || (MAFilter && Ask< mafilter))
OpenBuy = true;
if (SellCondition
&&
(MAFilter==false || (MAFilter && Bid<mafilter))
< mafilter))
&&
(MAFilterRev==false || (MAFilter && Bid> mafilter))
OpenSell = true;
</mafilter))
説明
上記の MT4 の使用法セクションには 5 つのコード ブロックがあります。 最初のコードでは、BuyCondition のブール値と SellCondition のブール値を作成し、両方をデフォルトで false に設定します。 私が最初に false に設定したのは、サブスクライブしたロジックが true になった場合にのみ true になるようにしたかったからです。 2 番目と 3 番目のコード ブロックは、移動平均クロスオーバーに基づいて売買条件の特定を開始します。 高速移動平均が低速移動平均を超えると、BuyCondition=true; 高速移動平均が低速移動平均をクロスすると、SellCondition=true になります。 これらの条件については、基本エキスパートアドバイザー: MA クロスオーバーですでに説明しました。 唯一の違いは、コードの 4 番目と 5 番目のブロックで参照した OpenBuy と OpenSell ではなく、BuyCondition と SellCondition のブール値にこれらの条件を含めたことです。 これは、MAFilter を実装する 4 番目と 5 番目のコード ブロックです。 それぞれは「if ( )」条件で始まり、括弧内に 3 つの条件が設定されています。 最初の条件、BuyCondition または SellCondition には、移動平均クロスオーバーのエントリー ロジックが含まれています。 2 番目の条件である MAFilter 条件は、|| で区切られた括弧内の複合文です。 (「または」) 演算子。 ステートメントの最初の部分では、MAFilter が false (MAFilter==false) に設定されている場合、MAFilter は動作しないと述べています。 ステートメントの 2 番目の部分 (|| の後) は、MAFilter が true に設定されている場合 (bool 自体が true を意味するため、== true である必要はないことに注意してください)、実行を続行できることを示しています。 MAフィルタールール . BuyCondition では、MAFilter ルールは、Ask が mafilter より大きい (>) 必要があるということです。 注: mafilter の変数 (小文字) は、インジケーター呼び出しセクションの MT4 コード セクションで定義されます。 3 番目の条件である MAFilterRev 条件も、|| で区切られた括弧内の複合ステートメントです。 (「または」) 演算子。 ステートメントの最初の部分では、MAFilterRev が false に設定されている場合 (MAFilterRev==false)、MAFilterRev は動作しないと述べています。 ステートメントの 2 番目の部分 ( || の後) は、MAFilterRev が true に設定されている場合、MAFilterRev ルールの実行を継続できることを示します。 ご覧のとおり、MAFilterRev ルールは MAFilter ルールの逆です。 MAFilter ルールが、Ask が mafilter よりも大きい (>) 必要があることを示している場合、MAFilterRev は、Ask が mafilter よりも小さい (<) 必要があることを示します。 上記の 3 つの条件がすべて満たされている場合、EA は OpenBuy=True または OpenSell=true で続行でき、コード内で買いまたは売りのエントリーシグナルがトリガーされます。
结论
上記の MAFilter は、構築および実装できる多数のトレンド フィルターのうちの 1 つにすぎません。 MAFilter を選択したのは、これがトレンドの方向を特定するのにおそらく最も簡単で効果的であるためです。メソッド。 トレンドフィルターとして機能する他の優れたインジケーターは、移動平均のバリエーションです:JMA、Hull、NonLagMA、Slope Direction Line。 4 つのインジケーターすべてをソリッド トレンド フィルターとして使用しました。 RSI やストキャスティクスなどのモメンタム オシレーターを試すこともできます。 どのインジケーターを使用する場合でも、さまざまな期間と時間枠を試して、どのインジケーターがより大きなトレンドを最も効果的にフィルターできるかを確認する必要があります。 トレンドは時間枠にすぎません。時間枠を特定したら、トレンドの概念について特別なことは何もありません 非常に複雑な数学トレンド フィルターを探したり構築したりする必要はありません。 多くのトレーダーは、トレンド特定の問題を過度に複雑にしようとしています。 彼らは、トレンドが上昇しているか下降しているかをより正確に判断するために、あらゆる種類の派手な数学方程式や過去の価格変動をマッサージする方法を発明していますが、これらの試みのほとんどは無意味です。 傾向を特定するには、最もシンプルで最も一般的な方法が最適です。 すべての EA がトレンド フィルターの恩恵を受けるわけではありません。 一部の EA には、追加のトレンド フィルターなしで適切に機能するトレンド インジケーターが含まれています。 他の EA は、トレンドの反転または逆トレンドの状況を予測しようとし、現在のトレンドが逆の場合にトレードに参加します すべてのフィルターは取引の発生を阻止し、ブロックされた取引のほとんどが損失取引であることを忘れないでください。 通常は、一度に 1 つのフィルターをバックテストし、あまり多くのフィルターを使用しないようにするのが最善です。 あなたの戦略は、フィルターなしでも十分に自立できるものでなければなりません。 優れた戦略に適用されるトレンド フィルターは、オプションの拡張機能としてテストする必要があります。 フィルターが多数の、あるいは同数の勝ちトレードをブロックしていることが判明した場合、機能しているフィルターは適切なフィルターではありません。 5 ~ 10 年の長期にわたるバックテストの下で、より大きな割合のトレード損失を防ぐ場合にのみ許容されます