![非標準タイムフレームでエキスパートアドバイザーをテストするには](https://c.mql5.com/i/articles/overlay.png)
非標準タイムフレームでエキスパートアドバイザーをテストするには
はじめに
マーケットの値は、テクニカル分析において、プライスチェンジ・チャート、いわゆるティック・チャートを使うにしては変動が激しすぎます。値動きを緩やかに見て、バーやローソク足チャートで分析する際は、大きなタイムフレーム使うことがあります。バー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
![トレーダーの黄金則](https://c.mql5.com/2/12/1021_34.png)
![MQL4を使ってRSSニュースフィードを読むには](https://c.mql5.com/2/17/983_8.png)
![MQL5 Market 一周年](https://c.mql5.com/2/0/mql5-market-1year-avatar.png)
![ランダムサンドボックス](https://c.mql5.com/2/13/1061_27.png)
![MQL5 - MetaTrader 5クライアントターミナルにビルトインされたトレードストラテジーの言語](https://c.mql5.com/i/registerlandings/logo-2.png)
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索