💱

OANDA API を使って為替データを取得

2020/12/21に公開

為替データを使ってみよう

このポストは,PyLadies Japan Advent Calendar 2020 - Adventar21日目のポストです.

Pythonでデータ分析にトライしたいとおもった時に,じゃあデータどうする?というのはいつも悩むことだと思います.

為替データは多くの業者がヒストリカルデータを無料で提供していますので,こういう時に便利かもしれない,とおもってこのポストを書きました

為替データの良いところ,難しいところは以下のようなところです.

利点

  • 日本時間月曜朝7時〜土曜日朝7時ころまで,どの国の祝祭日関係なく平日であれば必ず市場が開いている(元旦は閉まってる)
  • FX業者から価格データはだいたい無料で提供されている
  • APIで提供されていることがおおい
  • python のラッパーが提供されていることもおおい

難点

  • 業者によって,DataのTimezoneが異なる
  • UTCでない場合は,SummerTimeの切り替えが本当にめんどくさい
  • 業者によっては,通貨ペアが限られる

以上を踏まえて,私はOANDAのデータをオススメしています.以下理由です.

Oanda の FX data について

デモ口座解説とAPIアクセス

  1. https://www.oanda.jp/trade/practice/openaccountv20.do?p=0 でデモ口座開設してください
  2. 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 
    ) 

粒度と通貨ペア名はここをみてね

これで,このような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にアプリを追加する必要があります.こちらを参考にしてください.

https://www.atmarkit.co.jp/ait/articles/1812/10/news145.html

ちょっと宣伝

実は⇑の内容は月刊フィントークという勉強会で使った内容の使い回しです(笑)

月刊フィントークは,日頃気になっている金融・経済関連ニュースや,最近起きた株価の急落急騰の原因,このトレード手法はどうなの?など,わからない事を質問して,答えれる人がいたら教えてもらおう!という 【女性限定】 の会です.

その他にもPythonを使った金融商品の分析ハンズオンや,ファンダメンタルズ,Nisa/iDeco の勉強会, Git/Githubやローコード,ノーコードの勉強会など,いろんな勉強をみんなでやっていこう!という会でございます.

最近はオンラインでイベントを開催しています.よかったら遊びに来て下さい.

https://fintalk.connpass.com/

Discussion