金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 4270|回复: 5

多品种回测问题

[复制链接]

61

主题

197

帖子

197

积分

等级: 免费版

注册:
2021-9-28
曾用名:
发表于 2022-6-6 17:25 | 显示全部楼层 |阅读模式
本帖最后由 技术006 于 2022-6-7 09:18 编辑

WARNING_DISABLE:4;   //close the extgbdata function warning...
if BARPOS = 1 THEN
BEGIN
        EXTGBDATASET('totalst',0);
END;
if time =150000 and EXTGBDATA('totalst') > 0  THEN
BEGIN
        MSGOUT(1,STKLABEL+',date:'+NUMTOSTR(date+19000000,0)+'time:'+numtostr(time,0)+'totalst is more than 0..come in and it is:'+NUMTOSTR(EXTGBDATA('totalst'),0));
        EXTGBDATASET('totalst',0);
      MSGOUT(1,STKLABEL+',date:'+NUMTOSTR(date+19000000,0)+'time:'+numtostr(time,0)+'totalst is inited at ='+NUMTOSTR(EXTGBDATA('totalst'),0));
END;
if time=140000 THEN
begin
    EXTGBDATASET('totalst',EXTGBDATA('totalst') + 1);
    test_v1:= EXTGBDATA('totalst');
    MSGOUT(1,STKLABEL&'140000..tst..date:'+NUMTOSTR(date+19000000,0)+'time:'+numtostr(time,0)+',close='+NUMTOSTR(close,2)+',totalst count:'+ NUMTOSTR(test_v1,0) );
end;
上述策略进行多品种股票回测: 截图202206061711145883.png
回测时间为1分钟周期,时间从:2022/5/10至 2022/6/2日,每品种投20万,测试逻辑应该是:该策略从2022-5-10日的9点31份开始,依次对上述14个品种进行测试,此时:totalst 外部全局变量 会依次 在 每天的 140000进行加1,如果14个品种依次运行应为14的值,然后到150000时候会对 totalst 变量清零。然后第二交易日2022/5/11日 有重复。但金字塔实际结果却是:当140000分时不能对每一个品种运行 计数,而是 单独对每一个品种比如000078(海王生物)就从5月10日至6月2日进行每天计数,自然就是1,然后150000清零,问题:如何解决横截面时间比如140000对美元加载品种进行计数(利用extgbdata变量)?
输出结果:
2022/06/06 17:24:04  000078140000..tst..date:20220510time:140000,close=3.34,totalst count:1
2022/06/06 17:24:04  000078,date:20220510time:150000totalst is more than 0..come in and it is:1
2022/06/06 17:24:04  000078,date:20220510time:150000totalst is inited at =0
2022/06/06 17:24:04  000078140000..tst..date:20220511time:140000,close=3.52,totalst count:1
2022/06/06 17:24:04  000078,date:20220511time:150000totalst is more than 0..come in and it is:1
2022/06/06 17:24:04  000078,date:20220511time:150000totalst is inited at =0
2022/06/06 17:24:04  000078140000..tst..date:20220512time:140000,close=3.56,totalst count:1
2022/06/06 17:24:04  000078,date:20220512time:150000totalst is more than 0..come in and it is:1
2022/06/06 17:24:04  000078,date:20220512time:150000totalst is inited at =0
2022/06/06 17:24:04  000078140000..tst..date:20220513time:140000,close=3.75,totalst count:1
2022/06/06 17:24:04  000078,date:20220513time:150000totalst is more than 0..come in and it is:1
2022/06/06 17:24:04  000078,date:20220513time:150000totalst is inited at =0
2022/06/06 17:24:04  000078140000..tst..date:20220516time:140000,close=3.97,totalst count:1
2022/06/06 17:24:04  000078,date:20220516time:150000totalst is more than 0..come in and it is:1
2022/06/06 17:24:04  000078,date:20220516time:150000totalst is inited at =0
2022/06/06 17:24:04  000078140000..tst..date:20220517time:140000,close=3.54,totalst count:1
2022/06/06 17:24:04  000078,date:20220517time:150000totalst is more than 0..come in and it is:1
2022/06/06 17:24:04  000078,date:20220517time:150000totalst is inited at =0
2022/06/06 17:24:04  000078140000..tst..date:20220518time:140000,close=3.61,totalst count:1
2022/06/06 17:24:04  000078,date:20220518time:150000totalst is more than 0..come in and it is:1
2022/06/06 17:24:04  000078,date:20220518time:150000totalst is inited at =0
2022/06/06 17:24:04  000078140000..tst..date:20220519time:140000,close=3.77,totalst count:1
2022/06/06 17:24:04  000078,date:20220519time:150000totalst is more than 0..come in and it is:1
2022/06/06 17:24:04  000078,date:20220519time:150000totalst is inited at =0
2022/06/06 17:24:04  000078140000..tst..date:20220520time:140000,close=3.76,totalst count:1
2022/06/06 17:24:04  000078,date:20220520time:150000totalst is more than 0..come in and it is:1
2022/06/06 17:24:04  000078,date:20220520time:150000totalst is inited at =0
2022/06/06 17:24:04  000078140000..tst..date:20220523time:140000,close=3.79,totalst count:1





