CustomCandle.mq4 の不具合修正

あんころ餅さんに提示頂いた画像とソースコードを確認したところ、どうも deinit() 内でのオブジェクトの削除に失敗している感じでした。
…ということは、deinit()の2.5秒制限 ( deinit は2.5秒間実行されたら途中で終了する.. ) のが原因かもしれません。deinit() 内では、オブジェクトの削除に文字列の足し算が使われていたので、それを使わないようにしてみました。

↑こんなので実行時間がそんなに変わるの?と思われるかもしれませんが、ベンチマークで計ってみると10倍近い差があります。^^;


これで解決するかな?と思ったのですが、実は、CustomCandle.mq4 は、Homeキー等でチャートをさかのぼると、ローソクオブジェクトを何重にも重ねて作成してしまうバグがありました。これはインジケータを作る際に注意すべき点なのですが、現在のチャートに対してデータが増える時は、新規の Bar が右側に増えるだけでなく、チャートの最後尾に Bar が追加されたり、チャートの中間に抜けていた Bar が追加される場合があります。これを CustomCandle.mq4 はそれを考慮していない為に、異常に重い動作をしていたのです。
(数千個のオブジェクトで描けるローソク足を重ね描きして、数十万個のオブジェクトを作成していたら、確かに 2.5秒では消せなくなるかも..みたいな。^^;)


本来ならオブジェクトの名称を工夫するなどで対応すべきだと思いますが、とりあえず、

 if(IndicatorCounted() == 0){ deinit();init();}

この一行を追加しました。Bar が末尾や内部に追加されると、IndicatorCounted() がゼロになるので、そのタイミングで、最初期化させています。かなり強引ですけど、現状よりははるかにマシだと思います。CustomCandle を現在使用中の人は、こちらに乗り換えることをお勧めします..。