これまでの 2 つの記事では API の作成とデータ取得について説明しましたが、次は取引部分です。ここまで読んでいる方でまだバイナンスに登録していない方は、私の招待リンクを使って登録すると手数料の割引が得られます(私が少しの手数料を受け取ることで、私への励ましとしてくださいね、ハハハ😘 ):https://accounts.binance.com/register?ref=DPVSZVI3
ここでは、Python のccxt
ライブラリに封装されたバイナンス API インターフェースを例にしています。前の章で取引所クラスexchange
をインスタンス化しましたが、まだわからない方は前の記事を見てください。
1. 現物口座と先物口座#
前のセクションで取引所クラスをインスタンス化する際に、options
のオプションパラメータでdefaultType
をfuture
に指定しました。これは先物口座を意味します:
exchange = ccxt.binance({
'apiKey': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'secret': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'timeout': 30000,
'enableRateLimit': True,
'options': {'defaultType': 'future'}
})
ここでの apiKey と secret は、自分が作成した API の値に置き換える必要があります。他のパラメータが何を意味するのかわからない場合は、前の章を戻って確認してください。
現物口座をインスタンス化したい場合は、defaultType
をspot
に指定する必要があります:
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.
通常、上記の指値買いのコードを実行した後、現物取引を確認すると、対応する注文が表示されます。テスト用に小さな注文価格を設定できます:
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 つのパラメータtype
とside
が追加されました:
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 つのパラメータsymbol
とleverage
:取引対象のシンボルとレバレッジ倍率(int 型)です。
したがって、先物の注文を行う前に、必ずset_leverage()
でレバレッジ倍率を設定することをお勧めします:
exchange.set_leverage(10, 'JUP/USDT')
exchange.create_order('JUP/USDT', 'limit', 'buy', 6, 0.9)