「Rubyではじめるシステムトレード」で株価dataを扱うstock classをpythonで作成した。オリジナル版ではメモリ使用量を抑えるためにRubyのシンボルを用いて記述されているが、Pythonでそれに該当する機能が不明なため、文字列で同じ動作をするものを作成した。
stock.py class Stock: def __init__(self, code, market, unit): self.code = code self.market = market self.unit = unit self.prices = [] def add_price(self, date, open, high, low, close, volume): self.prices.append(dict(date=date, open=open, high=high,low=low, close=close, volume=volume)) def map_prices(self, price_name): return([d.get(price_name) for d in self.prices]) def dates(self): return self.map_prices('date') def open_prices(self): return self.map_prices('open') def high_prices(self): return self.map_prices('high') def low_prices(self): return self.map_prices('low') def close_prices(self): return self.map_prices('close') def volumes(self): return self.map_prices('volume')
このStock classを読み込み、四本値や日にち、出来高を取り込んだリストstock.pricesを操作するtest codeは以下のとおりである。
"stock_check.py" from stock import Stock stock = Stock(8604, ':t', 100) stock.add_price("2011-07-01", 402, 402, 395, 397, 17495700) stock.add_price("2011-07-04", 402, 404, 400, 403, 18819300) stock.add_price("2011-07-05", 402, 408, 399, 401, 20678000) print(stock.prices[0]['date']) print(stock.prices[1]['open']) print(stock.prices[2]['high']) print(stock.prices) print(stock.dates()[0]) print(stock.open_prices()[1]) print(stock.high_prices()[2]) print(stock.low_prices()[0]) print(stock.close_prices()[1]) print(stock.volumes()[2])
このcodeを実行すると、stock classの日付、始値、高値等を出力できることが確認できる。メソッドにより日付だけ、高値だけなどのリストも作成できている。Ruby版といくつか差異ができたが、ひとまずこのclassでPython版の開発を進めていく。