banner
stmoonar

stmoonar

无心而为
github
telegram
email
zhihu
x

币安Binance API使用(四、倉位狀態獲取及平倉)

之前介紹了如何使用幣安 API 進行交易,這一章將介紹獲取當前倉位的狀態以進一步進行平倉操作。如果你還沒有註冊幣安交易所,歡迎使用我的邀請鏈接獲得手續費減免https://accounts.binance.com/register?ref=DPVSZVI3

在交易成功之後,我們會希望獲取當前倉位的信息並解析,接下來就簡單的介紹一下這些接口在ccxt裡面怎麼調用,如果還不知道ccxt是什麼可以往回去看第二篇。

1. 查詢餘額#

balance = exchange.fetch_balance({'type': 'future'})['total']['USDT']

這裡使用的是函數fetch_balance,傳遞了一個字典作為參數,typefuture表示查詢的是期貨(合約)賬戶的餘額,如果要查詢現貨賬戶那就設置為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
    }
]

裡面的 key 比較多,需要用到的幾個比較重要的有:

  • contracts:合約數量
  • contractSize:每個合約大小(應該與槓桿倍數有關)
  • unrealizedPnl:浮動盈虧
  • leverage:槓桿大小
  • collateral:保證金
  • notional:倉位大小(保證金加上浮動盈虧)
  • markPrice:市價
  • entryPrice:進場價
  • side:方向(多 long、空 short)

使用position[0]["key"]來獲取這些值,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})

也可以平掉一半設置amount0.5*last_amount,平倉時可以設置只減倉為True,防止數量太少(<5)無法交易成功。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。