日本の時系列株価データーがほしい時には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 件のコメント:
コメントを投稿