MetaTrader 5 ターミナルのストラテジーテスタ内でティック作成をするアルゴリズム

MetaQuotes | 19 11月, 2015

Expert Advisorsの作成-MQL5での自動トレーディングシステム

MetaTrader 5 ターミナル完全自動化戦略(売買ロボット)を開発するための統合開発環境があります。それは人間の干渉なしにトレードを行いますこの売買ロボットのまたの名を Expert Advisorsと言います。 MetaTrader 5ターミナル用Expert Advisors とテク二カルインディケータは MQL5 言語を用いて書かれます。それは最新のプログラム言語のメリットをすべて備えるものです。

MQL5 でプログラムをデバッグする機能により可能な最大セキュリティレベルでコード作成ができますが、必要があってもこれは収益性のあるトレーディングシステムを作成するための条件に過ぎません。過去データの大きな期間をとおしてポジティブな結果を示すことのできるトレーディングシステムは堅牢と呼ばれそれは英語の故障やエラーに対して寛容であるという意味の『堅牢』からきています。


トレーディング戦略の検証

みなさんの資本を Expert Advisorに委託する前にポジションをオープンとクローズするルールと資金管理のルールが収益予想ができるか確認する必要があります。これを検証するもっともシンプルな方法は利用可能な履歴データを利用して Advisor の動作をシミュレートすることです。

MetaTrader 5 クライアントターミナルは特別な統合コンポーネントを有します。それは履歴データを処理する Advisorの取得結果に対するストラテジーテスタです。日の間隔における Expert Advisor のオンタイムの実行プロセは Expert Advisorの検証と呼ばれます。このオンタイムの検証により Expert Advisorの堅牢性に関する結論を導くのに必要な大量の有用な情報がもたらされます。

こういった結果を信用するには検証プロセスができるだけ実際の通貨環境に近くモデル化する必要があり、そこで Expert Advisor が実行されます。MetaTrader 5 テスターは各インスツルメントに対するスプレッドの履歴値を用いて価格のティックモデルによるティックを使用します。そこではトレード処理が行われます。


ストラテジーテスタの短い歴史

MetaTrader 3

最初のストラテジーテスタは MetaTrader 3 に初めて登場しました。これは現代の基準では比較的シンプルなテスターでした。バーでの価格発展モデル3個を基に検証を行いました。

価格のモデル化はつねに検証されるタイムフレームのバーを基にします。低い方のタイムフレームからの情報は使用されません。MetaTrader 3 ターミナルからのテスターには多くの欠点がありました。遅い検証スピード、正確性の低さ、ニュ力パラメータによる Expert Advisor の最適化ができないことです。

MetaTrader 4

MetaTrader 4 ターミナルは第三のターミナルに代わり新しくコンパイルされた言語 MQL4 (以前のMQL-II が翻訳されました)をインクルードしました。またまったく新しい検証方法を取り入れました。ここで検証は3とおりのモードで実行することができました。

第三番目のターミナルのテスターとの重要な違いは MetaTrader 4 ターミナルの戦略検証はトレードシミュレーションに最新の利用可能なタイムフレームの価格データを使ったことです。分履歴があることで検証される期間をとおして検証結果はオンラインで取得される結果に最大限近いものです。タイムフレームがないとバー内の価格発展のシミュレーションが MetaTrader 3のテスターターミナルにおけるものと同じ方法で行われます。

また 遺伝的アルゴリズムとともに入力パラメータの直接係数によって最適化を行う機会を得ました。これは最適化プロセスをかなりスピードアップする機会を与え、特に大きい入力パラメータ数を持つ戦略に対するものです。これで 視覚領域で実際の検証を行うことが可能となりました。これは大きな一歩です。トレーダーはこれをありがたく思ったものです。

第5世代の新しい MetaTrader ターミナルは先行ターミナル設計から得た経験を基に作成されました。そしてこれはストラテジーテスタを採用しました。これでマルチ通貨戦略を検証することができます。すなわち同時に複数インスツルメントでトレードをする戦略です。

戦略の最適化はいまや利用可能なプロセッサコアすべてだけでなく LAN やグローバルなインターネットのネットワークにある他のコンピュータに入れられたリモードエージェントでも行うことが可能となりました。これによりテスターのパワーを構築し、 MQL5言語で直接クラウド計算を行うことができます。それは以前にはアクセスできないものでした。

ただ MetaTrader 5ターミナルでの検証プロセスの基本理解のため、ストラテジーテスタの価格のモデル化がどのように行われるか理解することは重要です。


ティック生成のアルゴリズム

MetaTrader 5 ターミナルのストラテジーテスタでは検証において価格モデルのモードを1つだけ使用します。-使用シンボルの分のタイムフレーム上の既存履歴データを基にしたティックの生成MetaTrader 4 の残りのシミュレーションモードは消去されました。なぜなら高速であるにもかかわらず提供する検証の精度が低かったためです。

タイムフレーム M1 を使うことで、上位のタイムフレームを基にしたティックのシミュレーションとは対照的にエラー数が最小のひじょうに正確な価格動向のシミュレーションができます。. 結果、 MetaTrader 5 ストラテジーテスタの価格モデルのエラーは取るに足らないもので、シミュレーションされた価格と現実に生じる価格との差は分足バーのスケール内に過ぎません。

ローカルおよびリモートエージェントで最適化を行う機能はこの方法では検証時間の増加を補うことができます。ディック生成は整数形式でキャッシュされた分入力を基にしています。そのためティックの生成はひじょうに迅速に行われます。

必要な全タイムフレームのバーは、生成されたティックを受け取るとテスターの履歴データベースで通常方法(クライアントターミナルとちょうど同じように)で形成されます。分足バーのティックボリューム1はどの生成の影響も受けません。-それはクローズのボリュームで書かれます。

ティック2つのバーも作成されません。-最初のティック値はオープンとして記録され、それから クローズの値を持つティックが ひとつ記録されます。

ティックを3個持つバーはスキームに従って作成されます。3本のティックバーに対してはバー発展のパターンは4とおりしかありません。

  1. 1方向に行き オープン レベルを返します。

  2. 1方向に行き、反落し、 オープンレベルに到達します。

  3. 1方向に行き、反落しますが オープンレベルに到達しません。

  4. 1方向の複数ポイント


サポートポイント

バーに3個以上ティックがあれば、まずサポートポイントが作成されます。サポートポイント数はティックボリューム以上にはなりません。始値はサポートポイントを数えるのに含まれません。それは開始点だからです。サポートポイントの最大数-11

サポートポイントは開始のヒゲ、ろうそくのスケール、と終了ろうそくのヒゲの間に分布します。

ティック数に応じてサポートポイントの分布は以下のようになります(開始ヒゲ-ろうそくの範囲-終了のヒゲ)。

    3 - 5 - 3
    2 - 6 - 2
    2 - 5 - 2
    2 - 4 - 2
    2 - 3 - 2
    1 - 4 - 1
    1 - 3 - 1
    1 - 2 - 1
    1 - 1 - 1

ろうそくがひげの一つをもたなければ、これらヒゲのサポートポイントはろうそくのおおきさに与えられます。

ろうそくの範囲はサポートポイントの奇数によって生成されます。範囲がサポートポイントの偶数を持つと、『余分な』ポイントがヒゲがすげに2ポイント持つ条件でヒゲの1本に与えられます。そうでなければ『余分の』ポイントはただ消えるだけです。

サポートポイントの値はサポートポイント価格とろうそくの始値の差を表します。以下はブル(白)型ろうそくに対するサポートポイントの理想的な分布(3-5-3)です。

ベア(黒)型ろうそくには 3-5-3 パターンのサポートポイント生成は同様です。


ろうどくが dojiであればそれは Close == Openで、ひとつ前のろうそくが解析され、ひとつ前のろうそくが上昇していればこの doji は下降ろうそくとみなされます。

ヒゲが3個のサポートポイントを用いて生成されており、ヒゲの 3 / 4 のサイズの整数値とヒゲの 1 / 2 のサイズが等しければ(これは始値 安値 または 始値高値 の差が2ポイント以上でないとき起こります)以下のようにヒゲの変化が起こります。

