python里order什么意思_请教python在while中反复调用GetOrder(order_id).Status,利用time.time来跟踪订单变化的问题...

请教python在while中反复调用GetOrder(order_id).Status,利用time.time来跟踪订单变化的问题

请教python在while中反复调用GetOrder(order_id).Status,利用time.time来跟踪订单变化的问题

Author: hunter1015, Created: 2018-03-03 21:22:27, Updated: 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: # 没有返回 订单ID

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) 看下状态的具体数值。

小小梦 是哪个 交易所 ,交易对是什么, 另外 出问题的 代码 发下。

hunter1015 发帖子的时候编辑打错了,代码中确定变量是一致的。实盘反复测试了好多次,就是卡在了GetOrder里出不来,也不会报错,也不会有LOG返回。

小小梦 您这个 代码是不是 写错了 , 这个 ID 应该是 未定义的, 代码里面 就只有这一处 出现。没有初始化也没赋值。

https://dn-filebox.qbox.me/d89332ffbe84fa2cdcac442649edb35f4f61a3cc.png

hunter1015 梦大,这两天我实盘测试了几次,发现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].Price

orders_buy3=depth.Bids[2].Price

orders_sell1=depth.Asks[0].Price

orders_sell2=depth.Asks[1].Price

orders_sell3=depth.Asks[2].Price

account=exchange.GetAccount()

sell_order_id =exchange.Sell(orders_buy1*0.999, 0.1);#下单

time1=time.time() #记录下单完成时间戳

if sell_order_id==None:

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).Status

Log(order_status)

if order_status==None and time.time()-time1>2:

Log('订单状态获取失败')

break

if order_status!=None:

if order_status==ORDER_STATE_CLOSED:

Log('对冲买-成功')

break

#return True

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(order_result).Status 句之后 加上 Log(order_status) 看下状态的具体数值。

就可以 看到,具体 订单 状态是什么值, 从而 判断 这个问题 (什么原因导致的 进入 死循环)。

hunter1015 @小小梦 梦大,我在gateIO,这个问题发现好几天了,也写过简单的代码回测过结果感觉也没什么问题。

https://dn-filebox.qbox.me/97f571e4222ee9c61bd6e3cb203af319b11a8c72.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值