欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → debugfile在序列计算模式下如何解决重复输出的问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有4613人关注过本帖树形打印复制链接

主题:debugfile在序列计算模式下如何解决重复输出的问题

帅哥哟,离线,有人找我吗?
popypopy
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:82 积分:0 威望:0 精华:0 注册:2020/9/21 10:56:16
debugfile在序列计算模式下如何解决重复输出的问题  发帖心情 Post By:2020/11/3 10:27:11    Post IP:111.202.190.20[显示全部帖子]

我的代码希望实现的目的:
当日内一旦命中买入规则,下单买入,并记入日志。当日内再发生命中买入规则的情况不再下单也不再记入日志

我参照了之前类似问题的帖子中的解决方法,写了如下代码:
GLOBALVARIABLE:x:=0;
...
if buycondi>0 then begin
if x=0 then begin
tbuy(1,1000,lmt,买入价1); 
if islastbar then begin
str:=NUMTOSTR(date+19000000,0)&stkname&' 建仓:' ;
DEBUGFILE('C:\testlog.txt',str,0);
end
x:=1;//开仓时候重置x为1
end else begin
//if TISREMAINEX( 1,'',STKLABEL)=0 and islastbar then begin
if TIME>=145959 then begin
x:=0;//当日收盘重置为0
end
end
end

但这段代码导致做精细化历史回测时,同一只股在整个测试周期内只交易了一次,后续几天本来命中买入规则的交易都被忽略掉了。
不管是我用if TISREMAINEX( 1,'',STKLABEL)=0 and islastbar then begin 还是用if TIME>=145959 then begin都解决不了这个问题

请大神帮忙看看该如何解决这个问题

 回到顶部
帅哥哟,离线,有人找我吗?
popypopy
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:82 积分:0 威望:0 精华:0 注册:2020/9/21 10:56:16
  发帖心情 Post By:2020/11/3 10:54:01    Post IP:111.202.190.20[显示全部帖子]

我的问题是当日内的重复买入和日志记录是过滤掉了,但是精细化历史回测显示把之后几日本来命中买入规则应该执行的买入也都给过滤掉了,之后几日里本应买入并记录的日志也给过滤掉了。

以个股“光莆股份”为例做历史回测,时间段20200415-20201015,如果代码写正确达到设计目标的话,应该买卖交易2次,对应的日志应该是这样的:
2020-11-03 09:31:34.926    20200827光莆股份20200827建仓:
2020-11-03 09:31:35.477    20200831光莆股份清仓
2020-11-03 09:38:04.478   20200908光莆股份20200908建仓:
2020-11-03 09:39:18.167    20200909光莆股份清仓

但加入上述代码之后,只能交易一次,交易明细里显示只有一次交易的记录,日志输出结果也只有一次:
2020-11-03 09:31:34.926    20200827光莆股份20200827建仓:
2020-11-03 09:31:35.477    20200831光莆股份清仓

 回到顶部
帅哥哟,离线,有人找我吗?
popypopy
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:82 积分:0 威望:0 精华:0 注册:2020/9/21 10:56:16
  发帖心情 Post By:2020/11/3 19:00:25    Post IP:111.200.53.18[显示全部帖子]

我的原始代码太长,我做了一个简化的版本,做精细化历史回测一样可以复现这个问题。

测试个股:光莆股份 测试周期:20200615-20201025
代码:
GLOBALVARIABLE:X:=0,Y:=0;

//条件判断
MA5:MA(CLOSE,5);
MA10:MA(CLOSE,10);
CONDBUY:=CROSS(MA5,MA10);
CONDSELL:=CROSS(MA10,MA5);

//开仓和平仓
if CONDBUY then begin
if X=0 then begin
TBUY(1,1,LMT,CLOSE); 
if islastbar then begin
DEBUGFILE('C:\testlog1.txt',STKNAME()& '建仓',0);
end
X:=1;//开仓时候重置x为1
end else begin
//if TISREMAINEX( 1,'',STKLABEL)=0 then begin
if TIME>=145959 then begin
X:=0;//当日收盘重置为0,次日起又可以在命中买入条件时下单
end
end
end
持仓:=THOLDING();
if 持仓>0 and CONDSELL then begin
if Y=0 then begin
tsell(持仓>0,0,mkt,0,0); 
if islastbar then begin
DEBUGFILE('C:\testlog1.txt',STKNAME()& '清仓',0);
end
Y:=1;
end else BEGIN
if TIME>=145959 then begin
Y:=0;//当日收盘重置为0,次日可以在命中卖出条件后再次卖出
end
end
end

日志输出结果只有一次交易:
2020-11-03 18:51:54.458    光莆股份建仓
2020-11-03 18:51:54.458    光莆股份清仓

----------------------------------------------------------

如果把代码中的过滤重复输出debugfile的代码删掉后如下:

//条件判断
MA5:MA(CLOSE,5);
MA10:MA(CLOSE,10);
CONDBUY:=CROSS(MA5,MA10);
CONDSELL:=CROSS(MA10,MA5);

//开仓和平仓
if CONDBUY then begin
TBUY(1,1,LMT,CLOSE); 
if islastbar then begin
DEBUGFILE('C:\testlog1.txt',STKNAME()& '建仓',0);
end
end
持仓:=THOLDING();
if 持仓>0 and CONDSELL then begin
tsell(持仓>0,0,mkt,0,0); 
if islastbar then begin
DEBUGFILE('C:\testlog1.txt',STKNAME()& '清仓',0);
end
end

则日志输出显示有3次半的交易:
2020-11-03 18:59:30.448    光莆股份建仓
2020-11-03 18:59:30.448    光莆股份清仓
2020-11-03 18:59:30.448    光莆股份建仓
2020-11-03 18:59:30.458    光莆股份清仓
2020-11-03 18:59:30.458    光莆股份建仓
2020-11-03 18:59:30.458    光莆股份清仓
2020-11-03 18:59:30.458    光莆股份建仓


 回到顶部
帅哥哟,离线,有人找我吗?
popypopy
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:82 积分:0 威望:0 精华:0 注册:2020/9/21 10:56:16
  发帖心情 Post By:2020/11/4 16:33:14    Post IP:111.200.53.18[显示全部帖子]

还是用之前的回测周期和光莆股份做案例,用精细化历史测评回测结果显示还是只有一次交易
debugfile输出如下:
2020-11-04 16:31:06.502    1200804:光莆股份建仓
2020-11-04 16:31:06.512    1200811:光莆股份清仓

我用的是日线周期

 回到顶部
帅哥哟,离线,有人找我吗?
popypopy
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:82 积分:0 威望:0 精华:0 注册:2020/9/21 10:56:16
  发帖心情 Post By:2020/11/4 17:08:31    Post IP:111.200.53.18[显示全部帖子]

明白了,我把time判断改成islastbar后生效了。

另外,日线级别的策略,采用序列计算,time函数是生效的吧?


 回到顶部
帅哥哟,离线,有人找我吗?
popypopy
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:82 积分:0 威望:0 精华:0 注册:2020/9/21 10:56:16
  发帖心情 Post By:2020/11/6 15:18:51    Post IP:111.200.53.18[显示全部帖子]

我今天把测试程序部署到线上做模拟账户的实测,发现改用islastbar之后线上实测还是按照序列时间重复输出debugfile了。
也就是说改用islastbar之后解决了做精细化历史测评时x=1导致只能产生一次交易,限制了后续各日的交易的问题,但是没有解决真正上线做交易时按序列计算模式下会持续输出debugfile以及重复下单的问题。这导致我的模拟账户的资金很快就被下单耗光了。辛亏这只是模拟账户交易,要是用真实账户交易,问题就大了

我再贴一遍代码,请大神再帮忙看看问题究竟出在哪里:
GLOBALVARIABLE:X:=0,Y:=0;

//条件判断
MA5:MA(CLOSE,5);
MA10:MA(CLOSE,10);
CONDBUY:=CROSS(MA5,MA10);
CONDSELL:=CROSS(MA10,MA5);

//开仓和平仓
if CONDBUY then begin   
if X=0 then begin
TBUY(1,1,LMT,CLOSE);
DEBUGFILE('C:\testlog1.txt',NUMTOSTR(date,0)&':'&STKNAME()& '建仓',0);
end
X:=1;//开仓时候重置x为1
end               

持仓:=THOLDING();
if 持仓>0 and CONDSELL then begin
if Y=0 then begin
tsell(持仓>0,0,mkt,0,0);
DEBUGFILE('C:\testlog1.txt',NUMTOSTR(date,0)&':'&STKNAME()& '清仓',0);
Y:=1;
end
end

if ISLASTBAR() then begin
X:=0;//当日收盘重置为0,次日起又可以在命中买入条件时下单
Y:=0;//当日收盘重置为0,次日可以在命中卖出条件后再次卖出
end 

 回到顶部
帅哥哟,离线,有人找我吗?
popypopy
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:82 积分:0 威望:0 精华:0 注册:2020/9/21 10:56:16
  发帖心情 Post By:2020/11/6 16:02:57    Post IP:111.200.53.18[显示全部帖子]

是日线,但是我是后台交易,用的序列计算,事实上是触发了无数次的下单和输出debugfile

您能否明天开盘后也帮忙实测跑一下,看是否会多次触发?这个问题只有的实际交易过程中才会发现,用精细化历史测评发现不了

 回到顶部
帅哥哟,离线,有人找我吗?
popypopy
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:82 积分:0 威望:0 精华:0 注册:2020/9/21 10:56:16
  发帖心情 Post By:2020/11/7 16:43:52    Post IP:122.96.44.6[显示全部帖子]

周期设置是日线,重复下单的问题我排查了下,有可能是由于有两个预警条件都采用了一个策略公式导致每只命中规则的个股都下单了两次。周一我把策略公式拆分成两个,分别用在两个预警上验证下是否就可以避免重复下单的问题。

不过重复输出debugfile的问题还是存在的。
我的原始公式代码太长,用我上文中简化后的的公式也可以复现重复输出debugfile这个问题,过滤重复输出的代码是完全一样的。
我把我线上的原始公式的debugfile文件贴一段您看一下:
2020-11-06 15:28:24.318    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:28:25.503    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:28:26.756    20201106通化东宝 买1:14.974 condi:2 建仓:66
2020-11-06 15:28:26.978    20201106中兴通讯 买1:35.919 condi:2 建仓:30
2020-11-06 15:28:27.194    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:28:28.285    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:28:29.264    20201106新安股份 买1:9.819 condi:2 建仓:104
2020-11-06 15:28:34.693    20201106汤臣倍健 买1:26.803 condi:2 建仓:36
2020-11-06 15:28:40.457    20201106大华股份 买1:23.517 condi:2 建仓:42
2020-11-06 15:28:42.877    20201106新安股份 买1:9.819 condi:2 建仓:104
2020-11-06 15:28:43.094    20201106中兴通讯 买1:35.919 condi:2 建仓:30
2020-11-06 15:28:43.602    20201106会畅通讯 买1:45.416 condi:1 建仓:33
2020-11-06 15:28:44.893    20201106中远海发 买1:2.412 condi:2 建仓:424
2020-11-06 15:28:45.312    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:28:46.436    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:28:47.559    20201106通化东宝 买1:14.974 condi:2 建仓:66
2020-11-06 15:28:47.828    20201106中兴通讯 买1:35.919 condi:2 建仓:30
2020-11-06 15:28:48.041    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:28:49.091    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:28:50.113    20201106新安股份 买1:9.819 condi:2 建仓:104
2020-11-06 15:28:55.942    20201106汤臣倍健 买1:26.803 condi:2 建仓:36
2020-11-06 15:29:01.485    20201106大华股份 买1:23.517 condi:2 建仓:42
2020-11-06 15:29:04.009    20201106新安股份 买1:9.819 condi:2 建仓:104
2020-11-06 15:29:04.235    20201106中兴通讯 买1:35.919 condi:2 建仓:30
2020-11-06 15:29:04.733    20201106会畅通讯 买1:45.416 condi:1 建仓:33
2020-11-06 15:29:06.127    20201106中远海发 买1:2.412 condi:2 建仓:424
2020-11-06 15:29:06.436    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:29:07.472    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:29:08.640    20201106通化东宝 买1:14.974 condi:2 建仓:66
2020-11-06 15:29:08.884    20201106中兴通讯 买1:35.919 condi:2 建仓:30
2020-11-06 15:29:09.102    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:29:10.203    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:29:11.169    20201106新安股份 买1:9.819 condi:2 建仓:104
2020-11-06 15:29:16.967    20201106汤臣倍健 买1:26.803 condi:2 建仓:36
2020-11-06 15:29:22.496    20201106大华股份 买1:23.517 condi:2 建仓:42
2020-11-06 15:29:25.049    20201106新安股份 买1:9.819 condi:2 建仓:104
2020-11-06 15:29:25.364    20201106中兴通讯 买1:35.919 condi:2 建仓:30
2020-11-06 15:29:25.924    20201106会畅通讯 买1:45.416 condi:1 建仓:33
2020-11-06 15:29:27.170    20201106中远海发 买1:2.412 condi:2 建仓:424
2020-11-06 15:29:27.478    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:29:28.565    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:29:29.683    20201106通化东宝 买1:14.974 condi:2 建仓:66
2020-11-06 15:29:29.999    20201106中兴通讯 买1:35.919 condi:2 建仓:30
2020-11-06 15:29:30.215    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:29:31.258    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:29:32.286    20201106新安股份 买1:9.819 condi:2 建仓:104
2020-11-06 15:29:38.023    20201106汤臣倍健 买1:26.803 condi:2 建仓:36
2020-11-06 15:29:43.482    20201106大华股份 买1:23.517 condi:2 建仓:42
2020-11-06 15:29:46.139    20201106新安股份 买1:9.819 condi:2 建仓:104
2020-11-06 15:29:46.361    20201106中兴通讯 买1:35.919 condi:2 建仓:30
2020-11-06 15:29:46.890    20201106会畅通讯 买1:45.416 condi:1 建仓:33
2020-11-06 15:29:48.120    20201106中远海发 买1:2.412 condi:2 建仓:424
2020-11-06 15:29:48.426    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:29:49.475    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:29:50.634    20201106通化东宝 买1:14.974 condi:2 建仓:66
2020-11-06 15:29:50.881    20201106中兴通讯 买1:35.919 condi:2 建仓:30
2020-11-06 15:29:51.097    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:29:52.186    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:29:53.206    20201106新安股份 买1:9.819 condi:2 建仓:104
2020-11-06 15:29:59.065    20201106汤臣倍健 买1:26.803 condi:2 建仓:36
2020-11-06 15:30:06.385    20201106大华股份 买1:23.517 condi:2 建仓:42
2020-11-06 15:30:09.859    20201106新安股份 买1:9.819 condi:2 建仓:104
2020-11-06 15:30:10.197    20201106中兴通讯 买1:35.919 condi:2 建仓:30
2020-11-06 15:30:10.929    20201106会畅通讯 买1:45.416 condi:1 建仓:33
2020-11-06 15:30:12.749    20201106中远海发 买1:2.412 condi:2 建仓:424
2020-11-06 15:30:13.272    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:30:14.854    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:30:16.545    20201106通化东宝 买1:14.974 condi:2 建仓:66
2020-11-06 15:30:16.878    20201106中兴通讯 买1:35.919 condi:2 建仓:30
2020-11-06 15:30:17.200    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:30:18.794    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:30:20.273    20201106新安股份 买1:9.819 condi:2 建仓:104
2020-11-06 15:43:26.045    20201106汤臣倍健 买1:26.803 condi:2 建仓:36
2020-11-06 15:43:31.232    20201106大华股份 买1:23.517 condi:2 建仓:42
2020-11-06 15:43:33.533    20201106新安股份 买1:9.819 condi:2 建仓:104
2020-11-06 15:43:33.747    20201106中兴通讯 买1:35.919 condi:2 建仓:30
2020-11-06 15:43:34.241    20201106会畅通讯 买1:45.416 condi:1 建仓:33
2020-11-06 15:43:35.578    20201106中远海发 买1:2.412 condi:2 建仓:424
2020-11-06 15:43:36.011    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:43:37.018    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:43:38.108    20201106通化东宝 买1:14.974 condi:2 建仓:66
2020-11-06 15:43:39.359    20201106中远海特 买1:3.648 condi:2 建仓:284
2020-11-06 15:43:39.896    20201106天音控股 买1:7.347 condi:2 建仓:142
2020-11-06 15:43:40.375    20201106中文在线 买1:7.427 condi:2 建仓:142
2020-11-06 15:43:40.759    20201106星徽精密 买1:20.934 condi:2 建仓:48
2020-11-06 15:43:41.122    20201106中兴通讯 买1:35.919 condi:2 建仓:30
2020-11-06 15:43:41.368    20201106海翔药业 买1:8.442 condi:2 建仓:120
2020-11-06 15:43:42.559    20201106长电科技 买1:39.547 condi:2 建仓:24
2020-11-06 15:43:43.532    20201106新安股份 买1:9.819 condi:2 建仓:104


 回到顶部
帅哥哟,离线,有人找我吗?
popypopy
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:82 积分:0 威望:0 精华:0 注册:2020/9/21 10:56:16
  发帖心情 Post By:2020/11/9 12:40:02    Post IP:114.247.184.162[显示全部帖子]

可问题是我的公式设计目标就是用序列模式的,如何在序列模式下避免这样的问题呢?
这应该算是序列模式下的一个小漏洞吧?而且这个小漏洞导致程序运行效率也降低了
[此贴子已经被作者于2020/11/9 12:40:58编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
popypopy
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:82 积分:0 威望:0 精华:0 注册:2020/9/21 10:56:16
  发帖心情 Post By:2020/11/10 0:11:52    Post IP:114.247.184.162[显示全部帖子]

如果我的公式采用逐k线模式运行,那么只能等当日k线走完时才能判断是否命中了买点或卖点规则,这时候股价可能已经涨得很高了,此时追高的风险会加大很多。而采用序列计算模式,则可以在刚命中规则时立即采取行动,股价刚开始启动,但还没有涨得很高。这是逐k线模式不能替代的,也是序列计算的优势啊。否则就没有序列模式存在的必要了。

如果序列计算模式下,也能通过time或者islastbar控制debugfile的输出,就可以兼顾序列计算模式的快速反应能力和提升程序运行的效率,这应该才是更好的选择吧?

建议金字塔开发团队能够采纳我的建议对序列模式下debugfile的输出控制策略做些优化。你们如果能给出更好的解决方案当然更好

[此贴子已经被作者于2020/11/10 0:13:00编辑过]

 回到顶部
总数 13 1 2 下一页