フルスタックエンジニア目指して

エンジニアリングのことはもちろん、全然関係無い話もします。

oandapyを使用して為替データを取得する

概要

FXの自動取引システムを構築して欲しいと知り合いに頼まれたので、色々と試してみました。

Oandaが様々な言語でoanda REST APIのWrapperを提供しているので、デモ申込を行いサンプルコードを書いてみました。

後々機械学習で運用することも考えて、Python版のWrapperであるoandapyを使用してみることにしました。

環境の準備

pyenvとpyenv-virtualenvをインストール

手元のmacにはpyenvとpyenv-virtualenvは導入されている状態だったのですが、一応インストール方法は以下のような感じだったはずです。

$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

$ vi ~/.bash_profile
export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
fi
$ source ~/.bash_profile

oandapy用の環境を作成

pyenvとpyenv-virtualenvを用いて、環境を作成します。

$ pyenv install 3.6.3
$ pyenv virtualenv 3.6.3 oanda
$ mkdir /path/to/workspace
$ pyenv local oanda

プロンプトが(oanda) $みたいな表示になればOKです。

oandapyをインストール

pipを使用してoandapyモジュールをインストールします。
また、表示を整えるためにpandasもインストールしておきます。

$ pip install git+https://github.com/oanda/oandapy.git
$ pip install pandas

oandaのデモアカウントを作成

APIを使用して取引をしたりデータを取得したりするには、自分のアカウントを作成する必要があります。

Oandaのデモアカウントを作成しておきましょう。

デモアカウント作成ページで作成した後、メールでIDとパスワードが送られてきます。

ログインページでログインをしましょう。
本番口座とデモ口座を選択できるようになっていますが、ここではもちろんデモ口座を選択します。

ログインすると、トップページにデモ用の口座番号があります。
後で使用することになるのでメモに控えておきます。

また、右上のハンバーガーメニューから、APIアクセスの管理を選択し、API用のアクセストークンを発行します。
このアクセストークンも後ほど使用するので、メモに控えておきます。

API用アクセストークン発行

これでAPIの仕様準備は全て整いました。

サンプルコード

作成

oandapyのREADMEに書かれているサンプルを実行します。

import oandapy
import pandas as pd


if __name__ == '__main__':
    API_KEY = "xxxxxxxxxxx..."  # アクセストークンに置き換え
    ACCOUNT_ID = "xxxxxxx"  # 口座番号に置き換え

    oanda = oandapy.API(environment="practice", access_token=API_KEY)
    response = oanda.get_prices(instruments="USD_JPY,EUR_JPY,AUD_JPY")
    prices = response.get("prices")
    df = pd.DataFrame(list(prices))
    print(df.head())

instrumentsには通貨ペアを入力するが、'/'は'_'に置き換えて指定する。

実行

$ python sample.py
       ask      bid instrument  status                         time
0  113.087  113.027    USD_JPY  halted  2018-01-05T21:59:59.574889Z
1  136.059  135.967    EUR_JPY  halted  2018-01-05T21:59:59.518365Z
2   88.970   88.830    AUD_JPY  halted  2018-01-05T21:59:59.475339Z

askは買い、bidは売りです。

まとめ

oandapyを使用することでoandaのデータを簡単に取ってくることができました。

今回はレートの取得までしかできませんでしたが、次回は仮想取引をできるようにしたいと思います。