English Русский 中文 Español Deutsch Português
フィルターの魔法

フィルターの魔法

MetaTrader 4トレーディングシステム | 22 4月 2016, 15:08
2 332 0
Sergey Pavlov
Sergey Pavlov

はじめに

ほとんどの自動売買システム(ATS)開発者は、なしかしらシグナルのフィルター機能を使用しているものです。それだけがシステムの特性を向上させる方法ではないにしても、もっとも効率的であると考えられています。『聖杯作成』の初心者はフィルター機能の魔法に陥ることが多いものです。なにかトレーディング戦略を取り入れ、そこに何十ものフィルターをぶらさげれば、できあがり、これで収益性ある Expert Advisor、ということはひじょうに簡単です。

しかし、フィルター機能の利用には敵がいるのです。フィルターは大幅にディール数を減らし(ときとして2~3倍)ますが、将来それらが過去と同様に効果的である保証はないのです。確かに、他にやむを得ない理由もあります。

よって、もっと詳しく見て、これのすべてを一度に1ステップずつ考察します。



フィルター機能は無意味だという仮説

Expert Advisor が利益を出さなければ(『水切り』)、それは一部のタイプのフィルター機能が役に立たない可能性があります。ここではフィルターの魔法は無力ということになります。

本稿では、こういった Expert Advisor は対象としません。もっとも、量子周波数フィルタの研究があることは知っています。どんな『水切り』も仮想的に聖杯もどきに変えることのできるものです。

フィルターが危険であるという仮説

Expert Advisor がその特定において、理想的な「自動売買システム」に近づくならば、フィルター機能はそれを悪化させるだけです。

理想的な自動売買システムという語が何を意味するか明確にする必要があります。それは収益性ある取引のみを生成するトレーディング戦略を意味します。すなわち損失はまったく出さないのです。そのようなシステムでは収益性のないトレード数 = 0 となります。



ではフィルターとは何でしょうか?

もっともシンプルな形では、トレードシグナルフィルターは次のような理論的制約です。A B より大きければ(A> = B)、シグナルはスキップされ小さければ (A <B)、スキップされない。結果としてシグナルの一部は排除されます。フィルターという語は売買ロボット開発者によって作り出されました。あるタイプのトレンドを作り出すためには、ATS の特性に影響を与えるさまざまな要因を分析する必要があります。そしてその要因の多様性はひじょうに大きなものです。よって、もっとも関連した一貫性のあるものを選択するには直観に頼る必要があります。

一例です。 ATS の取引結果とククシキン村の気圧の間には相関関係があるかもしれません。すなわち、適切なフィルターを作成し、Expert Advisor の収益性を挙げることができるのです。それはこのロシアの小さな町の天気を考慮するものです。しかし、システムの収益性を挙げる可能性があるにもかかわらず、だれかがそのような革新的なフィルター方法にを認める可能性は低いものです。



フィルター分類

ATS で使用されるフィルターにが実に多様であっても、2つの主な種類に分けることができます。

  • 帯域通過フィルター(P フィルター)‐シグナル帯域を発信します。
  • 離散フィルター(D フィルター)-マスク(テンプレート)によるシグナルの選択的発信


どこから始めましょう?

それではまず、例を見ながらフィルターのメカニズムを考察します。 DC2008_revers Expert Advisor(添付ファイルを参照)を使用します。これは本稿のために特別に作成されたもので、その特性を探ります(フィルターは使用せず)。以下に検証中に取得されたレポートがあります。

レポート

シンボル EURUSD (ユーロ vs 米ドル)
期間 2009.09.07 00:00~2010.01.26 23:59(2009.09.07~2010.01.27)で 1 分(M1)
Model 全ティック(直近の全有効タイムフレームを基にしたもっとも正確な方法)
パラメータ Lots = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5;

履歴上のバー 133967 モデル化されたティック 900848 モデル化のクオリティー 25.00%
不一致な通信エラー 0




初期資金 10000.00



純利益 4408.91 粗利益 32827.16 総損失 -28418.25
収益性 1.16 予想ペイオフ 1.34

絶対ドローダウン 273.17 最大ドローダウン 3001.74 (20.36%) 相対ドローダウン 20.36% (3001.74)

