【開発の裏側㊱】EAに自分で成績を書かせたら、ファイルが消え、順番が乱れ、連勝の回数が5桁になった話

【開発の裏側㊱】EAに自分で成績を書かせたら、ファイルが消え、順番が乱れ、連勝の回数が5桁になった話

記事
IT・テクノロジー
どうも、FXトレーダー兼システムエンジニアのナオトです。

開発の裏側の23回目で、最適化の結果を書いたファイルが268行で切れていた話をしました。
今回は、その同じ仕組みを作り始めた日に踏んだ、別の3つです。



まず、仕組みの形を書いておきます。

MT5のテスターは、テストが終わると、EAの OnTester という関数を呼びます。
ここで TesterStatistics を使うと、損益やプロフィットファクター、取引の回数などを、EAの中から読めます。
私はそれを1行にまとめて、CSVのファイルへ書かせています。MT5が出すレポートを開かなくても、自作の道具でまとめて読めるからです。



1つ目は、書いたファイルが消えたことです。

1回だけのテストで書いたCSVが、次に最適化を回したら無くなっていました。

テスターは、実際の計算を、エージェントと呼ばれる別の働き手に任せています。
1回だけのテストでも、OnTester はエージェントの側で動くので、ファイルはエージェントのフォルダに書かれます。
そして、このフォルダは、次にテスターを回すときに作り直されます。

直し方は単純で、テストが終わった直後に、別の置き場へ写すようにしました。



最適化のときは、置き場がまた違います。

最適化では、たくさんのエージェントが同時に動きます。私が回したときは、16本が自動で立ちました。
そこで、各エージェントからは FrameAdd で成績を送り、ターミナルの本体の側にある OnTesterDeinit で全部を受け取って、まとめて1つのファイルに書く形にしました。
こちらは本体のフォルダに残ります。

1回だけのテストと最適化で、ファイルが出る場所が違う、ということです。



2つ目は、最適化の結果の順番です。

本体で受け取った成績は、設定を振った順には届きません。0番、1番、13番、6番、18番、というように、計算の終わった順に届きます。

ファイルには、設定の番号の列も一緒に書いておいて、読むときにその列で並べ直しています。



3つ目が、いちばん気づきにくかったものです。

連勝と連敗を記録する欄に、5桁の数字が入っていました。
TesterStatistics には、STAT_MAX_CONWINS と STAT_MAX_CONLOSSES という項目があります。名前から、いちばん長く続いた連勝と連敗の回数だと思って使っていました。

実際は、その連勝と連敗で動いた金額でした。
回数のほうは、STAT_MAX_CONPROFIT_TRADES と STAT_MAX_CONLOSS_TRADES という別の項目です。

名前だけで判断して、回数の欄に金額を書いていました。どちらも数字なので、エラーは何も出ません。



もう1つ、置き場について付け足しておきます。

MT5には、複数のターミナルで共有する共通のフォルダもあります。
ただ、MT5をポータブルの形で動かしていても、この共通のフォルダだけは、Windowsのユーザーごとの決まった場所を指していました。
テスターのフォルダとも、ターミナルのフォルダとも別の場所です。このときの検証では、結果を共通のフォルダに置かず、全部ターミナルのフォルダの中に落とす形にしました。



3つとも、プログラムは正しく動いているように見えました。
ファイルは書かれていたし、数字も入っていた。ただ、どこに書かれ、どの順に届き、何の数字なのかが、思っていたのと違っていました。

EAに成績を書かせる仕組みを作ったら、最初の1回は、ファイルの場所と行の順と、1つ1つの数字の意味を、MT5のレポートと突き合わせてみてください。

MT5のテスターで回す形の検証や、結果をまとめる道具づくりのご依頼も受けています。


最後までお読みいただき、ありがとうございました。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す