非トレード EA 検証インディケータ
はじめに
インディケータはすべて2グループに分けることができます。静的インディケータ。それの表示は一度示されると常に履歴で同じままで、新規の着信クオートで変化することはありません。動的インディケータ。現在の変動に対する状態のみ表示し、新価格が来ると完全に再描画されます。静的インディケータの効率は直接チャートで見ることができます。動的インディケータが正常に動作しているかどうか確認するには?本稿が取り組むのはこの疑問です。
テクニカル分析で使用されるインディケータの圧倒的多数は静的インディケータです。MACD を例にとります。新規クオートの到来は、せいぜい最新の期間の表示、より正確ににはその最終状態にのみ関わります。ただし、そのチャートは履歴において『難攻不落』のまま残ります。静的インディケータが動作しているかどうか確認するには、履歴データ上でそれが示すものを調査するだけで十分です。利用可能なインディケータが複数あり、トレーディングにもっとも最適化ものを1つ選びたい場合も問題はありません。チャートにインディケータをすべてアタッチし、それから『より正確な』指示をするものを1つその中から選ぶだけです。
動的インディケータの場合は、状況はもっと複雑で、ほとんど『行くな』ですらあります。ほとんどすべてのチャンネルインディケータがそのようなインディケータ例として使用可能です。結果として、これらインディケータは、価格変動の範囲を表示する2本以上の線を描きます。その線は当然現時点について描かれます。よって、最近の価格と大きく異なる新規価格が到来すると、数秒でチャートの線をまったく違ったものに変えます。現行価格の最終ポイントを判断するだけで、可能な価格形成すべてに対してインディケータがどれほど正しく動作するか推定するのは不可能です。みなさんご自身のインディケータが数時間正常に動作しているのを確認し、問題なく動作しているとみなすことができます。正確に取引を開始しようと決めるとき、インディケータが正しく動作せず(インディケータの一つにより誤って構築された Barishpolets の移動チャンネルは以下に提供されています)、不利な方向にトレードをオープンするような市場状況が発生する可能性があります。インディケータ自体がその指示をバー数本以内に『修正します』。ただしこれは遅すぎるでしょう。ポジションは失われつつあるのです。
テスターにおけるインディケータ検証
「ストラテジーテスタ」の主目的は Expert Advisor を検証することです。EA の中には処理にインディケータを使用しているものがあり、テスターはそれらも検証することが可能です。この特性を利用します。
Expert Advisor は2とおりのモードで検証できます。標準モードとビジュアルモードです。標準モードでは、テスターは履歴処理の中でのコマンドをすべて処理し、検証対象の通貨ペアの有効な履歴データがなくなるとすぐに、最終結果を出すために停止します。ビジュアルモードでは、上記と異なり、テスターはリアルタイムモードで稼働しているマーケットをエミュレートしながらチャートのバー/ティックをすべて追加して描きます。テスターでは、時間を速めたり遅くしたり、止めることさえできます。それはインディケータを検証する際大きく役立つことです。
非トレードスクリーンショットの Expert Advisor
インディケータ検証前に、かなり特殊な EA を準備する必要があります。ここでの目的のためには、この EA はトレードをすることはありません。EA が動作することでインディケータ検証を妨げず、もっと重要なことは、トレードエラーのためにあらかじめ失われたデポジットがインディケータ検証を止めることがあってはならないのです。そのため、何もしない EA を作成します。
唯一の機能はトレードの現在状況をスクリーンショットに撮ることです。そのスクリーンショットは、インディケータの動作を段階的に分析するときひじょうに役立ちます。以下がその EA のコードです。
スクリーンショットのアルゴリズムはひじょうにシンプルです。一連のスクリーンショット(ScreenShotStart)を撮りたいと思っている時間が来るのを待ち、ScreenShotStep バーごとに ScreenShotMax までスクリーンショットを作成します。スクリーンショットはすべて1件のファイルに保存されあす。名前はプリセットの接頭辞 FilesPrefix から始まり、名前にスクリーンショット番号が追加されます。
ゼロから始まる番号を作成する(これは、_1.gif のすぐ後に _10.gif ではなく _2.gif がくるようにスクリーンショットを整列する正しいソートのために必要です)には、やや特殊な採番方法を使います。番号はScreenShotCur=0.001; で始まり、0.001(ScreenShotCur+=0.001;)の間隔で続きます。番号自体は小数を文字列に変更することで取得され、そこから3番目の文字で始まる番号としてサブストリングが選択されます。よって、初めの "0." は切り捨て、番号の数字の前に先行のゼロを取得します。この方法により、スクリーンショットを一万枚まで蓄積することができます。これはわれわれの分析には十分すぎる量です。ただし、それが十分でない場合は、初期番号の『粒子性』と間隔の初期値を 0.0001 まで増やします。そうすると、スクリーンショットを 10,000 まで蓄積することができるようになります。
検証開始
次に、すべてが準備でき、がエラーなくコンパイルされたら検証の開始です。View/Tester メニューまたはキーの組み合わせ Ctrl+R によってテスターを起動します。"Expert Advisor" フィールドで、われわれの EA、IndicatorTester を選択します。そして検証対象のシンボルと期間を選択します。必要に応じ、"Use date" フィールドにチェックを入れ、日付の『開始』と『終了』を指定して検証範囲を選択することが可能です。ビジュアル検証モードをアクティブにするには、"Visual mode" フィールドにチェックを入れます。次に、"Expert properties" ボタンを押し、スクリーンショットを撮るために必要なインプットをすべて指定します。
ほとんどすべて準備できました。Press the "Start" ボタンを押したら、そのすぐあとに可視化速度調整スライダーの右にある "||" ボタンを押します。EA は検証を停止します。ここで、 "||" ボタンを離して検証するインディケータをチャートにアタッチし、EA の検証を続けます。記憶にあるように、この EA はトレードを行いません。が、テスターはそのことを知らず、バーごと、ティックごとに綿密にクオートを処理します。チャートには1つまたは数個のインディケータしかアタッチされていないため、テスターはそれらを再計算し再描画する必要があります。通常の EA なら必ずこれらインディケータから取得するデータを使用するからです。
以上です。また、中にはポップアップボックスにインディケータがどのように動作するか『傍観する』を書くプログラマーがいます。いつでも検証は中断することができる( "||" ボタンを押すことで)、またはそのスピードを上げることも下げることもできます。みなさんがScreenShotStart としてプリセットした日付/時刻にテスターが到達するとすぐにあらかじめ設定した間隔でスクリーンショットを撮り始め、できたスクリーンショットをディレクトリ c:\Program Files\MetaTrader 4\tester\files に格納します。スクリーンショットが不要で、インディケータの動作状態を確認したいだけであれば、『開始する』ボタンを押す前にEA のパラメータ ScreenShotStep をゼロ以下に設定すると、スクリーンショット作成機能は無効になります。
用例
私は最初に、自分の研究に対して『もっとも正しい』Barishpolets の移動チャンネルを見つけたいと思ったときにこのタスクを行いました。チャンネルこうちく方法の説明では、誤った構築につながる点がいくつかあります。まず、これはそれによってチャンネルの1つが描画される2つの極値が互いに近く位置しえいることに関連します。そのような場合、インディケータのいくつかは45°下から45°上にチャンネルを『投げ』はじめ、その後上から下に戻るなど、です。残念ながら、インディケータの開発者は暗黙的にBarishpolets の権威を信頼して、暗記で一連のルールを実装しただけです(圧倒的大多数の場合、このルールは問題ないことに注意が必要です)。しかし彼らは市場がわれわれが驚く可能性あるものすべてを飛び上がらせることを忘れています。そのような場合には、インディケータの『トップ』は『吹き飛ばされ』はじめ、インディケータは利益を得る便利なツールではなく、負けの原因となります。
の移動チャンネルの異なる構築方法を比較するために、私はチャンネルも構築する自分のインディケータを書きました。ただし、平均価格変動ラインによって『より客観的に』です。それは標準的ツール Equidistant Channel が行う方法と酷似していますが、チャンネル境界がやや異なるアルゴリズムによって構築されています(くわしくは私のウェブサイト Two-Channel Method(ロシア語)でご覧になれます)。次に、CodeBase にある Barishpolets の移動チャンネルのインディケータの一つ(SHI_Channel_true)がどのように動作するか『正しい』mean price channel と比較して見てみます。検証対象インディケータのラインはグリーンで、2チャンネルインディケータの長い(週間)ラインはオレンジで、短い(33時間)チャンネルのラインは水色で描かれています。それらはチャンネル境界に達するとすぐに赤色になります。
フィルムはフィルムですが、作成されたスクリーンショットをいくつかじっくり見てみます。
2007年12月4日~7日の期間(EURUSD M30)については、移動チャンネルのインディケータが難解『反転する』か、平均価格変動ラインに戻るか確認することができます。
//+-----------------------------------------------------------------------------+ //| IndicatorTester.mq4 | //| Copyright © 2006-2008, Sergey Kravchuk | //| http://forextools.com.ua | //+-----------------------------------------------------------------------------+ #property copyright "Copyright © 2006-2008, Sergey Kravchuk. http://forextools.com.ua" #property link "http://forextools.com.ua" //+-----------------------------------------------------------------------------+ extern datetime ScreenShotStart=0; // date and time of the first screenshotting extern int ScreenShotMax=100; // how many screenshots should be made extern int ScreenShotStep=0; // screenshotting step: <=0-not applicable, N-on each Nth bar extern string FilesPrefix="_"; // prefix for screenshot filenames //+-----------------------------------------------------------------------------+ datetime NextScreenShot=0; // date and time for making the next screenshot double ScreenShotCnt=0; // prepare a screenshot counter double ScreenShotCur=0.001; // number of the initial screenshot string FileName; // filename to save the next screenshot //+-----------------------------------------------------------------------------+ //| expert start function | //+-----------------------------------------------------------------------------+ int start() { if(ScreenShotStep>0 // is it necessary to make screenshots? && ScreenShotStart<=Time[0] // is it time for screenshotting? && NextScreenShot<=Time[0] // is it time to make the next screenshot? && ScreenShotCur*1000<=ScreenShotMax+1) // have all screenshots not been made? { // compose the filename and save the screenshot under it FileName=FilesPrefix+StringSubstr(DoubleToStr(ScreenShotCur,3),2)+".gif"; WindowScreenShot(FileName,800,600); // give a prompt Comment("Saved file "+FileName+ "\nThere are "+DoubleToStr((ScreenShotMax-ScreenShotCur*1000),0) +" pcs. left"); // shift the data and the counter to the next screenshot ScreenShotCur+=0.001; NextScreenShot=Time[0]+ScreenShotStep*Period()*60; } if(ScreenShotCur*1000>ScreenShotMax+1) Comment("All screenshots are saved"); return(0); } //+-----------------------------------------------------------------------------+
ここでは、チャンネルがブレークスルーされるのが可能です(チャンネルはきっちり正確に描画されていませんが、価格は確かに週間チャンネル境界に到達しています)。インディケータがどのように動作するか見ることができます。チャンネルは次のバーで反転し、実質上週間チャンネルと一致しています。
これが起こったのは、新規の極値が形成され、インディケータがどのように動作するかが正しくそれを処理したためです。ただし、数本のバーしか通貨せず、誤った位置に戻り再び反転します。
それは、新規クオートが極値点を通常の内部ポイントに変え、インディケーあがその変更を処理したためです。次のバーでは新しい反転が起こります。
2~3バー先で、また反転が起こります。
このチャートでは、Barishpolets の移動チャンネルを形成する別の『極値』を確認できます。2つの近い極値がチャンネル境界の一つを設定しますが、このチャートにはきわめて明確な絵が見られます。短い33時間チャンネル内の価格が週間チャンネルの境界の途中にあるのです。そこからおそらく週間チャンネル内に反映し戻っていくのです。実際、それは以下のように起こります。翌日中に『予見した』絵を見るのです。
よって、非トレードスクリーンショットを作成するによって、インディケータ SHI_Channel_true:の合理的な評決をもたらすことができます。:それはひじょうに『遠慮がちな』ツールである。本格的な適応なしに私のデポジットを委ねるのはためらわれました(これは私が2チャンネル法を作成した理由の一つです)。
おわりに
考察したコードの適用フィールドはインディケータのの検証専用ではありません。トレード用 EA にも同様のメカニズムを入れることができます。その場合、デバッグ済みコードを『シールする』ことと、EA のシグナル計算用に使用するインディケータに対して EA のトレード結果を分析するためにこの EA と連携する EA やインディケータの動作履歴を蓄積することの両方が可能となります。これは実アカウントで EA トレードのデバッグ速度を上げます。
提案のインディケータ検証方法の重要な特性はスクリーンショット機能です。数多くの画像ビューワー(たとえば無料のIrfanView)ページングモードでファイルを表示することができます。PageDown を押すと、マニュアルでテスターの次のバーに進むように、次のスクリーンショットに移動します。テスターでできないが、IrfanView で簡単にできることは、先行バーに移動することです。PageUp を押せば、『履歴を遡ります』。もう一度押すと、より深い履歴にいきます。これにより、インディケータの動作を調査、研究することができ、正しく動作しない理由を見つけ出すことができるのです。
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/1534
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索