合計取引 3284 ショートポジション(勝利 %) 1699 (64.98%) ロングポジション(勝利 %) 1585 (65.68%)

収益性あるトレード(全体の%) 2145 (65.32%) 敗北トレード(全体の%) 1139 (34.68%)
最大 収益性あるトレード 82.00 敗北トレード -211.00
平均 収益性あるトレード 15.30 敗北トレード -24.95
最大数 連続勝利(利益) 29 (679.00) 連続敗北(損失) 16 (-290.34)
最大値 連続利益(勝利数) 679.00 (29) 連続損損失(敗北数) -1011.00 (10)
平均 連続勝利 5 連続敗北 3

1 履歴バックテスト結果フィルターなしの初期 Expert Adviso

結果分析

  1. Expert Advisor は収益性があり、勝利トレードは60%を超えています。これは良い成績です。
  2. デポジットの20%で最小ロットサイズで $ 3000 を超える最大ドローダウンは、悪い結果です。
  3. 取引総数はフィルターを使うのに十分です(> 3000)。

もちろん、この結論は現在の履歴期間についてのみ言えることです。異なる位置で Expert Advisor がどのようにトレードを行うかはわかりません。だからといって、フィルターによってその特性に変更を加えることを止める理由にはなりません。

よって、この Expert Advisor に対して、収益性を挙げ、ドローダウンを下げるフィルターを見つけてみようと思います。



帯域通過フィルター(P フィルター)

これはもっとも一般的で簡単なフィルターの一つです。というmのも、検証直後にそれ以上の処理をせず結果をすぐに評価することができるからです。検証済み Expert Advisor においてそれを使用する可能性を考察します。パラメータの一つとして、スキップ帯を採用し、バーの始値を異なる期間の終値と比較します。

H4 期間

   //+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_H4,1)<iClose(NULL,PERIOD_H4,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_H4,1)>iClose(NULL,PERIOD_H4,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

2 履歴バックテスト結果

P フィルターを伴う(H4 期間)

Expert Advisor

H1 期間

   //+---------------------------------------------------------------------------------+
   //   BUY Signal
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signal
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

図 3  履歴バックテスト結果P フィルターを伴う(H1 期間)Expert Advisor

M30 期間

   //+---------------------------------------------------------------------------------+
   //  BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_M30,1)<iClose(NULL,PERIOD_M30,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_M30,1)>iClose(NULL,PERIOD_M30,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

図4 履歴バックテスト結果P フィルターを伴う(M30 期間)Expert Advisor

M5 期間

   //+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_M5,1)<iClose(NULL,PERIOD_M5,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_M5,1)>iClose(NULL,PERIOD_M5,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }


5 バランス変化のスケジュールM5 期間のP フィルター

受け取ったレポートの分析が簡単になるよう、以下のテーブルにまとめられています。


フィルターなし PERIOD_H4 PERIOD_H1 PERIOD_M30 PERIOD_M5
初期資金 10000.00 10000.00 10000.00 10000.00 10000.00
純利益 4408.91 4036.33 4829.05 3852.90 4104.30
粗利益 32827.16 19138.74 27676.50 18133.77 23717.68
総損失 -28418.25 -15102.41 -22847.45 -14280.87 -19613.38
収益性 1.16 1.27 1.21 1.27 1.21
予想ペイオフ 1.34 2.92 2.20 3.59 2.02
絶対ドローダウン 273.17 434.09 762.39 64.00 696.23
最大ドローダウン 3001.74 (20.36%) 2162.61 (17.48%) 2707.56 (17.22%) 2121.78 (16.38%) 1608.30 (12.46%)
相対ドローダウン 20.36% (3001.74) 17.48% (2162.61) 17.22% (2707.56) 16.38% (2121.78) 12.46% (1608.30)
合計取引 3284 1383 2195 1073 2035
ショートポジション(勝利 %) 1699 (64.98%) 674 (54.01%) 1119 (60.59%) 547 (60.51%) 1046 (63.48%)
ロングポジション(勝利 %) 1585 (65.68%) 709 (62.48%) 1076 (64.96%) 526 (64.64%) 989 (66.63%)
収益性あるトレード(全体の%) 2145 (65.32%) 807 (58.35%) 1377 (62.73%) 671 (62.53%) 1323 (65.01%)
敗北トレード(全体の%) 1139 (34.68%) 576 (41.65%) 818 (37.27%) 402 (37.47%) 712 (34.99%)
最大




