はい!またまた難しい話をします。
EAの処理動作の仕組みのお話です。
開発者ならわかっていることなのですが、実はEAの動作はティックに依存しています。
1ティック相場が動くたびに1回EAが動きます。
具体的に言うとEAのプログラムが上から下まで読み込まれるということです。
バックテスト時にも疑似的に過去の再現ティックで動いています。
じゃぁティックって実際どれだけあるの?というと。。。
出来高を見ることで確認することができます。実は、株式と違ってFXのティック数は出来高なんですね。
1度確認してみてください。
これがブローカーによって違うのでEA成績の差につながるわけです。
固定スプレッドのバックテストだと更に差異が発生します。
それはティックがランダムティックとなり、決まった規則で動くからです。
これを利用すると恐ろしく成績の良いEAが作れてしまいます。
本題に入ります。
ティックに依存する意味あるの?
私のこれまで作ってきたロジックには必要無いと判断しました。
と、いうわけでティックに依存しないように定周期処理を採用しました。
難しそうな言葉を使いましたが、ただ単に、ティックごとに動かないようにして
タイマーで動くようにしただけです。
ミリセカンド(1000分の1秒)単位で設定できます。
これを利用するメリットは、ティックの薄い時間帯やマイナー通貨でEAを動作させる際に
安定した処理を実行できることです。
ここまでが半非同期処理となります。
まだ非同期処理じゃないの?
はい。実はここまでのことをしても本当の非同期処理とはなりません。
それはオーダーを送信した際に応答待ちの時間があるからです。
ここから先はロジックによっては逆効果になりますが、
OrderSendAsync を使用します。(※MT5のみ)
これはなんだというとオーダーを入れた後に応答を待たないという処理です。
応答を待たない分、高速処理が可能ですが、EAの暴走の原因にもなるので
扱いが非常に難しいです。
今回の記事は、
なんでバックテストとフォワードが全然違うんだ!と、諦めかけていた時に閃いた貴重な情報です。
EA開発を諦めかけている方の希望の光となれば幸いです。