FXの自動売買について少し興味が湧きましたので
OANDA APIから為替のデータを取得する方法を書いていきたいと思います.
#OANDA API
アメリカに本社を構えるFX業者OANDAが提供しているAPIです.
新しい情報であったり,細かい情報は英語のページしか存在しないのですが,
日本語のページも存在するのですごく助かります.
口座の開き方であったり,APIのアクセス方法は別のサイトを参考にしてください.
OANDA APIを選んだ理由は,
- デモ口座が存在する
- 25万円で本番用APIを扱える
この二つです.
いきなり自分の作成したソフトを使ってお金を動かすのは怖いので,
デモ口座でもAPIを動かせるのは必須です.
次に本番用APIを扱うために口座が必要なのですが,
25万円で開く事ができるのは学生にしてはすごくありがたいです.
このような理由から私はOANDA APIしようすることにしました.
#Pythonで為替データを取得
まず,oandapyV20とpandasをインポートします.
oandapyV20はoandapyを操作するライブラリで,pandasはデータの操作をするためのライブラリです.
それぞれインストールしていない場合は,pipなどでインストールしてください.
# インポート
from oandapyV20 import API
import oandapyV20.endpoints.instruments as instruments
import pandas as pd
APIの設定をしていきます.
accountID
,access_token
にはそれぞれ自分の取得した値を代入してください.
与えている数値は適当な数値なのでこのまま実行してもエラーが起きてしまいます.
# APIの設定
accountID = "000-000-0000000-000"
access_token = "XXXXXXXXXXXXXXXXXXXXXX"
api = API(access_token=access_token)
次に,取得したい為替データを指定します.
この例では5分間隔の5000個のデータを取得します.
count
でデータ数,granularity
で時間の間隔を指定します.
1度の取得で5000データまでしか取得できないので注意してください.
granularity
で指定できる間隔は付録を参考にしてください.
# 5分間隔で5000データ
params = {
"count": 5000,
"granularity": "M5"
}
では,実際に為替データをリクエストしていきます.
instrument
では取得したい為替を指定します.
ここでは,米ドル/円を取得しています.
api.requesr(r)
とすることで,r.response
にデータが取得されます.
# APIへ過去データをリクエスト
r = instruments.InstrumentsCandles(instrument="USD_JPY", params=params)
api.request(r)
取得したままでは扱いにくいので,必要なデータだけを取り出し,リストに変換します.
# dataとしてリストへ変換
data = []
for raw in r.response['candles']:
data.append([raw['time'], raw['volume'], raw['mid']['o'], raw['mid']['h'], raw['mid']['l'], raw['mid']['c']])
機械学習などで使用しやすいようにデータフレームに変更します.
# リストからデータフレームへ変換
df = pd.DataFrame(data)
df.columns = ['time', 'volume', 'open', 'high', 'low', 'close']
df = df.set_index('time')
最後に時間についてソートすることで綺麗にします.
# date型を綺麗にする
df.index = pd.to_datetime(df.index)
print(df.tail())
以上のプログラムを続けて入力するだけで為替データを取得できるようになっています.
最後に確認の意味を込めてdf
の最初の5行のデータをプリントしています.
実行結果は以下のようになります.
volume open high low close
Time
2018-11-13 12:00:00 60 114.000 114.034 114.000 114.022
2018-11-13 12:10:00 51 114.020 114.022 114.004 114.010
2018-11-13 12:20:00 141 114.008 114.010 113.937 113.938
2018-11-13 12:30:00 150 113.940 113.982 113.933 113.980
2018-11-13 12:40:00 69 113.978 113.980 113.945 113.945
これで5分間隔の5000件のデータを取得できたのであとはデータベースに保存するなり,
学習させるなり好きなようにしてみてください!
#付録
データの間隔を指定するgranularity
で扱える間隔を記載します.
引数 | 間隔 |
---|---|
S5 | 5秒間 |
S10 | 10秒間 |
S15 | 15秒間 |
S30 | 30秒間 |
M1 | 1分間 |
M2 | 2分間 |
M3 | 3分間 |
M4 | 4分間 |
M5 | 5分間 |
M10 | 10分間 |
M15 | 15分間 |
M30 | 30分間 |
H1 | 1時間 |
H2 | 2時間 |
H3 | 3時間 |
H4 | 4時間 |
H6 | 6時間 |
H8 | 8時間 |
H12 | 12時間 |
D | 1日 |
W | 1週間 |
M | 1ヶ月 |