株価の予測やらアルゴリズム取引のバックテストをやりたくてプログラムを組んでみることにした。個人的なメイン言語はCなのだが、表示関係のライブラリの充実、機械学習との連携、そして、勉強を兼ねてPythonでやってみることにした。
株価データの読み取り
とりあえず、real-timeシステムは将来に置いておくとして、バックテストに特化するものとする。ということで、ネットにある無料の株価データを取得する。
無料(条件有)の株価データはいくつかあるが、今回は「株式投資メモ」さんのものを使うことにする。特に理由はなく、ダウンロードが簡単であっただけである。株式投資メモ
他にSBI Hyperを使う方法もあるが、無料で使うには条件がある。また、Web上からゲットする方法もあるが、今回はオフラインでのテストを繰り返したかったのでとりあえずの環境としてオフラインとする。
データを落とすと、中は日本語である。ラベルが日本語だと面倒なので、2行目だけを如何に書き換える。
元:日付 始値 高値 安値 終値 出来高 終値調整値
新:date open high low close volume adj close
以下はソース
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import mpl_finance as mpf
import codecs as cd
def DataRead():
with cd.open("./dataset/jpstock/1570_2018.csv", "r", "Shift-JIS", "ignore") as csv_file:
df = pd.read_csv(csv_file, quotechar='"', header=1, index_col=0) # convert data frame type by index_col
ローソクチャートの表示
ローソクチャートに表示。あと、移動平均線を同時に表示させることとする。移動平均線の日数と色は、自分がSBI証券を使っているので、それに準拠。
df_ = df.copy()
df_.index = mdates.date2num(df_.index)
data = df_.reset_index().values
fig = plt.figure(figsize=(12, 4))
ax = fig.add_subplot(1, 1, 1)
mpf.candlestick_ohlc(ax, data, width=2, alpha=1.0, colorup='r', colordown='b')
ax.plot(df.index, df['close'].rolling(5).mean(),color='g',label="Moving Ave(5)")
ax.plot(df.index, df['close'].rolling(25).mean(),color='m',label="Moving Ave(25)")
ax.plot(df.index, df['close'].rolling(50).mean(),color='r',label="Moving Ave(50)")
plt.scatter(x, y, s=100, marker="v",color='k')
ax.grid()
locator = mdates.AutoDateLocator()
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(mdates.AutoDateFormatter(locator))
plt.legend()
plt.show()
参考:
pandas, Matplotlib(mpl_finance)でローソク足チャートを作成
Pythonでローソク足と出来高を1つのチャートに簡単に描く方法
将来的(Webからデータ取得):
Webからデータ取得は、pandas_datareaderを使う。しかしこのライブラリは、日本には対応していいないので、ラッパーを作る必要がある。ラッパーを作った人もいたが、将来的なものとしてリンクだけを記載する。また、どうやら欧米のデータもiexしか使えないっぽい。例えばgoogle financeはリンクが変わっていて、ソースを書きなおす必要があるようである。
日本株の株価を取得してpandasデータフレームに格納する
Pythonで株価取得とローソク足チャート作成
pandas-datareaderで株価や人口のデータを取得
Pythonのpandas-datareaderで株価を取得してみる①