仮想通貨の自動売買プログラムを作る⑥:成行注文の確約価格を調べる

仮想通貨の自動売買プログラムを作る過程を紹介しています。

はじめて仮想通貨の自動売買プログラムを作った過程 [Bitflyer/BTC-FX/C#]

今実装しようとしている以下のアルゴリズムの 1. を前回のコード追加でできるようになりました。(成行注文を入れれるようになった)

  1. 成行注文を入れる (枚数は変更できるようにする)
  2. 成行注文が確約した値段を確認する
  3. 確約した値段 + x で指値注文を入れる (x は後で変えられるようにする)
  4. 指値注文が通るのを待つ。完了したら再度 1. から繰り返す。

今回は 2. の処理を実装していきます。成行注文の ID から確約した値段を調べる処理を追加します。

確約した成行注文の ID を取得

成り行き注文が完了すると、レスポンスとしてこんな感じの文字列が返されます。

この JRF から始まる値を GET /v1/me/getchildorders 命令の child_order_acceptance_id に指定して送ります。このレスポンスに含まれる average_price がその注文が確約した価格を表します。

前回の作業で成行注文のレスポンスを取得する所までできているので、そのレスポンスから ID 部分を抜き取ります。やり方は以前 JSON 形式のメッセージを分解した方法と同じで、まずレスポンスの JSON の型を定義します。

次に成行注文のレスポンスをこの型に当てはめて ID だけを取得。

これで成行注文に使われた ID を取得できたので、次はその ID から確約した値段を調べます。

成行注文の ID から確約した値段を調べる

GET /v1/me/getchildorders 命令のレスポンスから average_price を抜き出す必要があるので、このレスポンスの型も定義します。

指値注文をする関数を作ります。汎用性を持たせるために引数で ID を指定できるようにしました。

前回と同様、繰り返し使う事になる処理なので汎用性を持たせるためにレスポンスの処理は呼び出し側に任せるようにする。(つまり、ここでは単純にレスポンスを戻り値とする)

成行注文がまだ確約していない間は response が [] になる。この場合は後でリトライする必要があるので、ERROR_NO_RESPONSE を返すようにした。

呼び出し側ではこのレスポンスを分解して、average_price の値を取得。ついでに枚数の Size と確約状態の ChildOrderState も取っておく。あと、ERROR_NO_RESPONSE が返されている間は 10 秒間隔でリトライするようにした。

これが呼び出し側のコード

これからプログラムをもっと書いていくのに注文 ID の確認ができると便利なので、テキストボックスに child order acceptance id を入れてボタンを押せば情報が表示されるような UI も追加。

自動売買プログラムの作成状況

今のプログラムの見た目がこんな感じ。

これがコードの全容。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする