ブログタイトルを「FX自動売買システム開発部」から「autoFX」に変更しました!

他通貨ペアを使ったEAをMT4でバックテストする方法

CopyClose()関数シリーズを使えば良い

「他通貨ペアを使ったEAはMT4のストラテジーテスターではバックテストできないことが分かり、対応に苦労しました」という文章を前回の記事で記載しました。

これで困っている人が他にもいると思いますし、私自身またハマりそうなので、備忘録がてら記事にしました。

結論はズバリ見出しに書いちゃっています。CopyClose()関数シリーズを使えば、可能になります。

シリーズと言うのは、CopyOpen()、CopyHigh()、CopyLow()、CopyClose()の4関数の総称という意味です。

MT4 Build600以降で登場した関数で、昔は存在しませんでした。そのため、他通貨ペアを使ったEAはバックテストできないと結論づけている古い記事が存在しますが、2015/8/1現在では「できる」ですので、ご注意ください。

関数名で何となく動きのイメージは掴めると思います。端的に言えば、ある指定通貨ペア・時間枠の終値配列を別の配列にコピーするというものです。これを使えば、他通貨ペアの価格も取得できるのです。

CopyOpen()を使った実用的な関数を載せておきます。

//+------------------------------------------------------------------+
//|【関数】他通貨ペアの終値を取得する                                |
//|                                                                  |
//|【引数】 IN OUT  引数名             説明                          |
//|        --------------------------------------------------------- |
//|         ○      aSymbol            通貨ペア名                    |
//|         ○      aTimeFrame         時間枠                        |
//|         ○      aStartPos          スタートの足の位置(0が現在足) |
//|                                                                  |
//|【戻値】指定通貨ペア・時間枠の終値                                |
//|                                                                  |
//|【備考】なし                                                      |
//+------------------------------------------------------------------+
double getOtherCurrencyClose(string aSymbol, int aTimeFrame, int aStartPos){
  double buf[1];
  int copyCount = 1;

  ArrayResize(buf, 1, 1);

  if(CopyClose(aSymbol, aTimeFrame, aStartPos, copyCount, buf) < 0){
    return(0);
  }

  double res = buf[0];

  ArrayFree(buf);

  return(res);
}

パラメータとして、取得したい他通貨ペア名(USDJPY等)、取得したい時間枠、取得したい足の位置(0が現在の足の位置)を渡します。そうすると、指定通貨ペア・時間枠の終値を返します。

配列で返ってきて欲しいケースってあまり無いと思いますので、コピーする数を1に固定化することで、指定の位置の価格のみを戻すようにしています。

double USDJPYClose = getOtherCurrencyClose(USDJPY, 0, 0)のように関数を呼び出すことで、チャート時間枠の現在足のUSDJPYの終値を取得することができます。

CopyClose()関数の仕様については、こちらをご覧ください。

MQL4プログラミングの最新記事8件

>完全放ったらかしEA 「AutoEndlessCatchRange」

完全放ったらかしEA 「AutoEndlessCatchRange」

「本業が忙しい!」「でも資産運用したい!」そんなあなたに最適なEAです。兼業トレーダーの方はチャートを毎日みて分析してトレードする時間はなかなか確保できないものです。トレードは本EAに任せて、本業やプライベートの時間をもっと増やしませんか?元々は自分自身のために開発したEAですので、手抜き無しのガチものです。

CTR IMG