以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  程序出现问题,求指导  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=167739)

--  作者:13798471138
--  发布时间:2019/1/16 13:58:15
--  程序出现问题,求指导

这个图标策略我写的,有点问题,多次出现空转多时候刚转了多,同一时间再次翻空,甚至我已经在策略中限制了开仓次数,为什么会这样呢?

 

代码如下,同时附图表信号,和回测交易明细,如果方便您可以 本地测试一下,谢谢

 

n:=270;n1:=0.2;n2:=1;n3:=0.2;n4:=1080;n5:=0;n6:=270;n7:=0;
P:="T00$CLOSE",COLORCYAN;
p0:=(hhv(p,n)+llv(p,n)+2*p)/4,COLORMAGENTA;
p00:=(hhv(p0,n)+llv(p0,n)+2*p0)/4,COLORwhite;
p01:(hhv(p00,n)+llv(p00,n)+2*p00)/4,colormagenta;
//p01:(hhv(p001,n)+llv(p001,n)+p001)/3,COLORwhite;
p14:ma(p01,810),coloryellow;

t1:ref(BARSLAST(p01>p14),enterbars)+enterbars,linethick0;
t2:ref(barslast(p01<p14),enterbars)+enterbars,linethick0;
p33:=ref(p01,t1);
p34:=ref(p01,t2);
t3:enterbars,linethick0;

p16:p01-p14,linethick0;
p28:=ref(p01,enterbars);
p24:p01-p28,linethick0;
p25:=p01-(p28+p33)/2;
p35:=p01-(p28+p34)/2;
p26:=hhv(p01,t2)-(p28+p34)/2;
p27:=llv(p01,t1)-(p28+p33)/2;
p29:p35/p26,linethick0;
p30:=p24>=0.3 and p24<=n2 and p16<-n7 and p29<0.7;
p36:=p24>n2 and p16<-n7;
p37:=p24<0.3 and p24>0.1 and p16<-n7;
p31:p25/p27,linethick0;
p38:=p24>=-n2 and p24<=-0.3 and p16>n7 and p31<0.7;
p39:=p24<-n2 and p16>n7;
p40:=p24>-0.3 and p24<-0.1 and p16>n7;

