インジケータの次は、Tickです。
さて新章。Tick(ティック)というもの。値動きの最小単位のこと。
日経平均先物とかなら5円とか10円とか、1Tickも単純だけど、個別銘柄だと当たり前だが個々。
そのTickというものを実装してゆく。
ここでは、クラスでなくモジュールとして実装している。
つまり関数として機能提供だけできればいい。
まあ、インジケータもそれで良かったとも思うが、
それはさておき、
値幅ごとに、取引単位が違うのでそれを実装。
更に、切り上げ、切り下げ、四捨五入。問題なのはTick単位で出る端数だもの。
実装は単純で棒に書いてあるだけなのだけど、
四捨五入がちょっと違う。単純に丸めると、Tickの刻みにハマらない。
ので、切り上げ、切り下げのどちらかに近い方に寄せる。
「近い方」とはTickの幅の半分より上か下か、という判断。
それから、Tick考慮した価格の上げ下げを実装してる。
さて、コード .lib/tick.rbを見てみる。
times というメソッドを使ってるのが新鮮か、
tick.times {price -= size(price)}
というコードがある、(ああ引数がtickなのがややこしい。)
整数.times{なんか処理}
で、その整数回分、何か処理を繰り返すという意味。
for文で書くよりRubyらしいオシャレ感漂う。
スカしてんじゃねえぇよって思うのは古い人間だ。
ま、とにかく、実装は難しくはない。
が、動作検証はやや厄介だ。
株価3000円以下ならTickは1円だが、3000円を超えると5円。
こういう微妙なところでup/downを操作しても正常に動くか?
幾つかのケースを想定して、坂本タクマ先生は説明している。
これが、実際と同じようなものなのか、違うのかは、ワタクシには判別つかない。
境界値のあまりに微妙なとこや、
現実にはありえない数値入れたときの動作は、
追いすぎないという態度で臨んでいるタクマ先生。
テスト ./check/tick_check.rbを見ると、
Tick.up(2999, 2) #=> 3005
この辺がチェック出来て、カバレッジが100ならまあOKということ。らしい。
ただ、単純だが、テスト項目多いので、
putsで画面表示するだけでなく、
Assertするようテストケースっぽく書きたいけどな。
目で結果追うのタルいもの。
あ、長くなったので、この話は明日。
質問コーナー、お問い合わせは、sanpome.net@gmail.com まで。