以前、币安 API を使用して取引する方法について紹介しましたが、この章では現在のポジションの状態を取得して決済操作を行う方法について説明します。まだ币安取引所に登録していない場合は、私の招待リンクを使用して手数料の割引を受けることができます:https://accounts.binance.com/register?ref=DPVSZVI3
取引が成功した後、現在のポジションの情報を取得して解析したいと思います。次に、これらのインターフェースをccxt
でどのように呼び出すかを簡単に紹介します。ccxt
が何かまだ知らない場合は、前の章を見てください。
1. 残高の確認#
balance = exchange.fetch_balance({'type': 'future'})['total']['USDT']
ここでは関数fetch_balance
を使用し、辞書を引数として渡しています。type
がfuture
であるため、先物(契約)アカウントの残高を照会しています。現物アカウントを照会する場合はspot
に設定します。前の章を見た方はこれを知っているはずです。その後、インデックス['total']
と['USDT']
を追加して USDT の残高を照会します。他の通貨の場合はインデックスを対応するものに変更してください。
2. ポジションの確認#
ポジションを開いて、ポジションを確認したところ、返されたデータは次のとおりです:
position = exchange.fetch_positions([COIN])
引数は、照会するポジション通貨のリストです。例えば[BTC/USDT, ETH/USDT]
のようにします。返された結果を印刷すると、辞書のリストが返されることがわかります:
[
{
'info':
{
'symbol': 'JUPUSDT',
'positionAmt': '6',
'entryPrice': '0.9947',
'breakEvenPrice': '0.99519735',
'markPrice': '0.99363270',
'unRealizedProfit': '-0.00640380',
'liquidationPrice': '0',
'leverage': '1',
'maxNotionalValue': '8000000.0',
'marginType': 'isolated',
'isolatedMargin': '5.96820000',
'isAutoAddMargin': 'false',
'positionSide': 'BOTH',
'notional': '5.96179620',
'isolatedWallet': '5.97460380',
'updateTime': '1713106952248',
'isolated': True, 'adlQuantile': '2'
},
'id': None,
'symbol': 'JUP/USDT:USDT',
'contracts': 6.0,
'contractSize': 1.0,
'unrealizedPnl': -0.0064038,
'leverage': 1.0,
'liquidationPrice': None,
'collateral': 5.9682,
'notional': 5.9617962,
'markPrice': 0.9936327,
'entryPrice': 0.9947,
'timestamp': 1713106952248,
'initialMargin': 5.9617962,
'initialMarginPercentage': 1.0,
'maintenanceMargin': 0.089426943,
'maintenanceMarginPercentage': 0.015,
'marginRatio': 0.015,
'datetime': '2024-04-14T15: 02: 32.248Z',
'marginMode': 'isolated',
'marginType': 'isolated',
'side': 'long',
'hedged': False,
'percentage': -0.1,
'stopLossPrice': None,
'takeProfitPrice': None
}
]
中のキーは多く、必要な重要なものは次のとおりです:
contracts
:契約数量contractSize
:各契約のサイズ(レバレッジ倍数に関連しているはずです)unrealizedPnl
:浮動損益leverage
:レバレッジの大きさcollateral
:保証金notional
:ポジションサイズ(保証金と浮動損益の合計)markPrice
:市場価格entryPrice
:エントリー価格side
:方向(ロング long、ショート short)
position[0]["key"]
を使用してこれらの値を取得します。キーは取得するデータのキー名で、二重引用符を付ける必要があります。例えば"side"
のように。
3. 決済#
币安 API のドキュメントには明示的に決済のインターフェースが示されていませんが、決済は実際には現在のポジションと反対のポジションを開くことに相当します。たとえば、一定数量の COIN をロング(買い)した場合、決済はその COIN の対応する数量を売ることになります。したがって、反対方向に開く数量を開設と同じにすれば決済ができます(開設数量と異なる数量で決済することも可能です。たとえば半分を決済するなど)。
例えば、まず市場価格でロングポジションを開くとします:
exchange.set_leverage(5, "BTC/USDT") # レバレッジ倍数を設定
exchange.create_market_order("BTC/USDT", "buy", 6, params={'reduceOnly': False})
その後、決済したい場合は、前回の開設で購入した数量を知る必要があります。これには上記のポジション照会インターフェースを使用します:
position = exchange.fetch_positions(["BTC/USDT"])
last_amount = position[0]['contracts'] * position[0]['contractSize']
契約数量に各契約のサイズを掛けることで、前回の開設数量を取得できます。その後、反対方向にポジションを開くことで決済できます。
exchange.create_market_order("BTC/USDT", "sell", last_amount, params={'reduceOnly': True})
また、半分を決済する場合はamount
を0.5*last_amount
に設定し、決済時にはTrue
を設定して、数量が少なすぎて(<5)取引が成功しないのを防ぐことができます。