34
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OANDA APIから為替データを取得

Last updated at Posted at 2018-11-13

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ヶ月
34
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?