昨日のバックテストの成果がうまく動かない
= s/lが設定出来ない症状が発生していましたが、原因がわかりました。
デバッグしてみると、1回目は通っているのですが、そして、2回目に失敗。
2回目のs/lの値は、1回目に設定した値で設定されており、
その値はサーバーから拾って来れたんですが、
問題は、「ポジションのs/lと現在価が、200pips離れたときにのみ」
という条件をつけていたのですが、
OnTickのイベントなんて、頻繁に起こるため、
絶対値(ポジションのs/l – 現在価) > 200pips
という条件に毎回引っかかった上、
毎回、同じs/l値を設定しようとしていたのが、原因でした。
一番の原因は、double値の精度の問題で、
きっちり、200pips引けているわけじゃなくて、
0.01999999998など、200pipsより下の数値が渡されることにより、
毎回、200pips以上離れている条件に偶然?、適合したのが原因だったようです。
なので、
絶対値(ポジションのs/l – 現在価) > 200pips * 1.01
=202pips 以上の差の場合
と、おまじないに「* 1.01」を追加し、
doubleの精度や、厳密な比較を無視するように、変更しました。
この結果、バックテストはうまくいき、
- 4/1 ~ 5/1で、220%増
- 4/1 ~ 6/1で、580%増
の結果を得ることが出来ました!
ただ、7月は、大きなトレンドも発生せず、もみ合いが続いたため、
50%減という、渋い数値。
- レンジでの負けを最小にすることが大事なのと、
- トレンド変換時のs/lを200pips以下に設定することにより、
より、しっかり取れるようになると思います!
基本ロジックがとてもしっかりしているので、
EAにより、より精度を上げることができそうです。
もちろん、裁量判断が出来ればいいのですが、
人が介入すると、ろくなことはおきません!=基本ルール無視
AIでもぶち込めればいいのですが、
そんなもんどうやって組んでいいのか皆目検討もつかないので、
なんか数式入れて、凌ぐことにします。
- 4/1 ~ 5/1で、220%増 >> 300%
- 4/1 ~ 6/1で、580%増 >> 1000%
も、見えてきました♪
あとは、レンジですね。