以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  金字塔软件问题提交  (http://222.73.7.161/bbs/list.asp?boardid=2)
----  get_orders_id函数似乎存在重大瑕疵,请予以排查  (http://222.73.7.161/bbs/dispbbs.asp?boardid=2&id=175430)

--  作者:dyb928
--  发布时间:2020/4/9 11:27:16
--  get_orders_id函数似乎存在重大瑕疵,请予以排查
我使用get_orders_id函数获取订单成交情况,日志如下:

2020-04-09 10:58:35.133    订单968:buy_open QQ10002389,数量:4,价格:0.4709,submitted已报单
2020-04-09 10:58:35.148    订单968:buy_open QQ10002389,数量:4,价格:0.4709,tradeing已成交
2020-04-09 10:58:35.149    订单968:buy_open QQ10002389,数量:4,价格:0.4709,filled全部成交
2020-04-09 10:58:35.188    订单969:sell_open QQ10002391,数量:4,价格:0.0026,submitted已报单
2020-04-09 10:58:35.203    订单969:sell_open QQ10002391,数量:4,价格:0.0026,tradeing已成交
2020-04-09 10:58:35.204    订单969:sell_open QQ10002391,数量:4,价格:0.0026,filled全部成交
2020-04-09 10:58:35.234    订单970:sell_open QQ10002357,数量:4,价格:0.0009,submitted已报单
2020-04-09 10:58:35.250    订单970:sell_open QQ10002357,数量:4,价格:0.0009,tradeing已成交
2020-04-09 10:58:35.251    订单970:sell_open QQ10002357,数量:4,价格:0.0009,filled全部成交
2020-04-09 10:58:35.283    订单971:buy_open QQ10002366,数量:4,价格:0.5314,submitted已报单
2020-04-09 10:58:35.299    订单971:buy_open QQ10002366,数量:4,价格:0.5314,tradeing已成交
2020-04-09 10:58:35.299    订单971:buy_open QQ10002366,数量:4,价格:0.5314,filled全部成交

上述订单在10:58:35秒已全部成交,然后我在30秒钟后即10:59:06调用get_orders_id函数,分别使用了以下几种方法:
v=get_orders_id(id)
"订单:"+str(v.order_id)+"委托量:%d" %v.quantity +"已成交:%d" %v.filled_quantity +"未成交:%d" %v.unfilled_quantity

2020-04-09 10:59:06.002    订单:968委托量:4已成交:0未成交:4
2020-04-09 10:59:06.002    订单:969委托量:4已成交:0未成交:4
2020-04-09 10:59:06.003    订单:970委托量:4已成交:0未成交:4
2020-04-09 10:59:06.003    订单:971委托量:4已成交:0未成交:4

问题就在30秒钟之前订单明明已全部成交,而.filled_quantity获取成交数量仍然为0!

后来,我又把时间扩大到60秒,如下:
2020-04-09 11:06:41.094    订单1460:buy_open QQ10002411,数量:4,价格:0.5665,submitted已报单
2020-04-09 11:06:41.155    订单1461:sell_open QQ10002412,数量:4,价格:0.0017,submitted已报单
2020-04-09 11:06:41.176    订单1462:sell_open QQ10002357,数量:4,价格:0.0009,submitted已报单
2020-04-09 11:06:41.203    订单1460:buy_open QQ10002411,数量:4,价格:0.5665,tradeing已成交
2020-04-09 11:06:41.204    订单1460:buy_open QQ10002411,数量:4,价格:0.5665,filled全部成交
2020-04-09 11:06:41.254    订单1463:buy_open QQ10002366,数量:4,价格:0.5345,submitted已报单
2020-04-09 11:06:41.274    订单1461:sell_open QQ10002412,数量:4,价格:0.0017,tradeing已成交
2020-04-09 11:06:41.275    订单1461:sell_open QQ10002412,数量:4,价格:0.0017,filled全部成交
2020-04-09 11:06:41.322    订单1463:buy_open QQ10002366,数量:4,价格:0.5345,tradeing已成交
2020-04-09 11:06:41.323    订单1463:buy_open QQ10002366,数量:4,价格:0.5345,filled全部成交
2020-04-09 11:06:41.370    订单1462:sell_open QQ10002357,数量:4,价格:0.0009,tradeing已成交
2020-04-09 11:06:41.371    订单1462:sell_open QQ10002357,数量:4,价格:0.0009,filled全部成交

2020-04-09 11:07:42.134    订单:1460委托量:4已成交:0未成交:4下单量:4
2020-04-09 11:07:42.134    订单:1461委托量:4已成交:0未成交:4下单量:4
2020-04-09 11:07:42.135    订单:1462委托量:4已成交:0未成交:4下单量:4
2020-04-09 11:07:42.136    订单:1463委托量:4已成交:0未成交:4下单量:4

上述结果仍然.filled_quantity获取成交数量为0!

请管理员检查,是我引用函数的问题还是函数本身有瑕疵?
编程过程中,等结果!

--  作者:dyb928
--  发布时间:2020/4/9 11:29:51
--  
第2个例子中的“下单量:4”是我设定的一个输出,无关问题,请忽略
--  作者:yukizzc
--  发布时间:2020/4/9 13:49:22
--  
# 本Python代码主要用于策略交易
# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。
from PythonApi import *



#  在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现)
def init(context):
    # 在context中保存全局变量
    context.s1 = "RB00"   #平安银行股票
    context.n = 0


def handle_bar(context):
    if context.n ==0:
        context.idd = buy_open(context.s1, "Market",volume=10,serial_id = 1)
        context.n = 1

        
    

def exit(context):
    orr = get_orders_id (context.idd,"")
    print(orr.filled_quantity)
--  作者:yukizzc
--  发布时间:2020/4/9 13:49:51
--  

图片点击可在新窗口打开查看此主题相关图片如下:6rysk(su2fkhb$4@(~l%p2h.jpg
图片点击可在新窗口打开查看

--  作者:yukizzc
--  发布时间:2020/4/9 13:50:14
--  

本地用上面的代码测试,停止策略时候去输出成交数量都是正常的

另外你的软件版本多少,是最新的5.21吗

[此贴子已经被作者于2020/4/9 13:50:35编辑过]

--  作者:dyb928
--  发布时间:2020/4/9 14:10:54
--  
我完全复制了楼上的代码在我本地测试,开仓正常,但退出策略时显示错误。

执行Python脚本时遇到错误。
 策略: <test1>
 运行: <策略test1>
 类型: AttributeError 
   行: 24 
 描述: \'NoneType\' object has no attribute \'filled_quantity\'

也就是orr = get_orders_id (context.idd,"")没有返回值,导致上述出错。

这难道是我本地金字塔设置有问题吗?

--  作者:dyb928
--  发布时间:2020/4/9 14:25:51
--  
我的版本是金字塔V5.21,用的是信达证券 
--  作者:yukizzc
--  发布时间:2020/4/9 14:41:57
--  
你测试下期货模拟看看
--  作者:dyb928
--  发布时间:2020/4/9 15:33:24
--  
我刚才测试的RB00,就是期货吧,显示错误。
我开通的是期权模拟,可能在期权模拟下测试期货不行吧。

我使用程序化交易只是想做期权的,麻烦程序员排查一下期权的get_orders_id函数有没有问题?我一直在测试,始终有问题。昨天还好,有几个订单的get_orders_id反馈是正常的,那几个订单从下单到查询get_orders_id相差20秒左右,我以为需要这个时间差才能让get_orders_id读出数据,所以今天测试设置的都是30秒钟后查询,不想今天使用.filled_quantity方法都不对,查的数据总是0,但账户早已全部成交。

麻烦再排查下什么情况。

--  作者:yukizzc
--  发布时间:2020/4/9 16:21:13
--  

信达目前版本是5.02的,你是用这个然后覆盖金字塔的5.21后去更新的?

不要这么去做,就使用信达目前的最新版本5.02,不要去用金字塔的版本和信达的混用。

然后在信达版本基础上你再运行测试下看看呢,就先测试期货,然后看下账户栏那边持仓是否有了,以及未成交委托那边是否没了。

然后停止策略时候,会去输出这个filled_quantity然后看下值呢