
Rubyではじめるシステムトレード (現代の錬金術師シリーズ)
- 作者: 坂本タクマ
- 出版社/メーカー: パンローリング
- 発売日: 2014/05/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
序文
参考書を勉強していく感覚懐かしいですね。
やっぱり知らないこと、知りたいことを勉強していくのは楽しいです。
もうちょっといろいろインプットの時間をとれればいいんですが…。
進捗
- 第2部 データ編
- 第4章 株クラス
- 第5章 銘柄リストを作る
- 第6章 銘柄リストを読み込む
(学習時間:6時間)
GitHub
コード実装部分(一部)
RubySystemTrade\trade_simulator\lib\stock_list_loader.rb
# coding: Windows-31J class StockListLoader def initialize(stock_list_file) unless stock_list_file raise "銘柄リストを指定してください" end @stock_list = File.readlines(stock_list_file, encoding: "utf-8:sjis").map do |line| line.split(",") end end def stock_info @stock_info ||= @stock_list.map do |data| {:code => data[0].to_i, :market_section => data[1], :unit => data[2].to_i} end end def codes @codes ||= stock_info.map{|info| info[:code]} end def market_sections @market_sections ||= stock_info.map{|info| info[:market_section]} end def units @units ||= stock_info.map{|info| info[:unit]} end def filter_by_market_section(*sections) return self unless sections[0] @stock_info = stock_info.find_all do |info| sections.include?(info[:market_section]) end @codes = stock_info.map{|info| info[:code]} @market_sections = stock_info.map{|info| info[:market_section]} @units = stock_info.map{|info| info[:unit]} self end end
実行結果
割愛
感想
今日は東証に上場されている企業のデータ(企業コード・市場・最小単元数)を取得してくるという内容。
堂々とヤフーファイナンスをスクレイピングしてきましょうってこととその方法が書いてあってとってもロック。
5年前の本とはいえ、当時でもさすがにスクレイピングはアウトだと思うんだが…
ぼくはいいこなので別の方法で企業データを取得しました。
ちなみにこの本では企業名すら取得する必要はないそうです。ロックンロール。
当然、書籍と違う方法になる部分は自力で実装しなければならない。
とはいえ、正規表現とかでデータ抽出するのに比べればまだ楽だったような気もする。
つーかこれプログラミング初心者絶対無理だよー。
坂本めっちゃワンライナーするやん半端ないってー。
コマンドプロンプトでスクリプトを動かすので、毎度のことながら文字コードがらみで大苦戦。
最初はちゃんとUTF-8で頑張っていたのだけれど、最終的に観念して「# coding: Windows-31J」する。
ところで上にあげたのは第6章の銘柄リストを読み込む部分のコードなのだけど、最後の三行
@codes = stock_info.map{|info| info[:code]} @market_sections = stock_info.map{|info| info[:market_section]} @units = stock_info.map{|info| info[:unit]}
は元のコードにはなくて書き足した部分。
元のコードのままだと、@stock_infoを更新しても@codes,@market_sections,@unitsが更新されないような気がするのだが、私の理解がなにか間違っているのだろうか。
実際テストコードも正しく動作しなかった。
ここが誤植かどうかはあまり確信はないが、それ以外の場所でも割と誤植と思しき箇所が散見されるのがちょっと残念。
カロリーメイトいらない。
参考サイト
【Ruby】irbで日本語入力ができない|文字化けする時の対処法 - クリアメモリ
異なるエンコーディングでのファイル書き出しと読み込み - Qiita
【Ruby】よく使うFileクラスを使ったファイル読み込み処理 - Qiita
Ruby で文字列が数字だけで構成されているか判定する (簡易ユニットテスト付き) - Qiita
Ruby: ファイルから1行/段落ごと読み込む(入力する)には? - Build Insider
encode, encode! (String) - Rubyリファレンス
[https://code-examples-ja.hateblo.jp/entry/2014/09/16/Ruby|%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%82%E3%81%86%E3%81%A8%E3%81%97%E3%81%A6%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC:title] 貼れない!?