PythonでFXのヒストリカルデータ分析 導入編

この記事では、FXのヒストリカルデータを扱う初歩的なところを纏めます。

ヒストリカルデータの入手する

ヒストリカルデータの入手については、MT4を使います。MT4でヒストリカルデータを入手し、それをCSVに出力してPythonで読み込みます。

CSVへの出力方法については、下記の記事を参照してください。

「MT4のヒストリカルデータをCSVに出力(エクスポート)する」

第一弾として、2018/3/12(月)から2018/3/16(金)までのEURUSDの1分足の1週間のデータでお試ししてみます。作成したCSVをアップロードしておきますので、とりあえず試したいという方は、ダウンロードして使ってください。本格的にヒストリカルデータが欲しいのであれば、上記の記事の方法でMT4でダウンロードして出力してください。

「EURUSD_1_20180325190546.csv」

pandasのDataFrameとして読み込む

CSVのヘッダは、下記の通り。

[~/workspace/fx/data] $ head -3 EURUSD_20180312_1W.csv 
t,open,high,low,close
2018.03.12 00:01:00,1.23096,1.23112,1.22985,1.23106
2018.03.12 00:02:00,1.23106,1.23106,1.23106,1.23106

tがtimeの略で、時刻フォーマットとして読み込み、これをキーとしています。

>>> import pandas as pd
>>> from pandas import Series, DataFrame
>>> ticks = pd.read_csv('../data/EURUSD_20180312_1W.csv', parse_dates=['t'], index_col='t')

結果、インデックスと各列のデータタイプを見ると正しく読めてました。

>>> type(ticks.index)
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>

>>> ticks.dtypes
open     float64
high     float64
low      float64
close    float64
dtype: object

とりあえずプロットしてみる

終値(close)を時系列でプロットしてみます。

>>> import matplotlib.pyplot as plt
>>> ticks.close.plot()
>>> plt.show()

結果、下記のようなグラフが描けました。MT4の時系列と比べて同じ波形と確認しました。

はじめての時系列プロット

別の時間足のヒストリカルデータを生成する

これまでの例は、MT4で出力した1分足のCSVを読んでました。これから分析するときに5分足とか、1時間足とか必要になるかもしれません。そういうときに、再度MT4で出力し直すのは面倒なので、時間足を変更して計算し直せるようにしておきたいです。

それには、リサンプリングと集計をすれば良いです。下記では、ticks_hには1時間足、ticks_dには1日足が計算されて入ります。

>>> ticks_h = ticks.resample('H').agg({'open':'first', 'high':'max', 'low':'min', 'close':'last'})
>>> ticks_d = ticks.resample('D').agg({'open':'first', 'high':'max', 'low':'min', 'close':'last'})

ちなみに、1時間足はこんな漢字です。

>>> ticks_h.head(5)
                       close      low     open     high
t                                                      
2018-03-12 00:00:00  1.23105  1.22985  1.23096  1.23130
2018-03-12 01:00:00  1.23084  1.23060  1.23105  1.23133
2018-03-12 02:00:00  1.23106  1.23072  1.23084  1.23135
2018-03-12 03:00:00  1.23167  1.23062  1.23107  1.23185
2018-03-12 04:00:00  1.23213  1.23160  1.23166  1.23229

まとめ

とりあえず、Pythonで為替のヒストリカルデータ(時系列データ)を扱えるようにpandasのDataFrameで読み込めるようになりました。

検証まとめ記事へのリンク

システムトレードの他のネタを纏めています。参考になれば嬉しいです。

↓↓↓検証まとめページはこちら↓↓↓
【保存版】PythonでのFXのシステムトレード検証

シェアする

  • このエントリーをはてなブックマークに追加

フォローする