Pythonではじめるシステムトレード
タイトルをRubyの本の真似してみた。
第4章のコードから始める。
で、いきなりだがPythonのコードはこうなった。
libフォルダのstock.py
#!/usr/bin/env python # -*- coding: utf-8 -*- # 株を表すクラス class Stock: def __init__(self, code, market, unit): self.code = code self.market = market self.unit = unit self.prices = [] self.price_hash = {'date':[], 'open':[], 'high':[], 'low':[], 'close':[], 'volume':[]} # 1日分の株価を加える def add_price(self, date, open, high, low, close, volume): d = {'date':date, 'open':open, 'high':high, 'low':low, 'close':close, 'volume':volume} self.prices.append(d) # 株価データのうち、特定の種類 # (日付、4本値のどれか、出来高)の配列を得る def map_prices(self, price_name): self.price_hash[price_name] = self.price_hash[price_name] or [] if self.price_hash[price_name] == []: for x in self.prices: self.price_hash[price_name].append(x[price_name]) return self.price_hash[price_name] # 日付の配列 def dates(self): self.map_prices('date') return self.price_hash['date'] # 始値の配列 def open_prices(self): self.map_prices('open') return self.price_hash['open'] # 高値の配列 def high_prices(self): self.map_prices('high') return self.price_hash['high'] # 安値の配列 def low_prices(self): self.map_prices('low') return self.price_hash['low'] # 終値の配列 def close_prices(self): self.map_prices('close') return self.price_hash['close'] # 出来高の配列 def volumes(self): self.map_prices('volume') return self.price_hash['volume']
それからcheckフォルダのstock_check.py
#!/usr/bin/env python # -*- coding: utf-8 -*- from lib.stock import Stock stock = Stock(8604, 't', 100) print(stock.code) print(stock.market) print(stock.unit) 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']) #=> "2011-07-01" print(stock.prices[1]['open']) #=> 402 print(stock.prices[2]['high']) #=> 408 print(stock.prices) dates = stock.map_prices('date') # 日付の配列を取り出す print(dates[1]) #=> "2011-07-04" open_prices = stock.map_prices('open') # 始値の配列を取り出す print(open_prices[0]) #=> 402 print(dates) #=> ["2011-07-01", "2011-07-04", "2011-07-05"] print(stock.dates()[0]) #=> "2011-07-01" print(stock.open_prices()[1]) #=> 402 print(stock.high_prices()[2]) #=> 408 print(stock.low_prices()[0]) #=> 395 print(stock.close_prices()[1]) #=> 403 print(stock.volumes()[2]) #=> 20678000 input()
price_hashの並びがバラバラなのが気になるが、
辞書には順序の概念がないのでこうなるらしい。
OrderedDictを使えば順序も決められるので
もし必要なときはそちらに変更する予定。
4章終わり、5章に続く。
Rubyではじめるシステムトレード (現代の錬金術師シリーズ)
- 作者: 坂本タクマ
- 出版社/メーカー: パンローリング
- 発売日: 2014/05/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る