diary/20100221
覚書:CTLのseries型使用上の注意
最近物忘れがひどくて,今日もCTLのプログラミングで苦労してしまった.CTLで困るバグの最有力はseries型の添え字問題だ.コンパイル時にはエラーが出ずに実行時だけエラーが出るのでバグを取るのにひどく手間取ってしまう.以下に述べるのは以前にひどい目にあって覚えたはずのノウハウを忘れたために被った苦労だ.今後もまた忘れることがあるだろうから,定期的にメモしておこう.
series型変数にfunctionの返り値を代入するときの注意.
MA200 := SMA(close,200);
ここでMA200の計算には過去200本分のローソク足データを使うことを肝に銘じておく.この後,
MA200[i]
の値を参照するときはiの範囲に気をつけよう.iは
front(close) <= i-200
でないと実行時にエラーとなる.このエラーを防ぐためには次のように書くのが常套手段
i := back(close); if i-200 < front(close) then return;
またseries型の変数を複数使うときはそれぞれについて上記と同じ注意を払うこと.例えばMA25も使いたいときは,以下のような書き方を追加しなくてはならない.
MA25 := SMA(close, 25); j := back(close); if j-25 < front(close) then return;
これでバグの90%はなくなるだろう.