時系列の日足データを演算処理することになります。
時系列のデータは配列として保存されています。
その配列に対して、
指標となる、最大値、最小値、平均などを計算します。
ボリンジャーバンドなら偏差も必要。
ここでは、Rubyに標準で装備されている配列を表すクラスArrayを拡張します。
これにより、
配列に格納されている時系列データの最大値、最小値、平均など、
簡単に入手出来るようになります。
Rubyでのクラスの拡張は、
非常に柔軟で、簡単に記述できます。
機能の追加と、書き換えが行えます。非常にユルいです。
追加ないし書き換えを行いたい部分を定義してしまえばよいだけ。
本書では、幾つかの例で、その説明が行われます。
それから、
配列の順次処理、イテレータの操作を説明します。
以前、コールバック的な書き方として登場しました。
ここはRubyらしい作法として理解するところ。
for文で丁寧に書いても書けるけど、Rubyではこう書くものと納得した方が良いでしょう。
本書では、ブロックを使って記述する説明を丁寧に行ってます。
実際の実装では、配列の合計、平均の計算を機能として追加してます。
平均は小数点表示させるため、ちょっと加工してます。
最大、最小は既存の機能あるのでそのまま使います。
合計もほぼ既存の機能を使ってるようなものです。
さらに、
区間を指定してその区間ごとに、平均、最大、最小の配列を返せる機能を提供してます。
分かりやすく言えば、
配列に対してmoving_average(5)とメソッドを呼び出せば、
5日移動平均が配列として返って来ます。
この実装はRuby特有の書き方で非常に洗練されてます。
その為逆にちょっと分かりにくいかもしれませんね。
手慣れてないと、こうは書けないかもしれません。
でもまあ、やってること自体は、
配列の部分を順番に取り出して、
平均とかを計算して、別の配列に詰める。
それだけです。
とりあえず、そういうことをやってるんだと理解した上で、
Ruby独特の書き方の詳細を確認してゆきましょう。
ちょっと長いのでそれはまた明日。
あと昨日言及したIDE(統合開発環境)ですが、
タダでやるならやっぱEclipseでしょうか、
今はもっと良いのあるのかもしれません。
まあ、JavaじゃなRubyの開発でもEclipseのプラグインあって、
単体テストの機能もサポートされているらしい。
https://www.ibm.com/developerworks/jp/opensource/library/os-rubyeclipse/
今は、どれくらい自動でやってくれるのかな。
まあ、本件だけじゃなく、いろいろプログラム組むならEclipse使っても良いんじゃないかな。
重いし、セットアップまで面倒だし。
それほど、自動的にコード生成はしてくれなそうだけど。
それでも、規模が大きくなってくるなら、
管理しやすいかもしれない。
質問コーナー、お問い合わせは、sanpome.net@gmail.com まで。