ヒゲが2個のサポートポイントで生成されていれば、制御ポイントは次の方法で整列されます。

終了のヒゲは同様の方法で生成されます。


低値から高値へのサポートポイント地盤の形成

ろうそくの範囲は衝撃はによって作成されます。波の数は次のように計算されます。

波の数 = (範囲内のサポートポイント数 + 1) / 2.

たとえばろうそくの範囲内にあるサポートポイント数が5(図 3-5-3)、であれば3波 = (5 +1) / 2が形成されます。

各衝撃波はポイント表示の長さステップ を持ちます。それは以下の式で計算されます。

ステップ=(高値 - 安値-1)/(波数)+1

たとえばろうそく範囲(高値-安値) = (1.3113 - 1.3100) = 0.0013 は13 ポイント。波長ステップ = (13-1) / 3 +1 = 5 ポイントです。

衝撃ステップポイントは 1 ポイント分ロールバックされます。のちにサイクルでサポートポイントの位置が計算されます(ブル型ろうそくに対して)。

prev=low
cycle 
    n1=prev+step
    n2=prev+step-1
    prev=n2

ここで

このアルゴリズムを 3-5-3 スキームのブル型ろうそくに適用します。そこで波数は3、ステップ = 5 ポイント、ポイント= 0.0001です。

  1. 第一ステップ変数 prev = Low = 1.3100、サイクルに入ります。
  2. 最初の波に対するデータを計算します。
    • ポイント n1 = prev + step = 1.3100 + 5 * 0.0001 = 1.3105とポジションを計算します。
    • ポイントn2 = prev + step-1 = 1.3100 + 5 * 0.0001-1 * 0.0001 = 1.3104とポジションを計算します。
    • 値 n2: prev = 1.3104 をprev 変数に割り当てます。
  3. 第二波に対するデータを計算します。
    • ポイントn1 = prev + step = 1.3104 + 5 * 0.0001 = 1.3109とポジションを計算します。
    • ポイント n2 = prev + step-1 + 5 = 1.3104 * 0.0001-1 * 0.0001 = 1.3108とポジションを計算します。
    • 値 n2: prev = 1.3108 をprev 変数に割り当てます。
  4. 第三波に対するデータを計算します。
    • ポイント n1 = prev + step = 1.3108 + 5 * 0.0001 = 1.3113とポジションを計算します。
    • サイクルを抜けます。 prev = n2 = 1.3112

上記はすべて描画で分かりやすく表示しています。

ベアー型ろうそくに対するサポートポイントの計算は同じ方法で行います。

prev=high
cycle 
    n1=prev-step
    n2=prev-step+1
    prev=n2


ティックの生成はサポートポイントを基に実行されます。

サポートポイント間の中間ティックは次のルールに従って生成されます。


ティックシーケンスの確認

結論としてティック履歴を比較します。2010年5月13日 13:00~13:30にMetaQuotesデモサーバーに記録されたもので、MetaTrader 5 クライアントターミナルのテスターによって作成されたティックを持ちます。Expert Advisor はエージェントログにティックを記録するために使用されました。

//+------------------------------------------------------------------+
//|                                                  Write_Ticks.mq5 |
//|              Copyright Copyright 2010, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+

input datetime start=D'2010.05.13 13:00:00';
input datetime end=D'2010.05.13 14:00:00';

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   MqlTick tick;
   datetime time=TimeCurrent();
//---
   SymbolInfoTick(Symbol(),tick);
   Print(time,tick.bid);
//---
   if(time>end) ExpertRemove();
//---
  }

ティック履歴は記事 Creating tick indicatorsで述べられているインディケータを使用してオンラインで収集されました。

ティックシーケンスは両方、テスターからのものとファイルに格納されたもの、はチャートに表されています。検証中に取得されたティックはグリーンで、トレードサーバー MetaQuotesデモで取得されファイルインディケータに記録されたティックはブルーで表されています。

グラフ上の任意の点にマウスを合わせるとポップアップウィンドウ内で各ティックの情報を読むことができます。

グラフは明らかにMetaTrader 5 クライアントターミナルテスターのシミュレーションティックの質が履歴データにおいてExpert Advisors を適切に検証することができることを示しています。