日本の時系列株価データーがほしい時にはjsmを使う
http://pyalgotradejp.blogspot.jp/2015/09/jsm.html
手元に蓄積したデータがあってそれを使いたい場合は、feedにCSVファイルを読み込むことができる。
まずはフィードにCSVから読み込む改造
9997は証券コードだが、別に何でもいい。test.csvからデータをフィードに取り込んでいる。
ポイントは3つ from pyalgotrade.barfeed import csvfeed
feed = csvfeed.GenericBarFeed(bar.Frequency.DAY)
feed.addBarsFromCSV("9997","test.csv")
あとはいつもと変わらない。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import matplotlib
matplotlib.use('Agg')
from pyalgotrade import plotter
from pyalgotrade.technical import highlow
from pyalgotrade import strategy
from pyalgotrade import bar
from pyalgotrade.barfeed import csvfeed
from pyalgotrade.technical import cross
class MyStrategy(strategy.BacktestingStrategy):
def __init__(self, feed, instrument):
strategy.BacktestingStrategy.__init__(self, feed)
self.__prices = feed[instrument].getPriceDataSeries()
self.__high = highlow.High(feed[instrument].getCloseDataSeries(),10)
self.__low = highlow.Low(feed[instrument].getCloseDataSeries(),10)
self.__instrument = instrument
def onBars(self, bars):
bar = bars[self.__instrument]
self.info("%f Hi:%s Lo:%s" % (self.__prices[-1],self.__high[-1],self.__low[-1]))
# Load the Local feed from the CSV file
feed = csvfeed.GenericBarFeed(bar.Frequency.DAY)
feed.addBarsFromCSV("9997","test.csv")
# Evaluate the strategy with the feed's bars.
myStrategy = MyStrategy(feed, "9997")
plt = plotter.StrategyPlotter(myStrategy, True, True, True)
myStrategy.run()
plt.plot(None,None,"output.png")
データベースから直接読み取りたいところであるが、サポートしていないようだ。
仕方ないので、データベースからcsvで書き出すプログラムを書いた。「それSQLでできるよ」なのだが、指定のヘッダーが必ず必要なのでどうせならとpythonで書いてしまった。
#/usr/bin/python
import MySQLdb
from MySQLdb.cursors import DictCursor
import sys
argvs = sys.argv
argc = len(argvs)
if(argc != 2):
print "usage: # python %s code" % argvs[0]
quit()
code=argvs[1]
connection = MySQLdb.connect(db="stock",user="stock")
cursor = connection.cursor()
cursor.execute("select * from bulk_data where code=%s order by reg_date",(code,))
result=cursor.fetchall()
print "Date Time,Open,High,Low,Close,Volume"
for row in result:
print("%s 15:00:00,%d,%d,%d,%d,%d" % (row[0],row[2],row[3],row[4],row[5],row[6]))
cursor.close()
connection.close()
ぶっちゃけシェルスクリプトで書くこともできるが、あえてpythonで書く。というのも、調整終値の欄がないからだ。
分割などでいきなり株価が半分になっているのを権利落ち修正しないとデーターの連続性がなくなってしまう。データーがないのであればいっそ切り捨てたほうがいい。というような処理をしたいときに困るだろうという配慮だ。
ちなみに、この銘柄は2014年1月に分割している

0 件のコメント:
コメントを投稿