OANDA FXのAPIをGoogle Colaboratoryで動かして自分EAを開発する方法

2019年9月24日

私のブログではプログラミングと投資のカテゴリーを主に書いています。投資とプログラミングの2つを組み合わせて私しかできないようなコンテンツが作れないかと思いました。

投信に詳しい方らならばシステムトレードを知っていると思います。システムトレードというと、一般的には自分の決めたルールに従ってトレードをすることで対義語に裁量トレードがあります。

システムトレードは感情を排除したトレードができる利点がありますが、裁量トレードにも、相場のセンチメントのような雰囲気を反映できるメリットもあります。個人的にはシステムトレードの方が勝率はいいと思いますが。

システムトレードを突き詰めていくと売買判断はル―ルとして書き下せるようになります。これをコンピュータプログラミングに落とし込めれば、売買を完全自動化できます。

完全自動売買システムのMetaTrader

実はこのようなシステムはすでにあります。MetaQuotes社が製作したMetaTraderを使用するとFXの完全自動売買が可能です。

MetaTraderはExpert Adviserというプログラムを購入し(作ってもよい)この売買判断を基にFX会社にトレードの支持を出します。

株取引でも完全自動売買システムは存在しますが、私はFXを相手に使った方がいいと思います。なぜなら株式市場は日中の9時から3時までしか市場が開かないので、人間が張り付いても売買ができます。FXであれば24時間動いていますので人間よりもMetaTraderを使うメリットが大きいのです。

このような理由でMetaTraderは完全自動売買を実現しているのですが、まだまだマイナーな存在です。

その理由の1つは対応OSがwindowsのみだからです。24時間動かして常に相場を見張っているシステムがwindowsで動いているって言うのはどうですかねぇ。サーバー管理の経験からいいとは言えません。

MetaTraderのLinux版があればいいと思うんですが、無いんですよ。同じカテゴリのソフトもないです。Linuxの文化からすると珍しいですよね。

ただしLinuxで完全自動売買システムが作れないわけではないです。いくつかのFX会社では売買指示をAPIで受けてくれるところがあります。

今日はそのうちの1つのOANDA FXのAPIをGoogle Colaboratoryで動かして見たのでその方法を紹介ます。

OANDAのデモ口座でAPIを有効にする

OANDAは1996年にトロント大のコンピュータサイエンスの教授が興した会社です。ですのでコンピュータでの取引に強みがあります。

まずはOANDAでデモアカウントを作ってみてください。詳しい作り方は詳細のある他のサイトに任せます。

何故かoanda.com/jaとoanda.jpが違うサイトなので気をつけてください。ここではoanda.jpでデモ口座を作ります。

oanda.jpにログインするとメニュー画面になります。メニュー画面の中央に「口座情報」があり、その中に数字のAccount IDがあると思いますのでどこかにコピーしておきます。

次にメニュー画面の右下の「APIアクセスの管理」に入ってアクセストークンを発行してください。トークンが発行されるとAPIが有効になります。

15秒程かかりますが、トークンが発行されると16進数の50文字くらいの文字列が表示されますのでこれもコピーしておきます。

Google ColaboratoryでAPIを使ってみる

はじめにOANDAのAPIで現在の為替レートを見てみましょう。この記事では一番簡単に実行できる環境だと思われるGoogle Colaboratoryを使っています。Googleにアカウントがある人はColaboratoryのページからノートを新規で作成してください。

実はColaboratoryはプログラミング言語にPaythonを使うのですが、Paythonの公式アプリサーバーにすでにOANDAを動かすためのアプリが登録されています。

一番最初にColaboratoryにOANDAのライブラリ「oandapyv20」をインストールしてします。

!pip install oandapyv20

次にライブラリをインポートします。その他に行列計算のpandasのライブラリもここでインストールします。

from oandapyV20 import API
import oandapyV20.endpoints.instruments as instruments
import pandas as pd

次に先程のAccount IDとトークンを書き込みます。

accountID = "101-009-xxxxxxxxx-xxx"
access_token = "d14bdc3e4ff7ceec090dcd86ab57ea32-6e7c27d8a2bfb3d146xxxxxxxxxxxxxxxx"

為替データを呼び出してみる

為替データのAPIを呼び出してみます。

api = API(access_token=access_token)
params = {
    "count": 5000,
    "granularity": "M5"
}
r = instruments.InstrumentsCandles(instrument="USD_JPY", params=params)
api.request(r)

XMLのような感じでデータが渡されますので、読みやすいようにPandasのデータフレームに変換します。

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')
df.index = pd.to_datetime(df.index)

これで現在の為替情報がでーたフレームの変数dfに入りました。表示させるとドル円のデータが見られます。

print(df)

注文を入れてみる

注文はライブラリのインポート、トークンの保存を行った後に、以下のようなコードを実行します。

api = API(access_token=access_token)

data = {
  "order": {
    "instrument": "USD_JPY",
    "units": "+10000",
    "type": "MARKET",
    "positionFill": "DEFAULT"
  }
}

r = orders.OrderCreate(accountID=account_id, data=data)
api.request(r)

注文はOANDAの取引ページから指示か入ったらどうかを確認してみてください。APIからの売買注文は即座に反映されるはずです。

まとめ

今回はOANDA FXのAPIをGoogleのColaboratoryで動かす方法を説明しました。

 実は以前にFXの自動売買は挫折した経験があるのですが、この方法についてはもう少し触ってみたいと思います。

また、Colaboratoryで自動売買プログラムを作ったとしても、24時間動かすことができないので、VPSなどの24時間の実行環境が必要になります。

結局そちらにプログラムを移して運用する必要があります。