カロリーメイトください

Barbaroi Ware(バルバロイ・ウェア)という名前でアプリ開発してます

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

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

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

序文

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

いよいよ内容的にも佳境ということで、読み進めるにも時間がかかるようになってしまい、2日分まとめて更新。
いやこれほんとGWに集中的にこなすのに、ぴったりのボリュームで。
逆に言うとこれ以外何もできずに今年のGWは終わっちゃいそうです…。

進捗

  • 第3部 シミュレーション編
    • 第17章 売買ルールを作る
    • 第18章 TradingSystemクラス
    • 第19章 結果の出力
    • 第20章 Simulationクラス

(学習時間:2日間)

GitHub

github.com

コード実装部分(一部)

RubySystemTrade\trade_simulator\check\rule_check.rb

# coding: Windows-31J

require "./lib/simulation"
require "./lib/trading_system"
require "./lib/base"
require "./lib/text_to_stock"
require "./lib/recorder"

# 株データオブジェクトを生成する
text_to_stock = TextToStock.new(stock_list: "tosho_list.txt")
# トレードシステムを作成する
estrangement_system = TradingSystem.new ({
                    # 移動平均乖離率による仕掛け
                    # 20日移動平均から5%離れたら寄り付きで仕掛ける
                    entries: EstrangementEntry.new(span: 20, rate: 5),
                    exits: [
                        # ストップラインによる手仕舞いをする
                        StopOutExit.new,
                        # 移動平均乖離率による手仕舞い
                        # 20日移動平均から3%以内に戻ったら手仕舞いをする
                        EstrangementExit.new(span:20, rate: 3)
                    ],
                    # ATRによるストップ
                    # 仕掛け値から20日ATRのところにストップラインを設定する
                    stops: AverageTrueRangeStop.new(span: 20),
                    # 移動平均の方向によるフィルター
                    # 買いは移動平均が上昇中のときのみ、
                    # 売りは移動平均が下降中のときのみしかける
                    filters: MovingAverageDirectionFilter.new(span: 30)
                  })

# トレードを記録するオブジェクト
recorder = Recorder.new
recorder.record_dir = "result/estrangement/test_simulation"

simulation = Simulation.new(trading_system: estrangement_system,
                            data_loader: text_to_stock,
                            recorder: recorder)

recorder.create_record_folder

# simulation.simulate_a_stock(8604)

simulation.simulate_all_stocks

実行結果

f:id:yjkym:20190505224918p:plain

感想

17章で具体的な売買ルールを実装、18章でシステムの簡単なシミュレーション、19章でシミュレーションの結果を出力する機能を作り、20章ですべての機能をまとめて動かしてみる。

それほど複雑な機能を使用しているわけではないし、まったくお手上げという感じではないのだが、とにかく組み込む機能が多くて頭がついていくのが大変である。
とりあえず最低限動かして、結果を出力するところまでできて一安心。

プログラムの流れを追って、なんとなくこれで動きそうだなーというぐらいは思うのだが、厳密な検証とかはまったくできていない。
特にRubyの仕様として変数の型がパッと見で判断できないことと、メソッドがどこで定義されているのかがすぐにわからないことがつらい。
局所的な理解ではなくて、システムの全体像がしっかり把握できていないと、どういう流れで処理が行われているのかがスムーズに理解できないと感じる。

それでもプログラミングでのシステムトレードを実現するにあたって、どういう機能が必要かだとか、どういう流れで行えばいいのかとか、どういう点に注意が必要なのかといった知見を与えてくれるのは本当にありがたい。
本格的にシステムトレードに取り組もうと思えば、やはりちゃんとデータベースを利用したほうがいいだろうし、他にもいろいろ物足りない点も感じてきているので、おそらく本書のシステムをそのまま実践へ流用することは難しいだろうが、今後実践へ移るにあたっての手応えは感じている。

さぁあと1日がんばろう。

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