P4:=CALLSTOCK(\'T00\',VTCLOSE,6,-1);
b:=0;s:=0;X:=10;

IF STRCMP(STKLABEL,\'T00\') = 0  THEN BEGIN
   IF p38 AND HOLDING<0 AND OPENMINUTES(TIME)>=3 AND TOTALDAYTRADE<=1 THEN s:=2;
   IF p39 AND HOLDING<0 AND OPENMINUTES(TIME)>=3 AND TOTALDAYTRADE<=1 THEN s:=2;
   IF p40 AND HOLDING<0 AND OPENMINUTES(TIME)>=3 AND TOTALDAYTRADE<=1 THEN s:=2;
   IF p24>n1 AND HOLDING<0 AND OPENMINUTES(TIME)>=3 AND TOTALDAYTRADE<=1 THEN s:=2;
   SELLSHORT(s=2,X,THISCLOSE);
   IF p38 AND HOLDING=0 AND OPENMINUTES(TIME)>=3 THEN b:=1;
   IF p39 AND HOLDING=0 AND OPENMINUTES(TIME)>=3 THEN b:=1;
   IF p40 AND HOLDING=0 AND OPENMINUTES(TIME)>=3 THEN b:=1;
   IF p24>n1 AND HOLDING=0 AND OPENMINUTES(TIME)>=3 THEN b:=1;
   BUY(b=1,X,THISCLOSE);
   IF p30 and HOLDING>0 AND OPENMINUTES(TIME)>=3 AND TOTALDAYTRADE<=1 THEN S:=1;
   IF p36 and HOLDING>0 AND OPENMINUTES(TIME)>=3 AND TOTALDAYTRADE<=1 THEN S:=1;
   IF p37 and HOLDING>0 AND OPENMINUTES(TIME)>=3 AND TOTALDAYTRADE<=1 THEN S:=1;
   IF p24<-n1 and HOLDING>0 AND OPENMINUTES(TIME)>=3 AND TOTALDAYTRADE<=1 THEN S:=1;
   SELL(s=1,X,THISCLOSE);
   IF p30 and HOLDING=0 AND OPENMINUTES(TIME)>=3 THEN b:=2;
   IF p36 and HOLDING=0 AND OPENMINUTES(TIME)>=3 THEN b:=2;
   IF p37 and HOLDING=0 AND OPENMINUTES(TIME)>=3 THEN b:=2;
   IF p24<-n1 and HOLDING=0 AND OPENMINUTES(TIME)>=3 THEN b:=2;
   IF p16<0 and type(1)=0 and HOLDING=0 AND OPENMINUTES(TIME)>=3 THEN b:=2;
   BUYSHORT(b=2,X,THISCLOSE);

END

DI:round(netprofit),noaxis,COLORyellow;

 


--  作者:FireScript
--  发布时间:2019/1/16 14:14:52
--  
 你这个是信号闪烁导致的吧。你开平仓条件如果出现闪烁就会出现这种反转的情况的。

另外这几个变量你是想用他们限制交易次数?
b:=0;s:=0;X:=10;

--  作者:13798471138
--  发布时间:2019/1/16 14:42:21
--  
B和S不是用来限制次数的,用totaldaytrade来限制交易次数,开平条件如果出现闪烁什么意思?我这里的开平条件是不同的,这个我已经避免了,理论上说不可能出现闪烁才对,您能帮我分析一下吗?谢谢多空没有重复闪烁信号的
--  作者:FireScript
--  发布时间:2019/1/16 14:53:45
--  
 totaldaytrade  不行的。这个函数也是对图表上信号统计来获取交易次数情况的,并不是实际下单情况。信号的闪烁是指行情变化导致你开平仓条件变化反转。你开平条件肯定是不同的,但是你不能保证行情的变化会不会导致前一秒开多成立下一秒就又变成了开空成立。图表系统本身是按照行情变化刷新计算的结果的,它无法知道你实际下单的情况的,它在最新K上会不断计算最新的行情下的信号的。

建议你使用走完K的下单模式。

--  作者:13798471138
--  发布时间:2019/1/16 15:04:33
--  
图表信号我也附图了,您看还是多次交易啊
--  作者:FireScript
--  发布时间:2019/1/16 15:30:51
--  
 图没上来啊。 你用IE浏览器传下试下呢.

--  作者:13798471138
--  发布时间:2019/1/16 15:59:29
--  
总是显示要‘’正确显示要上传的附件‘’,这是为什么,大小没有超过10000K,才几百K,png格式,之前这格式没问题啊,然后主图是T00连续合约,您本地测试一下也可以的
--  作者:FireScript
--  发布时间:2019/1/16 16:04:07
--  
 你说的是这种情况?

图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看

--  作者:13798471138
--  发布时间:2019/1/16 16:26:00
--  
对的
--  作者:FireScript
--  发布时间:2019/1/16 16:50:31
--  


上图里面你代码中几个数值的判断条件都满足条件了。并且TOTALDAYTRADE在第一次平仓之后是1,而后面的判断则是TOTALDAYTRADE<=1,这种情况下等于是没限制到后面继续开平仓。

    BUY(b=1,X,THISCLOSE);
   IF p30 and HOLDING>0 AND OPENMINUTES(TIME)>=3 AND TOTALDAYTRADE<1 THEN S:=1;
   IF p36 and HOLDING>0 AND OPENMINUTES(TIME)>=3 AND TOTALDAYTRADE<1 THEN S:=1;
   IF p37 and HOLDING>0 AND OPENMINUTES(TIME)>=3 AND TOTALDAYTRADE<1 THEN S:=1;
   IF p24<-n1 and HOLDING>0 AND OPENMINUTES(TIME)>=3 AND TOTALDAYTRADE<1 THEN S:=1;

这里改下试下呢。