pythonとmpl_financeを使って株価チャートを表示させる方法
環境
- ubuntu 18.04(WSLによる構築)
- python3.7(anacondaによる構築)
はじめに
機械学習用の学習データを集める際に利用したものです。
データがcsv形式で存在すれば実行できると思います。
以下のように出力されます。
※学習データ用なので、人間が見やすいものではありません。
コード
import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates import csv import mpl_finance from pathlib import Path CSV_PATH = "histday" CHART_IMG_PATH = "chart" def num2chart(code, number, opens, highs, lows, closes, judge): # ====================================== # code: 銘柄コード # number: 何番目のブロックを取得するか # opens: 始値(一次元配列) # highs: 高値(一次元配列) # lows: 安値(一次元配列) # closes: 終値(一次元配列) # judge: 上がったか下がったか # ====================================== fig = plt.figure(figsize=(0.5, 0.5), facecolor="k", edgecolor="k") ax = fig.add_subplot(1, 1, 1) fig.patch.set_facecolor('black') fig.patch.set_alpha(0) ax.patch.set_facecolor('black') ax.patch.set_alpha(1) mpl_finance.candlestick2_ohlc(ax, opens=opens, highs=highs, lows=lows, closes=closes, width=1, alpha=1, colorup='r', colordown='b') plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False) plt.tick_params(bottom=False, left=False, right=False, top=False) ax = plt.gca() ax.spines["right"].set_color("none") ax.spines["left"].set_color("none") ax.spines["top"].set_color("none") ax.spines["bottom"].set_color("none") plt.style.context('classic') plt.rcParams['axes.xmargin'] = 0 plt.rcParams['axes.ymargin'] = 0 plt.savefig("{}/{}/{}_{}.png".format(CHART_IMG_PATH, judge, code, number)) plt.cla() plt.clf() plt.close() def main(block, slide_span, predict_day): p = Path(CSV_PATH) csv_list = [file for file in list(p.glob("*"))] start = 0 for csv in csv_list: print(csv) df = pd.read_csv(csv) for i in range(start, len(df)-block-predict_day, slide_span): code = df['code'][0] opens = df['start'] highs = df['high'] lows = df['low'] closes = df['end'] # ブロックの最後の要素と最後の要素からpredicr_day日後の終値を比較 # 1.0より上なら上昇、以下なら下降したという仕分け if closes[i+block-1+predict_day] / closes[i+block-1] > 1.0: judge = "up" else: judge = "down" num2chart(code, i, opens[i:i+block], highs[i:i+block], lows[i:i+block], closes[i:i+block], judge) start = 0 if __name__ == "__main__": # 生成するチャートの期間 block = 20 # 何日ずらすか slide_span = 20 # 何日後のデータを参照するか predict_day = 3 main(block, slide_span, predict_day)
感想
機械学習で使う場合、軸や目盛線は消したほうが良いのか悪いのか分かりません。
そのあたりいつか検証してみたいところです。
また、最近ではbokehというライブラリも流行っているそうです。
こちらはグラフをweb上で動かしたりするのが簡単にできるそうです。
matplotlibのGitHub。スター数: 9115 github.com
bokehのGitHub。スター数: 9321 github.com