「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版の開発を進めていく。
