【開発の裏側⑧】ブレイク検知を作り直したとき、テストを古い版で落としてみました

【開発の裏側⑧】ブレイク検知を作り直したとき、テストを古い版で落としてみました

記事
IT・テクノロジー
どうも、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 は、こちらです。


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