English Русский 中文 Español Deutsch Português
非標準タイムフレームでエキスパートアドバイザーをテストするには

非標準タイムフレームでエキスパートアドバイザーをテストするには

MetaTrader 4テスター | 1 12月 2015, 08:47
904 0
Dmitry Fedoseev
Dmitry Fedoseev

はじめに


マーケットの値は、テクニカル分析において、プライスチェンジ・チャート、いわゆるティック・チャートを使うにしては変動が激しすぎます。値動きを緩やかに見て、バーやローソク足チャートで分析する際は、大きなタイムフレーム使うことがあります。バー1つ1つは、ある時間間隔の始まりと終わりの値を表します。最大値と最小値の値も同じように表します。通常使用する期間、タイムフレームは次のようなものがあります。1分足と5分足、15分足、30分足、1時間足、4時間足、日足、週足、月足です。これらのタイムフレームはMetaTrader 4のツールバーに見つけることができます。


すでに標準的なものになっており、皆が使用するタイムフレームではありますが、値動きを表示する他のタイムフレームを使用することができない技術的な理由はありません。実際、技術的に可能で、ターミナルはスクリプト(period_converter)を提供してくれています。 ターミナル・ユーザーが、非標準タイムフレーム、例えば2分足や7分足、45分足、2時間足など、基本的にどんなタイムフレームでも、作成できるようになっています。そのうえ、インディケーターを加えることも可能です。しかし、ターミナルのストラテジー・テスターは、テストに標準タイムフレームのものしか選択できないようになっています。

したがって、このままでは、非標準タイムフレームを作成できますが、エキスパートアドバイザーをテストするためには使用できません。ですが、ご安心ください。非標準タイムフレームでエキスパートアドバイザーをテストすることは可能です!必要なことは、標準タイムフレームのデータを非標準タイムフレームのデータに置き換えることだけです。加えて、非標準タイムフレームのデータをいくつか使ってエキスパートアドバイザーをテストすることもできます。

主なポイント


アクション・プランは以下の通りです。

1. 新しい標準タイムフレームは非標準タイムフレームチャートに加えられていないのでオフラインで機能する追加のターミナルを準備します。

2. 十分な利用可能時間データを持って入るターミナルで、period_converterスクリプトを使用し非標準タイムフレームデータを用意します。

3. 用意したデータをターミナルへインポートしテスト準備を整えます。

詳しくみていきましょう。

1. 非標準タイムフレームのテスト用ターミナルを準備します。

追加のターミナルをインストールします。ターミナルを起動し、デモ・アカウントを開いてマーケット・ウォッチ・ウィンドウにシンボルリストが現れるまで待ちます。

アカウント情報の保存機能を無効にします。ターミナル右下にある接続ステータス・アイコンを左クリックしてログインを選択してください。”アカウント情報を保存する”オプションのチェックを外してください。ログインをクリックし、ターミナルがアカウントに接続するのを待ちます。

この作業は、ターミナルが自動的にアカウントに接続しないようにし、ヒストリー・アーカイブに新たなデータが付け加えられるのを防ぐために必要なのです。ターミナルを閉じてください。

ヒストリー・フォルダ内で、デモ・アカウントが開いたディーリング・センター名に一致する名前のフォルダを開いて全ての *.hstファイルを削除します。

2. 非標準タイムフレーム・データを用意します。

period_converterスクリプト(標準的なMetaTrader 4のターミナル・デリバリーで利用可能)を使って、EURUSDなどのシンボルに必要な1分足データが十分あるほかのターミナルで、2分足や7分足などの非標準タイムフレームを作成します。そのため、EURUSD・1分足チャートを開いてperiod_converterスクリプトを稼働させます。スクリプトを稼働させる前に、プロパティ・ウィンドウからExtPeriodMultiplieの値を2にセットしましょう。スクリプトがデータのコンバートを終了したら、ファイルに作成されたエントリ-数に関するメッセージが、ターミナル・ウィンドウの、”エキスパート・アドバイザー”タブに表示されます。以下がその例です。

"2009.03.19 18:28:09 period_converter EURUSD,M1: 25378 record(s) written"

スクリプトは後でチャートから除くことができます(スクリプトが稼働してたチャートを右クリックして”スクリプトを削除”を選択してください)。できたチャートを開きます。メインメニュー‐ファイル‐オフラインで開くを選択してください(ヒストリーデータ・コラムにあるEURUSD、M2を探してください)。同じように、7分足タイムフレームを作成します(period_converterスクリプトを稼働させる前に ExtPeriodMultiplierの値を7にセットしてください)。

