こんばんは、たかはしです。
かなり細かい話ですが、インジケーターやEAの開発をしているときに、実装して画面で矢印やラインの確認をしますよね?
そんなとき、あれ?なんでここで矢印が出るんだ?と思う時ありますね!
僕も時々はまるんですが、原因はdoubleの判定である可能性が高いです。
例えば、今開発中のインジの場合はこうなります。
※画像クリック拡大(小さくてごめんなさい)
サブウィンドウに表示しているのはCCIです。
画面表示上は小数点が4桁で切れています。
ここポイントです。
画面表示上は勝手に小数点が切り捨てられるのです。
でも、インジケーターが動いている時、内部的には.3333333333333333みたいな感じで実データが存在しています。
と言うことから、下記の様に条件分岐させてしまうと思っていない動きをしてしまうんです。
if(a>b) Print("hoge"); else if(a<b) Print("huga");
小数点以下が少しでも違えば、上記条件式に合致してしまうので、思いがけない動きをします。
何でここで売り注文が出てるんだ・・・みたいなw
コレを解決するにはdoubleの小数点以下を切り捨てて制御する必要があります。
色々と方法はありますが、僕はNormalizeDoubleを使って処理します。
小さな事ですが、プログラムとしてはバグを生む原因となりますので、少しでも思った動きをしない場合は実装を疑いましょう!