OANDA API を使って為替データを取得
為替データを使ってみよう
このポストは,PyLadies Japan Advent Calendar 2020 - Adventar21日目のポストです.
Pythonでデータ分析にトライしたいとおもった時に,じゃあデータどうする?というのはいつも悩むことだと思います.
為替データは多くの業者がヒストリカルデータを無料で提供していますので,こういう時に便利かもしれない,とおもってこのポストを書きました
為替データの良いところ,難しいところは以下のようなところです.
利点
- 日本時間月曜朝7時〜土曜日朝7時ころまで,どの国の祝祭日関係なく平日であれば必ず市場が開いている(元旦は閉まってる)
- FX業者から価格データはだいたい無料で提供されている
- APIで提供されていることがおおい
- python のラッパーが提供されていることもおおい
難点
- 業者によって,DataのTimezoneが異なる
- UTCでない場合は,SummerTimeの切り替えが本当にめんどくさい
- 業者によっては,通貨ペアが限られる
以上を踏まえて,私はOANDAのデータをオススメしています.以下理由です.
Oanda の FX data について
- Timezoneは UTC
- Pythonラッパーがある oanda/oandapy: Python wrapper for the OANDA REST API
- Documentが充実している https://developer.oanda.com/rest-live-v20/introduction/
デモ口座解説とAPIアクセス
- https://www.oanda.jp/trade/practice/openaccountv20.do?p=0 でデモ口座開設してください
- APIアクセスの管理 から、
API KEY
をメモっとく
oandapy インストールと確認テスト
仮想環境を用意して oandapy をインストールします.(仮想環境めんどくさいという方はいらないです)
仮想環境作成
$ mkdir oandatest
$ cd oandatest
$ python -m venv .venv
$ source .venv/bin/activate
oandapy インストール
# oandapy install
$ pip install git+https://github.com/oanda/oandapy.git
# あとで使うので pandas もインストール
$ pip install pandas
確認テスト
$ python
>>> import oandapy
>>> oandapy.API()
<oandapy.oandapy.API object at 0x7ff69d329e48>
現在価格取得
ドル円の現在価格を取得してみましょう
>>> api_key = "your API key here"
>>> oanda = oandapy.API(environment="practice", access_token=api_key)
>>> oanda.get_prices(instruments="USD_JPY")
{'prices': [{'instrument': 'USD_JPY', 'time': '2020-12-20T23:47:16.329850Z', 'bid': 103.422, 'ask': 103.426}]}
OK!
ヒストリカルデータ取得
# instance の method get_history に 通貨ペア名, 粒度, 取得数を渡す
data = oanda.get_history(
instrument="USD_JPY", # 通貨ペア名
granularity="M1", # 粒度
count=2 # 直近から何本遡ってデータを取得するか Max5000
)
粒度と通貨ペア名はここをみてね
- Candlestick Granularity (粒度)
- Instruments: 取得可能な通貨ペアリスト。
これで,このようなJSONデータが取得できます.
{'candles': [{'closeAsk': 103.449,
'closeBid': 103.434,
'complete': True,
'highAsk': 103.449,
'highBid': 103.434,
'lowAsk': 103.433,
'lowBid': 103.417,
'openAsk': 103.433,
'openBid': 103.417,
'time': '2020-12-20T23:48:00.000000Z',
'volume': 17},
{'closeAsk': 103.465,
'closeBid': 103.45,
'complete': False,
'highAsk': 103.465,
'highBid': 103.45,
'lowAsk': 103.451,
'lowBid': 103.436,
'openAsk': 103.451,
'openBid': 103.436,
'time': '2020-12-20T23:49:00.000000Z',
'volume': 27}],
'granularity': 'M1',
'instrument': 'USD_JPY'}
pandas にいれて DataFrame にする
# DataFrame 化する
import pandas as pd
pd.DataFrame(data["candles"])
df = pd.DataFrame(data["candles"])
>>> df
time openBid openAsk highBid highAsk lowBid lowAsk closeBid closeAsk volume complete
0 2020-12-20T23:53:00.000000Z 103.451 103.465 103.451 103.465 103.434 103.448 103.434 103.448 39 True
1 2020-12-20T23:54:00.000000Z 103.432 103.447 103.434 103.448 103.431 103.445 103.433 103.448 17 False
簡単にヒストリカルデータが取得出来たと思います.
ヒストリカルデータは,現時点から遡ってMax5000本取得出来ます.つまり,粒度をD(日足)にした場合は5000日分,M1(分足)にした場合は5000分取得できる,というこ仕様です.
分析の結果からいいストラテジーができることをお祈りいたします :-)
Google Colab
Pythonの環境構築がめんどくさい,という方は,Google Colab を使えば楽だと思います.
Colab は,最初から pandas が利用出来ますので,インストールは oandapy のみです.よってセルで
! pip install git+https://github.com/oanda/oandapy.git
を実行すればOK
Google Colab に関してはこちら
Google Colab をはじめて使う人は,Google Driveにアプリを追加する必要があります.こちらを参考にしてください.
ちょっと宣伝
実は⇑の内容は月刊フィントークという勉強会で使った内容の使い回しです(笑)
月刊フィントークは,日頃気になっている金融・経済関連ニュースや,最近起きた株価の急落急騰の原因,このトレード手法はどうなの?など,わからない事を質問して,答えれる人がいたら教えてもらおう!という 【女性限定】 の会です.
その他にもPythonを使った金融商品の分析ハンズオンや,ファンダメンタルズ,Nisa/iDeco の勉強会, Git/Githubやローコード,ノーコードの勉強会など,いろんな勉強をみんなでやっていこう!という会でございます.
最近はオンラインでイベントを開催しています.よかったら遊びに来て下さい.
Discussion