収益性あるトレード 82.00 201.00 157.00 204.00 97.00
敗北トレード -211.00 -136.00 -160.00 -179.51 -156.00
平均




収益性あるトレード 15.30 23.72 20.10 27.02 17.93
敗北トレード -24.95 -26.22 -27.93 -35.52 -27.55
最大数




連続勝利(利益) 29 (679.00) 27 (817.98) 36 (1184.32) 36 (1637.38) 44 (912.03)
連続敗北(損失) 16 (-290.34) 12 (-636.34) 13 (-367.07) 14 (-371.51) 15 (-498.51)
最大値




連続利益(勝利数) 679.00 (29) 884.08 (16) 1184.32 (36) 1637.38 (36) 912.03 (44)
連続損損失(敗北数) -1011.00 (10) -686.00 (10) -758.00 (7) -894.85 (10) -589.00 (5)
平均




連続勝利 5 5 5 5 4
連続敗北 3 3 3 3 2


表1 P フィルターに対する検証レポート比較表

結果分析

  1. P フィルターでは "PERIOD_H1" (4408.91 => 4829.05)でのみ純利益が増加しています。
  2. 予想ペイオフを先導しているのは P フィルター "PERIOD_M30" (1.34 => 3.59)です。
  3. 全フィルターで最大ドローダウン値は下がっています。ドローダウンの最長値は "PERIOD_M5" (3001.74 => 1608.30) フィルターで結果が出ています。
  4. フィルターにより合計取引数が 1.5~3 倍減っています。

結論

  • P フィルターは ATS 特性を向上させるおとができる。
  • これ以上の分析には、最良の利益結果を示したP フィルター"PERIOD_H1"を選択します。


離散フィルター(D フィルター)

もっともシンプルで直観的に理解できる離散フィルターは時間による取引です。日中取引のExpert Advisor は取引において不安定であると予測するのが妥当です。特定の時間内により収益性があり、別の時間では逆で損失しか出しません。このたえに、トレード結果におけるこのフィルターの影響を調査します。追加の外部変数を事前にエキスパートコードにインクルードする必要があります。

extern int        Filter.Hour=0;    // D-filter: trade by hour
//----
extern double     Lots=0.1;
extern int        Symb.magic=9001,
                  nORD.Buy = 5,     // max buy orders
                  nORD.Sell = 5;    // max sell orders

そして以下がフィルターです。

   //+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && Hour()==Filter.Hour 
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && Hour()==Filter.Hour 
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

現在時間がD フィルターの離散値に一致している場合、売りまたは買いのシグナルを生成(許可)します。それ以外の場合は生成しません。

テスターを最適化モードで起動します(入力パラメータは画像に指定されています)。「ポジションをオープンする資金が不足しちます」という状況を避け、取引の一部を失わないために、デポジットは最大値を指定する必要があります。




図6 D フィルター特性検索用入力パラメータ

結果、フィルター応答の特性を取得します。利益、取引数、1日の時間(X 軸)の関数としてドローダウン(Y 軸)です。

7 フィルター応答の特性 時間での D フィルター機能

Expert Advisor は異なる時間に異なる利益をもたらすという仮定は確認されました。

... それが確認されましたが、これをどうするのでしょうか?最初に心に浮かぶのは、Expert Advisor に対して損失しかもたらさない時間でのトレードを許可しないことです。これは理論的に思えます。じゃあ、利益を出す時間の間だけトレードを許可するようにD フィルターを変更します。別の言い方をすれば、フィルター マスクを作成するのです。ここで最終的な D フィルターをコードに差し込み、検証レポートを考察します。

   //+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && (Hour()==0                       
         || Hour()==6                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         ) 
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && (Hour()==0 
         || Hour()==6 
         || Hour()==9 
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         ) 
      )                                                                               
   {
   //----
      Signal.Sell=true; 
   }   

シンボル EURUSD (ユーロ vs 米ドル)
期間 2009.09.07 00:00~2010.01.26 23:59(2009.09.07~2010.01.27)で 1 分(M1)
Model ティックごと(直近の全有効タイムフレームを基にしたもっとも正確な方法)
パラメータ Filter.Hour = 0; Lots = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5;

