2015年05月06日
Rubyではじめるシステムトレード6
書籍"Rubyではじめるシステムトレード”のシステムトレードシミュレーションのサンプルコードを、Pan Active Market Databaseより株価を取得して、動かすことを目指している。
以下のようにRubyで
https://fanblogs.jp/systemtradelab/archive/25/0
Pan Active Market Databaseの証券名と証券コードの一覧が取得できたので、これを新たに"tosho_list.txt"としてdataフォルダに保存する。そして証券コードと証券名の間にコロン、さらに証券名の後にコロンを付け加え、数値(例えば100)を以下のように付け加える。トレードシミュレーションスクリプトでは、この数値が取引株数として、読み込まれるようだ。
"tosho_list.txt"
…
8573 三洋信販
8574 プロミス
8577 ロプロ(日栄)
8579 東京リース
8583 三菱UFJニコス(日本信販)
8584 ジャックス
8585 オリコ
8586 日立キャピタル
8588 セントラルファイナンス
8589 アプラスフィナンシャル
8591 オリックス
8592 住商リース
8593 三菱UFJリース
8595 ジャフコ
8597 SFCG(商工ファンド)
8599 UFJセントラルリース
8600 トモニHD
8601 大和証券G本社
8603 日興コーディアルG
8604,野村HD(野村證券),100
8606 新光証券
8607 みずほインベスターズ証券
8609 岡三証券HD(岡三証券)
8611 コスモ証券(大阪屋証券)
8613 丸三証券
8614 東洋証券
8615 三菱UFJ証券(国際証券)
8616 東海東京証券(東京証券)
8617 光世証券
8621 UFJつばさ証券
8622 水戸証券
8623 SMBCフレンド証券(明光)
8624 いちよし証券(一吉証券)
8625 高木証券
8628 松井証券
8630 損保ジャパン日本興亜HD
8634 JPモルガン・チェース
8637 オーストラリア銀行
8640 トロントドミニオン銀行
8641 ウエストパック銀行
8642 バークレイズ
8648 バンクオブアメリカ
8651 ドイツ銀行
…
書籍のサンプルコード"trading_system_check.rb"を本の記述に基づいて、Pan Active Data Baseから株価を取得するように、以下の太字のように変更した。
# coding: Windows-31J
require "./lib/trading_system"
require "./lib/base"
require "./lib/pan_database_to_stock"
require "pp"
@data = PanDatabaseToStock.new(stock_list: "./data/tosho_list.txt")
@trading_system =
TradingSystem.new(entries: EstrangementEntry.new(span: 20, rate: 5),
exits: [StopOutExit.new,
EstrangementExit.new(span:20, rate: 3)],
stops: AverageTrueRangeStop.new(span: 20),
filters: MovingAverageDirectionFilter.new(span: 30))
def simulate(code)
stock = @data.generate_stock(code)
@trading_system.set_stock(stock)
@trading_system.calculate_indicators
trade = nil
trades = []
stock.prices.size.times do |i|
if trade
@trading_system.set_stop(trade, i)
trade.length += 1
end
unless trade
trade = @trading_system.check_entry(i)
trade.volume = stock.unit if trade
end
if trade
@trading_system.check_exit(trade, i)
if trade.closed?
trades << trade
trade = nil
end
end
end
trades
end
trades = simulate(8604)
pp trades
puts
trades.each {|trade| puts trade.profit}
puts 総資産 #{trades.map {|trade| trade.profit}.sum}"
このスクリプトを実行すると、
$ ruby .check/trading_system_check.rb
トレードの履歴が出力される。@volumeの値が、上記のようにtosho_list.txt内の証券名の横に挿入した取引株数と思われる。
そしてトレードによる資産の変動が正常に出力されるようになった。
書籍の条件(野村8604、2010年1月から2011年8月)で実行をして結果を比較したいのだが、トレード期間の指定方法がわからない。証券コードを変えれば、シミュレーションのようなことができそうだ。確かに”なかなかの感動”がある。
とうとうシミュレーションスクリプトが動くようになってきた!
課題
以下のようにRubyで
https://fanblogs.jp/systemtradelab/archive/25/0
Pan Active Market Databaseの証券名と証券コードの一覧が取得できたので、これを新たに"tosho_list.txt"としてdataフォルダに保存する。そして証券コードと証券名の間にコロン、さらに証券名の後にコロンを付け加え、数値(例えば100)を以下のように付け加える。トレードシミュレーションスクリプトでは、この数値が取引株数として、読み込まれるようだ。
"tosho_list.txt"
…
8573 三洋信販
8574 プロミス
8577 ロプロ(日栄)
8579 東京リース
8583 三菱UFJニコス(日本信販)
8584 ジャックス
8585 オリコ
8586 日立キャピタル
8588 セントラルファイナンス
8589 アプラスフィナンシャル
8591 オリックス
8592 住商リース
8593 三菱UFJリース
8595 ジャフコ
8597 SFCG(商工ファンド)
8599 UFJセントラルリース
8600 トモニHD
8601 大和証券G本社
8603 日興コーディアルG
8604,野村HD(野村證券),100
8606 新光証券
8607 みずほインベスターズ証券
8609 岡三証券HD(岡三証券)
8611 コスモ証券(大阪屋証券)
8613 丸三証券
8614 東洋証券
8615 三菱UFJ証券(国際証券)
8616 東海東京証券(東京証券)
8617 光世証券
8621 UFJつばさ証券
8622 水戸証券
8623 SMBCフレンド証券(明光)
8624 いちよし証券(一吉証券)
8625 高木証券
8628 松井証券
8630 損保ジャパン日本興亜HD
8634 JPモルガン・チェース
8637 オーストラリア銀行
8640 トロントドミニオン銀行
8641 ウエストパック銀行
8642 バークレイズ
8648 バンクオブアメリカ
8651 ドイツ銀行
…
書籍のサンプルコード"trading_system_check.rb"を本の記述に基づいて、Pan Active Data Baseから株価を取得するように、以下の太字のように変更した。
# coding: Windows-31J
require "./lib/trading_system"
require "./lib/base"
require "./lib/pan_database_to_stock"
require "pp"
@data = PanDatabaseToStock.new(stock_list: "./data/tosho_list.txt")
@trading_system =
TradingSystem.new(entries: EstrangementEntry.new(span: 20, rate: 5),
exits: [StopOutExit.new,
EstrangementExit.new(span:20, rate: 3)],
stops: AverageTrueRangeStop.new(span: 20),
filters: MovingAverageDirectionFilter.new(span: 30))
def simulate(code)
stock = @data.generate_stock(code)
@trading_system.set_stock(stock)
@trading_system.calculate_indicators
trade = nil
trades = []
stock.prices.size.times do |i|
if trade
@trading_system.set_stop(trade, i)
trade.length += 1
end
unless trade
trade = @trading_system.check_entry(i)
trade.volume = stock.unit if trade
end
if trade
@trading_system.check_exit(trade, i)
if trade.closed?
trades << trade
trade = nil
end
end
end
trades
end
trades = simulate(8604)
pp trades
puts
trades.each {|trade| puts trade.profit}
puts 総資産 #{trades.map {|trade| trade.profit}.sum}"
このスクリプトを実行すると、
$ ruby .check/trading_system_check.rb
トレードの履歴が出力される。@volumeの値が、上記のようにtosho_list.txt内の証券名の横に挿入した取引株数と思われる。
そしてトレードによる資産の変動が正常に出力されるようになった。
書籍の条件(野村8604、2010年1月から2011年8月)で実行をして結果を比較したいのだが、トレード期間の指定方法がわからない。証券コードを変えれば、シミュレーションのようなことができそうだ。確かに”なかなかの感動”がある。
とうとうシミュレーションスクリプトが動くようになってきた!
課題
- シミュレーションスクリプトのトレード期間の設定方法の理解
【このカテゴリーの最新記事】
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/3628462
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック