金字塔决策交易系统

标题: 后台多策略汇总没有执行 [打印本页]

作者: 胖虎爱吃鱼    时间: 2024-4-15 14:05
标题: 后台多策略汇总没有执行
今天有一笔甲醇的单子,子策略有持仓信号没有成交;这次是把变量都调试出来了,但是就是没有下单;一会我重启预警就会下单了。策略汇总代码如下
////***********************************************//仓位计算//***********************************************

//多策略:ref(ifelse(INBLOCK('大品种'),round((短箭+中箭+短箭x)/2),短箭+震荡+中箭+短箭x),1);

多策略:短箭+震荡+中箭+短箭x+长箭;
理论持仓:多策略+日内策略+长线,COLORYELLOW;
////***********************************************//交易信号画图//***********************************************
drawicon(理论持仓>ref(理论持仓,1),h,1);
drawicon(理论持仓<ref(理论持仓,1),l,2);
zh:='176128';

//可用买持:tbuyholdingex(zh,'',1);  
//可用卖持:tsellholdingex(zh,'',1);
//平空未成交:tsellholdingex(zh,'',3);
//平多未成交:tbuyholdingex(zh,'',3);
多总仓:tbuyholdingex(zh,'',2);                                 
空总仓:tsellholdingex(zh,'',2);
开多未成交:TREMAINQTY(1,zh,stklabel);                             //未成交开多单
开空未成交:TREMAINQTY(3,zh,stklabel);                             //未成交开空单

账户总仓:多总仓-空总仓+开多未成交-开空未成交;


////交易模块//***********************************************
//理论持仓与实际持仓的判断
涨停价:dynainfo(54);
跌停价:dynainfo(55);
涨跌停1:h>=涨停价*0.998 or l<=跌停价*1.002;

fillcond:not(SPLITDATA(0)=1 and MINUTE<3  or 涨跌停1);

if  fillcond then BEGIN
if 理论持仓-账户总仓>0 and 账户总仓>=0 then
   tbuy(1,理论持仓-账户总仓,mkt,0,0,zh);   

if 理论持仓-账户总仓>0 and 账户总仓<0 then  begin
   tsellshort(理论持仓<0,理论持仓-账户总仓,mkt,0,0,zh);
   if 理论持仓>=0 then begin
      tsellshort(1,账户总仓,mkt,0,0,zh);
      tbuy(理论持仓>0,理论持仓,mkt,0,0,zh);
      end
   end

if 理论持仓-账户总仓<0 and 账户总仓<=0 then
   tbuyshort(1,abs(理论持仓-账户总仓),mkt,0,0,zh);

if 理论持仓-账户总仓<0 and 账户总仓>0 then begin      
   tsell(理论持仓>0,abs(理论持仓-账户总仓),mkt,0,0,zh);      
   if 理论持仓<=0 then begin
     tsell(1,账户总仓,mkt,0,0,zh);
     tbuyshort(理论持仓<0,abs(理论持仓),mkt,0,0,zh);
     end
   end               
end




作者: 胖虎爱吃鱼    时间: 2024-4-15 14:08
刚重启了预警,就出现报单了。信号在图表中也能看到的,后台调试的变量子策略持仓也是在的
作者: 胖虎爱吃鱼    时间: 2024-4-15 14:10
还出现一个问题,就是重启预警后,调试日志也恢复正常了,不再是只输出甲醇这个单品种
作者: 胖虎爱吃鱼    时间: 2024-4-15 14:11
这种情况很少出现,其他大部分时间单子都是正常下的。请问老师是什么情况。该如何解决
作者: 技术010    时间: 2024-4-15 14:24
本帖最后由 技术010 于 2024-4-15 14:58 编辑

1、只有MA品种输出,那是否是你的debugfile语句加载到了图表上,是图表上输出的日志。
2、其他品种没有输出,那说明没有在运行啊,你可以在交易日志中看是否有后台品种运行结束的字样,只有在品种正常运行时,输出的日志才有意义。只有先保证品种是在正常运行的,才好通过输出的日志来进一步跟踪分析问题。

作者: 胖虎爱吃鱼    时间: 2024-4-15 15:13
运行都是正常的,运行结束;重点是重启预警信号就有了,而变量输出都是正常的;

补充内容 (2024-4-15 15:24):
就只有这一个策略的开仓信号会偶尔没有报单,而且平仓信号几乎没有出现过什么问题,这个策略与其他策略的不同之处就是开仓用到了自定义数据。
作者: 技术010    时间: 2024-4-15 15:38
本帖最后由 技术010 于 2024-4-15 15:49 编辑

1、单看现有的这些资料不太好分析出具体是什么原因引起的没有输出,你的后台程序化交易是什么时候开启的?日志输出从开启后就一直只输出MA这一个品种吗?
2、你监控的品种是固定品种还是动态加载监控变化的品种?你这些debugfile输出都是你后台预警全策略50W和移仓换月的输出吗?
3、你的debugfile输出的条件是怎么写的,是恒成立输出,还是满足某个条件再输出啊?

作者: 胖虎爱吃鱼    时间: 2024-4-15 16:26

IF MINUTE<>REF(MINUTE,1) THEN BEGIN
//IF islastbar THEN BEGIN
debugfile('E:\调试日志\调试日志全策略.txt',stklabel&
' aah1='&numtostr(aah1,0)&
' bbh1='&numtostr(bbh1,0)&
' 短箭='&numtostr(短箭,0)&
' 震荡='&numtostr(震荡,0)&
' 中箭='&numtostr(中箭,0)&
' 短箭x='&numtostr(短箭x,0)&
' 长线='&numtostr(长线,0)&
' 理论持仓='&numtostr(理论持仓,0)&
' 账户总仓='&numtostr(账户总仓,0)&
' fillcond='&numtostr(fillcond,0)&
' 行情时间='&numtostr(DYNAINFO(207),0),1);
end这么输出的
作者: 胖虎爱吃鱼    时间: 2024-4-15 16:27
后台程序是这样,只在交易时间段刷新啊。固定56个品种监控

补充内容 (2024-4-15 16:30):
就经常盘中,日内策略会在图表上有信号,debug输出,子策略也是有持仓。但是在后台预警中没有下单,当我重启完预警。信号就成功报单了。说明下单模块的代码也没啥问题。总之就是搞不懂问题在哪。其他策略基本没问题
作者: 技术010    时间: 2024-4-15 16:40
1、debugfile没有在输出,从debugfile输出代码上看不出什么问题,就是1分钟输出1次,除非你改了输出代码,没有停止策略再开启,只有重启后台程序化交易,新代码才会生效,想不到别的合理的可能性。
2、另外交易日志上是有品种运行结束的记录,但是没法区分是哪个预警的品种在输出,所以没法判断哪个预警是在正常执行。你可以在策略中再加上一些输出,来判断下该预警是否在正常运行的。从现象上看,是品种没有在运行导致的。只能进一步跟踪排查下了。
作者: 胖虎爱吃鱼    时间: 2024-4-15 22:24
技术010 发表于 2024-4-15 16:40
1、debugfile没有在输出,从debugfile输出代码上看不出什么问题,就是1分钟输出1次,除非你改了输出代码, ...

没有修改过策略,就是不知道为什么;变量 输出好像没什么问题就是偶尔不报单
作者: admin    时间: 2024-4-16 08:30
可以增加一个无条件限制的debugfile输出。看是否存在不输出情况
作者: 胖虎爱吃鱼    时间: 2024-4-16 09:21
也没有什么问题
作者: 技术010    时间: 2024-4-16 09:26
这样多个品种都有输出,那说明品种在正常运行的,只能持续跟踪了。
作者: 胖虎爱吃鱼    时间: 2024-4-16 10:41
技术010 发表于 2024-4-16 09:26
这样多个品种都有输出,那说明品种在正常运行的,只能持续跟踪了。

这个现象不是经常发生,等下一次信号没有报的时候我再把调试日志跟报单日志发上来
作者: 胖虎爱吃鱼    时间: 2024-4-17 09:05
技术010 发表于 2024-4-16 09:26
这样多个品种都有输出,那说明品种在正常运行的,只能持续跟踪了。

我好像发现一些规律,当我打开图表将后台多策略加载到上面(未开启程序化交易);变量输出调试的就变成了图表上的品种。是不是因为这个
作者: 技术010    时间: 2024-4-17 09:07
你把策略加载到图上,就已经触发了计算,就会用debugfile输出,不需要启动图表程序化交易的,没有行情的时候,只计算一次,有行情的时候,盘口有跳空,就会不断计算输出啊。
作者: 胖虎爱吃鱼    时间: 2024-4-17 09:33
技术010 发表于 2024-4-17 09:07
你把策略加载到图上,就已经触发了计算,就会用debugfile输出,不需要启动图表程序化交易的,没有行情的时 ...

那他会影响到后台程序预警交易吗?出问题的子策略与其他策略不同之处是用了自定义刷新的数据。今天又出现了一笔加仓信号没有报单,当我重启预警后cc持仓就增加了

补充内容 (2024-4-17 09:34):
没有报单的时候,我是图表都关闭了的
作者: 技术010    时间: 2024-4-17 09:36
不会影响交易,但是会影响你对debugfile输出日志的判断啊,失去了跟踪排查问题的依据了啊。所以如果你想要根据debugfile输出的日志来跟踪问题,只能在后台上运行debugfile代码。在图表上、自定义数据中以及任何自动计算的功能中都不能运行加载运行debugfile代码。
作者: 胖虎爱吃鱼    时间: 2024-4-17 09:43
技术010 发表于 2024-4-17 09:36
不会影响交易,但是会影响你对debugfile输出日志的判断啊,失去了跟踪排查问题的依据了啊。所以如果你想要 ...

嗯嗯,那我就再看看下一次信号出问题的输出变量吧
作者: 胖虎爱吃鱼    时间: 2024-4-17 09:46
菜粕,图表出现加仓信号没有报单。子策略输出的仓位变量中,是一段时间是-18一段时间是-36

补充内容 (2024-4-17 09:46):
开仓是好的
作者: 胖虎爱吃鱼    时间: 2024-4-17 09:53
重启预警后,子策略输出的仓位变量就稳定了
作者: 技术010    时间: 2024-4-17 09:57
1、怎么还在用图表上信号来判断呢?你只能输出stkindiex引用的图表策略,看引用过来的理论仓位是多少,而不是看图表上加载策略的信号啊。你图表上的仓位可能和你stkindiex引用过来的仓位都不一定相同,因为图表加载的数据和stkindiex使用的数据量不同。
2、只能输出stkindiex获取的理论持仓和账户的实际持仓之间进行判断啊。

作者: 胖虎爱吃鱼    时间: 2024-4-17 10:04
技术010 发表于 2024-4-17 09:57
1、怎么还在用图表上信号来判断呢?你只能输出stkindiex引用的图表策略,看引用过来的理论仓位是多少,而不 ...

没明白我的意思,即使不看图表上的信号。输出的子策略仓位也是不稳定的,另外图表上的数据量与后台stkindiex函数引用的数据量是一样的,当图表上出现了加仓信号,后台输出的仓位是变动的一会-18一会-36,但是没有报单
作者: 技术010    时间: 2024-4-17 10:06
那就要进一步输出排查你后台策略中的开平仓条件了,看为什么没有触发了。后台没有报单,那肯定是后台的条件没有满足,那你只能输出你开平仓各个条件的值,看是哪个值和你预期的不符,导致的没有报单。
作者: 胖虎爱吃鱼    时间: 2024-4-17 10:12
技术010 发表于 2024-4-17 10:06
那就要进一步输出排查你后台策略中的开平仓条件了,看为什么没有触发了。后台没有报单,那肯定是后台的条件 ...

简单说就是,图表上出现了信号而后台没有预警报单。重启预警就预警报单了,为什么是重启就有重点是这个;
作者: 技术010    时间: 2024-4-17 10:14
首先看品种是否在正常运行,看该品种运行时输出的开平仓条件的变量值是多少。你问我们为什么重启就报单了,我们也无法直接指出具体原因,只能根据输出日志,来一步步排查。
作者: 胖虎爱吃鱼    时间: 2024-4-18 08:45
变量输出后应该是自定义数据刷新的问题,在K线走完自定义数据没有变化,而是在K线中发生的变化。而策略交易是走完K线模式,就会导致报单延迟。是这里选择固定时间间隔的问题会导致收线没有刷新。这里希望金字塔添加增加走完K线刷新
作者: 技术010    时间: 2024-4-18 08:57
这两个功能是独立计算的,并不会互相联动刷新计算的。就算是增加了K线走完刷新,也无法保证自定义数据和后台是同步刷新计算的啊。CPU处理计算是异步的啊,很难保证哪个在前,哪个在后的。
作者: 胖虎爱吃鱼    时间: 2024-4-19 21:44
技术010 发表于 2024-4-18 08:57
这两个功能是独立计算的,并不会互相联动刷新计算的。就算是增加了K线走完刷新,也无法保证自定义数据和后 ...

请问老师,我那个出问题的子策略开仓代码如下,逐K计算,仅刷新最后一根K线模式有问题吗;
//***********************************//交易系统//***********************************//
variable:opensnum:=0,addsum:=0;
if date<>ref(date,1) then  opensnum:=0;   
if date<>ref(date,1) then  addsum:=0;
todaykc:enterbars<=todaybar ;
//开平仓
if 开多条件 and opensnum<1 then
begin
   sellshort(holding<0,holding,thisclose);
   buy(holding=0,lots,thisclose);
        opensnum:=1;
end

//   
if 开空条件 and opensnum<1 then
begin
   sell(holding>0,holding,thisclose);
   buyshort(holding=0,lots,thisclose);
        opensnum:=1;
end

补充内容 (2024-4-19 21:55):
这里是不是全局变量的申明以至于出现问题,有必要用全局变量吗
作者: 技术006    时间: 2024-4-21 15:00
胖虎爱吃鱼 发表于 2024-4-19 21:44
请问老师,我那个出问题的子策略开仓代码如下,逐K计算,仅刷新最后一根K线模式有问题吗;
//********** ...

单独这部分代码,只有全局变量opensnum有作用,它控制每天只会开仓1次。并且是一天内有且还会开一个方向上的仓位。
作者: 胖虎爱吃鱼    时间: 2024-4-22 09:14
技术006 发表于 2024-4-21 15:00
单独这部分代码,只有全局变量opensnum有作用,它控制每天只会开仓1次。并且是一天内有且还会开一个方向 ...

opensnum全局变量申明去掉影响吗,感觉这里代码删除也还是同样效果
作者: 技术006    时间: 2024-4-22 09:31
本帖最后由 技术006 于 2024-4-22 09:40 编辑
胖虎爱吃鱼 发表于 2024-4-22 09:14
opensnum全局变量申明去掉影响吗,感觉这里代码删除也还是同样效果

这要看你本身的代码诉求,没有它你可能一天会开很多次。除非保留那个if  date<>ref(date,1)条件。这种情况下opensum变量没有初始值等同于全局变量,但是特殊条件控制情况下也会飞掉。
作者: 胖虎爱吃鱼    时间: 2024-4-22 10:30
啥样特殊情况会飞,飞掉啥意思?
作者: 技术006    时间: 2024-4-22 10:40
你的代码不存在这种变量结果未知的情况。变量没有初始值的问题。可以看这个。(特定情况下,判断体内的变量在起始位置时可能是无效值,所有结果可能会不可控)

