Научите Python повторять вызов GetOrder ((order_id).Status в while, используя time.time для отслеживания изменений в заказе

Автор:охотник1015, Создано: 2018-03-03 21:22:27, Обновлено: 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

Больше

Маленькие мечтыПосмотрите на код. `` 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: # и после заказа, циклическое чтение Судить о времени до состояния заказа, сравнивать, обнаружить, не превышает ли 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): # Заказ будет поднят или отменен через 2 секунды Log (("Заказы подведены или отменены") return 0 if order_status==ORDER_STATE_CLOSED: # Заказ выполнен Log (("Заказ выполнен") return 1 `` Логика не должна быть проблемой. Проблема может быть в том, что данные, возвращенные GetOrder, могут содержать другие состояния, например, состояние неизвестного, на котором именно вы работаете. Рекомендуется после строки order_status=exchange.GetOrder ((order_result).Status добавить Log ((order_status) и посмотреть конкретные значения состояния.

Маленькие мечтыНапример, вы можете узнать, где находится эта биржа, что это за пары, а также задать вопрос о коде.

охотник1015При отправке сообщения была допущена ошибка редактора, в коде была установлена согласованность переменных.

Маленькие мечтыМожет быть, ваш код был неправильно написан, этот ID должен был быть неопределенным, и только здесь он появляется. https://dn-filebox.qbox.me/d89332ffbe84fa2cdcac442649edb35f4f61a3cc.png

охотник1015Я проверил на диске несколько раз за эти два дня и обнаружил, что после запуска фразы exchange.GetOrder ((() она вообще не возвращается, или, если ввести фразу, программа застряет и не выходит из нее, что приводит к тому, что все настройки, которые я установил, не были отпечатаны. def main ((): #Log ((exchange.GetAccount)) time1=time.time ((() Log ((' записывает время как',time1) depth = _C ((exchange.GetDepth); orders_buy1=depth.Bids[0].Price (покупка) orders_buy2=depth.Bids[1]. Цена orders_buy3=depth.Bids[2]. Цена order_sell1=depth.Asks[0].Цена order_sell2=depth.Asks[1]. Цена order_sell3=depth.Asks[2]. Цена Что вы думаете? account=exchange.GetAccount ((() Что вы думаете? sell_order_id = exchange.Sell ((orders_buy1*0.999, 0.1)); # заказывать time1=time.time() # записывает только время завершения if sell_order_id== Ничего: Log (('Заказ номер пустой') if sell_order_id!=None: # если удалось получить номер заказа order_back_message_last=None # записывает последний раз Запрос на возвращенную информацию о заказе ((инициализировано как None) Что вы думаете? while True: # введение в while-цикл для отслеживания информации о заказах с помощью GetOrder order_back_message=exchange.GetOrder ((order_result) Возвращенное сообщение #GetOrder ((все) Log (('запрос заказа возвращается как', order_back_message) # бесмозговой вывод заказа возвращается как Что вы думаете? if order_back_message!=order_back_message_last: # если данная информация о заказе не совпадает с предыдущей, Log экспортирует и обновляет order_back_message_last Log (('запрос заказа возвращается как 'order_back_message') order_back_message_last=order_back_message Последнее сообщение Что вы думаете? Что вы думаете? order_status=order_back_message.Status# команда возвращает из структуры данных извлечение Status ((отныне не нужно смотреть, потому что это не проходит) order_status=exchange.GetOrder ((sell_order_id).Статус Log ((order_status)) if order_status==None and time.time (() -time1>2: Log (('Не удалось получить состояние заказа') break if order_status!=Ничего: if order_status==ORDER_STATE_CLOSED: Если вы не можете получить доступ к данным, которые вы хотите получить, вы можете получить доступ к данным, которые вы хотите получить. Log (('Хеджирование - успех') break #returnTrue elif time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): Log (('Хеджирование - неудача') break #return False (Возвращение ложное) #Log ((exchange.GetAccount)) #Log (('xunhuan') #PD_SHORTLog ((' текущее время=',time.time(),'начальное время=',time1)

Маленькие мечтыНа некоторых биржах существуют стандартные состояния в документах, которые не являются BotVS. BotVS определяется как неизвестное состояние. Вы можете посмотреть конкретные значения состояния после строки order_status=exchange.GetOrder. Если мы посмотрим, какое значение имеет конкретное состояние заказа, мы сможем судить об этом вопросе (что привело к появлению мертвого цикла).

охотник1015@KiloChiloM.KiloDa, я работаю в gateIO, эта проблема была обнаружена несколько дней назад, я написал простой код и проверил результаты, и я чувствую себя хорошо. https://dn-filebox.qbox.me/97f571e4222ee9c61bd6e3cb203af319b11a8c72.png