シストレを早く完成させて寝ながら稼ぎを狙ってます。たっきん(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で公開しているので、興味あったら見てみてください。
コメント