Web系エンジニアのアウトプット練習場

エンジニアリングと書評が中心。たまに全然関係無い話もします。
トップページ/プログラミング/oandapyを使用していろんな操作をしてみる/
2018年01月07日

oandapyを使用していろんな操作をしてみる

プログラミングFX

概要

前回記事では開発環境の構築から為替データの取得までを行いました。
今回はその続きとして、リミットオーダーの作成や、リミットオーダーの取り消し、取引中の注文の決済などをやってみました。
なお、oandapyでできることはどんなものかは、REST APIの公式ドキュメントを確認すればわかります。
oandapyはあくまでREST APIのWrapperなので、引数や返り値の仕様はREST APIと一致しています。
なお、oandapy.pyREST 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.pyREST APIの公式ドキュメントを照らし合わせて見ます
  • 次回はoandaが提供しているリアルタイムデータストリーミングの仕組みを利用して自動売買ができるようにしたいと思います