株のシステムトレードをしよう - 1から始める株自動取引システムの作り方

株式をコンピュータに売買させる仕組みを少しずつ作っていきます。できあがってから公開ではなく、書いたら途中でも記事として即掲載して、後から固定ページにして体裁を整える方式で進めていきます。

歩み値を配信するサーバその6: 東証から買った歩み値CSVを、銘柄コード別に分割する

how-to-make-stock-trading-system.dogwood008.com

昨日買ったCSVを、扱いやすいように銘柄コード別に分割するスクリプトを作成した。

github.com

# JPXの「現物情報 歩み値(ティック)」を銘柄コード別にバラすスクリプト。
# http://db-ec.jpx.co.jp/category/C220/C22001202111.html
# Usage: ruby splitter.rb

require 'fileutils'

input_file_path = 'stock_tick_202111.csv'
output_parent_dir_path = './stock_ticks/202111'
FileUtils.mkdir_p(output_parent_dir_path)

def output_file_path(stock_code, output_parent_dir_path)
  "#{output_parent_dir_path}/#{stock_code}.csv"
end

def get_stock_code(row)
  first_index_of_stock_code = 13
  stock_code_size = 4
  row[first_index_of_stock_code..first_index_of_stock_code + stock_code_size - 1]
end

current_stock_code = nil
file_pointer = nil
headers = nil
puts 'START'
puts "input_file_path: #{input_file_path}"
File.foreach(input_file_path).with_index do |row, i|
  headers = row and next if i == 0
  stock_code = get_stock_code(row)
  if stock_code != current_stock_code
    puts "[#{current_stock_code = stock_code}]"
    file_pointer&.close
    output_file_path = output_file_path(stock_code, output_parent_dir_path)
    file_pointer = File.open(output_file_path, 'w')
    file_pointer.puts headers
  end
  file_pointer.puts row
  puts(sprintf("[#{stock_code}] Lines: %9d", i)) if i % 10000 == 0
end
file_pointer.close
puts 'END'

これを実行すると、下記のように標準出力に経過を表示しつつ、 ./stock_ticks/202111 以下に下図のようにCSVを出力する。

$ ruby splitter.rb

...
[9984] Lines:  47340000
[9984] Lines:  47350000
[9984] Lines:  47360000
[9984] Lines:  47370000
[9984] Lines:  47380000
[9984] Lines:  47390000

出力されたCSV
出力されたCSV

(C) 2020 dogwood008 禁無断転載 不許複製 Reprinting, reproducing are prohibited.