『Rubyではじめるシステムトレード』第13章~第14章 学習記録

Rubyではじめるシステムトレード (現代の錬金術師シリーズ)

Rubyではじめるシステムトレード (現代の錬金術師シリーズ)

序文

Rubyではじめるシステムトレード』5日目。

昨日今更「翔んで埼玉」見に行ったんですが、イマイチでした。
狙いすぎというか、「こういうネタがお前らおもしろいんだろ?」みたいなのが見えちゃって…。
うーん。

進捗

  • 第3部 シミュレーション編
    • 第13章 Indicatorクラス
    • 第14章 テクニカル指標を作る

(学習時間:6時間)

GitHub

github.com

コード実装部分(一部)

RubySystemTrade\trade_simulator\lib\indicator\indicator.rb

# coding: Windows-31J

require "./lib/array"

# テクニカル指標の親クラス
class Indicator
    include Enumerable

    def initialize(stock)
        @stock = stock
    end

    def each
        @indicator.each {|value| yield value}
    end

    def calculate
        @indicator = calculate_indicator
        self
    end

    # 要素が nil の時は :no_value を throw する
    def [](index)      
        # my_indicator[1..3]みたいにindexに配列っぽいのが入ってることがあることに注意
        if index.kind_of?(Numeric) && (@indicator[index].nil? || index < 0)
            throw :no_value
        else
            @indicator[index]
        end
    end

    def calculate_indicator; end

end

実行結果

割愛

感想

13章では各指標をあらわすのに使用するインターフェース的なクラスを作成し、14章では13章で作成したクラスを継承して移動平均やら移動平均乖離率やらATRといった各指標を実装していく。

各指標を表すクラスは上のコードを継承させて、空のcalculate_indicator()メソッドに実際の処理を書いていく。

Rubyではよくある書き方なのかはわからないが、"[]"みたいなのをオーバーライドするのはあんまり好きじゃない。
よっぽど必然性を感じられる実装をしないと、呼び出し側で処理がわからなくなりがちな気がする。

あとArrayクラスを拡張して、新しいメソッドを追加しているのだけど、これもなんとなく気に食わない。
呼び出し側から標準クラスを呼び出しているのか、拡張したクラスを呼び出しているのか判別できないだろう。
これはまだSuperArrayなりMyArrayなりのArrayを継承したクラスを新しく作ったほうが分かりやすい気がする。

ともあれ全653ページ中の428ページまで終了。
今のところ順調だが、無事GW中に読破できるだろうか。

カロリーメイトください。

参考サイト

ref.xaio.jp

104m.jp