【シストレ開発#3】OANDA APIの注文をROS2のサービスで実装してみた!

 ※ 本記事は広告・プロモーションを含みます。
シストレ開発

シストレを早く完成させて寝ながら稼ぎを狙ってます。たっきん(Twitter)です!

以前に書いた記事では、注文系のOANDA APIについて色々と調べてみました。

なので今回は前回調べた注文系APIの中から実戦で使用する可能性のあるAPIに絞り、APIの注文をROS2サービスを使って実際に注文が出せるように実装してみました。

ここでおさらいすると、ROS2サービスとはRequest/Responseによる対話形式のROS通信方式です。

詳細は以下の記事でまとめているので参考にしてください。

ではさっそく、今回作成した注文系のROSサービスを紹介していきますね♪

OrderCreateサービス(注文作成)

注文を新規作成するサービスです。

注文を作成する際は必ずOCO注文が付与されるように作りました。

損切りポイントを設定しないトレードなんてあり得ないですからねw

よってこのサービスでは、

  • 成行注文 + OCO注文
  • 指値注文 + OCO注文
  • 逆指値注文 + OCO注文

の3種類の注文が出せるようになってます。

<入出力仕様>

●Request

変数名用途
type注文タイプ(成行 or 指値 or 逆指値)
price価格(type = 指値 or 逆指値 指定時のみ)
instrument_id通貨ペア(USD/JPY or EUR/JPY or EUR/USD)
units数量
take_profit_price利益確定注文価格
stop_loss_priceストップロス注文価格

●Response

変数名用途
resultサービス実行結果(成功 or 失敗)
reason_codeサービス失敗時の理由コード
id注文タイプ = 成行指定時 → トレードID
注文タイプ = 指値 or 逆指値指定時 → オーダーID

OrderDetailsサービス(注文状態取得)

注文の詳細を取得するサービスです。

まぁ主な用途はOrderCreateサービス(注文作成)で発注した 指値 or 逆指値 注文の状態(保留、満足、トリガー、キャンセル)取得になると思いますけどねw

<入出力仕様>

●Request

変数名用途
order_idオーダーID

●Response

変数名用途
resultサービス実行結果(成功 or 失敗)
reason_codeサービス失敗時の理由コード
type注文タイプ(成行 or 指値 or 逆指値)
instrument_id通貨ペア(USD/JPY or EUR/JPY or EUR/USD)
units数量
price価格
state注文状態(保留、満足、トリガー、キャンセル)
take_profit_pn_fill_price満足時の利益確定価格
stop_loss_on_fill_price満足時の損切り価格

OrderCancelサービス(注文取り消し)

注文をキャンセルするサービスです。

注文の新規作成があるならキャンセルも必要ですよね。

<入出力仕様>

●Request

変数名用途
order_idオーダーID

●Response

変数名用途
resultサービス実行結果(成功 or 失敗)
reason_codeサービス失敗時の理由コード

TradeCRCDOサービス(決済注文変更)

OrderCreateサービス(注文作成)で発注した指値 or 逆指値注文を変更するサービスです。

キャンセル→新規作成でも同じことができるため、このサービスを使用するときがあるかはわかりませんが、一応作っておきました。

<入出力仕様>

●Request

変数名用途
trade_idトレードID
take_profit_price利益確定注文価格
stop_loss_price損切り注文価格

●Response

変数名用途
resultサービス実行結果(成功 or 失敗)
reason_codeサービス失敗時の理由コード
take_profit_price利益確定注文価格
stop_loss_price損切り注文価格

TradeDetailsサービス(トレード状態取得)

現在取引中のトレードの詳細を取得するサービスです。

こちらの用途もほぼ利益確定or損切り注文状態(保留、満足、トリガー、キャンセル)の取得になりそうです。

<入出力仕様>

●Request

変数名用途
trade_idトレードID

●Response

変数名用途
resultサービス実行結果(成功 or 失敗)
reason_codeサービス失敗時の理由コード
contract_price約定価格
current_units約定数量
realized_pl確定損益
unrealized_pl含み損益
open_time新規約定時間
profit_order_msg/price利益確定注文価格
profit_order_msg/state利益確定注文状態(保留、満足、トリガー、キャンセル)
loss_order_msg/price損切り注文価格
loss_order_msg/state損切り注文状態(保留、満足、トリガー、キャンセル)

TradeCloseサービス(トレード決済)

現在取引中のトレードを決済するサービスです。

指値、逆指値ではなく、手動決済したい場合に使用します。

<入出力仕様>

●Request

変数名用途
trade_idトレードID

●Response

変数名用途
resultサービス実行結果(成功 or 失敗)
reason_codeサービス失敗時の理由コード
instrument_id通貨ペア(USD/JPY or EUR/JPY or EUR/USD)
time決済約定時間
units決済約定数量
price決済約定価格
realized_pl確定損益
half_spread_costハーフ・スプレッド・コスト

さいごに

今回は実戦で使うことになりそうな注文ロジックをROS2のサービスで作成してみました。

ここまで作れればあとは上位のアルゴリズムを考えればシストレを稼働させられそうですね♪

(まぁそこが一番難しくて苦労しそうなんですがね・・・)

今回作成したサービスのソースコードはGitHubで公開しているので、興味あったら見てみてください。

order_service.py

スポンサーリンク

コメント

タイトルとURLをコピーしました