混乱を招く仕様
インジケーターの作成を頼まれて、せっかくだからOnCalculate()を使おうとした時の話です。
自分としては、完璧に作ったはずなのに、テストすると全然意図した通りに動かない。「なぜだろう…」とPrint()で色々とログを取得して数時間。
原因がようやく分かりました。
OnCalculate()の引数close[]は時系列配列ではなく、通常の配列だったんです!
Close[]等の時系列配列では、チャートの右端の位置(現在)が0で、過去に遡るほどインデックスが増える仕様です。しかし、close[]では、チャートの左端の位置(一番過去)が0で、現在に向かうほどインデックスが増える仕様になっているのです。つまり、全く逆の動きをするわけです。
詳しくは豊嶋さんの下記サイトをご覧ください。※2018/7/21追記:サイトが削除されてしまったようなのでリンクを解除しました。
ttp://system-trading.jp/toyoshima/index.php?ID=162
[MQL5]OnCalculate()関数の使い方
ttp://system-trading.jp/toyoshima/index.php?ID=125
MQL5でカスタム指標プログラム(1)
これを知らなくて、ハマっていたわけです。これでハマった人は私以外にも沢山いるはずです。
なぜ、こんな開発者を罠に嵌めるような仕様に変更したのか、不満たらたらの管理人なのでした。