请教各位,我想在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
Los inventores cuantifican - sueños pequeñosVeamos el siguiente código. ¿Por qué no lo haces? En el caso de los productos de venta, el precio de venta es el mismo que el precio de venta. Log (('la orden ha sido hecha') si order_result==None: # no se devuelve el ID del pedido Retorno 0 Si orden_result!=None: # La orden fue exitosa time1=time.time() # registro Nivel de segundos Horario mientras True: # juicio circular order_status=exchange.GetOrder ((order_result).Status # lee el estado de la orden if order_status==None and time.time() -time1>2: # y después de ordenar, lectura de ciclo. Log (('No se logró obtener el estado de la orden') # Retorno 0 Si orden_status!=None: # Obtención del estado fue exitosa if time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): # Los pedidos son suspendidos o cancelados después de 2 segundos Log (("la orden está pendiente o cancelada") Retorno 0 Si orden_status == ORDER_STATE_CLOSED: # La orden fue completada Log (("la orden se ha completado") regresar 1 ¿Por qué no lo haces? La lógica debería estar bien. El problema que se encuentra puede ser que GetOrder devuelva datos de pedidos con otros estados, por ejemplo, puede haber un estado desconocido, que es el tipo de intercambio en el que opera. Se recomienda añadir Log después de la frase order_status=exchange.GetOrder.
Los inventores cuantifican - sueños pequeñosEn el caso de las empresas de intercambio, el código de intercambio es el código de intercambio, el código de intercambio es el código de intercambio, y el código de intercambio es el código de intercambio.
el cazador1015En el momento de enviar la publicación, el editor cometió un error, y el código determinó que las variables eran consistentes. El disco real fue probado varias veces y se quedó atascado en el GetOrder y no pudo salir, no reportó errores y no regresó LOG.
Los inventores cuantifican - sueños pequeñosSi su código está mal escrito, este ID debería estar indefinido, sólo aparece aquí en el código. No hay inicialización ni asignación. https://dn-filebox.qbox.me/d89332ffbe84fa2cdcac442649edb35f4f61a3cc.png
el cazador1015En los últimos dos días, he probado el disco duro varias veces y he encontrado que el intercambio.GetOrder () no regresó después de que se activó, o que el programa se quedó bloqueado una vez que se introdujo en este comando, lo que provocó que no se imprimiera todo el contenido de impresión que configuré. Def main (): #Log ((exchange.GetAccount)) es el nombre de un sitio web en el que los usuarios pueden registrarse. tiempo1= tiempo. tiempo() Log ((' tiene el tiempo de registro como 'time1) En este caso, el valor de la interfaz es el valor de la interfaz. Orders_buy1=depth.Bids[0].Precio Orders_buy2=depth.Bids.[1] Precio Orders_buy3=depth.Bids.[2] Precio Orders_sell1=depth.Asks[0].Precio Orders_sell2=depth.Asks.[1] Precio Orders_sell3=depth.Asks.[2] Precio ¿Qué es esto? En el caso de las personas que no están en contacto con el usuario, el nombre de la persona en contacto con el usuario será el siguiente: ¿Qué es esto? En el caso de las personas que no están en contacto con el cliente, el número de pedido es el siguiente: time1=time.time() # registra el tiempo de finalización de la orden Si sale_orden_id==Ninguno: Log (('el número de pedido está en blanco') si sell_order_id!=None: # si se obtiene el número del pedido order_back_message_last=None # Registra la última vez Consulta el contenido de la información de retorno de la orden (inicializado como None) ¿Qué es esto? while True: # entrar en el ciclo de mientras, para seguir la información de la orden con GetOrder El mensaje de retorno de #GetOrder (todos) Log (('la consulta del contenido de la orden devuelta es',order_back_message) # Cerebro de salida de la orden devuelta ¿Qué es esto? if order_back_message!=order_back_message_last: # Si la información de este pedido no coincide con la anterior, el registro se exporta y se actualiza order_back_message_last Log (('la consulta de la orden devuelve el contenido de 'order_back_message') ¿Qué es lo que está sucediendo? ¿Qué es esto? ¿Qué es esto? order_status=order_back_message.Status# La orden de retorno extrae el estado de la estructura de datos (desde este momento no se necesita ver, ya que no se pasa por encima) El estado de la orden es el siguiente: order_status=exchange.GetOrder ((sell_order_id). Log ((orden_status) de la orden) Si orden_status ==None y tiempo. tiempo (() - tiempo1>2: Log (('No se obtuvo el estado de la orden') No puedo. Si el orden está en el estado!=None: Si el estado de la orden está cerrado: Log (('compra de cobertura - éxito') No puedo. #returnTrue Es cierto elif time.time() -time1>2 and (order_status==ORDER_STATE_CANCELED or order_status==ORDER_STATE_PENDING): El tiempo de ejecución de la orden es el tiempo de ejecución de la orden. Log (('compra de cobertura - fracaso') No puedo. #return False (en inglés) #Log ((exchange.GetAccount)) es el nombre de un sitio web en el que los usuarios pueden registrarse. #Log (('xunhuan') es el nombre de un sitio web de Twitter. #PD_SHORTLog (('tiempo actual=',time.time(), 'tiempo inicial=',time1)
Los inventores cuantifican - sueños pequeñosEs así, algunos intercambios de estado de la orden Hay varios estados estándar en la documentación no BotVS, BotVS se define como un estado desconocido, se puede ver el valor específico del estado después de la oración order_status=exchange.GetOrder (order_result). En este caso, el estado de la orden es el valor que se puede ver y, por lo tanto, se puede juzgar el problema (cuál es la causa que conduce al ciclo de muerte).
el cazador1015@ChiloChiloDream.ChiloDream, estoy en gateIO, este problema lo descubrí hace varios días, también escribí un código simple y lo probé y los resultados no parecen tener ningún problema. https://dn-filebox.qbox.me/97f571e4222ee9c61bd6e3cb203af319b11a8c72.png