見出し画像

仮想通貨bot 勉強記録⑦

~未約定の注文をキャンセルする~

前回までのあらすじ

PyBybitを使って、新規注文を出すところまで出来ました。
今回は未約定の注文をキャンセルします。

キャンセルするために、前回作ったコードで新規注文を出しておきましょう。

import pybybit
from rich import print as pp
import time

apis = [
  'プライベートキー',
  'シークレットキー'
]

bybit = pybybit.API(*apis, testnet=True)

#新規注文
def limitorder_sample():
  r = bybit.rest.inverse.private_order_create(
          side='Buy',
          symbol='BTCUSD',
          order_type='Limit',
          qty=10, price=7000,
          time_in_force='PostOnly')
          
  pp(r.json())

limitorder_sample()

せっかくだし、3個くらい新規注文を出します。
上のコードを3回実行してもいいんですが、あまりスマートではないので、for文を使ってみます。

関数名の次の行に、以下のコードを入力するだけです。

for 変数 in range(回数):

できたコードがこちら

import pybybit
from rich import print as pp
import time

apis = [
   'プライベートキー',
   'シークレットキー'
]

bybit = pybybit.API(*apis, testnet=True)

#新規注文3回
def limitorder_sample():
   for r in range(3):
     r = bybit.rest.inverse.private_order_create(
             side='Buy', 
             symbol='BTCUSD',
             order_type='Limit',
             qty=10, price=7000, 
             time_in_force='PostOnly')
             
     pp(r.json())

   
limitorder_sample()

()で指定した回数だけ繰り返し処理を行ってくれます。とりあえず3にしてみましょう。

画像7

無事3個の注文が発行されました!


ではこの注文をキャンセルしていきます。
まずはBybitのAPIを見に行きます。

キャンセルコマンドを発見

画像2

パラメータですが、シンボルとorder_idかorder_link_idのどちらかが必須みたいです。

ということは、自分の注文のIDを把握する必要がありますね、、、
キャンセルコードを作る前に注文IDを確認するコードを書かないといけないっぽい。

仕方ないのでまたAPI仕様書を確認します。

画像4

それらしきコードを発見

必須パラメータはシンボルだけっぽいですね。ですが、今回は未約定の注文を取得したいので、order_statusのパラメータをNewに指定します。

import pybybit
from rich import print as pp
import time

apis = [
   'プライベートキー',
   'シークレットキー'
]

bybit = pybybit.API(*apis, testnet=True)

#注文履歴取得
def get_order():
   g_o = bybit.rest.inverse.private_order_list(
           symbol='BTCUSD',
           order_status="New")
           
   pp(g_o.json())

get_order()

実行すると、statusがNewの注文履歴のみ表示されます。

画像7

今回知りたいのはorder_idのみなので、order_idのみ抜き取ります

import pybybit
from rich import print as pp
import time

apis = [
   'プライベートキー',
   'シークレットキー'
]

bybit = pybybit.API(*apis, testnet=True)

#注文履歴取得
def get_order():
   g_o = bybit.rest.inverse.private_order_list(
           symbol='BTCUSD',
           order_status="New").json()
           
   g_o =g_o["result"]["data"]
   
   for o in g_o:
       pp(o["order_id"])

get_order()

for文を使いました(ドヤ顔)(2時間くらいかかった)
↓の記事を参考にしてます。

for文の解説
取得した注文履歴のjson形式のデータは以下の並びになっています。

画像8

result内のdata配列が注文履歴の順番を表しています。欲しいのは、

変数['result']['data'][注文の順番(ここを繰り返し)]['order_id']

なので、[注文の順番]の部分をfor文で繰り返しています。


実行するとidのみが表示されます。

画像6

これでIDが分かったので、private_order_cancel関数のパラメータにIDを入れれば、任意の注文をキャンセルできます。

import pybybit
from rich import print as pp
import time

apis = [
   'プライベートキー',
   'シークレットキー'
]

bybit = pybybit.API(*apis, testnet=True)

#オーダーキャンセル
def order_cancel():
   bybit.rest.inverse.private_order_cancel(
           symbol='BTCUSD',
           order_id="IDを入力")

order_cancel()

画像7

ちゃんとキャンセルできてます。

ID手入力だとなんとなくテンションが上がらないので、最新の注文をキャンセルしてみます。

import pybybit
from rich import print as pp
import time

apis = [
   'プライベートキー',
   'シークレットキー'
]

bybit = pybybit.API(*apis, testnet=True)

#オーダーキャンセル
def order_cancel():
   #注文履歴取得
   g_o = bybit.rest.inverse.private_order_list(
           symbol='BTCUSD',
           order_status="New").json()
   
   bybit.rest.inverse.private_order_cancel(
           symbol='BTCUSD',
           order_id = g_o["result"]["data"][0]["order_id"])

order_cancel()

order_id=の部分で、注文履歴関数で取得した最新のIDを入力します。
実行してみると、ちゃんと最新注文がキャンセルされていました。

画像8

今回はここまでです。

・注文履歴の取得
・for文の使い方
・オーダーキャンセルのやり方

を学習しました。

この記事が気に入ったらサポートをしてみませんか?