MT5のバックテストをコマンドラインから実行する

Pocket

MT5を使ってコマンドラインから任意の設定でバックテストを行うには公式ドキュメントのプラットフォームの起動に書かれている通りバックテストの設定を記述したカスタム設定ファイルを引数にコマンドラインからterminal64.exeを呼び出してあげます。次のように書いて起動できます。

設定ファイルに記述する内容は、単にバックテストを実行させるだけなら[Tester]セクションのみ記述すれば出来るみたいでした。

動作確認したときの設定ファイルも貼っておきます。

余談ですが、EAから何らかのファイルを出力した場合の出力先フォルダが分からずしばらく詰まっていたのですが、場所が分かりました。Strategy Tester Visualizationウィンドウの[ファイル]-[データフォルダを開く]でデータフォルダが開けるので、そこからさらにたどったMQL5/Fielsに格納されるようです。僕の環境では

というようなパスでした。

 

Pocket

MQL5でスプレッドラベルをつくってみる

Pocket

ウィザードからカスタムインジケータ用のファイルを作成して、チャート上にスプレッドを表示するプログラムを書いてみます。

今回作成したコードでは、インジケータ削除時にラベルが消えません……


“MQL5でスプレッドラベルをつくってみる” の続きを読む

Pocket

動的配列を使って1つづつ要素を増やす

Pocket

配列のサイズを変更できる動的配列の宣言は次の書式になります。

 

配列のサイズ変更にはArrayResize()を使います。

 

配列のサイズを1つだけ増やしたい場合は、現在のサイズ+1をすれば良いことになります。
配列サイズを取得するにはArraySize()を使います。

 

以上のコードを使って、動的配列を1つ増やすコードは次のように書けます。

 

Pocket

MQL5の日付の扱い

Pocket

datetime型

datetime型は1970年1月1日0時0分からの経過”秒数”を表す整数を格納します。
直接日付を指定するにはD”を使ってD’1970.01.01 00:00’などとします。

 

Printなどで出力すると日付の形式で出力されますが、%dとして出力するとdatetime型の値が1970年1月1日0時0分からの経過秒数を示していることが分かります。

MqlDateTime構造体

以下の構造体メンバを含みます。
  • year : 年
  • mon : 月
  • day : 日
  • hour : 時間
  • min : 分
  • sec : 秒
  • day_of_week : 日曜が0,月曜が1…,土曜が6
  • day_of_year : 1月1日を0とした日番号

datetime型からMqlDateTime型へ変換して使う

OnCalculate()で渡される日付時刻データはdatetime型なのでTimeToStruct()を使ってMqlDateTime型に変換できます。MqlDateTime型にしておけば時間の扱いが楽になりそうです。
 
Pocket

MT5の言語を取得する

Pocket

補足:ENUM_TERMINAL_INFO_STRINGの意味

僕の環境では以下のような出力になりました。

TERMINAL_LANGUAGE=Japanese
TERMINAL_COMPANY=MetaQuotes Software Corp.
TERMINAL_NAME=MetaTrader 5
TERMINAL_PATH=C:\Program Files\MetaTrader 5
TERMINAL_DATA_PATH=C:\Users\hogehoge\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
TERMINAL_COMMONDATA_PATH=C:\Users\hogehoge\AppData\Roaming\MetaQuotes\Terminal\Common

各定数の意味はこんな感じだと思います。

TERMINAL_LANGUAGE:MT5の言語
TERMINAL_COMPANY:ブローカー名
TERMINAL_NAME:MT5の名前
TERMINAL_PATH:MT5の起動ディレクトリ
TERMINAL_DATA_PATH:詳細は不明
TERMINAL_COMMONDATA_PATH:詳細は不明

Pocket