banner
stmoonar

stmoonar

无心而为
github
telegram
email
zhihu
x

币安Binance APIの使用(三、現物契約取引)

これまでの 2 つの記事では API の作成とデータ取得について説明しましたが、次は取引部分です。ここまで読んでいる方でまだバイナンスに登録していない方は、私の招待リンクを使って登録すると手数料の割引が得られます(私が少しの手数料を受け取ることで、私への励ましとしてくださいね、ハハハ😘 ):https://accounts.binance.com/register?ref=DPVSZVI3

ここでは、Python のccxtライブラリに封装されたバイナンス API インターフェースを例にしています。前の章で取引所クラスexchangeをインスタンス化しましたが、まだわからない方は前の記事を見てください。

1. 現物口座と先物口座#

前のセクションで取引所クラスをインスタンス化する際に、optionsのオプションパラメータでdefaultTypefutureに指定しました。これは先物口座を意味します:

exchange = ccxt.binance({
    'apiKey': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'secret': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'timeout': 30000,
    'enableRateLimit': True,
    'options': {'defaultType': 'future'}
})

ここでの apiKey と secret は、自分が作成した API の値に置き換える必要があります。他のパラメータが何を意味するのかわからない場合は、前の章を戻って確認してください。

現物口座をインスタンス化したい場合は、defaultTypespotに指定する必要があります:

exchange = ccxt.binance({
    'apiKey': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'secret': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'timeout': 30000,
    'enableRateLimit': True,
    'options': {'defaultType': 'spot'}
})

2. 指値注文#

現物の指値注文と先物は同じ関数を使用しますが、先物ではレバレッジ倍率を指定する必要があります。成行注文と指値注文について説明した後に、レバレッジの設定方法について書きます。

exchange.create_limit_buy_order(symbol='JUP/USDT', amount=6, price=0.9)

パラメータ名からその意味が簡単にわかります:

  • symbolは取引する対象のシンボル
  • amountは購入する数量(この数量は使用する USDT の数量ではなく、あなたが購入するコインの数量です。例えば、ここでは 6 つの JUP を購入します。売却も同様です)
  • priceは注文価格です

同様に、売却の関数はcreate_limit_sell_order()で、パラメータの意味は上記と同じです。

これらの関数を使用する際は、アカウントに十分な残高が必要で、単にポジションを減らす場合を除き、取引金額は 5USDT を超える必要があります。そうでない場合、以下のようなエラーコードが返されます:

root@vultr:~/transaction/main# python3 test.py JUP/USDT
Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/ccxt/base/exchange.py", line 629, in fetch
response.raise_for_status()
File "/usr/lib/python3/dist-packages/requests/models.py", line 943, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.binance.com/api/v3/order

上記の例外処理中に、別の例外が発生しました:

Traceback (most recent call last):
File "/root/transaction/main/test.py", line 247, in
exchange.create_limit_buy_order(COIN, 6, 0.9)
File "/usr/local/lib/python3.10/dist-packages/ccxt/base/exchange.py", line 4493, in create_limit_buy_order
return self.create_order(symbol, 'limit', 'buy', amount, price, params)
File "/usr/local/lib/python3.10/dist-packages/ccxt/binance.py", line 5554, in create_order
response = self.privatePostOrder(request)
File "/usr/local/lib/python3.10/dist-packages/ccxt/base/types.py", line 35, in unbound_method
return _self.request(self.path, self.api, self.method, params, config=self.config)
File "/usr/local/lib/python3.10/dist-packages/ccxt/binance.py", line 10280, in request
response = self.fetch2(path, api, method, params, headers, body, config)
File "/usr/local/lib/python3.10/dist-packages/ccxt/base/exchange.py", line 3643, in fetch2
return self.fetch(request['url'], request['method'], request['headers'], request['body'])
File "/usr/local/lib/python3.10/dist-packages/ccxt/base/exchange.py", line 645, in fetch
skip_further_error_handling = self.handle_errors(http_status_code, http_status_text, url, method, headers, http_response, json_response, request_headers, request_body)
File "/usr/local/lib/python3.10/dist-packages/ccxt/binance.py", line 10224, in handle_errors
self.throw_exactly_matched_exception(self.exceptions['exact'], message, self.id + ' ' + message)
File "/usr/local/lib/python3.10/dist-packages/ccxt/base/exchange.py", line 4013, in throw_exactly_matched_exception
raise exactstring
ccxt.base.errors.InsufficientFunds: binance Account has insufficient balance for requested action.

通常、上記の指値買いのコードを実行した後、現物取引を確認すると、対応する注文が表示されます。テスト用に小さな注文価格を設定できます:

image

3. 成行注文#

現物と先物の成行注文も同じ関数を使用します。

exchange.create_market_buy_order(symbol='BTC/USDT', amount=0.01)

指定する必要があるのは 2 つのパラメータだけです:

  • symbolは取引する対象のシンボル
  • amountは取引の数量です

成行注文では価格を指定する必要がなく、アカウントの残高が十分であれば、この関数を実行するとすぐに相応の数量が購入されますので、ここではデモは行いません。

同様に、売却関数はcreate_market_sell_order()で、パラメータは同じです。

4. 注文の作成#

上記の 2 つの関数は特定の注文と方向に対して異なる関数を使用しますが、実際には 1 つの関数ですべてを処理できます。

def create_order(
    symbol: str,
    type: OrderType,
    side: OrderSide,
    amount: float,
    price: float = None,
    params: Any = {}
) -> Order

2 つのパラメータtypesideが追加されました:

  • typeは注文の種類で、市場marketまたは指値limitのいずれかです
  • sideは方向で、購入buyまたは売却sellのいずれかです
  • priceはデフォルトでNoneで、市場注文の場合は価格を指定する必要はありません

したがって、最初の指値買い JUP は次のように書くことができます:

exchange.create_order('JUP/USDT', 'limit', 'buy', 6, 0.9)

この他にもcreate_market_order()create_limit_order()関数などがあり、上記の説明から関数の目的がわかると思います。

5. 先物レバレッジの設定#

先物口座で取引を行う際、レバレッジ倍率を指定しない場合、最後にグラフィカルインターフェースで設定したレバレッジ倍率がデフォルトで使用されます。設定が必要な場合は、set_leverage()を使用する必要があります。2 つのパラメータsymbolleverage:取引対象のシンボルとレバレッジ倍率(int 型)です。

したがって、先物の注文を行う前に、必ずset_leverage()でレバレッジ倍率を設定することをお勧めします:

exchange.set_leverage(10, 'JUP/USDT')
exchange.create_order('JUP/USDT', 'limit', 'buy', 6, 0.9)
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。