edo1z blog

プログラミングなどに関するブログです

MetaTrader4 - 1分足データの取得など

ヒストリーデータ

ヒストリーデータというのがあるらしい。

efxcursion.com

ヒストリーデータの信頼性は、 使用するFX業者 > FXDD社 > MetaQuotes社 です。

しかし、MT4をダウンロードした直後の、 実際に使用するFX業者のサーバーに残って いるヒストリーデータ量は、FX業者に よって異なりますが、せいぜい1~3か月程度 です。

そして、FXDD社が提供しているヒストリー データは2005年からです。

MetaQuotes社は、1998年以前のヒストリー データにおいて、1分足がなぜか1日毎に配置 されていますので、なんとか使い物になる のは1999年からです。

というわけで、現状知る限り最もまともに 検証できるバックテストをするには、以下の ヒストリーデータを集めることが必要です。

◆ 1998年以前: 全く使い物にならないため除外。 ◆ 1999~2004年: MetaQuotes社のヒストリーデータ ◆ 2005年~直近: FXDD社のヒストリーデータ ◆ 直近: 使用FX業者のヒストリーデータ

過去データを提供している業者は限られているらしい。他の記事にはFXDDよりも他のサイトの方が精度がよいといったようなコメントもあった。

EAで1分足を取得する

色々な方法で取得可能ですが、下記が楽そう。

MqlRates rates[];
CopyRates("USDJPY", PERIOD_M1, 0, 1, rates);

MqlRatesという構造体は、始値、終値、安値、高値、tick数、トレード数、スプレッド、時間が入っている。もうこれで基本OKだから、この構造体の配列を用意して、最新のやつを1件コピーしたりすれば一応完成っぽい。

実際コードを作って動かしたら、MT4だとスプレッドは入ってなかった。。

口座の全銘柄取得する

下記のような方法でできるようです。

for(int i=0; i<=SymbolsTotal(false)-1; i++){
  Print(SymbolName(i,false));
}

手数料取得

MT4だと手数料自体をEAの関数で取得することはできないっぽい。どうもMT5だとCommission()という関数があるらしい。MT4はOrderCommissionというのがあるので、注文時の手数料は取得できるっぽい。

通貨ペアに関して取得できる情報

free-creative-innovation.com