![MetaTrader 4 クライアントターミナルにおけるExpert Advisor の検証:外面](https://c.mql5.com/i/articles/overlay.png)
MetaTrader 4 クライアントターミナルにおけるExpert Advisor の検証:外面
検証を行うには、まだ開いていなければ『テスター』ウィンドウを開ける必要があります。これを行う方法は複数あります。:メインメニューの『閲覧-ストラテジーテスタ-』へ行き、Ctrl+R を押し、ツールバーの『ストラテジーテスタ』をクリックします。エキスパートがアタッチされているチャートのコンテキストメニューを使う(『Expert Advisor-ストラテジーテスタ』)か、F6 を押します。
検証前に Expert Advisor が選択されている必要があります。ポップアップメニューから、もしくはマウスを使って『ナビゲータ』ウィンドウからドラッグし『テスター』ウィンドウにドロップして選択します。シンボルも同じ方法で選択できます。:ポップアップメニューから、もしくは『銘柄』ウィンドウからドラッグして選択します。を押すと、エキスパート、シンボル、アクティブなチャート期間が同時に選択できますが、エキスパートはこのためにアクティブなチャートにアタッチされている必要があります。
履歴データのモデル化方法も選択する必要があります。トレーディング戦略の中にはバー内の価格変化に依存しないものもあり、それらはすでにできているバーでトレードを行います。新規バーの表示は現在バーが完全に形成されたことを示します。それは『始値のみ』と名付けられたモデル化モードのエキスパトです。現在バーのデータがエキスパートでトレード決定に使われる場合、『始値のみ』モードのそのエキスパートの検証は不十分です。一般的に、バー完了で動作するエキスパートは次のバーが開始するかどうか確認するために以下のコードを持ちます。
static datetime prevtime=0; ... if(prevtime == Time[0]) return(0); prevtime = Time[0];
その他、『ティック毎』モデルが使用されます。検証には『ポイント制御』モデルはお薦めできません。これは最適化モードで動作するエキスパートの荒い推定のためのモデルです。最適化の遺伝的アルゴリズム後がストラテジーテスタに追加されたら、『ポイント制御』モデルはもはや関係はなくなります。履歴データのティック毎モデルが適切であるためには、できるだけ多くの1分データを持つことが必要です。利用可能な1分データがなければ、5分データがモデル化に使用されます。それも利用不可な場合は、15分データが使われる、というぐあいです。そのたびにモデル化の失は低下します。
『開始』ボタンがクリックされると、FXT 拡張子を伴ってキャッシュされる価格を変更する検証シーケンスが初めて生成されます。FXT ファイルはすべて<client_terminal_dir>\tester\historyディレクトリに格納され、タイプ名が SSSSSSPP_M.fxt となります。ここで
- SSSSSS -検証対象シンボル
- PP -分単位の検証対象シンボル期間の値
- M -検証モデル(0 -ティック毎、1 -ポイント制御、2 -始値のみ)
In FXT-ファイル見出し。シンボルおよび現アカウントの現在設定が書かれています。クライアントターミナルは、トレードサーバーからこれら設定を自動的に受信します。そのため、検証では実サーバーの機能がシミュレーションされます。:マージンコール、ロールオーバー、コミッション、税金の計算。その時点で接続がなければ、クライアントターミナルが最後に接続されたIトレードサーバーに対して直近のわかっている設定が使用されます。FXT ファイルは開始ボタンが押されるたびに新しく作成されます。ここで疑問が生じます。:毎回新しく作成されるなら、なぜこのファイルを使用するのか?まず、コンピューターの RAM に適さないティックデータが数多くあり、そのため外部ストレージからはチャンクでデータを取る必要があります。それは最適化には特に重要なことです。次に、テスターがどのような種類のシーケンスを作成するか確認できることです。このファイルは、バーの動きがどのようにモデル化されているか確認するために、個別に開くことができるのです。
![](https://c.mql5.com/2/13/offline_rus.png)
では、すでに既存のデータをなぜ再計算するのでしょうか?
- これにはまず、直近の履歴日付で検証を行う必要があっても、データが数日分日付の範囲外に出ることがあります。
- 次に、ティック毎のデータが最初に生成されるとき、類似のタイムフレームのデータが検証シーケンス生成時までにサーバーからダウンロードされているとは限らないことです。問題は、リクエストされたデータがすべて送信されたことをクライアントとに通知しないため、データの送り出しが同期していないことにあります。ただし、リクエストされたデータがすべて1~2分で受信されることを確認することはできます。
- その次、これがもっとも重要なのですが、一人のユーザーが異なるブローカーのところにアカウントを持つことができることです。そして、ことなるブローカーはことなる取引条件(FXT ファイルの見出しには、トレードサーバーの動作をシミュレーションするひじょうに重要な情報が含まれていることを思い出してください)だけでなく、異なる履歴データボリュームと数量を提供するのです。この場合、検証で別のアカウントに切り替えた後、データを再計算することを強くお薦めします。
- さらに次には、クライアントターミナルで使用できる異なるソースからの異なるタイムフレームの不整列データがある、というのが頻繁に起こることです。クライアントターミナルが、基本の通貨ペアに対して大容量の履歴をダウンロードする関数を提供された後、この問題はひじょうに切実なものとなります。実ブローカーと連携している数多くのトレーダーは MetaQuotes サーバーからデータをダウンロードしています。これはモデル化のクオリティーに影響を与えるひじょうに重要な点です。この問題に注目できるよう、テスターは異なるタイムフレームに対して不整列なデータのエラーに配慮します。それはどのような種類のエラーなのでしょうか?
日付『から』と『まで』が使用されるなら(『日付を使用する』の対応するボックスにチェックします)、検証シーケンスがどのように形成されるか説明の必要があります。検証シーケンスは『から』の日付から開始しません。ティック生成を開始する前に、テスターはシーケンスの冒頭に約4,000の既成の非モデル化バーを入れます。初期バーが少ない場合は、履歴の始めにあるバーがすべて使用されますが、それは100以上です。『から』日付が入れられるのが履歴全体の始めに近すぎると、hチック生成は指定日付後に開始することになる可能性があります。検証開始前に少なくとも100本のバーを出す必要があります。シーケンスの最初のバーは Expert Advisor が前日データを基にインディケータを正確にカウントするのに必要なものです(これは特に移動平均にかかわるものです)。以下は 2002.08.01 に設定された初期日付を持つモデル化されたティックにおけるバーの進展についての作成シーケンス例です。
モデル化は『まで』日付に達すると終了します。終了日付の 0:00 から開始する価格データは検証に関与せず、先生されるシーケンスにも入りません。指定のデータが履歴範囲外であったり、『日付を使用する』が無効である場合は、全履歴(最初の100バー以外)が生成対象となります。チャート内のバー高値設定はモデル化に対して何の意味も持ちません。ディスクに格納されている全履歴が使われます。
検証シーケンス生成中に履歴データが100バーより少ないことがわかると、テスタージャーナルに『TestGenerator:不十分なデータです』のメッセージが表示され、テスターは起動しません。データがまったくないということもあり得ます。そういうときは、データ範囲指定が正確でなければ、テスタージャーナルに『TestGenerator:不十分な履歴データがありません』のメッセージが表示されそのような場合には、必要な分量の履歴データを入れる必要があります。それを入れるには、対応するチャートを開き、PageUp ボタンを使ってデータをマニュアルで送り出し、そして『再計算』を有効にしてテスターを再起動します。テスター起動前に、検証するエキスパートの入力を指定する必要があります。デポジット通貨には特に注意が必要です。たとえば、MICEX タイプのアカウントが開かれている場合、RUB (このシンボルはポップアップリストにたかってもマニュアルで入力できます)がデポジット通貨に指定されていると 、GAZPについてのエキスパートの検証は何の結果ももたらしません。
![](https://c.mql5.com/2/13/parameters1.png)
『インプット』タブは、外部変数が宣言されている場合のみ表示されます。インプット値の異なるセットは異なる名前(『保存する』ボタン)で設定ファイルに保存され、のちに使用されます(『ロードする』ボタン)。
![](https://c.mql5.com/2/13/parameters2.png)
『Expert Advisor を変更する』ボタンをクリックすると、MetaEditor を呼び出します。そこでは検証中のエキスパートが編集のために開かれます。このボタンは、他のボタン同様、テスター起動時はブロックされています。ただし、MetaEditor はエキスパートが検証中でもまだエキスパートのコンパイルを許可します。次テスターを起動する際は、再コンパイルされた Expert Advisor が自動的に検証するためリロードされます。
検証中、エキスパートはリロードできないことをしっかりと念頭に置くのがよいでしょう。時間を浪費せずエキスパートのソースコードを変更し、検証中をれを再コンパイルしたとします。検証が完了し、変更したを検証しようと胸を膨らませて『起動する』ボタンを再びクリックします。ところがどっこい、前回ダウンロードした実行可能ファイルが再び実行されてしまいます。エキスパートの新バージョンをリロードするには、『停止する』ボタンを押すか、検証が完了するまで待つ必要があるのです。そのあと初めて MetaEditor で expert advisor の再コンパイルを始めるのです。
検証が完了したら、トレード処理の矢印と検証中に使用されたインディケータが表示されるチャートを開くことができるのです。ですが、検証で使用されたインディケータがデフォルト色で表示されるという問題があります。たとえば、異なる平均期間による移動平均が使用される場合、それらはすべて赤で描かれます。それはもちろんあまり便利なものではありません。色はマニュアルで変更できますが、他の解決法もあります。アタッチされたインディケータを持ち <expert_name>.tpl (たとえば、移動平均の.tpl)のように名付けられたテンプレートが事前に作成されていると、このテンプレートは検証対象チャートが開かれるときに使われます。利用可能なテンプレートがなえれば、 tester.tpl テンプレートが適用されます。
ここではもっとすぐれた点があります。検証グラフが上述の方法で開かれると、現履歴データはその中にロードされます。検証シーケンスが取得されたばかりであれば、問題はありません。そして使われるデータが別のデータフィードから来たらどうでしょうか?幸運にも、クライアントターミナルビルド 196 で起動すると、ストラテジーテスタはいわゆる戦略検証の可視化をサポートしています。
『可視化する』にチェックがあると、サーバー―起動時にテンプレート<expert_name>.tpl または tester.tpl によって『デバックする』チャートが自動で開きます。グラフに検証シーケンスの現在の状態が表示されます。可視化率の変更はスライダーを使って行われます。左に動かすと速度は遅くなります。従って、右に動かすと速度は速くなります。一時停止をするには、"||" ボタンまたはキーボードの「ポーズ」キーを押します。一時停止後検証を続けるには、">>"か、再び「ポーズ」を押します。検証が一時停止している間、F12 を押して段階ごとのマニュアルでの可視化をすることが可能です。"+" ボタンで表示を強調、"-" で減速、"||" で一時停止、一時停止後 ">>" で再開することができます。日付を指定し、『までスキップする』をクリックします。この場合、テスターが指定日に到達するまでグラフは書かれません。基本的にそうすることで手順は速まります。検証が終わると(完了または『停止する』ボタンをクリックして中断する)、一番上の履歴データがグラフに表示されます。
検証グラフを見るとき、そのセクションでダブルクリックすると、「結果」タブと対応するポジションの選択に切り替わります。検証グラフが開かれると(『可視化する』にチェックが入っている、または『グラフを開く』がクリックされている)、『結果』タブのポジション上でダブルフリックするとグラフが対応する日付に移動します。
トレーディング戦略を最適化するには、最低ステップが2つあります。『設定』タブで『可視化する』をクリックし、『入力』タブのエキスパートのプロパティで最適化されるパラメータに対して最初と最後の値、増加値を設定します。
![](https://c.mql5.com/2/13/parameters3.png)
そのため、エキスパートにインプットがなければ、最適化できません。最適化プロセスは最適化限度を設定することで強化されます。
![](https://c.mql5.com/2/13/parameters4.png)
対応する制限に達するとすぐにテスターはパスを停止し、次の入力セットで新しいパスを開始します。ここで、制限が不成功とみなされたため終了したパスは結果リストには上がりません。負の利益もまたパスは不成功とみなされます。不成功だったパスを最適化結果リストに入れるには、『最適化結果』タブのコンテキストメニューにある『不要な結果をスキップする』からチェックを外す必要があります。
それは「ストラテジーオプティマイザが動作しない」といったようなクレームの理由に頻繁に挙げられるものです。デフォルトでは不成功な結果はリストに挙がらないようになっているのです。この場合には「NNN 結果は有意ではないとして破棄されました』というメッセ―がジャーナルに表示されます。
最適化プロセスを強化するには、結果のキャッシュを取り入れます。反復される最適化パスでテスターがキャッシュに現インプットセットに対応する結果を見出したら、見つかった結果はエキスパートを実行することなく利用されます。そのため、最適化は停止する可能性があります。同じインプットを持つエキスパートの最適化を次に起動すると、キャッシュから前回計算された結果を受け取り、テスターの中断したパスから計算を続けるることができるからです。検証データが変わっていたり、エキスパートが再コンパイルされていたり、エキスパートが使用するライブラリが置き換えられていると、オプティマイザのキャッシュはリセットされ、計算はすべてやり直しとなります。
テスターはレベル2以上のライブラリ内の変更を制御できません(すなわち、ほかのライブラリから呼び出されたライブラリ)。 これが、そのような場合にマニュアルでキャッシュをリセットする必要がある理由です。たとえば、エキスパートの再コンパイルなど。キャッシュされたデータを持つファイルは tester\caches ディレクトリに格納されます。
最適化結果をキャッシュすることで、遺伝的アルゴリズムを有効にするときにも役立ちます。最適化の遺伝的アルゴリズムは、『検証』タブにあるエキスパートのプロパティで有効化が可能です。
![](https://c.mql5.com/2/13/parameters5.png)
遺伝的アルゴリズムのパラメータは自動的に定義されます。
- 生成サイズは組み合わせ可能な全パラメータの数によって決まり、64~256 の値を採ります。
- 生成の最小数は生成サイズで決まり、15~31 の値を採ります。
- 遺伝的オプティマイザパスの最小数は 960~7936 の範囲内にあります。
- クロスオーバーの確立は 100% です。遺伝子はランダムにクロスオーバーします。個々はそれ自体でクロスオーバーすることはできません。
- 突然変異率は 10% です。
- 転確率は 10% です。
- 世代の最小数が形成されたと仮定すると、遺伝子プールが10世代のライフ寿命以内に改善されなければ、遺伝的最適化は終了します。
検証ジャーナルは \logs ディレクトリにあります。そのファイルには拡張子 .log がついています。個々のログファイルはそれぞれ個別の日に対応しています。テスターログは5日以内に自動的に削除されます。『ジャーナル』タブのコンテキストメニューから『ジャーナルをすべて削除する』が選択されていると、このタブの現在の内容が削除され、ログファイルはすべて消去されます。
検証中のジャーナルへの大量データ出力が可能なため、情報全体が『ジャーナル』タブに到達するとは限りませんが、ログファイルには必ず入ります。最適化時、ジャーナルには出力が行われません。
検証が完了すると、テスターがもう使わない RAM は空にされます。そのためには、メインメニューか Ctrl-R によって『テスター』ウィンドウを閉じるか、ツールバーで『ストラテジーテスタ』をクリックするだけで十分です。
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/1417
![初心者のトレーディングにおける基本エラー](https://c.mql5.com/2/13/173_1.png)
![MetaTrader 4 クライアントターミナルの秘密:アラートシステム](https://c.mql5.com/2/13/159_6.png)
![MetaTrader 4 クライアントターミナルの秘密](https://c.mql5.com/2/13/158_10.png)
![MQL5 - MetaTrader 5クライアントターミナルにビルトインされたトレードストラテジーの言語](https://c.mql5.com/i/registerlandings/logo-2.png)
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索