はじめに
Pythonを使ってFxの自動取引を夢見ている方の中には、OANDA口座の以下の利用条件を見て敷居が高いと感じた方がいらっしゃるかと思います。(2024年3月現在)
- 会員ステータスがGOLD(前月のUSD取引量が50万以上)
- OANDA口座の残高が25万円以上
私も上記の条件を見て尻込みしました。口座残高に25万円以上はまだ可能ですが取引量が50万以上を必要とするGOLDステータスの条件が人によってはしんどいと思います。
とはいえ、Fxの口座が開設出来てかつAPIが利用できるところは現状OANDA以外他がないため、自動取引をしたい場合は腹を括ってOANDAを利用するしかありません。
しかし、このサイトに訪れた方の多くは将来的にFXの自動売買を考えているけど、とにかくまずはFxのデータ分析がしたい、ドル円などの過去データを使って機械学習モデルを組んでみたいと思っている方がほとんどでしょう。
そういった場合に、OANDAの口座開設して…25万入金して….50万円分の取引実績を作って….来月にGOLDステータスになるまで待って…..APIの利用申請を送って…….みたいなステップを踏んでいくのは大変負担が大きいことかと存じます。
なので、ここではOANDAの口座を開設しないで、Pythonを使って、様々なFXの通貨データを色々な時間足で取得できる方法を解説します。
この記事で最低限必要な準備
これからOANDA口座を必要としない、Pythonを使ったFxデータの取得方法を解説するのですが、その際に最低限必要な準備を以下に列挙します。
なるべく画像多めで分かりやすい説明を心がけますが、まったくのPC初心者!って方からすると悩みながら進めて行くことになると覚悟してください。
【必要な準備】
- Python 3.10.5環境(ver3.10以上なら何でもOKです)
- MetaTrader5のインストールが完了している
- Pythonの文法を理解できる
Pythonについては、一応バージョン揃えてもらえるとバージョン依存によるエラーに無駄に悩むことがなくなると思います。
MetaTrader5については、以下のセットアップ手順を参考にしてもらえれば環境準備出来ると思います。
PythonでFxデータを取得する方法
仕組み
最低限必要な準備でインストールしてもらったMT5経由でFxの価格データを取得します。そのために、PythonパッケージであるMetaTrader5を使ってMT5からデータを持ってきます。
MT5と言えど、特に口座開設する必要もなくデモ口座を自動で作ってくれるので無料で使えますし豊富な銘柄が揃っているのでFXデータが欲しい場合はMT5一つですべて解決します。
必要なパッケージ一覧
以下のパッケージを事前にpipでインストールしてください。
- MetaTrader5==5.0.4200
- pandas==2.2.1
- matplotlib==3.8.0
- mplfinance==0.12.10b0
- finplot==1.9.4
上記パッケージを以下のようにpipコマンドでインストールしてください。
pip install MetaTrader5==5.0.4200
取得可能銘柄一覧
MT5経由で取得するので使用するサーバによって変わってきますが、MT5をインストールした際にデモ口座が自動で作成されMetaQuotes様のサーバ経由でレートを取得できるようになります。
MetaQuotesのデモサーバで取得できる銘柄は、全部で140銘柄あるため基本はなんでも取得できると思います。日本語通過ペアに限定した場合は以下の銘柄が取得可能です。
- USDJPY
- AUDJPY
- CADJPY
- CHFJPY
- EURJPY
- GBPJPY
- NZDJPY
- SGDJPY
- MXNJPY
- ZARJPY
- DKKJPY
- HKDJPY
- NOKJPY
- PLNJPY
- SEKJPY
- TRYJPY
- CNHJPY
本当になんでも取得可能です。
取得可能時間足一覧
MT5経由で各銘柄のTickデータが取得できますが、ヒストリカルデータに馴染みがある方もいると思います。以下がMT5で取得できる時間足の一覧になります。
FRAME_ID | 名前 |
---|---|
TIMEFRAME_M1 | 1分 |
TIMEFRAME_M2 | 2分 |
TIMEFRAME_M3 | 3分 |
TIMEFRAME_M4 | 4分 |
TIMEFRAME_M5 | 5分 |
TIMEFRAME_M6 | 6分 |
TIMEFRAME_M10 | 10分 |
TIMEFRAME_M12 | 12分 |
TIMEFRAME_M12 | 15分 |
TIMEFRAME_M20 | 20分 |
TIMEFRAME_M30 | 30分 |
TIMEFRAME_H1 | 1 時間 |
TIMEFRAME_H2 | 2時間 |
TIMEFRAME_H3 | 3時間 |
TIMEFRAME_H4 | 4時間 |
TIMEFRAME_H6 | 6時間 |
TIMEFRAME_H8 | 8時間 |
TIMEFRAME_H12 | 12時間 |
TIMEFRAME_D1 | 1日 |
TIMEFRAME_W1 | 1週間 |
TIMEFRAME_MN1 | 1 ヶ月 |
こちらもかなり細かく時間足を指定できます。
MT5からドル円データを取得するサンプルコード¶
必要なパッケージのインストール¶
import MetaTrader5 as mt5
from datetime import datetime
import matplotlib.pyplot as plt
import mplfinance as mpf
import finplot as fplt
import pandas as pd
import warnings
warnings.filterwarnings(action="ignore")
MT5の起動¶
以下のコードを実行するとMT5が起動します。アプリを終了しないように注意してください。
邪魔であればウィンドウを最小化してください。
if not mt5.initialize():
print("initialize() failed")
mt5.shutdown()
else:
print("initialized OK! Ready MT5!!")
initialized OK! Ready MT5!!
取得したい通過ペアと時間足を指定¶
ここでは1時間足のドル円を指定します。
SYMBOL = "USDJPY"
TIMEFRAME = mt5.TIMEFRAME_H1
指定した日付のヒストリカルデータを取得するサンプルコード¶
2024年1月1日以降のドル円のOHLCデータを取得します。
ohlc_data = mt5.copy_rates_range(
SYMBOL,
TIMEFRAME,
datetime(2024, 1, 1),
datetime.now()
)
df = pd.DataFrame(ohlc_data)
df["time"] = pd.to_datetime(df["time"], unit="s", utc=True).dt.tz_convert("Asia/Tokyo")
df.set_index("time", inplace=True)
df.rename(
columns={
col: col.title() for col in ["open", "high", "low", "close"]} | {"tick_volume": "Volume"},
inplace=True
)
df
Open | High | Low | Close | Volume | spread | real_volume | |
---|---|---|---|---|---|---|---|
time | |||||||
2024-01-02 09:00:00+09:00 | 140.830 | 140.961 | 140.816 | 140.881 | 352 | 5 | 0 |
2024-01-02 10:00:00+09:00 | 140.914 | 141.127 | 140.807 | 141.111 | 7483 | 10 | 0 |
2024-01-02 11:00:00+09:00 | 141.111 | 141.379 | 141.095 | 141.141 | 7453 | 10 | 0 |
2024-01-02 12:00:00+09:00 | 141.142 | 141.457 | 141.140 | 141.435 | 7726 | 8 | 0 |
2024-01-02 13:00:00+09:00 | 141.435 | 141.668 | 141.361 | 141.559 | 7359 | 7 | 0 |
… | … | … | … | … | … | … | … |
2024-03-27 13:00:00+09:00 | 151.730 | 151.968 | 151.721 | 151.889 | 2205 | 0 | 0 |
2024-03-27 14:00:00+09:00 | 151.889 | 151.927 | 151.611 | 151.697 | 2820 | 0 | 0 |
2024-03-27 15:00:00+09:00 | 151.697 | 151.711 | 151.592 | 151.687 | 1434 | 0 | 0 |
2024-03-27 16:00:00+09:00 | 151.687 | 151.800 | 151.655 | 151.751 | 1353 | 0 | 0 |
2024-03-27 17:00:00+09:00 | 151.751 | 151.765 | 151.639 | 151.694 | 1859 | 0 | 0 |
1471 rows × 7 columns
値動きをグラフ化¶
ローソク足データでプロットできる素敵ツールを使って値動きを可視化してみましょう。
# fplt.candlestick_ochl(df.set_index('time')[['open', 'close', 'high', 'low']])
# fplt.show()
mpf.plot(df, style='starsandstripes', type="candle", volume=True, figsize=(16, 12), mav=(5, 25, 75))
plt.show()
MT5の終了¶
必ずpythonから呼び出したMT5はシャットダウンしておきましょう。
mt5.shutdown()
True
コメント