Bitte lehren Sie Python, GetOrder ((order_id).Status) in der Zeit wiederholt aufzurufen, um mit time.time Änderungen der Bestellung zu verfolgen

Schriftsteller:Jagdmann 1015, Erstellt: 2018-03-03 21:22:27, Aktualisiert: 2018-03-03 21:23:29

请教各位,我想在while中跟踪订单变化,循环之前保存当时时间time1,while开始后当订单状态在2秒后(time.time()-time1>2)的状态还是pending就return 0,如果是ORDER_STATE_CLOSED,那就return 1,返回完成。
但是在实盘测试中,发现程序会进入无限循环不会停下来,最后一条信息就是“订单已下”

代码附下,请大大帮忙释疑
order_result =exchange.Sell(fee,size)
Log('订单已下')
    if order_result==None:
        return 0
    if order_result!=None:
        time1=time.time()
        while True:
            order_status=exchange.GetOrder(order_result).Status
            if order_status==None and time.time()-time1>2:
               Log('订单状态获取失败')
                return 0
            if order_status!=None:
                if time.time()-time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING):
                    Log("订单挂单或被取消")
                    return 0
                if order_status==ORDER_STATE_CLOSED:
                    Log("订单完成")
                    return 1

Mehr

Kleine TräumeIch sehe den folgenden Code. Ich weiß. Order_result = exchange.Sell ((fee,size) # Nachfolge Log (('Die Bestellung ist eingegangen') if order_result==None: # nicht zurückgegeben Rückkehr 0 Wenn der Auftrag erfolgreich ist. time1=time.time() # Aufzeichnungen Sekunden-Level Zeitstempel while True: # Kreislaufurteilen order_status=exchange.GetOrder ((order_result).Status # Liest den Status der Bestellung if order_status==None and time.time() -time1>2: # und nach der Bestellung, Loop-Lesen Urteilen der Zeit vor dem Bestellstatus gegenüber, erkennen, ob mehr als 2 Sekunden Log (('Erhalt des Bestellstatus fehlgeschlagen') # Rückkehr 0 Wenn der Bestellstatus!=None: if time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): # Die Bestellung wird nach 2 Sekunden aufgehängt oder storniert Log (("Bestellungen aufgelistet oder storniert") Rückkehr 0 if order_status==ORDER_STATE_CLOSED: # Die Bestellung ist abgeschlossen Log (("Bestellung abgeschlossen") Rückkehr 1 Ich weiß. Die Logik sollte kein Problem sein. Das Problem, das gefunden wurde, könnte die von GetOrder zurückgegebenen Auftragsdaten sein, die andere Zustände enthalten, wie z. B. einen unbekannten Zustand, bei dem Sie an welcher Börse tätig sind. Es wird empfohlen, nach dem Satz order_status=exchange.GetOrder ((order_result).Status) und Log ((order_status) zu suchen, um den spezifischen Wert des Status zu sehen.

Kleine TräumeEs gibt eine Reihe von Anfragen, die sich bei der Veröffentlichung der Anfrage stellen: welche Börse, welche Paare und welche Code werden ausgeliefert?

Jagdmann 1015Der Code stellt fest, dass die Variablen einheitlich sind. Die Festplatte wurde mehrmals getestet und ist in der GetOrder festgefahren.

Kleine TräumeIhr Code ist falsch geschrieben, die ID sollte nicht definiert sein, nur hier ist es in Ihrem Code. Keine Initialization, keine Zuordnung. Sie werden von der Website der Agentur freigegeben. https://dn-filebox.qbox.me/d89332ffbe84fa2cdcac442649edb35f4f61a3cc.png

Jagdmann 1015Ich habe die Festplatte in den letzten zwei Tagen mehrmals getestet und festgestellt, dass der Satz exchange.GetOrder () nach dem Auslösen nicht mehr zurückkehrt oder dass ein Programm, das in diesen Satz eingegeben wurde, nicht herauskommt, was dazu führte, dass alle Druckinhalte, die ich eingestellt habe, nicht gedruckt wurden. Def main (: #Log ((exchange.GetAccount))) time1=time.time() Log ((' wird als',time1) aufgezeichnet Das bedeutet, dass Sie nicht mehr in der Lage sind, die Daten zu speichern. Orders_buy1=depth.Bids[0].Preis Orders_buy2=depth.Bids[1]. Preis Orders_buy3=depth.Bids[2]. Preis Der Preis für den Verkauf von Bestellungen ist: Orders_sell2=depth.Asks[1]. Preis Orders_sell3=depth.Asks[2]. Preis Das ist nicht wahr. Account=exchange.GetAccount (WEB ist eine Website, die sich mit dem Thema "Account" beschäftigt. Das ist nicht wahr. Sell ((orders_buy1*0.999, 0.1); # Bestellen time1=time.time() # Zeichnet die Zeit, in der die Anmeldung abgeschlossen wurde, ein Wenn Sie verkaufen möchten Log (('Bestellnummer ist leer') if sell_order_id!=None: # wenn die Bestellnummer erfolgreich erhalten wurde order_back_message_last=None # Aufzeichnen des letzten Males Nachfrage des Rücksendungsangebots für den Auftrag ((initialized to None)) Das ist nicht wahr. while True: Eintritt in den #while-Loop, um mit GetOrder die Bestellinformationen zu verfolgen Order_back_message=exchange.GetOrder ((order_result) Die zurückgegebene Nachricht von #GetOrder (alle) Log (('Befragung der zurückgegebenen Bestellungen ist',order_back_message) # Gehirnlosen Ausgabe der zurückgegebenen Bestellungen Das ist nicht wahr. if order_back_message!=order_back_message_last: # Wenn die Nachricht von diesem Auftrag nicht mit der letzten übereinstimmt, wird Log ausgeführt und order_back_message_last aktualisiert Log (('Befragung der Bestellung zurückgegeben', order_back_message) Das ist ein sehr schwieriger Fall. Das ist nicht wahr. Das ist nicht wahr. order_status=order_back_message.Status#-Befehl gibt den Status aus der Datenstruktur zurück (von nun an muss man ihn nicht mehr sehen, da er nicht weitergeht) Order_status=exchange.GetOrder ((sell_order_id).Status Log ((order_status)) if order_status==None und time.time (() -time1>2: Log (('Erhalt des Bestellstatus fehlgeschlagen') Sie haben sich verändert. Wenn es zu einer Übertragung kommt, dann ist es nicht nötig. Wenn der Status des Ordnungsstadiums geändert wird, wird der Status des Ordnungsstadiums geändert. Log (('Hedging - Erfolg') Sie haben sich verändert. #returnTrue elif time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): Log (('Hedging - Versagen') Sie haben sich verändert. #returnFalse #Log ((exchange.GetAccount))) Ich bin der Meinung, dass es nicht richtig ist. #PD_SHORTLog (('aktuelle Zeit=',time.time(),' Anfangszeit=',time1)

Kleine TräumeEinige Börsen haben Standard-Status in verschiedenen Nicht-BotVS-Dokumentationen, die von BotVS als unbekannter Status definiert werden. Sie können nach dem Satz "Status" einen spezifischen Wert für den Status nach "Log" ("order_status") anschauen. Es ist möglich, zu sehen, was der Wert des spezifischen Bestellstatus ist, um zu beurteilen, was die Ursache für den Todeszyklus ist.

Jagdmann 1015Ich bin bei gateIO und habe das Problem schon seit einigen Tagen entdeckt und habe einen einfachen Code geschrieben, um die Ergebnisse zu überprüfen. Siehe auch: https://dn-filebox.qbox.me/97f571e4222ee9c61bd6e3cb203af319b11a8c72.png