FX API(OANDA v20)とPythonを使って口座のポジション一覧などを取得する操作方法のまとめ(ポジション編)
【記事要約】
FX APIシリーズとして、OANDA API v20とPythonを使って自分の口座のポジションのリストの取得、特定ポジションの詳細確認、ポジション決済をAPI経由で操作する方法のまとめ
こんにちは、新米データサイエンティスト(@algon_fx)です。今日は本業は休みでしたので、ジムで10km走って、そのあとは、現在参加しているデータコンペのモデルを作っていました。
コンペって楽しいですよね。ただ、デメリットがありまして、コンペに参加してしまうと、それ以外のことが手がつかなくなります(笑)。朝起きてから寝るまで、取り憑かれたようにコンペに夢中になってしまい、本業の作業中すらコンペ用の時間がかかる処理を回してしまうという。
少し、話がずれましたが、今日はFX APIシリーズとして、基本的なポジションの管理/操作をAPI経由実行する方法をまとめました。
【人気記事】
APIへ接続しよう
まずはおきまりのAPIへの接続です。私はOANDA API v20を使っていますが、今現在(2018年5月時点)で、日本オアンダでは対応されています。日本でのOANDAではv1のみしか使えないです。口座開設やAPIトークンの取得について、詳しくは「OANDA API v20を使ってみる(デモ口座開設編)」をご参照ください。
では、APIへ接続しましょう。今回は口座のポジション操作ですので、endpoints.positionsをインポートします。
1 2 3 4 5 |
# APIのPythonラッパーをインポート import oandapyV20 import oandapyV20.endpoints.positions as positions |
下記、accountID(口座ID)とaccess_tokenはダミーです。ご自身の情報を入れてください。
1 2 3 4 5 |
# OANDA API v20の口座IDとAPIトークン accountID = "XXX-XXX-XXXXXXX-XXX" access_token = "abcdefghijkelmopqrstu1234567890-abcdefghijkelmopqrstu1234567890" |
これで準備が整いましたので、最後にAPIへ接続をしましょう。
1 2 3 4 |
# APIへ接続 api = oandapyV20.API(access_token=access_token) |
これでOKです。
口座のポジションのリストを取得する
まずは、現在、口座内で現在保有してるポジションの全てを一覧で取得してみましょう。私の口座には現在2つのトレード注文がオープンとして建っています。
両方ともドル円の買い注文ですので、ポジションとしては下記の通りです。
では、これらのポジションをAPIを使ってPythonで取得してみましょう。
1 2 3 4 5 |
# 口座のすべてのポジションをリストとして取得 r = positions.PositionList(accountID=accountID) api.request(r) |
大丈夫そうですね。買い(long)の取引量(units)が19000通貨となっており、評価損益(unrealizedPL)が48.80ドルとなっています。
このように口座のポジション詳細が一覧で取得可能です。シストレをする際は、定期的に自己口座のポジションを評価する必要があるので、必須の操作かと。
条件(通貨 / 注文の状態)を指定してポジション取得
さて、口座のポジション一覧は上記の操作で行えますが、実際のシステムに組み込む時は、「特定の通貨別」や「オープン注文のみ」のポジション情報が必要ですよね。
まずは、「ドル円のポジション」をAPIで取得してみましょう。難しいことはなく、単純にPositionDetails()へinstrument(通貨)の情報を投げるだけです。
1 2 3 4 5 |
# 通貨を指定してポジションを取得 r = positions.PositionDetails(accountID=accountID, instrument="USD_JPY") api.request(r) |
現在、注文がドル円しか建っていないので…上記と同じ結果が帰ってきて判りづらいですが…このように通貨を指定することも可能です。参考までにですが、ポジションに含まれるない通貨ペアを投げると、下記のエラーがresponseとして帰ってききます。
{“errorMessage”:”Invalid value specified for ‘instrument'”}
また、オープンのトレードのみのポジションは、OpenPositions()を使って取得することも可能です。
1 2 3 4 5 |
# すべてのオープンポジションを取得 r = positions.OpenPositions(accountID=accountID) api.request(r) |
ポジションを決済する
現在のポジションを決済するには、PositionClose()を使うことで実行が可能です。では、今回は「ドル円の買い注文の全て」のポジションを決済するという操作を行ってみましょう。
まずはAPIへのリクエス用のdataに、longUnitsをALLと指定してあげましょう。
参考までにですが、売り注文の場合はshortUnitsに決済したい通貨量を指定します。また、買いも売りもデフォルトは「ALL」となっているので、注意が必要です。
1 2 3 4 5 6 |
# すべての買いポジションを決済 data = { "longUnits": "ALL" } |
では、こちらのdataを使って、さらにinstrumentにドル円を指定して、APIへ投げてみましょう。
1 2 3 4 5 |
# ドル円の買い注文全ての保有ポジションを決済する r = positions.PositionClose(accountID=accountID, data=data, instrument="USD_JPY") api.request(r) |
あれ?APIから戻ってきたresponseがORDER_CANCELになっている…。あぁ、今日は日曜日でマーケットが閉まっていましたね(笑)ちゃんとAPIのreasonにもMARKET_HALTED(マーケットが閉じてる)と帰ってきています。
まとめと次への課題
いかがでしたでしょうか?今回はFX APIシリーズとして、OANDA API v20とPythonを使って自分の口座のポジションのリストの取得、特定ポジションの詳細確認、ポジション決済をAPI経由で操作する方法のまとめました。
実際のPythonを使ってのトレードシステムでは、定期的にポジション情報を取得して、ポートフォリオの管理をしなくてはいけません。なので、ポジション情報の取得は必須かと思います。
ブログ読んでいただきありがとうございます!Twitterでも色々と発信しているので、是非フォローお願いします!
ディスカッション
コメント一覧
まだ、コメントがありません