English Русский 中文 Español Deutsch Português
可視化検証:機能強化

可視化検証:機能強化

MetaTrader 4テスター | 16 2月 2016, 13:03
926 0
Andrey Khatimlianskii
Andrey Khatimlianskii
可視化検証:機能強化
本稿はストラテジーテスタをかなり現実のトレーディングに近づけるソフトウェアについて説明します。


1. モチベーション

ビルド 196 から始まり、 MetaTrader 4 クライアントターミナルは検証可視化関数を提供しています。それはまったく新しいレベルで Expert Advisor の検証管理を可能とします。今日、トレーディングのプログラマ―は自分の Expert Advisor が履歴上での処理を確認するアクションをすべて見ることができます。

記事『MetaTrader 4 クライアントターミナルにおけるExpert Advisor の検証:外面』でビジュアライザの使用方法を読むことができます。本稿ではストラテジーテスタをターミナルターミナルに近づける方法について説明します。

では、テスターの主な仕様は何か?可視化に不足しているのは何か?おそらくもっとも重要な不測は『トレード』タブの不足です。

ポジションがいくつオープンしていたか?未決注文はどのくらいすぐに実行されるのか?ポジションのストップロスは移動したか?現時点でのマージンはいくらか?マージンコールレベルに行くまでどのくらいか?こういった質問と、ターミナルの『トレード』タブのその他数多くの質問に対する答えを見つけます。ですが、検証時に何ができるのでしょうか?

本稿はこの疑問の解決のためにあるのです。

2. 技術的側面

いつものように課題定義のコード化を始めます。どんな結果を望んでいるのでしょうか?
-前述のとおり、『トレード』タブのなんらかの類似体を作る、すなわちオープンしているポジションと未決注文すべてに関する情報を可視化するのです。
-情報はつねに更新され読みやすいものであるべきです。
-プログラムはひじょうに使うのが簡単でなければなりません。 Expert Advisor と接続するのに労力はあまり必要としないことです。

ここで技術的な側面をお話しします。プログラムはどのように作成されるのか、インディケータとしてか、また外部関数ライブラリとしてか?

個別ウィンドウのインディケータがベストな解決法であるのは明らかです。それはつねに目に見え、価格チャートを作成せず、ティックごとに更新します。ただ、そうすると、インディケータを使うとき、新しい問題に直面します。それは「仮想」(検証)ターミナルではなく、通常のターミナルからオーダーにかかわるデータをすべて取り込みます。すなわち、検証中、検証自体に対する反応はなく、現在のアカウント状態についての情報を表示するのです。

今の問題を解決するために、代替策、一種の後戻りですが、を見つける必要があります。

まだインディケータを作成するつもりですが、『チャートのサブウィンドウ作成機能』の関数を作成するに留めます。それは何も表示しません、すなわちつねに「予約済み」のチャート部分を持つことになります。作成されたサブウィンドウがテンプレートの独自の名前 tester.tpl で、またはテンプレート<expert_name>.tpl に保存されるために必要なことです。

情報の表示と更新は、インクルードされたファイルを作成した関数ライブラリに割り当てられます。

3. 使用

まず、ビジュアライザを使用するチャートのテンプレートを作成する必要があります。チャートを調整し(色、グリッド、スケール)、vTerminal.mq4をチャートにアタッチし、「テンプレートを保存する」コマンドを使います。



保存前のチャート表示




ウィンドウ「テンプレートとして保存する」


可視化のために、tester.tpl または<expert_name>.tpl という名前のテンプレートが使われます。テンプレートの保存に使用されるのはこの名前です。

4. Expert Advisor との統合

ポジション情報を表示する関数は VisualTestingTools.mq4 という名前のインクルードファイルに保存されます。それは ...\MetaTrader 4\experts\include\ ディレクトリにあります。まず、それをにアタッチする必要があります。関数開始前に #include <VisualTestingTools.mq4> 行を挿入します。そうすると以下のようになります( CrossMACD_DeLuxeの例)。


...
double _Commission = 0.0; string _Comment = ""; datetime _Expiration = -1;
 
#include <VisualTestingTools.mq4>
 
