どうも、FXトレーダー兼システムエンジニアのナオトです。
開発の裏側の40回目で、MT4のテスターで長い期間を検証する環境を作ったとき、自分で入れた1分足が切り詰められていた話を書きました。
今回は、同じ環境づくりの続きです。本物のティックで、MT4のテスターを走らせようとした話です。
MT4のテスターは、全ティックのモデルを選ぶと、1分足からティックを作って再生します。
作ったティックは、テスターのフォルダの下に、専用の形式のファイルで置かれます。
このファイルを、1分足から作らせるのでなく、本物のティックのデータから自分で作れば、本物のティックで検証できます。
ただ、自分で作るには、形式を正しく知る必要があります。
そこで、こういう順にしました。
まず、MT4自身に、この形式のファイルを作らせる。
その実物を読み解いて、形式を確かめる。
分かったのは、先頭に728バイトの見出しがあり、そのあとに1件56バイトの記録が並ぶ形です。
1件の中身は、足の時刻、始値、高値、安値、終値、出来高、ティックの時刻、印です。
ここで1度つまずきました。
最後の8バイトを1つの数として読むと、日付が2146年などになってしまう。
4バイトずつ、ティックの時刻と印の2つに分けて読むと、意味の通る値になりました。
見出しの中には、契約サイズ、スワップ、証拠金、レバレッジなども入っています。
これは銘柄ごとに違うので、推測で埋めず、MT4が作った実物の見出しをそのまま雛形にしました。
形式どおりに本物のティックを書いて、テスターを走らせました。
結果は、0 tick events。ファイルは読まれているのに、1件も再生されませんでした。
原因も、MT4が作った実物を見比べて分かりました。
このファイルは、2つの部分に分かれていたんです。
前半は、完成した足が100本。EAがインジケーターを計算するための助走です。
後半が、本番のティック。
この助走が無いと、MT4はファイルを読みはしても、何も再生しません。
見出しの中にも、本番がどこから始まるかを示す欄があり、合わせて書く必要がありました。
直して走らせると、テスターのログに、177万7,666のティックを処理したと出ました。
こちらが書いたティックの数と一致しています。MT4が1分足から作る約140万とは違う数で、本物のティックで回っていました。
使うときの決まりも3つ残しました。
書いたら必ず検査する。置いたら読み取り専用にする。足の履歴のファイルにも同じ期間を入れる。
最後のものが欠けると、データが無いとして、作ったファイルを捨てられます。
説明の無い形式を扱うときは、相手に1つ作らせて、その実物を読むのが早道でした。
形式の読み解きと、0件の原因の特定、2回ともこのやり方で解けています。
MT4やMT5で、本物のティックを使った過去検証の環境を作るご依頼も受けています。
最後までお読みいただき、ありがとうございました。