以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  [原创]螺纹钢10点开多平多的错在那里?  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=188034)

--  作者:tonyzhu
--  发布时间:2021/4/25 10:32:13
--  [原创]螺纹钢10点开多平多的错在那里?
这个公式用在螺纹钢,当符合开多条件时,开多,盈利10点平仓,策略测试时没有按照信号开仓。

KD:=DK1>8&&CROSS(F,S)&&F<50&&S<50&&BC<50;          //开多条件
PD:=(C-ENTERPRICE)>10;          //平多条件


开多:BUY(KD AND HOLDING=0,1,MARKET);          //开多信号
平多:SELL(PD,1,MARKET);                       //平多信号

但是实际在公式中是有信号的,DRAWICON(DK1>8&&CROSS(F,S)&&F<50&&S<50&&BC<50 ,50 ,1 );

我用图标标记出来了。



--  作者:FireScript
--  发布时间:2021/4/25 10:35:03
--  
 KD AND HOLDING=0这个才算你完整的开多条件。你把这个作为条件输出下。
--  作者:tonyzhu
--  发布时间:2021/4/25 11:01:24
--  
还是和之前一样。


--  作者:FireScript
--  发布时间:2021/4/25 11:02:01
--  
 发下完整代码 我本地调试下。

另外你也要看下测试和加载在图表上的数据量是不是不一致。如果不一致,信号可能也会不一致。
[此贴子已经被作者于2021/4/25 11:04:59编辑过]

--  作者:tonyzhu
--  发布时间:2021/4/25 11:15:43
--  
//日内强度
AA:=(2*C-H-L)/(H-L);
BB:=AA*VOL;
R:=SUM(BB,20)/SUM(VOL,20);

//中期方向线
MA1:=EMA(CLOSE,12);
MA2:=EMA(CLOSE,47);
B11:=(MA1-MA2);


//穿叉短周期
N:=34;
VAR1:=LLV(CLOSE,10);//10日最低
VAR2:=HHV(CLOSE,10);//10日最大
F: EMA((CLOSE-VAR1)/(VAR2-VAR1)*100,10), COLORGREEN;//价差
S: EMA(0.667*REF(F,1)+0.333*F,2) , COLORYELLOW;
FS:=(F+S)/2;

//穿叉长周期
VAR3:=(2*CLOSE+HHV(CLOSE,2)+LLV(CLOSE,2))/4;//化解
VAR4:=LLV(CLOSE,N);//34日最低
VARA:=HHV(CLOSE,N);
VARB:=EMA((VAR3-VAR4)/(VARA-VAR4)*100,13);//价差
VARC:=EMA(0.667*REF(VARB,1)+0.333*VARB,2);
FJ:=VARB-VARC;
BC:(VARB+VARC)/2;

//XDIKK1中期方向线换向

//3分钟

