どうも、FXトレーダー兼システムエンジニアのナオトです。
9つの時間足の意識ラインを引いて、抜けた瞬間を知らせる e-BreakerDetectPro。
このインジケーターのブレイクの判定を、v3で一から作り直しました。今回はそのときの話です。
古い版には、1度ブレイクを知らせたあと、次のブレイクを知らせられなくなることがある、という不具合がありました。
調べると、判定の中に、解除を待つ状態がありました。
この状態から出る条件が、いまの意識ラインと関係なく、元のラインまで価格が戻ること、になっていたんです。
強いブレイクでそのまま伸び切ると、価格は戻ってこないので、ずっとその状態に居座ってしまいます。
もう1つ見つかったことがあります。
同じ判定の仕組みが、上抜けの側、下抜けの側、ラインを保存する機能の側と、3か所に手で書き写されていました。
1か所を直しても、ほかの2か所が古いまま残る。これが、直しても再発する原因でした。
そこで、判定を1つの関数にまとめて、上抜けと下抜けは向きの引数で切り替えるようにしました。
判定の部分は241行から97行になっています。解除を待つ状態は作らないことにして、押し戻されたらすぐ次のブレイクを待てる形にしました。
MT4版にも同じ判定が写されていたので、MT4用に写しを作るのはやめて、両方が同じファイルを読むようにしています。
一番大事にしたのは、テストの確かめ方です。
価格の動きを8つの場面に分けて、それぞれ判定がどう変わるべきかを書いたテストを作りました。
場面は上抜けの言葉だけで書き、下抜けは鏡に映して同じ答えを当てます。
新しい版でテストが通っても、それだけでは足りません。
テストが甘いだけかもしれないからです。
そこで、古い版の判定をそのまま複製して、同じテストを流しました。
8つの場面のうち7つで、古い版はきちんと落ちました。
これで、このテストは本物の不具合を捕まえられる、と言えます。
テストは、MT5を動かさずに回しています。
判定の部分はMQL固有の関数を使っていないので、出荷するファイルをそのままC++でコンパイルできるんです。
テスト用の写しを作らないので、ずれようがありません。ビルドから実行まで1秒かからないので、直すたびに何度でも回せます。
一度だけ、古い版が全部通ってしまったことがありました。
見てみると、ビルドの失敗を握りつぶして、出力を短く削っていたせいでした。失敗したときは出力を削らないように直しています。
9つの時間足の意識ラインと、抜けた瞬間の通知をまとめた e-BreakerDetectPro は、こちらです。
最後までお読みいただき、ありがとうございました。