概要
前回記事では開発環境の構築から為替データの取得までを行いました。
今回はその続きとして、リミットオーダーの作成や、リミットオーダーの取り消し、取引中の注文の決済などをやってみました。
なお、oandapyでできることはどんなものかは、REST APIの公式ドキュメントを確認すればわかります。
oandapyはあくまでREST APIのWrapperなので、引数や返り値の仕様はREST APIと一致しています。
なお、oandapy.pyとREST APIの公式ドキュメントを照らし合わせて見れば、どの関数がどのAPIに対応しているかが、関数名からわかると思います。
オーダーの作成
import oandapy
from datetime import datetime, timedelta
if __name__ == '__main__':
API_KEY = "xxxxxxxxxxx..." # アクセストークンに置き換え
ACCOUNT_ID = "xxxxxxx" # 口座番号に置き換え
oanda = oandapy.API(environment="practice", access_token=API_KEY)
# set the trade to expire after one day
trade_expire = datetime.utcnow() + timedelta(days=1)
trade_expire = trade_expire.isoformat("T") + "Z"
response = oanda.create_order(ACCOUNT_ID,
instrument="USD_CAD",
units=1000,
side='sell',
type='limit',
price=1.20,
expiry=trade_expire
)
oandaオブジェクトを作成し、create_order
で売りリミットオーダーを作成します。
引数や返り値の詳細は、 APIに関する公式ドキュメントで確認できます。
なお、どの操作に関してもoandaのオブジェクトを作成し、そこからそのメンバ変数に適切な引数を渡して実行する形となります。
オーダーの作成
とりあえず、全ての注文を取り消すコードを書いてみます。
import oandapy
if __name__ == '__main__':
API_KEY = "xxxxxxxxxxx..." # アクセストークンに置き換え
ACCOUNT_ID = "xxxxxxx" # 口座番号に置き換え
oanda = oandapy.API(environment="practice", access_token=API_KEY)
response = oanda.get_orders(ACCOUNT_ID)
orders = response.get('orders')
for order in orders:
oanda.close_order(ACCOUNT_ID, order.get('id'))
特定の注文を取り消したかったら、IDを1つだけ指定すれば特定の注文だけ取り消せます。get_orders
の引数や返り値はこちら、close_order
の返り値の詳細はこちらを参照のこと。
取引の決済
アクティブな取引を全て決済するコードを書いてみます。
import oandapy
if __name__ == '__main__':
API_KEY = "xxxxxxxxxxx..." # アクセストークンに置き換え
ACCOUNT_ID = "xxxxxxx" # 口座番号に置き換え
oanda = oandapy.API(environment="practice", access_token=API_KEY)
response = oanda.get_trades(ACCOUNT_ID)
trades = response.get('trades')
for trade in trades:
oanda.close_trade(ACCOUNT_ID, trade.get('id'))
使い方は注文の取り消しとほぼ変わりません。get_trades
の引数や返り値の詳細はこちら、close_trade
の返り値の詳細はこちらを参照のこと。
まとめ
- oandapyはあくまでREST APIのWrapperなので、引数や返り値の詳細は公式ドキュメントを参照できます
- oandapyの関数とREST APIの対応はoandapy.pyとREST APIの公式ドキュメントを照らし合わせて見ます
- 次回はoandaが提供しているリアルタイムデータストリーミングの仕組みを利用して自動売買ができるようにしたいと思います