簡體   English   中英

如何確保使用幣安 python 執行交易

[英]How to make sure a trade is executed with binance python

當算法做出決定時,我需要出售我的硬幣。 但是,如果我創建一個賣出訂單,然后價格下跌,顯然沒有人會以該價格購買。 因此,我需要檢查訂單是否已填寫,如果未填寫,我需要重做訂單。 (也許有更好的解決方案,我願意接受各種答案)

這是我的嘗試:(它有時會執行上面的場景並在這部分之后執行代碼,但尚未執行的命令會使程序崩潰)。

        #sellOrder
        sellOrder = client.create_order(symbol = hparams['MARKET_STRING'], side = 'SELL', type = 'MARKET', quantity = hparams['TRADE_TOKEN_AMOUNT'])
        print("Selling ...")
        print(sellOrder)
        sellOrderID = sellOrder['orderId']
        time.sleep(30)
        soldCheck = True
        while soldCheck:
            currentOrder = client.get_order(symbol = hparams['MARKET_STRING'], orderId = sellOrderID)
            if currentOrder['status'] == 'FILLED':
                soldCheck = False
            else:
                #cancel orber 
                client.cancel_order(symbol = hparams['MARKET_STRING'], orderId = sellOrderID)
                time.sleep(1)
                sellOrder = client.create_order(symbol = hparams['MARKET_STRING'], side = 'SELL', type = 'MARKET', quantity = hparams['TRADE_TOKEN_AMOUNT'])
                sellOrderID = sellOrder['orderId']
                time.sleep(5)   

在我看來,您在 while 循環中使用了矛盾的邏輯。

如果我理解正確,您是否在執行循環內的代碼時遇到了問題?

語法while SoldCheck:將在布爾變量 SoldCheck 為 True 時運行循環 - 您已將其靜態設置為 False,因此循環將不會運行。

嘗試這個:

#sellingorder
sellOrder = client.create_order(symbol = "DOGEEUR", side = 'SELL', type = 'MARKET', quantity = float(50.0))
print("Selling ...")
print(sellOrder)
sellOrderID = sellOrder['orderId']

time.sleep(5) #sleeping while it sells
#Check order was sold TODO
soldCheck = True #true = not sold TODO
while soldCheck:
    currentOrder = client.get_order(symbol = "DOGEEUR", orderId = sellOrderID)
    if currentOrder['status'] == "FILLED":
        soldCheck = False #sold
    else:
        #cancel order
        client.cancel_order(symbol = "DOGEEUR", orderId = sellOrderID)
        time.sleep(1)
        sellOrder = client.create_order(symbol = "DOGEEUR", side = 'SELL', type = 'MARKET', quantity = float(50.0))
        sellOrderID = sellOrder['orderId']
        time.sleep(5)

然后,當滿足 if 條件(即狀態已填充)時,您將 SoldCheck 標志恢復為 False 以停止循環,因為您不再需要取消訂單。

如果以上解決了您的問題,請您接受答案嗎? 如果我想到了更好的方法,我會在這里添加,但以上應該可以解決您的問題。

編輯:您正在嘗試下一個 MARKET 訂單,根據定義,該訂單與 LIMIT 一樣不受價格波動的影響。 市價單意味着您以市場願意給您的最佳價格成交——該交易應立即成交。

如果錯誤在給定的函數內(很難說沒有關於如何調用這個函數的細節)我相信它是以下之一:

  1. currentOrder 是市價單時的狀態未設置為“已完成”,因此循環永遠不會退出。
  2. 取消訂單調用不會取消原始訂單,因為它已經被填寫,但在嘗試下另一個訂單之前,您不會檢查訂單是否已成功取消。

為了幫助理解這個問題,您能否提供原始 create_order 調用、get_order 調用和 cancel_order 的輸出?

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM