どうも、FXトレーダー兼システムエンジニアのナオトです。
開発の裏側の48回目は、Pythonの条件をMT5に移したら、区分けの境目を読み違えて取引が4倍に増えた話でした。
今回は、MT5のテスターが、いつまでたっても始まらなかった話です。
EAの検証は、MT5のテスターを、設定ファイルを渡して起動する形で回しています。
どのEAを、どの銘柄の、どの期間で、どんな入力で回すか。それを ini という文字のファイルに書いておき、MT5に読ませます。手で画面を操作しなくても、テストが始まって、終わればレポートが残ります。
ゴトー日に動くEAの試作を、別のPCのMT5で回したときのことです。
MT5は起動しました。ところが、テストが始まりません。
開いたまま、何もせずに待っています。私の道具は3,500秒で打ち切る作りにしていたので、そこで止まりました。約1時間、何も進まなかったことになります。
原因は、ini の先頭に付いていた、BOMと呼ばれる3バイトでした。
BOMは、このファイルは UTF-8 という文字の決まりで書いてあります、と知らせるための目印です。メモ帳などで開いても目には見えません。
ini の1行目には、[Tester] という見出しがあります。テストの設定はここから下に書く、という印です。
先頭にBOMが付いていると、MT5はこの見出しを読めませんでした。そして、テストを始めずに開いたまま待っていたわけです。
なぜBOMが付いたのか。ini を書くのに、Windowsに入っている PowerShell 5.1 を使っていました。
その書き出しで UTF-8 を指定すると、BOMを付けて書きます。
ややこしいのは、同じ PowerShell 5.1 が、自分のスクリプトについては逆の性格を持っていることです。
スクリプトのファイルにBOMが無いと、日本語のコメントや文字を壊して読みます。だから、私のスクリプトはBOM付きで保存する決まりにしています。
BOMが無いと困る相手と、BOMがあると困る相手が、同じPCの中にいたわけです。
直し方は、ini を別のPCへ送る道具の側で、先頭のBOMを外すようにしました。
書く側で毎回気をつけるより、渡す前に必ず通る場所で外すほうが、忘れようがありません。
設定がうまく伝わらなかったとき、テスターがはっきり教えてくれるとは限りません。開発の裏側の9回目に書いた、書かなかった設定が前回の値のまま残る話も同じです。
だから、テストが終わったら、レポートの中身や取引の数を必ず読むようにしています。起動して終わったことと、意図どおりに回ったことは別だからです。
EAの検証をまとめて回す仕組みづくりも、開発の請負でお受けしています。
最後までお読みいただき、ありがとうございました。