チャートデータを*.csvファイルに保存するスクリプトを作成します(s_ExportChartToCSV_v1.mq4を添付しています)。

int start(){
   int h=FileOpen(Symbol()+Period()+".csv",FILE_WRITE|FILE_CSV,",");
      for(int i=Bars-1;i>=0;i--){
         FileWrite(h,TimeToStr(Time[i],TIME_DATE),TimeToStr(Time[i],TIME_MINUTES),Open[i],High[i],Low[i],Close[i],Volume[i]);
      }
   FileClose(i);
   return(0);
}

非標準タイムフレームチャートでスクリプトを実行します。その結果、エキスパート/ファイル・フォルダにある非標準タイムフレームのデータと一緒に、標準*.csvファイルを取得します。

3. データをインポートします。

メインポイントその1で準備したターミナルを開いてください。ヒストリーセンター(メインメニュー‐ツール‐ヒストリーセンターを選択するかF2キーを押して選択)を開きます。左側のシンボルリストにあるインポートされたシンボルのタイムフレームリストを開いてM1を選択します(ウィンドウ・タイトルバーに表示された対応テキストのものを選択してダブルクリックします)。


開いたヒストリーセンター・ウィンドウで”インポート”をクリックし、その2で生成したEURUSD2.csvを選択してください。”OK”をクリックします。同様に、データをEURUSD7.csvからM5へインポートし、ヒストリーセンター・ウィンドウを閉じます。たったこれだけです!

EURUSD1分足チャートを開くと、2分足データを見ることができるようになっているでしょう。

同じようにしてEURUSD5分足でも、5分足の代わりに7分足データが表示された画面をみることができるでしょう。

ストラテジー・テスターでエキスパートアドバイザーをテストする場合、2分足データのテストのためには1分足を、7分足データのテストのためには5分足を選択する必要があります。テストされたエキスパートアドバイザーから呼び出したインディケーターの7分足データにアクセスするには、5分足タイムフレームを選択してください。

4. チェックしましょう。

ここでは2移動平均線の交差でオープン・クローズするシンプルなエキスパートアドバイザーを使用しましょう(2MA.mq4を添付しています)。注意!このエキスパートアドバイザーはストラテジーテスター上でのみ稼働することを想定しています。

extern int TimeFrame=0;
extern double Lots=0.1;
extern int FastMAPeriod=13;
extern int FastMAMethod=0;
extern int FastMAPrice=0;
extern int SlowMAPeriod=21;
extern int SlowMAMethod=0;
extern int SlowMAPrice=0;

int start(){
      double fast_ma_1=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
      double slow_ma_1=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
      double fast_ma_2=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,2);
      double slow_ma_2=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);
      static int bt=0;
      static int st=0;
         if(fast_ma_1>slow_ma_1){
            if(fast_ma_2<=slow_ma_2){
               if(st>0)OrderClose(st,Lots,Ask,0,CLR_NONE);
               st=0;
               if(OrdersTotal()==0)bt=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,"",0,0,CLR_NONE);
            }
         }
         if(fast_ma_1<slow_ma_1){
            if(fast_ma_2>=slow_ma_2){
               if(bt>0)OrderClose(bt,Lots,Bid,0,CLR_NONE);
               bt=0;            
               if(OrdersTotal()==0)st=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,"",0,0,CLR_NONE);
            }
         }         
   return(0);
}

4.1. シングル非標準タイムフレームにおけるエキスパートアドバイザー

ストラテジーテスターを開きます(メインメニュー - 表示 - ストラテジーテスターまたはCtrl+R)。エキスパートアドバイザー(2MA、 シンボル - EURUSD、タイムフレーム - M1)を選択し、エキスパートアドバイザーのプロパティ・ウィンドウ(ストラテジーテスターの”エキスパート設定”ボタン)を開いてTimeFrame変数の値を1か0にセットします。テストをスタートさせて、完了したならばチャート(ストラテジーテスターの”チャートを開く”ボタン)を開いてテストが正確に行われていたかどうがチェックします。

4.2. ストラテジーテスターのタイムフレームとは違うシングル・タイムフレームにおけるエキスパートアドバイザー。

