【開発の裏側㉗】予測のサインが一度も出ていなかった。原因は、0のままだった売値でした

【開発の裏側㉗】予測のサインが一度も出ていなかった。原因は、0のままだった売値でした

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

以前に作って、まだ出品していなかったインジケーターがあります。
レートの山と谷を結んだ線と、MACDの山と谷を結んだ線の向きが食い違う場面、いわゆるダイバージェンスを見つけて知らせるものです。
出品の前に、MT5版のソースを点検し直しました。今回は、そこで見つかったいちばん大きな不具合の話です。



このインジケーターには、サインが確定する前に出す、予測のサインがあります。
その条件の1つに、スプレッドの2倍、という値を使っていました。

ところが、プログラムの中で、買値を入れる変数に売値を上書きしていて、売値を入れる変数は0のままでした。
スプレッドは買値から売値を引いて出すので、売値が0だと、スプレッドが価格そのものになります。
ドル円なら、スプレッドが150円ほどあることになるわけです。

その2倍を条件にしていたので、条件を満たす場面が来ません。
MT5版では、予測のサインが一度も出ていませんでした。



コンパイルは通りますし、エラーも出ません。
確定のサインは普通に出ているので、画面を見ても、予測のサインが出ないことに気づくきっかけがありませんでした。
出ないものは、出ないことに気づきにくいんです。



直したら、次の不具合が出てきました。

下側の予測の処理で、MACDの側の配列を、レートの側の番号で読んでいました。
売値を直して予測が動き出すと、その行まで処理が進むようになります。そのままだと、配列の外を読んでインジケーターが止まるところでした。
それまでは手前で止まっていたので、この行は一度も通っていなかったんです。

1つ直すと、その奥に隠れていた不具合が見えてくる。古いコードの点検では、こういう順番で見つかることがあります。



点検では、ほかに重い処理もまとめて直しました。
毎ティック、全部の足で計算し直していたところを、いまの足だけにする、といった直しです。
ティックごとの処理は53ミリ秒から12ミリ秒に、最初の計算は約1秒から0.02秒になりました。

そのうえで、直す前と直した後を、同じチャートに載せて比べました。
描いた線とサインを全部書き出して突き合わせ、5つの条件で全件同じになることを確かめています。
直す前の版は予測のサインが出ないので、比べるときだけ、直した版の売値をわざと0に戻してそろえました。



インジケーターの不具合や、重くなったインジケーターの点検と改修のご依頼も受けています。


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