回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2022-6-6 18:10 | 显示全部楼层
本帖最后由 技术006 于 2022-6-6 18:30 编辑

ext全局变量没有历史值。其次,你这种写法也达不到想要的目的。策略实际每运行一次,它就会加1次,同一根k上也会加若干次。
而且回测中,做不到你这种类似并行的想法的。

ext全局变量就是类似于配置文件。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

61

主题

197

帖子

197

积分

等级: 免费版

注册:
2021-9-28
曾用名:
 楼主| 发表于 2022-6-7 08:55 | 显示全部楼层
第一、ext全局变量就是一个作用于金字塔系统的存储器,不需要历史值,但是可以随着时间进程往里面保持K线运行的值用于另外策略或本策略对其值进行调用,这种用法是最基本的,其他系统如TB、MC等都有这种类似存储至,如果没有这种方式,金字塔就实现不了不同策略之间的信号沟通。第二、同一根K线上每运行一次,策略可以根据K线运行的条件 进行计算并将结果保存到这个存储器中(比如加一次的计算结果保存在里面),这里就是故意测试金字塔能否实现这个功能(MC、TB系统早就实现了的),问题出现?金字塔多策略、多品种运行,比如同一策略加载到10个品种上,是把一个品种从头到尾(第一根K线到最后一根K)执行完后再去执行另一个品种,又重头到尾执行下一品种?这样做时间不可能为每一个品种执行都退回来吧?除非金字塔有时光机倒流? 正确做法是 每一分钟,比如931是,该策略依次执行品种1、品种2。。。品种10,然后932在执行品种1.。品种10,但是,我测试的结果金字塔确实 是每一个品种从头到尾执行回测,然后再去执行下一个品种,现实中没有时光倒流的, 这是最基本的逻辑,现在如何解决?
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-6-7 09:03 | 显示全部楼层
并不是根据K线时间对齐来依次执行的啊,没法实现你说的这种需求的。金字塔的多品种运算就是根据品种从前往后运算的,采用多核异步的方式来进行 的。初始加载运算的时候是一个品种从加载的第一根K线一直计算到最后一根的,不会一根K线一个品种这样计算的,后续的运算是根据运算模式来决定的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

61

主题

197

帖子

197

积分

等级: 免费版

注册:
2021-9-28
曾用名:
 楼主| 发表于 2022-6-7 09:11 | 显示全部楼层
那如何解决策略之间的信号沟通?比如,第一个策略在931份执行,然后将计算结果保存到存储器A, 然后同样在931执行下一个策略,会读取A中保存的值 并做计算处理,在讲计算结果保存会A中,然后(也在931)执行下一个策略。如果是单核处理,这样应该是可以的。如果是多核并行处理,这个问题确实存在,但金字塔是如何解决 多核处理中,不同策略之间的信号沟通问题的?
回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2022-6-7 09:12 | 显示全部楼层
本帖最后由 技术006 于 2022-6-7 09:26 编辑

解决不了,你这种需求。

ext全局变量正常都是只在最新k上才能有效执行。历史k执行ext又无效。不过你例外(因为你勾选看属性中的全局有效)
但是多核运行下,就不可能依次完成,多品种谁先谁后确定不了。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-7-19 03:23 , Processed in 0.143419 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表