エキスパートアドバイザーのプロパティウィンドウで、TimeFrame変数を5にセットしてテストをスタートしてください。チャートを開いて、タイムフレームを5分足に変更し、終値を基にした13日と21日移動平均線をセットして、テストが正確におこなわれるようにしましょう。

4.3. 2タイムフレーム・エキスパートアドバイザー

ここで使用する、1つのタイムフレームで2本の移動平均線の交差でオーダーをオープンするエキスパートアドバイザーは、より大きなタイムフレームでの2本の移動平均線の位置も使用ます(2MA2TF.mq4が添付されています)。注意!このエキスパートアドバイザーはストラテジーテスター上でのみ稼働することを想定しています。

int start(){
      double fast_ma_1=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
      double slow_ma_1=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
      double fast_ma_2=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,2);
      double slow_ma_2=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);
      
      double _fast_ma_1=iMA(NULL,MA2TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
      double _slow_ma_1=iMA(NULL,MA2TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
      
      static int bt=0;
      static int st=0;
         if(fast_ma_1>slow_ma_1){
            if(fast_ma_2<=slow_ma_2){
               if(_fast_ma_1>_slow_ma_1){
                  if(st>0)OrderClose(st,Lots,Ask,0,CLR_NONE);
                  st=0;
                  if(OrdersTotal()==0)bt=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,"",0,0,CLR_NONE);
               }
            }
         }
         if(fast_ma_1<slow_ma_1){
            if(fast_ma_2>=slow_ma_2){
               if(_fast_ma_1<_slow_ma_1){
                  if(bt>0)OrderClose(bt,Lots,Bid,0,CLR_NONE);
                  bt=0;            
                  if(OrdersTotal()==0)st=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,"",0,0,CLR_NONE);
               }
            }
         }         
   return(0);
}

初期値は次のとおりです。TimeFrame - 1, MA2TimeFrame - 5。ストラテジーテスターで1分足タームフレームを選択しテストをスタートしてください。次にチャートを開いて、オーダー・オープンの場所を示す垂直線と、オーダーオープンされていない2本の移動平均線が交差するポイントを利用します。1分足や5分足に変更してテストが正確におこなわれているかどうか確かめてください。



まとめ

このような簡単な操作でエキスパートアドバイザー・テストの可能性を広げることができます!唯一の欠点は、自動更新できないことです。1週間に1度程度、繰り返しテストし、その1からその3までに説明したアクション、テストをおこなうターミナルから非標準タイムフレームのエクスポート・インポート・データを含む全データを削除しておこなうアクションは、ストラテジーテスターの可能性を大いに広げた瞬間として記憶されるでしょう。

MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/1368

添付されたファイル |
2MA.mq4 (1.29 KB)
2MA2TF.mq4 (1.64 KB)
トレーダーの黄金則 トレーダーの黄金則
確かな予測に基づき利益を得るためには、トレードの三原則を理解しなければいけません。1) マーケットにエントリーする際のリスクを知ること。 2)損切りを早く、利益を伸ばし続けること。 3)システムの期待利益を把握すること。 ー 定期的にテスト調整を行うということの3つです。本稿ではオープンポジションをトレールし、実際に2番目の黄金則を適用させることで、最も高い確率で利益を伸ばすプログラムコードを紹介します。
MQL4を使ってRSSニュースフィードを読むには MQL4を使ってRSSニュースフィードを読むには
本稿は、HTMLタグ分析関数を使って、MQL4でRSSマークアップ言語を読む方法について書かれています。ニュース・インディケーターか、MQL4言語のRSSリーダーに使用することができるワークピースの作成にチャレンジします。
MQL5 Market 一周年 MQL5 Market 一周年
MQL5 Marketがサービスを開始して、1年が経過しました。新しいサービスをMetaTrader5プラットフォームにおけるテクニカルインジケーターやトレーディングシステムの巨大ストアに変える困難な一年でした。
ランダムサンドボックス ランダムサンドボックス
本稿は、インタラクティブな"サンドボックス"について書かれています。エクセルファイルが、ランダム化したエキスパートアドバイザーのバックテストデータをシュミレートします。読者の皆さんは、これを使えば、初期状態のMetaTraderが提供するEAパフォーマンスのメトリックスを探求する手助けとなり、より多くのことを理解できるようになります。本稿の文書はこの経験則を通じユーザーの皆さんに理解してもらえるように書かれています。