A3:=STKINDI(\'\',\'XDIK4.A\',0,17,0);
//10分钟
A10:=STKINDI(\'\',\'XDIK4.A\',0,18,0);;
//30分钟
A30:=STKINDI(\'\',\'XDIK4.A\',0,4,0);;

//1小时
AHOUR:=STKINDI(\'\',\'XDIK4.A\',0,5,0);;

//2小时
A240:=STKINDI(\'\',\'XDIK4.A\',0,24,2);;

//日

ADAY:=STKINDI(\'\',\'XDIK4.A\',0,6,0);

//日线颜色
D5:=IFELSE(ADAY>=0 , 1,0);
//2小时颜色
D6:=IFELSE(A240>=0 , 1,0);
//1小时
D7:=IFELSE(AHOUR>=0 , 1,0);
//30分钟
D8:=IFELSE(A30>=0 , 1,0);
//10分钟
D9:=IFELSE(A10>=0 , 1,0);
//3分钟
D10:=IFELSE(A3>=0 , 1,0);

//CCD短周期CC交叉
//3分钟

B3:=STKINDI(\'\',\'CCD1.B\',0,17,0);

//10分钟
B10:=STKINDI(\'\',\'CCD1.B\',0,18,0);;

//30分钟
B30:=STKINDI(\'\',\'CCD1.B\',0,4,0);;

//1小时
BHOUR:=STKINDI(\'\',\'CCD1.B\',0,5,0);;

//2小时
B240:=STKINDI(\'\',\'CCD1.B\',0,24,2);;


//日

BDAY:=STKINDI(\'\',\'CCD1.B\',0,6,0);;



//日线颜色
D11:=IFELSE(BDAY>=0 , 1,0);
//2小时颜色
D12:=IFELSE(B240>=0 , 1,0);
//1小时
D13:=IFELSE(BHOUR>=0 , 1,0);
//30分钟
D14:=IFELSE(B30>=0 , 1,0);
//10分钟
D15:=IFELSE(B10>=0 , 1,0);
//3分钟
D16:=IFELSE(B3>=0 , 1,0);

//XRVKK
//3分钟

E3:=STKINDI(\'\',\'XRVK1.E\',0,17,0);

//10分钟
E10:=STKINDI(\'\',\'XRVK1.E\',0,18,0);;


//30分钟
E30:=STKINDI(\'\',\'XRVK1.E\',0,4,0);;


//1小时
EHOUR:=STKINDI(\'\',\'XRVK1.E\',0,5,0);;

//2小时
E240:=STKINDI(\'\',\'XRVK1.E\',0,24,2);;

//日

EDAY:=STKINDI(\'\',\'XRVK1.E\',0,6,0);;

//日线颜色
D17:=IFELSE(EDAY>=0 , 1,0);
//2小时颜色
D18:=IFELSE(E240>=0 , 1,0);
//1小时
D19:=IFELSE(EHOUR>=0 , 1,0);
//30分钟
D20:=IFELSE(E30>=0 , 1,0);
//10分钟
D21:=IFELSE(E10>=0 , 1,0);
//3分钟
D22:=IFELSE(E3>=0 , 1,0);

//3分钟中期方向线变色

F3:=STKINDI(\'\',\'XDIK5.F\',0,17,0);

//10分钟
F10:=STKINDI(\'\',\'XDIK5.F\',0,18,0);;


//30分钟
F30:=STKINDI(\'\',\'XDIK5.F\',0,4,0);;


//1小时
FHOUR:=STKINDI(\'\',\'XDIK5.F\',0,5,0);;

//2小时
F240:=STKINDI(\'\',\'XDIK5.F\',0,24,2);;



FDAY:=STKINDI(\'\',\'XDIK5.F\',0,6,0);;

//日线颜色
D23:=IFELSE(FDAY>=0 , 1,0);
//2小时颜色
D24:=IFELSE(F240>=0 , 1,0);
//1小时
D25:=IFELSE(FHOUR>=0 , 1,0);
//30分钟
D26:=IFELSE(F30>=0 , 1,0);
//10分钟
D27:=IFELSE(F10>=0 , 1,0);
//3分钟
D28:=IFELSE(F3>=0 , 1,0);


D1:=IFELSE(R>REF(R,1), 1,0);
D2:=IFELSE(B11>REF(B11,1), 1,0);
D3:=IFELSE(FS>REF(FS,1), 1,0);
D4:=IFELSE(BC>REF(BC,1), 1,0);

DK:=D1+D2+D3+D4+D5+D6+D7+D8+D9+D10+D11+D12+D13+D14+D15+D16+D17+D18+D19+D20+D21+D22+D23+D24+D25+D26+D27+D28;
DK1:=D11+D12+D13+D17+D18+D19+D23+D24+D25;
TOP: 90,COLORGREEN,LINETHICK1;
BOT2:12,COLORRED,LINETHICK1;


LIU2:80,COLORGREEN,LINETHICK2;

SI:20,COLORRED,LINETHICK2;
SI2:50,COLOryellow,LINETHICK3;


STICKLINE(FJ>0,VARB,VARC,8,0,colorred);
STICKLINE(FJ<0,VARB,VARC,8,0,colorgreen);

DRAWICON(DK1>8&&CROSS(F,S)&&F<50&&S<50&&BC<50 ,50 ,1 );

--  作者:FireScript
--  发布时间:2021/4/25 11:17:32
--  
 被调用的指标也提供下。否则加载不出效果的。
--  作者:tonyzhu
--  发布时间:2021/4/25 12:06:27
--  
上面那个引用的太多了,我简化一下如下:

//穿叉短周期
N:=34;
VAR1:=LLV(CLOSE,10);//10日最低
VAR2:=HHV(CLOSE,10);//10日最大
F: EMA((CLOSE-VAR1)/(VAR2-VAR1)*100,10), COLORGREEN;//价差
S: EMA(0.667*REF(F,1)+0.333*F,2) , COLORYELLOW;
FS:=(F+S)/2;

//穿叉长周期
VAR3:=(2*CLOSE+HHV(CLOSE,2)+LLV(CLOSE,2))/4;//化解
VAR4:=LLV(CLOSE,N);//34日最低
VARA:=HHV(CLOSE,N);
VARB:=EMA((VAR3-VAR4)/(VARA-VAR4)*100,13);//价差
VARC:=EMA(0.667*REF(VARB,1)+0.333*VARB,2);
FJ:=VARB-VARC;
BC:(VARB+VARC)/2;


//CCC短周期交叉

//1小时
BHOUR:=STKINDI(\'\',\'CCD1.B\',0,5,0);
//2小时
B240:=STKINDI(\'\',\'CCD1.B\',0,24,2);
//日
BDAY:=STKINDI(\'\',\'CCD1.B\',0,6,0);


//日线颜色
D11:=IFELSE(BDAY>=0 , 1,0);
//2小时颜色
D12:=IFELSE(B240>=0 , 1,0);
//1小时
D13:=IFELSE(BHOUR>=0 , 1,0);





DK1:=D11+D12+D13;


STICKLINE(FJ>0,VARB,VARC,8,0,colorred);
STICKLINE(FJ<0,VARB,VARC,8,0,colorgreen);
TOP: 90,COLORGREEN,LINETHICK1;
BOT2:12,COLORRED,LINETHICK1;


LIU2:80,COLORGREEN,LINETHICK2;

SI:20,COLORRED,LINETHICK2;
SI2:50,COLOryellow,LINETHICK3;


STICKLINE(FJ>0,VARB,VARC,8,0,colorred);
STICKLINE(FJ<0,VARB,VARC,8,0,colorgreen);

DRAWICON(DK1=3&&CROSS(F,S)&&F<50&&S<50&&BC<50 ,50 ,1 );


KD:=DK1=3&&CROSS(F,S)&&F<50&&S<50&&BC<50 AND HOLDING=0 ;          //开多条件
PD:=(C-ENTERPRICE)>10*MINDIFF;          //平多条件

SELL(PD and HOLDING>0,HOLDING,THISCLOSE); //平多
BUY(KD and  HOLDING=0,1,THISCLOSE);//开多1手

引用的CCD1如下:
N:=34;
VAR1:=LLV(CLOSE,10);//10日最低
VAR2:=HHV(CLOSE,10);//10日最大
F: EMA((CLOSE-VAR1)/(VAR2-VAR1)*100,10), COLORGREEN;//价差
S: EMA(0.667*REF(F,1)+0.333*F,2) , COLORYELLOW;
B:REF(F,1)-REF(S,1);


--  作者:tonyzhu
--  发布时间:2021/4/25 12:07:50
--  
带信号图标的公式如下:
//穿叉短周期
N:=34;
VAR1:=LLV(CLOSE,10);//10日最低
VAR2:=HHV(CLOSE,10);//10日最大
F: EMA((CLOSE-VAR1)/(VAR2-VAR1)*100,10), COLORGREEN;//价差
S: EMA(0.667*REF(F,1)+0.333*F,2) , COLORYELLOW;
FS:=(F+S)/2;

//穿叉长周期
VAR3:=(2*CLOSE+HHV(CLOSE,2)+LLV(CLOSE,2))/4;//化解
VAR4:=LLV(CLOSE,N);//34日最低
VARA:=HHV(CLOSE,N);
VARB:=EMA((VAR3-VAR4)/(VARA-VAR4)*100,13);//价差
VARC:=EMA(0.667*REF(VARB,1)+0.333*VARB,2);
FJ:=VARB-VARC;
BC:(VARB+VARC)/2;


//CCC短周期交叉

//1小时
BHOUR:=STKINDI(\'\',\'CCD1.B\',0,5,0);
//2小时
B240:=STKINDI(\'\',\'CCD1.B\',0,24,2);
//日
BDAY:=STKINDI(\'\',\'CCD1.B\',0,6,0);


//日线颜色
D11:=IFELSE(BDAY>=0 , 1,0);
//2小时颜色
D12:=IFELSE(B240>=0 , 1,0);
//1小时
D13:=IFELSE(BHOUR>=0 , 1,0);





DK1:=D11+D12+D13;


STICKLINE(FJ>0,VARB,VARC,8,0,colorred);
STICKLINE(FJ<0,VARB,VARC,8,0,colorgreen);
TOP: 90,COLORGREEN,LINETHICK1;
BOT2:12,COLORRED,LINETHICK1;


LIU2:80,COLORGREEN,LINETHICK2;

SI:20,COLORRED,LINETHICK2;
SI2:50,COLOryellow,LINETHICK3;


STICKLINE(FJ>0,VARB,VARC,8,0,colorred);
STICKLINE(FJ<0,VARB,VARC,8,0,colorgreen);

DRAWICON(DK1=3&&CROSS(F,S)&&F<50&&S<50&&BC<50 ,50 ,1 );


--  作者:tonyzhu
--  发布时间:2021/4/25 12:14:33
--  
测试成交明细与信号不一致。
--  作者:FireScript
--  发布时间:2021/4/25 13:30:58
--  
 你这个估计是数据不一致导致的计算会有差异。 如果计算的起点不一样,那么它产生的影响是会迭代下去的。

你可以先将指标加载到图表上,然后直接右键-回测:


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

调整下周期 然后这样回测采用的数据就是一样的了。我本地这样做回测明细和图表信号就是一致的了。

另外
DRAWICON(DK1=3&&CROSS(F,S)&&F<50&&S<50&&BC<50,50 ,1);
你这里输出位置是在价格50 的地方。如果于正常价格偏离太大是看不到输出的图标的。
[此贴子已经被作者于2021/4/25 13:31:13编辑过]