API使って為替レートを取得して5ティック毎にランダムな注文をしてくれるPythonコードを書いてみた

2018年11月19日

使っている取引会社はどこ?
仮想通貨用(2019年5月からAPI取引対応) → GMOコイン
Python API用(FX APIはここしかない) → OANDA ジャパン

こんにちは、アルゴンです。今日はOANDAのAPIを使って、為替レートを取得して5ティック毎に買い・売りの注文をランダムに選んで注文するPythonのコードを書いてみました。ってことで、自分用メモのためにも記事を書きます。

【人気記事】

私の機械学習の開発環境&トレード環境を解説

当然ですが、これでお金儲けができるわけではなく、機械学習とは程遠い頭の悪いトレードシステムですが、まずはAPIに触ってみるのが目的です。

概要と実行環境について

簡単に今回書いたコードの概要と実行環境についてです。

概要

  • OANDAのAPIを使ってみる練習のコード
  • デモ口座でやるので脇が甘くても良い
  • 今後拡張しやすいような記述を心がける
  • API経由で価格のストリーミングを取得
  • 5回ティックを取得したら買いor売りをランダムで決定
  • コードが選んだ注文をAPIに流す
  • それをひたすら繰り返す

実行環境

  • Python 3.6
  • Mac Book Air
  • 外部ライブラリなど使っていません

ファイル構成

これから、色々と改良を加えたいので、それぞれの機能に応じてファイルが分かれています。全部で6つのpythonファイルを作成。全部、同じ階層のディレクトリに入れて実行しました。

  • event.py – イベントをまとめる
  • execution.py – オーダーの実行
  • settings.py – API接続で必要な設定関連
  • strategy.py – トレードルール
  • streaming.py – 価格ストリーミング
  • trading.py – 全部のクラスをまとめて実行する

コード書く前の下準備

OANDAのデモ口座アカウントが必要です。(なぜOANDAのAPIにしたのかはこちらの記事参照)デモ口座解説申請をすると、すぐにログインが可能になります。

デモ口座の管理画面へログインをすると、トップページにてAPIアクセスの管理のメニューがあります。こちらで、APIトークンの発行が必要です。

このトークンを使ってAPIに接続するので、無くしたら困ります。加えて、ホームページ上で注釈も書いてありますが、

personal access tokenはパスワードと同様大切な機密情報です。第三者に譲渡、貸与、売買したり、使用させたりしないよう厳重に管理をお願い致します。このトークンはOANDAアカウント内で一意であり、OANDA内で厳重に管理しております。

ってことなので、気をつけて管理しましょう。

APIとの接続の設定

下準備も終わったので、実際にコードを書いていきましょう。上の実行環境でも書きましたが、Python3を使っています。もし記事を見て、コードを動かしてみようと考えている方は、Pythonのバージョンだけ注意ください。Python2だと動きません。(エラーが出るはずです)

まずは今回の要とも言える、APIの接続の設定をPythonで書いてあげましょう。APIの仕様書を見て見たら、どうやら接続先はoanda.comのようでした。日本OANDAはドメインがoanda.jpなので、これで本番APIも大丈夫なのかしらというちょっとした疑問。(とりあえず今回はデモなのでスルーしますが)

APIの接続先として、 real は本番用、 practice はデモ用、 sandbox はサンドボックスのAPIです。今後の拡張のために、3つの異なるAPI接続先を事前に入れておく。

settings.py

コメントも入れていますが、 ACCESS_TOKEN (APIトークン)と ACCOUNT_ID (口座のID)はご自身のものを入力する必要があります。

APIトークンは前述した通り、OANDAの口座管理画面の「APIアクセスの管理」のリンクから取得が可能です。下のはダミーですが、こんな感じの文字列です。

 123456789abcderg123456789abcdefg-123456789abcderg123456789abcdefg 

 

同様に口座のIDも管理画面から取得が可能です。トップページの「口座情報」の欄に名前とアカウントのIDの記載があるので、そちらをコピペして上記のコードに入力してあげましょう。(アカウントIDは私のは7桁の数字でした)

イベントをまとめるクラス

次はイベントをまとめるコードを書いてあげましょう。とりあえず最低限必要なティックのイベントとオーダー(注文)のイベントの2つのみ。

event.py

トレードルールのクラス

次はトレードのルールを書きましょう。本来であれば、ここが一番重要なコードですが…今回はひとまずランダムに注文を流すルールを書いてあげます。

Pythonの random をインポートして、ティックが5回流れてきたら「買い」か「売り」をランダムに決めて、注文処理を流します。

strategy.py

注文を実行するクラス

トレードのルールが出来たので、次は実際にAPIに接続をして注文を流す処理です。setting.pyで設定したAPIトークンや口座IDを引っ張ってきて、APIへ接続して処理を投げてあげます。

execution.py

FXの価格をストリーミングするクラス

さて、次は為替の価格をAPIから引っ張ってきてストリーミングする処理を書きましょう。2つのメソッドに分けて、APIから価格を引っ張って処理します。s

 connect_to_stream で、Pythonの requests のライブラリを使って、APIのストリーミングソケットにパラメーターとヘッダーでアクセスします。API側のURLを叩いてレスポンスを受け取ります。

次に stream_to_queue でAPIから戻ってきたレスポンスを読み込んで、内容を確認した上で、プリントしてあげます。

streaming.py

並行処理で価格取得と注文をする

今回の超絶シンプルなトレードシステムの最低限の要素が整ったので、最後に trading.py として、今までの処理をまとめて実行するコードを書きます。

こちらのtrading.pyですが、Pythonの threading を使って、プライスストリーミングと注文の2つの処理を並列処理してあげます。プライスの取得/ストリーミングと注文の二つの処理を同時に走らせる必要があるので、 threading は重要です。

コード内に詳細のコメントを記載しましたので、詳細はコードを見た方が早いかと思います。

まとめと次のステップ

気づいたら、もうジムに行かなくてはいけない時間なので、今日はここまでです(笑)。ひとまず今日の記事では、APIに接続設定から始まり、為替価格のストリーミングの取得、さらにオーダー注文のルールを決めて処理を行うコードを書きました。

本記事の続編として、明日に実行編と今後の改良についてまとめたいと思います。

ブログを読んでいただいてありがとうございます!毎度ですが、Twitterでも絶賛配信しているので、フォローをお願いします!

追記 2018年3月26日

使っているFX会社はどこ?
仮想通貨用(2019年5月からAPI取引対応) → GMOコイン
Python API用(FX APIはここしかない) → OANDA ジャパン

2018年11月19日FX 機械学習

Posted by algon