以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 高级功能研发区 (http://www.weistock.com/bbs/list.asp?boardid=5) ---- SimNow撤单不明原因出错 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=183786) |
-- 作者:jinzita99 -- 发布时间:2021/1/7 10:28:42 -- SimNow撤单不明原因出错 公式执行cancel_order语句出错,但同样的语句放在一个单独的公式执行没有问题,手工撤单也没问题,找不出原因。共有6个截屏,论坛一次只能贴5个附件,稍后再补第6个截屏。 截屏1 - 订单记录 截屏2 - 公式截屏 截屏3 - 公式执行日志截屏 截屏4 - 出错信息截屏 截屏5 - 单独公式截屏 截屏6 - 单独公式执行日志截屏,在楼下补充 |
-- 作者:yukizzc -- 发布时间:2021/1/7 10:33:39 -- http://222.73.7.161/bbs/dispbbs.asp?BoardID=10&ID=166505&replyID=&skin=1
看这个帖子里撤单范例,是没有问题的 你这个报错大部分好像是参数有问题 |
-- 作者:jinzita99 -- 发布时间:2021/1/7 10:34:13 -- 第6个截屏 补充一点,已用type()检查过公式中order_id_temp字段确认是int类型。关闭金字塔重新启动结果仍然一样,执行日志就停止在step 3,step 4打印不出来了,订单记录也没有撤单,判断是cancel_order语句执行出错。
|
-- 作者:yukizzc -- 发布时间:2021/1/7 11:05:58 -- 你不要自己去这样的定义,直接走未成交单然后获取订单然后撤单呢 |
-- 作者:jinzita99 -- 发布时间:2021/1/7 11:38:10 -- 我在撤单前添加了查询该订单状态,然后根据返回状态再执行撤单,查询正常,检验状态也通过,但同样的出错结果。 代码: ... order_id_temp = int(local_order_book_cut.at[i,\'order_id\']) order_id_temp_type = isinstance(order_id_temp, int) write_log2(\'cancel_order\',\'step 3\',order_id_temp=order_id_temp,order_id_temp_type=order_id_temp_type) temp = get_orders_id(order_id_temp) print(temp.status) if temp.status == \'submitted\': print(\'ready\') cancel_order(order_id_temp) print(\'done\') ...执行日志: 11:26:13 > SQRB 正在执行cancel_order, step 3 ———“变量order_id_temp的值: 1734010801 ” ———“变量order_id_temp_type的值: True ” 11:26:13 > submitted 11:26:13 > ready 然后就弹出前面截屏4的出错提示。 我特别检验了cancel_order函数里面那个变量的类型是否int,结果是True,上面step 3那里有打印出来。 用该变量查询订单状态是正常的,有打印ready字样,说明检验订单状态也通过了,撤单出错的原因是什么呢? |
-- 作者:jinzita99 -- 发布时间:2021/1/7 11:50:04 -- 如果无解,只好绕远路,调用pel来撤单了。 |
-- 作者:jinzita99 -- 发布时间:2021/1/7 14:01:41 -- 我照着2楼的例子,先查询未成交订单,然后遍历撤单,结果一样,一样。 代码: order_id_temp = local_order_book_cut.at[i,\'order_id\'] write_log2(\'cancel_order\',\'step 3\',order_id_temp=order_id_temp) temp = local_order_book_cut.at[i,\'order_book_id\'] # 取合约代码 write_log2(\'cancel_order\',\'step 4\',temp=temp) pending_order_list = get_orders(temp,0) # 取合约的所有未成交订单 write_log2(\'cancel_order\',\'step 5\',pending_order_list=pending_order_list,len=len(pending_order_list)) # 打印查询返回的order对象,再len,值是1 if len(pending_order_list) > 0: for m in pending_order_list: write_log2(\'cancel_order\',\'step 6\',m=m,order_id=m.order_id) # 打印遍历的order对象属性order_id if m.order_id == order_id_temp: # 与目标比较,为的是按自己的逻辑撤单,而不是全部撤单 write_log2(\'cancel_order\',\'step 7\') # 打印步骤,如出现step7,表示检验通过 cancel_order(m.order_id) # 撤单,这里已经直接用order对象属性order_id,而不是我另外的表格,结果仍然出错 write_log2(\'cancel_order\',\'step 8\') 日志: 13:50:22 > SQRB 正在执行cancel_order, step 1 13:50:22 > SQRB 正在执行cancel_order, step 2 13:50:22 > SQRB 正在执行cancel_order, step 3 ———“变量order_id_temp的值: 1734010801 ” 13:50:22 > SQRB 正在执行cancel_order, step 4 ———“变量temp的值: SQRB02 ” 13:50:22 > SQRB 正在执行cancel_order, step 5 ———“变量pending_order_list的值: [<__main__.order object at 0x084ED3B0>] ” ———“变量len的值: 1 ” 13:50:22 > SQRB 正在执行cancel_order, step 6 ———“变量m的值: <__main__.order object at 0x084ED3B0> ” ———“变量order_id的值: 1734010801 ” 13:50:22 > SQRB 正在执行cancel_order, step 7 后面就出现同样的错误提示了。这可怎么解释? |
-- 作者:jinzita99 -- 发布时间:2021/1/7 14:41:22 -- 我升级到beta3.0,问题还在,把上面代码贴到一个新的公式,撤单却正常。 代码: pending_order_list = get_orders(\'SQRB02\',0) print(len(pending_order_list)) if len(pending_order_list) > 0: for m in pending_order_list: print(m) if m.order_id == 1734010801: print(\'ready\') cancel_order(m.order_id) print(\'done\') 代码是一样的,cancel_order里都是用order属性order_id。 |
-- 作者:yukizzc -- 发布时间:2021/1/7 17:19:54 -- 你复制出来这个代码没有问题
原来那个就不对? |
-- 作者:jinzita99 -- 发布时间:2021/1/7 18:43:29 -- 是。 |