「Rubyではじめるシステムトレード」のPython版開発2

投稿者: | 2022年7月14日

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です