履歴上のバー 133967 モデル化されたティック 900848 モデル化クオリティー 25.00%
不一致なグラフ エラー 0




初期資金 10000.00



純利益 6567.66 粗利益 24285.30 総損失 -17717.64
収益性 1.37 予想ペイオフ 4.13

絶対ドローダウン 711.86 最大ドローダウン 3016.21 (18.22%) 相対ドローダウン 18.22% (3016.21)

合計取引 1590 ショートポジション(勝利 %) 832 (61.30%) ロングポジション(勝利 %) 758 (63.85%)

収益性あるトレード(全体の%) 994 (62.52%) 敗北トレード(全体の%) 596 (37.48%)
最大 収益性あるトレード 194.00 敗北トレード -161.00
平均 収益性あるトレード 24.43 敗北トレード -29.73
最大数 連続勝利(利益) 40 (1096.16) 連続敗北(損失) 15 (-336.45)
最大値 連続利益(勝利数) 1289.08 (20) 連続損損失(敗北数) -786.51 (8)
平均 連続勝利 5 連続敗北 3

8 時間での D フィルターバランス チャート

フィルター結果分析

  1. ドローダウン削減-未達成。それは減少するどころかわずかに増加(3001.74 → 3016.21)?
  2. 純利益はおよそ50%増加しました(4408.91 → 6567.66)。それでも減少した取引数はほとんど半数になっています(3284 → 1590)。
  3. D フィルターの予想利益(4.13)は調査したP フィルターすべての最高値(3.59)よりも高いものです。
  4. 収益性のある取引数は減少しました(64.98% → 62.52%)。すなわち、フィルターは収益性のない取引だけでなく、排除したのです。

結論

  • 離散フィルターはP フィルターよりも効果的ですが、それにはより細かい調整と最適な入力条件の選択が必要です。


2個以上のフィルターを使用したシグナルのフィルター

フィルター1つだけでは ATS の性能をつねに大きく向上するのは不可能です。むしろ一般的には複数のフィルターを設定するものです。そうすると、そのようなフィルターをどのようにマージするのか、という疑問に直面します。

この調査のために、上記のフィルターを採用し、問題を単純化するために以下の方法でそれらにラベルを付けます。フィルター7 No.1(P フィルター)およびフィルター No.2(D フィルター)です。まず簡単な追加でそれらをマージします。それにはExpert Advisor のコードを変更します。

   //+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      //---- filter №1
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)  
      //---- filter №2
      && (Hour()==0                                                         
         || Hour()==6                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )       
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      //---- filter №1
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      //---- filter №2
      && (Hour()==0                       
         || Hour()==6                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )       
      )                                                                               
   {
   //----
      Signal.Sell=true; 
   }

それからできたフィルターの組み合わせを検証し、結果として以下のようなレポートを取得します。

バランス

シンボル EURUSD (ユーロ vs 米ドル)
期間 2009.09.07 00:00~2010.01.26 23:59(2009.09.07~2010.01.27)で 1 分(M1)
Model 全ティック(直近の全有効タイムフレームを基にしたもっとも正確な方法)
パラメータ Lots = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5;

履歴上のバー 133967 モデル化されたティック 900848 モデル化クオリティー 25.00%
不一致なグラフ エラー 0




初期資金 10000.00



純利益 6221.18 粗利益 20762.67 総損失 -14541.49
収益性 1.43 予想ペイオフ 5.47

絶対ドローダウン 1095.86 最大ドローダウン 3332.67 (20.13%) 相対ドローダウン 20.13% (3332.67)

合計取引 1138 ショートポジション(勝利 %) 584 (58.39%) ロングポジション(勝利 %) 554 (61.19%)

収益性あるトレード(全体の%) 680 (59.75%) 損失トレード(全体の%) 458 (40.25%)
最大 収益性あるトレード 201.00 敗北トレード -159.00
平均 収益性あるトレード 30.53 敗北トレード -31.75
最大数 連続勝利(利益) 28 (1240.15) 連続敗北(損失) 16 (-600.17)
最大値 連続利益(勝利数) 1240.15 (28) 連続損損失(敗北数) -883.85 (10)
平均 連続勝利 5 連続敗北 3