https://www.weistock.com/docs/PE ... %E8%BF%9B%E9%98%B6/
作者: 胖虎爱吃鱼    时间: 2024-4-22 11:27
技术006 发表于 2024-4-22 10:40
你的代码不存在这种变量结果未知的情况。变量没有初始值的问题。可以看这个。(特定情况下,判断体内的变量 ...

今天又有一个信号没有开仓,看了调试日志是子策略符合交易条件的情况下  opensnum=1;所以没有开仓cc=0。重启后台预警后cc仓位恢复正常,那请问老师这种需要怎么修改
作者: 胖虎爱吃鱼    时间: 2024-4-22 11:33
sm硅铁今天十点图表有开多信号,日志也是有开多信号,opensunm也等于1了,但是cc=0,重启预警后,cc=15了

补充内容 (2024-4-22 12:16):
代码改成下面这样会不会好些variable:opensnum:=0,addsum:=0;
if date<>ref(date,1) then  opensnum:=0;   
if date<>ref(date,1) then  addsum:=0;
todaykc:enterbars<=todaybar ;
//开平仓
if 开多条件 and op...
作者: 胖虎爱吃鱼    时间: 2024-4-22 12:17
代码修改成如下这样会不会好些
variable:opensnum:=0,addsum:=0;
if date<>ref(date,1) then  opensnum:=0;   
if date<>ref(date,1) then  addsum:=0;
todaykc:enterbars<=todaybar ;
//开平仓
if 开多条件 and opensnum<1 then
begin
   sellshort(holding<0,holding,thisclose);
   buy(holding=0,lots,thisclose);
        if holding>0 then opensnum:=1;
end

//   
if 开空条件 and opensnum<1 then
begin
        sell(holding>0,holding,thisclose);
        buyshort(holding=0,lots,thisclose);
    if holding<0 then opensnum:=1;
end


if 加多条件 and addsum<1 then
begin
   sellshort(holding<0,holding,thisclose);
   buy(holding>=0,lots,thisclose);
   if todaykc then  addsum:=1;
end
//   
if 加空条件 and addsum<1 then
begin
   sell(holding>0,holding,thisclose);
   buyshort(holding<=0,lots,thisclose);
   if todaykc then  addsum:=1;
end

作者: 技术010    时间: 2024-4-22 12:59
这种建议你最简化代码来排查问题,单独把你的CC指标拿出来运行,看是否重启后发生变化,需要找到发生变化的原因的。单看代码没法跟踪调试问题的。
作者: 胖虎爱吃鱼    时间: 2024-4-22 13:27
技术010 发表于 2024-4-22 12:59
这种建议你最简化代码来排查问题,单独把你的CC指标拿出来运行,看是否重启后发生变化,需要找到发生变化的 ...

cc就是holding
作者: 技术010    时间: 2024-4-22 13:32
本帖最后由 技术010 于 2024-4-22 13:35 编辑

那就新建个指标,直接一条stkindiex引用图表策略的holding,看引用过来的是多少,然后重启后台程序化,看是否发生变化是因为和重启有关。我们理解的holding可能发生变化,只是和数据量引用的不够多,或产生了信号有关,和是否重启后台程序化是无关的。后台stkindiex引用的holding变化和你图表上看到的信号变化都可能是不一样的,这些都要看你的策略对数据量的敏感度的。
作者: 技术006    时间: 2024-4-22 13:52
你图表中的结果等同于刻舟求剑,策略调用的不是图表中的结果,而是一个相同的策略副本的执行结果。所有的执行结果都是以策略副本自身的执行结果为准。
其他副本的直接结果本质上没有参考意义。

https://www.weistock.com/docs/PE ... 9C%BA%E5%88%B6.html

作者: 胖虎爱吃鱼    时间: 2024-4-22 18:50
技术006 发表于 2024-4-22 13:52
你图表中的结果等同于刻舟求剑,策略调用的不是图表中的结果,而是一个相同的策略副本的执行结果。所有的执 ...

这个子策略是图表策略,然后后台多策略引用这个图表子策略的持仓进行的开平仓。debug函数在子策略中运行的。我把子策略加载在图表上的变量与子策略dubug输出的文件进行对比。两个使用的数据量都是相同的。开多信号也都有,就是后台预警也不会报单。
作者: 技术006    时间: 2024-4-22 20:15
这个要看后台自己调用的结果。其他的都没有多大参考意义。如果后台不下单,你要反向排查和下单条件相关联的条件。计算机执行结果都是客观存在的,条件不成立必然是相关条件的因子有直接关系。
作者: 胖虎爱吃鱼    时间: 2024-4-22 22:06
技术006 发表于 2024-4-22 20:15
这个要看后台自己调用的结果。其他的都没有多大参考意义。如果后台不下单,你要反向排查和下单条件相关联的 ...

后台调用的结果以前也debug文件过啊,就是引用过来的cc等于0啊
作者: 胖虎爱吃鱼    时间: 2024-4-22 22:13
这里子策略opensnum与holding又变成0了
作者: 胖虎爱吃鱼    时间: 2024-4-22 22:17
技术006 发表于 2024-4-22 20:15
这个要看后台自己调用的结果。其他的都没有多大参考意义。如果后台不下单,你要反向排查和下单条件相关联的 ...

最让我无语的是,出问题的单子大部分是能赚钱的单子要么延迟下单滑点滑巨大。正常报单的单子大都是亏损的

补充内容 (2024-4-22 22:34):
而且回测报告里交易时间是跟图表程序对的上的,跟后台对不上。。。
作者: 技术006    时间: 2024-4-22 23:01
本帖最后由 技术006 于 2024-4-22 23:03 编辑
胖虎爱吃鱼 发表于 2024-4-22 22:13
这里子策略opensnum与holding又变成0了

这种信号闪烁,你只能进一步跟踪图表策略的执行过程。在涉及到相关条件的位置输出各个因子的变化过程。这种问题你只能根据当前的结果逐级反推。本身在后台上使用图表搞净持仓的概念,就需要用户具备很高的调试能力和代码逻辑能力。否者不可能做出稳定的系统的。
作者: 胖虎爱吃鱼    时间: 2024-4-22 23:05
技术006 发表于 2024-4-22 23:01
这种信号闪烁,你只能进一步跟踪图表策略的执行过程。在涉及到相关条件的位置输出各个因子的变化过程。这 ...

我也不想啊,那你们倒是把图表跟后台的多策略组合净持仓下单弄的简单些啊,有些不明白章总是怎么做到那么多策略组合净头寸开仓信号稳定的
作者: 胖虎爱吃鱼    时间: 2024-4-22 23:14
技术006 发表于 2024-4-22 23:01
这种信号闪烁,你只能进一步跟踪图表策略的执行过程。在涉及到相关条件的位置输出各个因子的变化过程。这 ...

现在子策略的关键变量都输出出来了,但是看不出来哪里的问题。该正常的都是正常的就是holding这个不稳定
作者: 胖虎爱吃鱼    时间: 2024-4-22 23:29
技术010 发表于 2024-4-22 13:32
那就新建个指标,直接一条stkindiex引用图表策略的holding,看引用过来的是多少,然后重启后台程序化,看是 ...

数据量是够的,图表跟后台用的一样的数据量。而且量也弄到十倍的,但是就是holding不稳定
作者: 技术006    时间: 2024-4-23 08:33
胖虎爱吃鱼 发表于 2024-4-22 23:14
现在子策略的关键变量都输出出来了,但是看不出来哪里的问题。该正常的都是正常的就是holding这个不稳定

holidng不稳定就是说明信号闪。
数据量只是影响稳定性的因素之一而已。
闪的原因要定位到开平条件的因子,逐个因子分析对照造成变化的实际原因。别无他法
作者: 胖虎爱吃鱼    时间: 2024-4-23 09:22
技术006 发表于 2024-4-23 08:33
holidng不稳定就是说明信号闪。
数据量只是影响稳定性的因素之一而已。
闪的原因要定位到开平条件的因 ...

那我把子策略单独用图表程序化跑一段时间看看
作者: 技术006    时间: 2024-4-23 09:26
胖虎爱吃鱼 发表于 2024-4-23 09:22
那我把子策略单独用图表程序化跑一段时间看看

没有意义。你只有调试输出引用执行时的因子变化才是最根本的解决方法方向




欢迎光临 金字塔决策交易系统 (https://www.weistock.com/bbs/) Powered by Discuz! X3.4