int start()
  {
    if ( FastEMAPeriod >= SlowEMAPeriod ) 
      { 
        return(-1); 
      }


    int _GetLastError = 0;
...


これでプログラムのどこでもこの関数を使うことができます。そのうちの一つ、 vTerminalInit() の呼び出しは Expert Advisor の init() 関数に入れます。これはそれがオブジェクト作成と情報表示のタスクのために一度だけ呼び出されるためです。もう一つ、vTerminalRefresh() はティック毎に呼び出されます。それはオープンポジションに関する情報を更新します。以下が関数を使用する EA のコードです。


...
double _Commission = 0.0; string _Comment = ""; datetime _Expiration = -1;
 
#include <VisualTestingTools.mq4>
 
int init()
  {
    if ( FastEMAPeriod >= SlowEMAPeriod ) 
      { 
        return(-1); 
      }
    vTerminalInit();
    return(0);
  }
 
int start()
  {
    if ( FastEMAPeriod >= SlowEMAPeriod ) 
      { 
        return(-1); 
      }
    vTerminalRefresh();
 
    int _GetLastError = 0;
...


必要な変更がすでに加 Expert Advisor の CrossMACD_DeLuxe_Visual.mq4 をダウンロードすることが可能です。

5. 検証

ここで、取得したものを見ます。
最初に、Expert Advisor に新しい外部変数が追加されています。




新しい外部変数は VisualTestingTools.mq4ファイルが Expert Advisor のコードに追加されたあと、使用可能です。


その行先は直観的ですが、もっと詳しくお話しします。
Rows -画面に表示される行の最大数ほとんどの戦略では10行で十分です。
BigText -フォントを拡大したい場合は真に設定- SignalPoints -ポイント間の距離。そこから開始して、ストップロス、テイクプロフィット、未決注文の開始価格のフィールドが強調表示されます。. たとえば、SignalPoints = 10 であれば、価格がポジションのストップロスから10ポイントのとき、ストップロスフィールドが色を替えます。
MainColor -ターミナルの見出しとアカウント情報(バランス、資金など)バーの色
BuyColor -買いポジション情報の色
BuyOPColor -現行価格が逆指値買いと指値買いの開始レベルに近づくとき主要色を入れ替える始値フィールドの色
BuySLColor -価格が買いポジションのストップロスレベルに近づくとき主要色を入れ替える色
BuyTPColor -価格が買いポジションのテイクプロフィットレベルに近づくとき主要色を入れ替える色
SellOPColor, SellSLColor および SellTPColor -売りポジションに対し、それぞれ前項同様

MainColor = Black に設定し、OKを押します。エキスパートはこれで検証準備ができました。開始ボタンを押す前に、『可視化』をチェックし、結果を楽しみます。



オープポジションがなくなるまで、われわれの『ターミナル』は見出しとアカウント状況バーのみ表示します。シグナルが出現し、エキスパートがポジションをオープンするまで待ちます。




売りポジションが1番目のポジションとしてオープンしています。ごらんのように、線は赤です。

アカウント状況バーに注意を向けてください。そこにはターミナルの『トレード』タブで見慣れたものすべてがあります。情報全体がティック毎に更新され、ポジションの利益がどのように変化するか確認できます。




価格がポジションのストップロスレベルに近づくとき、ストップロスフィールドはユーザーがあらかじめ設定した色に変わります。



私にとっては、いじょうによい出来です。

6. 潜在的問題

インディケータ vTerminal で tester.tpl を利用するもうひとつの特徴をお話しします。:検証中、インディケータウィンドウを検索する関数(WindowFind())は無効化する必要があります。それは、サブウィンドウ数がコードで明示的に設定されるためです。


    win = WindowFind( "vTerminal" );
    if ( IsTesting() ) { win = 1; }


テンプレートに別ウィンドウに描かれる他のインディケータがあれば、それに関する情報全体は上側のウィンドウに表示されます。すなわち、vTerminal を一番上に入れるか、win = 1;の代わりに win = subwindow number; を書きます。

インディケータで作業する際、それ以外の問題は見つかりませんでした。

7. おわりに

すばらしい結論とするために、スクリーンショットを何枚かお見せしたいと思います。















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

添付されたファイル |
vTerminal.mq4 (0.56 KB)
MetaTrader 4 クライアントターミナルの秘密:インディケータ編 MetaTrader 4 クライアントターミナルの秘密:インディケータ編
自分のインディケータを書こうと思っていますか?おそらくインディケータの中で必要とするものはすでにクライアントターミナルに埋め込まれていることがおわかりになるでしょう。では、一から始める理由はありますか?統合されたインディケータ特性の概略テーブル;インディケータをチャートにアタッチする特別な機能とメソッド;レベル構築;異なるタイムフレームについてのインディケータ表示。
トレーディング戦略 トレーディング戦略
トレーディング戦略を分類するカテゴリーはすべて完全に任意です。以下の分類はトレーディングへの可能な方法の中にある基本的相違を強調するためのものです。
トレーディング初心者の10の「エラー」? トレーディング初心者の10の「エラー」?
本稿は既存の条件-、従来の『アラート』のみならず、またあまりそればかりでなく、価格、現在の各オーダーの利益/損失値、に従い、相互関連するオーダーの一連のオープンやクローズとしてのトレーディングシステムを構築する方法を立証します。ここではそのような基礎的なトレーディングシステムの典型的作成法を提供します。
初心者のトレーディングにおける基本エラー 初心者のトレーディングにおける基本エラー
初心者がトレーディングでおかす基本的エラーがあります。:市場開始でトレードする、利益を得ようとやけに急ぐ、損失を出しているポジションにロットを追加する、最適なポジションで開始しながらポジションをクローズする、リベンジを行う、もっとも好ましいポジション、「永遠に買った」の原則でトレーディングを行う、初日に収益性のある戦略的ポジションをクローズする、逆ポジションをオープンするアラートがでたときポジションをクローズする、疑う。