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

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

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

序文

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

毎月1日映画の日。ということで映画館から上映までの待ち時間で更新しております。

進捗

  • 第3部 シミュレーション編
    • 第10章 シミュレーションソフトの設計図
    • 第11章 トレードクラス
    • 第12章 Arrayクラスの拡張

(学習時間:6時間)

GitHub

github.com

コード実装部分(一部)

RubySystemTrade\trade_simulator\lib\array.rb

# coding: Windows-31J

class Array
    def average
        sum.to_f / self.size
    end

    # 元の配列と同じ要素数の配列を返す
    # 配列の各要素を span 個ずつ取り出した配列に対して、順番に
    # ブロックで実装された処理を実行する
    # 呼び出し方:array.map_indicator(span){|span_array|...}
    def map_indicator(span)
        indicator_array = Array.new(self.size)
        self.each_cons(span).with_index do |span_array, index|
            next if span_array.include?(nil)
            indicator_array[index + span - 1] = yield span_array
        end
        indicator_array
    end

    # 移動平均
    def moving_average(span)
        map_indicator(span) do |vals|
            vals.average
        end
    end

    # 区間高値
    def highs(span)
        map_indicator(span){|vals|vals.max}
    end

    # 区間安値
    def lows(span)
        map_indicator(span){|vals|vals.min}
    end
end

実行結果

f:id:yjkym:20190501210723p:plain

感想

9章はパンローリング社が提供しているらしいPan Active Market Databaseなるアプリケーションを使って株価を取得する方法の説明。

露骨に宣伝フェーズの匂いがしたのでスルーしようかと思っていたのだけど、無料でできるというので一応試用版というのだけ試してみた。
結果、ダメでした。

アプリケーションが古すぎるのか、むりやりデフォルトと違う場所にインストールしようとしたからなのかは定かでないですが、DLLが参照できないみたいなエラーが出てた気がします。

10章はこれから作るシミュレーションソフトの概要の説明。
これはまたわからなくなったら戻ってこようということで流し読み。

11章は取引そのものに対応するTradeクラスの作成。
そのTradeが終了したかどうかを返すclosed?メソッドを冗長な書き方してるのになんとなく親近感を抱く。

    # 手仕舞い済みかどうか
    def closed?
        if @exit_date && @exit_price
            true
        else
            false
        end
    end

↑はこれ↓でいけるはず。
わかんないけどほとんどのRubyist?はこれでいくんじゃないかなー。

    # 手仕舞い済みかどうか
    def closed?
        @exit_date && @exit_price
    end

12章はRuby標準のArrayクラスを拡張していく。
配列の一部を取り出して、その取り出した配列に対して、順次ブロック内の処理をさせていくmap_indicatorメソッドが鬼門。
なんとなく分かるんだけど、説明しろって言われると難しいなー。

あ、そろそろ「翔んで埼玉」上演の時刻です。

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