Apprenez à python à appeler GetOrder ((order_id).Status) en répétition pendant que vous utilisez time.time pour suivre les changements d'ordre

Auteur:Je suis un chasseur, Créé: 2018-03-03 21:22:27, Mis à jour: 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

Plus de

Le petit rêveRegardez le code. Je ne sais pas. command_result = exchange.Sell ((fee,size) # Envoyer une commande Log (('Les commandes ont été passées') if order_result==None: # n'a pas été retourné retourner 0 si l'ordre_result!=None: # La commande a été réussie time1=time.time() # enregistrement Niveau de seconde while True: # jugement en boucle command_status=exchange.GetOrder ((order_result).Status # lit le statut de l'ordre if order_status==None and time.time() -time1>2: # et après la commande, lecture en boucle Détermine le temps avant l'état de la commande par rapport, détecte si elle dépasse 2 secondes Log (('Accès à l'état de la commande a échoué') # retourner 0 si l'ordre_status!=None: # l'obtention de l'état est réussie if time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): # Les commandes sont suspendues ou annulées après 2 secondes Log (("les commandes sont en attente ou annulées") retourner 0 si l'ordre est terminé == ORDER_STATE_CLOSED: Log (en anglais) retourner 1 Je ne sais pas. La logique ne devrait pas être un problème. Le problème peut être que GetOrder renvoie des données d'ordre contenant d'autres statuts, par exemple un état inconnu, c'est-à-dire l'échange sur lequel vous avez opéré. Il est recommandé de voir la valeur spécifique de l'état après la phrase order_status=exchange.GetOrder.

Le petit rêveLe code d'erreur a été publié et a été publié par le site officiel de l'échange.

Je suis un chasseurL'éditeur a fait une erreur lors de l'envoi, le code a déterminé la cohérence des variables. Le disque réel a été testé plusieurs fois, il est resté bloqué dans GetOrder et ne peut pas sortir, ne rapporte pas d'erreur et ne renvoie pas de LOG.

Le petit rêveSi votre code est mal écrit, l'ID devrait être indéfini, et c'est le seul endroit qui apparaît dans le code. Il est également possible de télécharger des fichiers sur le serveur de téléchargement.

Je suis un chasseurMon grand-père, j'ai testé le disque dur plusieurs fois ces deux jours, et j'ai trouvé que l'exchange.GetOrder () n'est pas revenu du tout après le déclenchement de la phrase, ou bien une fois entré dans cette phrase, le programme est mort et n'est pas sorti, ce qui a entraîné l'impression de tout le contenu que j'ai configuré. Définition principale: Je ne peux pas vous dire pourquoi. time1=time.time (en anglais) Log ((' est enregistré comme 'time1) Pour les données de base, on utilise le code de base. Les commandes_buy1=depth.Bids[0].Price commandes_buy2=depth.Bids[1]. Prix commandes_buy3=depth.Bids[2]. Prix Les commandes_sell1=depth.Asks[0].Price commandes_sell2=depth.Asks[1]. Prix commandes_sell3=depth.Asks[2]. Prix Je ne sais pas. Pour le compte=exchange.GetAccount Je ne sais pas. Pour les commandes, le nombre de commandes est le même. time1=time.time() # enregistre le temps de fin de la commande Si vend_order_id== Aucun: Log (('Nombre de commande est vide') # si le numéro de commande a été obtenu order_back_message_last=None # enregistrer la dernière fois Consultez le contenu des messages retournés de l'ordre (initialisé à None) Je ne sais pas. while True: # entre dans le cycle while, pour suivre les informations de commande avec GetOrder command_back_message=exchange.GetOrder ((order_result) Les messages retournés par #GetOrder (tous) Log (('query order returned content is', order_back_message) # sans cerveau sortie de commande retourné contenu Je ne sais pas. if order_back_message!=order_back_message_last: # Si cette commande n'est pas la même que la précédente, Log est exporté et mis à jour Log (('la requête de commande renvoie le contenu de 'order_back_message') Le message de retour est le message de retour. Je ne sais pas. Je ne sais pas. command_status=order_back_message.Status# commande renvoie l'extraction du statut dans la structure de données (à partir de maintenant, vous n'avez pas besoin de le voir, car il n'est pas passé par là) Pour les commandes, le nom de l'ordre est le même. Log (ordre_status) Si l'ordre_status == Aucun et le temps. Log (('Accès à l'état de la commande a échoué') Arrêtez Si vous souhaitez modifier le statut de votre commande, Si vous souhaitez modifier le statut de votre commande: Log (('Hedging - réussite') Arrêtez #returnTrue elif time.time (() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): Le nombre de commandes est le même que celui des commandes précédentes Log (('Hedging - échec') Arrêtez #return Faux Je ne peux pas vous dire pourquoi. Je suis très heureux de voir que vous avez pris soin de moi. #PD_SHORTLog (('heure actuelle=',time.time(), 'heure initiale=',time1)

Le petit rêveC'est ainsi que, dans certains échanges, l'état des ordres est un état standard dans les documents non-BotVS. BotVS est défini comme un état inconnu. Vous pouvez voir la valeur spécifique de l'état après la phrase order_status=exchange.GetOrder (ordre_result). On peut voir la valeur de l'état d'une commande spécifique et juger de cette question (qu'est-ce qui a conduit à un cycle mort).

Je suis un chasseurJe suis sur gateIO, le problème a été découvert il y a quelques jours, j'ai écrit un code simple et j'ai testé le résultat sans problème. Il est également possible de télécharger des fichiers sur le serveur de téléchargement.