9 バランス変化グラフ。2 フィルター:P フィルター + D フィルター(単純追加)

また、これら2つのフィルターは別の方法で連結することも可能です。フィルター No.1 がフィルター No.2 よりもよい構成であるとします。そのため、新しい D フィルターを作成する必要があります。 Expert Advisor のコードは以下のようになります。最適化モードでテスターを起動し、フィルター No.2(時間での取引)の特性を取得します。

   //+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      //---- filter №1
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)  
      //---- filter №2
      && Hour()==Filter.Hour 
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      //---- filter №1
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      //---- filter №2
      && Hour()==Filter.Hour 
      )                                                                               
   {
   //----
      Signal.Sell=true; 
   }

10 2 つのD フィルターに対する時間ごとの利益変化。 比較分析

実際、フィルターの応答特性は変化しました。そして、フィルター No.1 をExpert Advisor に追加することでそのプロパティを代えたことを考えると、この結果は驚きに値しません。結果として、フィルター No.2 のマスクを変更することが必要です。

11 フィルター No.2 応答特性。時間でのD フィルター(最適化済み)

以下は Expert Advisor コードの最終版です。

   //+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      //---- filter №1
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)  
      //---- filter №2
      && (Hour()==0                       
         || Hour()==1                     
         || Hour()==6                     
         || Hour()==7                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==12 
         || Hour()==14 
         || Hour()==15 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )      
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      //---- filter №1
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      //---- filter №2
      && (Hour()==0                       
         || Hour()==1                     
         || Hour()==6                     
         || Hour()==7                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==12 
         || Hour()==14 
         || Hour()==15 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )      
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

バランス

シンボル EURUSD (ユーロ vs 米ドル)
期間 2009.09.07 00:00~2010.01.26 23:59(2009.09.07~2010.01.27)で 1 分(M1)
Model 全ティック(直近の全有効タイムフレームを基にしたもっとも正確な方法)
パラメータ Lots = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5;

履歴上のバー 133967 モデル化されたティック 900848 モデル化クオリティー 25.00%
不一致なグラフ エラー 0




初期資金 10000.00



純利益 5420.54 粗利益 22069.48 総損失 -16648.94
収益性 1.33 予想ペイオフ 3.77

絶対ドローダウン 826.86 最大ドローダウン 2141.24 (14.06%) 相対ドローダウン 14.06% (2141.24)

合計取引 1439 ショートポジション(勝利 %) 758 (61.87%) ロングポジション(勝利 %) 681 (64.46%)

収益性あるトレード(全体の%) 908 (63.10%) 損失トレード(全体の%) 531 (36.90%)
最大 収益性あるトレード 157.00 敗北トレード -154.00
平均 収益性あるトレード 24.31 敗北トレード -31.35
欠陥の最大数 連続勝利(利益) 30 (772.70) 連続敗北(損失) 16 (-562.17)
最大値 連続利益(勝利数) 1091.32 (22) 連続損損失(敗北数) -926.15 (15)
平均 連続勝利 5 連続敗北 3

12 2フィルターの特性最適化結果としてのバランス変化グラフ

レポートの分析を簡単にするために、次のような表を作成します。


フィルターなし 追加 最適化
初期資金 10000.00 10000.00 10000.00
純利益 4408.91 6221.18 5420.54
粗利益 32827.16 20762.67 22069.48
総損失 -28418.25 -14541.49 -16648.94
収益性 1.16 1.43 1.33
予想ペイオフ 1.34 5.47 3.77
絶対ドローダウン 273.17 1095.86 826.86
最大ドローダウン 3001.74 (20.36%) 3332.67 (20.13%) 2141.24 (14.06%)
相対ドローダウン 20.36% (3001.74) 20.13% (3332.67) 14.06% (2141.24)
合計取引 3284 1138 1439
ショートポジション(勝利 %) 1699 (64.98%) 584 (58.39%) 758 (61.87%)
ロングポジション(勝利 %) 1585 (65.68%) 554 (61.19%) 681 (64.46%)
収益性あるトレード(全体の%) 2145 (65.32%) 680 (59.75%) 908 (63.10%)
敗北トレード(全体の%) 1139 (34.68%) 458 (40.25%) 531 (36.90%)
最大


収益性あるトレード 82.00 201.00 157.00
敗北トレード -211.00 -159.00 -154.00
平均


収益性あるトレード 15.30 30.53 24.31
敗北トレード -24.95 -31.75 -31.35
最大数:


連続勝利(利益) 29 (679.00) 28 (1240.15) 30 (772.70)
連続敗北(損失) 16 (-290.34) 16 (-600.17) 16 (-562.17)
最大値


連続利益(勝利数) 679.00 (29) 1240.15 (28) 1091.32 (22)
連続損損失(敗北数) -1011.00 (10) -883.85 (10) -926.15 (15)
平均


連続勝利 5 5 5
連続敗北 3 3 3

2 2フィルター:P フィルターおよびD フィルターの組み合わせ検証レポート比較表

結果分析

  1. 収入、利益、期待利益の基準をもとに比較を行う場合、最良の結果は2つのフィルターを追加するときに得られます。
  2. ドローダウンに着目すると、フィルターの最適化オプションが勝因となります。
  3. いずれの場合でも、フィルターは ATS の特性を向上させるのです。


おわりに

  1. というわけで、魔法のフィルターはどれでしょうか?魔法はそのシンプルさ、任意の Expert Advisor の特性を変える機能にあります。
  2. 提案のフィルター作成技術は単純にコピーするために考案されたものではありません。ただ、特定のに対してP フィルターとD フィルターがどのように作成されるかを示しているにすぎません。ある Expert Advisor に適したフィルターは別の Expert Advisor にとっては妨げとなる可能性があります。
  3. そして覚えておいてください。理想的な ATS にはフィルターは必要ない、ということを!... そのようなシステム構築が夢ですよね?
  4. このExpert Advisor のコードやフィルターは最適化されておらず、確実に理想的なものではないことは解っています。ただ本稿の目的として、この特殊なプログラミング スタイルを選択したのです。どんな『初心者』でも上述の手順を繰り返すと、自分独自のフィルターが作れるように行ったものです。
  5. !注意!本稿で考察されている Expert Advisor を実取引では使用しないでください。

MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/1577

添付されたファイル |
DC2008_revers.mq4 (7.17 KB)
Expert Advisor 内での Expert Advisor コンテスト Expert Advisor 内での Expert Advisor コンテスト
仮想取引によって、適応型 Expert Advisor を作成することができます。それは実マーケットでトレードをオン、オフするものです。1件の Expert Advisor に複数の戦略を組み合わせます。マルチシステム Expert Advisor は自動でトレーディング戦略を選択します。それは実マーケットで仮想取引の収益性をもとにトレードを行うには最良のものです。この種の方法により、ドローダウンを減少し、マーケットでの作業の収益性を上げることができるのです。実験を行い、結果を他の人と共有してください。多くの人がみなさんの戦略ポートフォリオを知りたがっていると思います。
ろうそく方向の統計的回帰研究 ろうそく方向の統計的回帰研究
やってくる短い時間間隔に対して、ろうそく足インディケータの定期的な傾向を基に、1日の特定時刻の市場動向を予想することは可能なのでしょうか?まず第一にそのような発生が検出されるなら、可能です。この疑問はおそらくどのトレーダーの心にも浮かんだことのあるものでしょう。本稿の目的は、ろうそく足の方向の統計的回帰に基づき、特定の時間間隔で市場動向の予想を試みることです。
ユニットテストの助けを借りたコードのクオリティー向上 ユニットテストの助けを借りたコードのクオリティー向上
シンプルなプログラムにさえ信じられないようなエラーがよくあるものです。「どうしてそんなふうになったんだろう?」というのが、そのようなエラーが明らかになったとき最初に思うことです「どうしたらエラーを出さずにすむのだろう?」というのは、あまり頻繁に心に浮かばない第2の問いです。完璧に欠点のないコードを作成するのは不可能です。特に大規模なプロジェクトでは。ですが、ちょうどよいタイミングでエラーを検出するために技術を利用できるものです。本稿では、一般的なユニットテスト方法の助けを借りてコードのクオリティーを向上する方法を説明します。
ニューラルネットワークFANN2MQL のチュートリアル ニューラルネットワークFANN2MQL のチュートリアル
本稿は、FANN2MQL によるニューラルネットワークの使用方法を簡単な例を用いて説明するために書かれました。