【FX】Pythonでローソク足をプロットする
前回、為替レートの5分足のヒストリカルデータを入手しました。
www.superi.jp
今回は、このOHLCデータを、PythonのPandasを使ってFXの分析に欠かせない、ローソク足のプロットをしたいと思います。
5分足への変換
読み込むデータは前回入手したファイルです。入手データは1分足(で時折欠損している時間がある)のもので、粒度が細かすぎるので5分足に変換します。
import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline import seaborn as sns #ファイルの読み込み data = pd.read_csv('USDJPY.txt',delimiter=',',dtype = {'<DTYYYYMMDD>':'object','<TIME>':'object'}) #datetimeをパースする import datetime from dateutil.parser import parse data['datetime']=data['<DTYYYYMMDD>'].astype('str').str.cat(data['<TIME>'].astype('str'), sep=' ').apply(lambda x:parse(x)) #GMTの時間となっているため、+9の日本時間に変換 data['time']=data['datetime']+datetime.timedelta(hours=9) #時系列として扱うため、timeをインデックスにセット data.set_index('time', inplace=True) #5分足にリサンプリング ticks_5T = data.resample('5T').agg({'<OPEN>':'first', '<HIGH>':'max', '<LOW>':'min', '<CLOSE>':'last'}) ticks_5T = ticks_5T.rename(columns={'<OPEN>':'open', '<HIGH>':'high', '<LOW>':'low', '<CLOSE>':'close'}) ticks_5T = ticks_5T.loc[:,['open','high','low','close']]
1分足を5分足にリサンプリングするにはresample().agg()
を使用します。resampleの引数は、以下のとおりです。
引数 | ローソク足 |
---|---|
D | 日 |
H | 時間 |
T | 分 |
この際、5分足のOHLCを算出したい場合は'5T'と数値を加えてあげます。
結果、次のようなデータが作成されるかと思います。
チャートのプロット
次に作成した5分足データをチャートにプロットします。
import matplotlib.pyplot as plt import matplotlib.finance as mpf from matplotlib import ticker import matplotlib.dates as mdates #チャート描画オブジェクトの定義 def candlechart(data, width=0.8): fig, ax = plt.subplots() # ローソク足 mpf.candlestick2_ohlc(ax, opens=data.open.values, closes=data.close.values, lows=data.low.values, highs=data.high.values, width=width, colorup='r', colordown='b') xdate = data.index ax.xaxis.set_major_locator(ticker.MaxNLocator(6)) def mydate(x, pos): try: return xdate[int(x)] except IndexError: return '' xtick0 = (5-data.index[0].weekday())%5 #最初の月曜日のインデックス plt.xticks(range(xtick0,len(data),5), [x.strftime('%Y-%m-%d') for x in data.index][xtick0::5]) ax.xaxis.set_major_formatter(ticker.FuncFormatter(mydate)) ax.format_xdata = mdates.DateFormatter('%Y-%m-%d') ax.ticklabel_format(style='plain',axis='y', useOffset=False) fig.autofmt_xdate() fig.tight_layout() return fig, ax # チャートのプロット candlechart(ticks_5T['2001-01-03 08:05:00':'2001-01-03 10:05:00'])
matplotlibにはfinance用のプロットmatplotlib.finance
があり、その中でローソク足をプロットする関数candlestick2_ohlc
があるので、そちらを利用します。
またそのままプロットすると休場の日曜日が空白になってしまいますので、営業日以外をスキップしてチャートに表示するようにしてあります。
結果はこちらです。
これでローソク足がプロットできました。次回はあのアノマリを検証したいと思います。
参考
PythonのMatplotlib+Pandasで為替レートCSVからローソク足チャートを描いてみよう
Pythonでローソク足チャートの表示(matplotlib編) - Qiita
日付の加算 減算 timedelta | Python Snippets
pandasで時系列データのOHLC(四本値)を算出・ダウンサンプリング | note.nkmk.me
PythonでFXのヒストリカルデータ分析 導入編|crz33