![ターミナル MetaTrader 4 のテスター:これは知っているべきです](https://c.mql5.com/i/articles/overlay.png)
ターミナル MetaTrader 4 のテスター:これは知っているべきです
はじめに
金融市場での仕事はトレーディングシステムなしでは不可能です。トレーダーはポジションオープンとクローズの規則を作り出すことに多くの時間と労力を遣い、経験的にトレーリングストップによりそのポジションを修正する方法を選択します。ここで異なる価格分野の知識が利用されます。そして、戦略が創り出されるとき、まず初めに行うことは履歴データ上で機械的なトレーディングシステム(MTS)を検証することです。それは、テスターがあらゆるプログラムの中で最重要のコンポーネントであることを意味します。
2タイプのモデル化
テクニカル分析 (TA) のためのプログラムが必ずしも検証オプションを持つとは限りません。ターミナルすべても持つとは限りません。プログラムがテスターを持つと述べられており、検証オプションを持っていたとしても、エラー、構造的制約、禁止事項がある可能性があります。ターミナルに対するテスター開発の際、事前に構造的ソリューションを持たせることがひじょうに重要だったのです。それは将来の知識を基にした全種別の戦略の存在を妨げるかもしれないものです。戦略のプログラム検証方法は2とおりあります。
- すでにできているバーを基にして、事前にデータファイルを準備します。それには価格、インディケータ、パラメータの必要な値がすべて入っているのです。そしてこのファイルをテスターに送ります(テスターは将来を少し調べる理論的機能で必要なシーケンスを作成します)。この情報は、価格バー形成をモデル化せず、すでにできたバーの形で受け取られます。
- モデル化された価格のみを持つファイルを準備し、実践と同じように価格変化(価格ティック)をテスターのエントリに送ります。ここではテスターは本質的になにも将来を持ちません。
三角形『現在時刻』が場所を示します。ここでテスターは現時点に配置されるのです。第1のケースでは、テスターがデータを処理した過去の時間(Last)とテスターが動作する将来時間(Future)を見ます。過去、将来どちらもすでに計算され(インディケータ、終値、始値、高値、安値)、テスターはこのシーケンスに従うだけです。そして将来を見る可能性(実際の、またはエラー)があれば、検証結果は徹底した検証が必要です。既知の可能性を終了することは、他の可能性がないことを保証するものではありません。これはテスター開発者やユーザーにとって最終的に一定の問題となります。
第2のケースでは、過去時間のみがあり、実質上の将来(黒い正方形)はありません。この方法では、われわれはつねに過去の情報しかなく、実取引同様に将来の情報はなにもありません。テスターでの新規ティック(価格変化)のたびに、現在で動き、現在時の三角形が新規にわかっている時間で右に移動し、新しい価格を受け取ります。それぞれ新規ティックは「現在」を作り出し、「過去」に関する情報を増やし、まだその前に未知の暗い「将来」があります。この場合、テスターは実質上の将来を見る機能はなにもなく、誤りにかかわらず、トレーダーは戦略を書くときコミットする可能性があります。
まさにこれが2つの方法の違いです。テスター作成の第1アプローチは、架空のシンプルさで迅速な検証を行い、第2のアプローチは書かれた戦略すべてが同等の価格変換でリアルタイムの取引とまったく同じように作用することを保証するのです。テスターのためにモデル化されたシーケンスが、バーの状態のスナップショットを持ってファイル(fxt ファイル)に格納されるのはそのためです。そのファイルはメニュー『ファイル』→『オフラインで開く』でつうじょうチャート同様に開くことができます。
テスターファイルは文字 G (generated=生成された)を持つアイコンで印がついており、モデル化タイプ、モデル化された価格変化、バー本数やタイムフレーム数についての情報を提供します。
たとえば、ファイル EURUSD M15 を開けば、15分足バーがテスターのためにモデル化された方法が表示されます。
![](https://c.mql5.com/2/14/modellingfxtsample.png)
この画像は15分足のタイムフレームでバーの進捗状況を表示しています。の検証時、テスターはこの15分足ろうそく足(2006.04.21 10:00)をまさにそのシーケンスで確認したのです。1分足バーの価格変更の数は検証中のろうそく足変化数に等しくなっています。各時点でテスターは、正確な始値(固定され Open[0] に等しい)、現 High [0] および Low[0] に等しい正確な高値と安値(バー進捗期間で変化する可能性があります)、そして最後にわかっている価格で、現価格Close[0]に等しくバーが終了する前に変化するビッドを確認します。ボリュームも、ボリュームのグリーンのヒストグラムから明らかなように、シンプルなグラフのように最大限正確にモデル化されます。赤色の破線は期間1のインディケータ「移動平均」(単純移動)を表しています。この移動平均は検証中の各瞬間における「クローズ」のポジションを表示しています。
重要事項!MetaTrader 4 のテスターは価格変化をすべて処理し、将来をしらべる方法は一つも残しません。
検証対象シンボルの異なるタイムフレームにおけるモデル化
MetaTrader 4 のテスターでは、検証されるタイムフレームだけではなく、その他のタイムフレーム-もっと高いものや低いもの-も確認することができます。タイムフレーム EURUSD M15 で Expert Advisor を検証する場合、EURUSD H1 や EURUSD M5 のインディケータ値を見ることも可能です。また、有効なタイムフレーム EURUSD で現ゼロバーの高値および安値を確認することもできます。本日の高値を取得する必要がある場合、iHigh(NULL,PERIOD_D1,0)の値を閲覧するだけでよいのです。それはオンライン取引のようなものです。そして、どの期間でを検証するか、どのタイムフレームのチャートにリアルタイムモードでそれをアタッチするか、違いはありません。
よって、テスターのタスクは現タイムフレームのみならずその他必要なタイムフレームすべてを正確にモデル化することなのです。このタスクは次のような方法でテスターで行われます。:現ゼロバーの進捗だけがモデル化されるのではなく、別のタイムフレームすべてが同様にモデル化されます。新規ティックを受け取ることで、各タイムフレームのゼロバー条件が変化し、すべては同期して行われます。以下がその画像です。
![](https://c.mql5.com/2/14/modelmulty4.png)
ブルーは完了済みバーを、グリーンは変化中のゼロバーを示しています。図 +1 は新規ティック受け取りを示しています。各ティックは必要なモデル化ずみタイムフレームすべてで迅速に受け取られます。確認のため、シンプルな Expert Advisor である CheckModelling.mq4 の検証を開始します。それは各時点でテスターに阿智シテ有効な価格を表示しています。
リクエストされたタイムフレーム(価格だけでなくボリュームも)はすべて正確にモデル化されています。テスターは、実践同様、各タイムフレームで同期の価格進捗を確認します。
15分足タイムフレームの安値は、もっと高いタイムフレームの安値 とは異なることは明らかです。高値についても同様です。ただし、全タイムフレームにおける価格ビッドは新規ティック受け取り時には同じです。
重要事項: 検証されるシンボルの全タイムフレームも正確にモデル化されています。-始値。高値、安値、終値は100% 正確にモデル化されています。高いタイムフレームのボリュームも100% 正確にモデル化されています。
その他シンボルのモデル化価格
履歴上での正確な検証のためモデル化されるデータ量はときとして大量で、メモリやプロセッサのリソースをもっと必要とすることもあります。MetaTrader 4 のテスターではポートフォリオ検証の実行はできませんが、コンピュータの技術の進歩は非常に速いので、おそらくすぐに、多数のシンボルについてポジションをオープンするような、複雑な戦略を正確に検証できるようになることでしょう。それでもなお、MetaTrader 4 のテスターでは検証対象のものとは異なる別のシンボルの価格情報を受け取ることはできます。ただこの場合、モデル化は行われず、データがそのまま抽出されるだけです。ゼロバーは次の手順の最初に取り入れるためシンプル化されます。:High[0]=Low[0]=Close[0]=Open[0], Volume[0]=1。これにより、バーの最初で価格を知ることができます。 しかし、最後に価格はありません。確認のため、『ティック毎』モードで EURUSD についてシンプルな Expert Advisor を検証します。
//+------------------------------------------------------------------+ //| CheckModelling.mq4 | //| Copyright © 2007, MetaQuotes Software Corp. | //| https://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "https://www.metaquotes.net/" //---- input parameters extern int DayS=21; extern int MonthS=4; extern int YearS=2006; extern int HourS=10; extern int MinuteS=00; extern int CounterS=20; int counter; int start() { //---- if (counter>CounterS) return; if (Year()<2006) return; if (Month()<MonthS) return; if (Day()<DayS) return; if (Hour()<HourS) return; if (Minute()<MinuteS) return; Print("My time frame "," Open=",Open[0]," High=",High[0]," Low=",Low[0], " Close=",Close[0]," Volume=",Volume[0]," Bid=",Bid); Print("30 minute frame "," Open=",iOpen(NULL,PERIOD_M30,0)," High=",iHigh(NULL,PERIOD_M30,0), " Low=",iLow(NULL,PERIOD_M30,0)," Close=",iClose(NULL,PERIOD_M30,0), " Volume=",iVolume(NULL,PERIOD_M30,0)," Bid=",Bid); Print("1 hour frame "," Open=",iOpen(NULL,PERIOD_H1,0)," High=",iHigh(NULL,PERIOD_H1,0), " Low=",iLow(NULL,PERIOD_H1,0)," Close=",iClose(NULL,PERIOD_H1,0), " Volume=",iVolume(NULL,PERIOD_H1,0)," Bid=",Bid); Print("4 hour frame "," Open=",iOpen(NULL,PERIOD_H4,0)," High=",iHigh(NULL,PERIOD_H4,0), " Low=",iLow(NULL,PERIOD_H4,0)," Close=",iClose(NULL,PERIOD_H4,0), " Volume=",iVolume(NULL,PERIOD_H4,0)," Bid=",Bid); counter++; //---- return(0); } //+------------------------------------------------------------------+
モデル化中のインディケータ計算
10年前、家庭用コンピュータの不十分な性能とと作業ステーションのせいで、ソフトウェア開発者は制約を課されていました。限られた処理メモリ、100 MHz に劣るプロセッサ周波数、これらすべてが空間効率の最もよい計算方法とトレーディング戦略の検証しか許容しませんでした。イントラバー検証などまったく存在せず、必要なインディケータ計算はすべて事前に計算する必要があり、準備済みの変化しない形式で検証が行われました。そのころは、これが唯一の解決法であり、検証に制限を課しました。この方法では、バーがクローズする瞬間にのみ正しいインディケータ値を受け取るのです。ゼロバーでこのデータを使用することは、実際将来を少し読むことを意味します。
MetaTrader 4 のテスターは計算済みデータを受け取りません。モデル化された価格進捗を取得すだけで、新たに受信する価格を基に、必要なインディケータがすべて検証中に計算されるのです。すなわち、インディケータはすべてオンライン処理中同様に計算されるのです。これがテスターの十分な利点ですが、インディケータのアルゴリズムが最適でなければ、EA 検証は実質上速度を落とす可能性があります。テスターでのインディケータの算はターミナル同様迅速で、最適化されていないアルゴリズムは目に見えません。ただ、何百万( 1999 年からの EURUSDの1分足履歴には約300万本のバーがあります)というバーを計算している間テスター MetaTrader 4 では非最適性は明確になります。1分足バーのティック毎のモデル化 は、1件でなく複数のティックを出し、それぞれでテスターが計算を行うことを忘れないでください。
今日では、プロセッサはギガバイトの処理メモリを有し、数ギガヘルツの周波数で、32ビット構造が62ビットシステムに取って代わり、マルチプロセッサさえ登場しています。しかし、前世紀のタイプで処理をし、前世代の TA プログラムや MetaTrader 4 テスター開発者のデメリットを口にする人はまだ大勢います。そのような人はイントラバーモデル化を恐れ、誤ったテスター操作だと考えているのです。MetaTrader 4 のテスターはすべてのタイムフレームで正しい価格モデル化の可能性のみならず、履歴に基づく戦略検証におけるまさにこの方法の必要性を証明しています。
ビデオを見て、価格進捗とテスターのインディケータ計算を推定することができます。
重要事項:テスターは、一定のリソースを必要とする検証の実モデルを実行します。
テスターにおける正確な価格モデル化についての無知から生じるよくある質問
MetaTrader 4 は2005年7月1日に正式発表され、それ以来、異なるフォーラムで同じ質問が出、その質問は誤ったテスター操作によるものであります。以下はもっとも頻繁に出る質問で、過去数年のテスター神話から生じています。
- インディケータを使っている私の Expert Advisor はなぜ誤った場所にトレードをオープンするのでしょうか?検証が終了したら、『チャートを開く』ボタンでチャートを開き、 Expert Advisor から呼び出されたインディケータと共に、エントリとエグジットの全ポイントを反映します。ただ、履歴上で計算される所定の瞬間にインディケータ値が検証時(実際、オンライン)の値と大きく異なることが頻繁に無視されます。明確な例はインデケータ ZigZag です。EA の検証チャートを開くと、そこにこのインディケータが使われており、ZigZag の折れ目をすべてはっきりと見ることができます。そのような折れ目をゼロバー上に追跡することで、戦略からの良い利益を期待できるでしょう。テスター操作の原理を理解していない人は、そのような戦略はテスターで絶対的な利益を表示する、という誤った考えを持ちます。別の TA プログラムでは、将来はそのような戦略に対して見られるからです。しかし、利益は確認できず、その上トレードが誤った位置にオープンされるのです。ビジュアルモードで検証を開始し、EA によって使用されるインディケータをすべてにアタッチすると、幻想は消えるでしょう。これには特別な知識は必要ありません。テスターがビジュアルモードですべてを表示してくれます。以下はそのような EA-ExpertZigzag、の例です。
重要事項:テスター操作が正確かはっきりしないばあいは、ビジュアル検証を行います。思い込んでいるものではなく、実際のとおりに検証プロセスを見ることになります。
- 検証のインディケータ値とオンラインチャートのインディケータ値は異なるのはなぜでしょうか?
インディケータを書くときの誤りの一つはインディケータ値の計算の誤りと誤謬推理です。結果として、インディケータは『嘘をつき』、誤りを収集し始めます。別の言い方をすると、昨日、インディケータは同じ期間で今日とは違う値を表示したのです。このようなインディケータの誤りも、インディケータのオンライン操作で見受けられます。たとえば、15分足チャートにインディケータをアタッチし、3~4本新しいバーが出現するのを待ち、そのインディケータをもう一つアタッチしますが、別の色を使って行います。差は視覚的に非常に頻繁にみられます。以下はそのような誤ったインディケータ例です。
重要事項:インディケータのは検証中に計算されます。オンライン操作中同様で、それがインディケータのロジックないで誤りがすべて検証中に明らかになるのです。
- 私の EA は、私自身の深い履歴をインポートしたのに、なぜ高いタイムフレームで誤った価格を表示するのでしょうか。
モデル化のため、テスターは fxt ファイルからのデータを使用します。通常、この fxt ファイルは hst ファイル内の有効な履歴をもとにテスターが作成します。しかし、準備された FXT ファイルが別のタイムゾーンで作成されていたり、別のブローカーのクオートで作成されていて(またはご自身で準備し fxt ファイルのフォーマットが開いている)、この fxt ファイル内データが既存の hst ファイル内データに対応していないと、異なるエラーが発生します。通常、これはマニュアルでインポートした後や、サイド・ソースからのクオートを再変換した後に起こります。たとえば、EA が関数 iOpen(NULL, PERIOD_D1,1) または iHighest(NULL, PERIOD_D1,MODE_HIGH,20,1)を呼び出します。iOpen(NULL, PERIOD_D1,1) は昨日の始値を、検証を実行するのと同じシンボルについて依頼します。iHighest(NULL,PERIOD_D1, MODE_HIGH,20,1) は1番目(昨日の)から始まり20バー以内の高値の最も大きな値を持つ日次バーのインデックスを提供します。テスターのどちらの関数も hst ファイルからのデータを基に計算されます。そして、fxt ファイルが hst ファイルの履歴(この例では EURUSD1440.hst のデータ)に対応していなければ、テスターの価格は完全に違うものとなります。われわれは2つ異なる履歴を持っています。1つはテスター内のもの、もう1つはファイル EURUSD*hst 内のものです。
重要:正しい検証には fxt ファイルとhst ファイルの対応が必要です。サイド・ソースからのパッチインポートは望ましくありません。1999年からのクオートの分履歴を持つ標準「履歴センター」をご使用ください。「履歴センター」からの分クオートは、自動で全タイムフレームについて再計算され、『時間シフト』をなくす現アカウントのタイムゾーンに変換されます。
- クオートインポート後、高いタイムフレームのインディケータがテスターにあるのでしょうか?
ゼロバー価格のみモデル化される場合、標準値や別のバーのカスタムインディケータは hst ファイルからのデータを基に計算されます。すなわち、正しいインディケータ値は別のタイムフレームからの正しいソース価格データを使わず計算されるのです。
重要事項:検証開始前に、別のタイムフレームの必要な価格データはすべて取り出し、このデータが正しいことを確認してください。標準的な「履歴センター」からは全タイムフレームが正確です。というのも、それは自動で全期間の分データから再計算を行うためです。
おわりに
MetaTrader 4 のテスターは2000年以来、トレーディングターミナルの複数世代を書く長年の経験の結果です。トレーダーに最大限可能な正確性で戦略を検証するチャンスを提供するために、すべてが行われました。これでリアルタイムモードで取引の考えを検証するのに何カ月もかける必要がなくなるのです。テスターのオプションをすべて知ることで、時間が節約でき、正確なインディケータや EA を作成することの重要性を気づくことができるのです。
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/1490
![MQL におけるオブジェクト・アプローチ](https://c.mql5.com/2/15/499_6.gif)
![ニューラルネットワークを利用した価格予測](https://c.mql5.com/2/14/395_11.png)
![T. Demark のアプローチを考慮したトレンドラインインディケータ](https://c.mql5.com/2/15/550_16.gif)
![MQL5 - MetaTrader 5クライアントターミナルにビルトインされたトレードストラテジーの言語](https://c.mql5.com/i/registerlandings/logo-2.png)
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索