失败指标完善
失败指标
周泓2010-01-19
理念:
https://hzhou1986.spaces.live.com/blog/cns!4B31E7CB3751BB6F!347.entry
代码:
代码运用于amibroker,主要由4部分构成,第一部分是某标准系统的买卖条件;第二部分是求该系统下的每次的连续亏损时间、次数、天数;第三部分是用上述数据计算历史数据的失败指标;第四部分是计算当前持仓的失败指标。将三、四部分结果求和可得连续化的失败指标。
_SECTION_BEGIN("Price");
mma=IIf(IsEmpty(MA(C,20)),0,MA(C,20));
mma2=IIf(IsEmpty(MA(C,1)),0,MA(C,1));
xxx=Cross(mma2,mma) AND Ref(mma2,-1)!=Ref(mma,-1);
yyy=Cross(mma,mma2) AND Ref(mma2,-1)!=Ref(mma,-1);
aa=BarsSince( xxx )+1;
bb=BarsSince( yyy)+1;
aaa=IIf(IsEmpty(aa),0,aa);
bbb=IIf(IsEmpty(bb),0,bb);
c2=IIf(aaa>bbb,-bbb,aaa);
c1=IIf(IsEmpty(c2),0,IIf(C2>0,1,-1));
C5=IIf(xxx+yyy,1,0);
//Plot(C5*100,"",1);
C6=BarsSince( C5 );
C7=Ref(C,-C6);
dbsyl1=IIf(C1==-1&&Ref(C1,-1)==1,C7/Ref(C7,-1)-1,0);
dbsyl2=IIf(C1==1&&Ref(C1,-1)==-1,Ref(C7,-1)/C7-1,0);
dbsyl=dbsyl1+dbsyl2;
syl[0]=1;
Lxkscs[0]=0;
Lxkssj1[0]=0;
Lxkssj2[0]=0;
Lxkssj3[0]=0;
Lxkssj4[0]=0;
Lxkssj5[0]=0;
Lxksfd1[0]=1;
Lxksfd3[0]=0;
CLxkscs1[0]=0;
CLxkscs2[0]=0;
CLxkscs3[0]=0;
C9=IIf(dbsyl>0,2,IIf((c5==1 AND dbsyl==0) OR dbsyl<0,1,0));
for(i=1;i<=EndValue(BarIndex());i++)
{
syl[i]=syl[i-1]*(dbsyl[i]+1);
if(C9[i]==1)Lxkscs[i]=Lxkscs[i-1]+C9[i];
if(C9[i]==2)Lxkscs[i]=0;
if(C9[i]==0)Lxkscs[i]=Lxkscs[i-1];
//——–Lxkscs shi lian xu kui sun ci shu
if((Lxkscs[i]==1 AND Lxkscs[i-1]==0))Lxkssj1[i]=i;
else if(Lxkscs[i]>0)Lxkssj1[i]=Lxkssj1[i-1];
if(Lxkssj1[i]>0 AND Lxkssj1[i-1]>0)Lxkssj2[i]=Lxkssj2[i-1]+1;
if(Lxkscs[i]==Lxkscs[i-1])Lxkssj3[i]=Lxkssj3[i-1]+1;
if(Lxkssj1[1]>0)Lxkssj4[i]=Lxkssj2[i]-Lxkssj3[i];
if(Lxkssj4[i]>0)Lxkssj5[i]=Lxkssj4[i];
//————Lxkssj5 shi lian xu kui sun tian shu
if(dbsyl[i]==0)Lxksfd1[i]=Lxksfd1[i-1];
if(dbsyl[i]<0)Lxksfd1[i]=Lxksfd1[i-1]*(1+dbsyl[i]);
if(dbsyl[i]>0)Lxksfd1[i]=1;
Lxksfd2[i]=Lxksfd1[i]-1;
if(Lxksfd2[i-1]!=0 AND Lxksfd2[i]==0 )Lxksfd3[i]=Lxksfd2[i-1];
//————Lxksfd3 shi mei ci de lian xu kui sun fudu tong ji
if(Lxksfd3[i]<0)CLxkscs1[i]=CLxkscs1[i-1]+1;
if(Lxksfd3[i]==0)CLxkscs1[i]=CLxkscs1[i-1];
if(Lxksfd3[i]>0)CLxkscs1[i]=CLxkscs1[i-1];
//————CLxkscs1 shi you duoshao ci lian xu kuisun
if(Lxksfd3[i]<0)CLxkscs2[i]=Lxkscs[i-1];
if(Lxksfd3[i]==0)CLxkscs2[i]=0;
if(Lxksfd3[i]>0)CLxkscs2[i]=0;
//————CLxkscs2 shi mei ci de lian xu kui sun cishu tongji
if(Lxksfd3[i]<0)CLxkscs3[i]=Lxkssj5[i-1]-1;
if(Lxksfd3[i]==0)CLxkscs3[i]=0;
if(Lxksfd3[i]>0)CLxkscs3[i]=0;
//————CLxkscs3 shi mei ci de lian xu kui sun tian shu tongji
}
pjlxkscs1=Cum(CLxkscs2);
pjlxkssj1=Cum(CLxkscs3);
pjlxksfd1=Cum(Lxksfd3);
pjlxkscs2=LastValue(pjlxkscs1)/LastValue(CLxkscs1);
pjlxkssj2=LastValue(pjlxkssj1)/LastValue(CLxkscs1);
pjlxksfd2=LastValue(pjlxksfd1)/LastValue(CLxkscs1);
pjlxkscs3=(CLxkscs2/pjlxkscs2-1)*0.2;
pjlxkssj3=(CLxkscs3/pjlxkssj2-1)*0.3;
pjlxksfd3=(Lxksfd3/pjlxksfd2-1)*0.5;
sbzb1=pjlxkscs3+pjlxkssj3+pjlxksfd3;
sbzb2=IIf(sbzb1>0,sbzb1,0);
dtsyl=IIf(C1==1,C/C7*syl,C7/C*syl);
DMC=(Highest(dtsyl)-dtsyl)/Highest(dtsyl)*100;
//for( i = 0; i < BarCount; i++ )
//if( CLxkscs3[i] AND sbzb2[i]>0.05 ) PlotText( "" +int(sbzb2[i]*100000/10000)/10, i, sbzb2[i]+0.2, colorGreen );
//Plot(int(LastValue(Highest(sbzb2))+1.5) ,"",colorBlack,styleLine);
//Plot(-1,"",colorBlack,styleLine);
//Plot(dbsyl,"dbsyl",colorBlack,1);
//Plot(C1,"c1",colorBlack,1);
c11=IIf(C1>0,C/C7,c7/C);
c12=IIf(C1>0,C/C7*Lxksfd1,c7/C*Lxksfd1)-1;
//c12 shi chi cang de lian xu kui sun fu du
C13=IIf(1,Lxkscs+1,Lxkscs+1);
C14=IIf(C13>0,C13,0);
//c14 shi chi cang de xianxu kuisuncishu
//Plot(C14,"c14",colorBlack,1);
//Plot(Lxkscs,"Lxkscs",colorBlack,1);
//Plot(CLxkscs2,"CLxkscs2",colorBlack,1);
//Lxkssj2 shi chi cang de lian xu kui sun tian shu
pjlxkscs4=(C13/pjlxkscs2-1)*0.2;
pjlxkssj4=(Lxkssj2/pjlxkssj2-1)*0.3;
pjlxksfd4=(c12/pjlxksfd2-1)*0.5;
sbzb3=pjlxkscs4+pjlxkssj4+pjlxksfd4;
sbzb4=IIf(sbzb2>0,0,sbzb3);
//Plot(Lxkscs,"Lxkscs",colorBlack,1);
//Plot(dmc,"dmc",colorBlack,1);
//Plot(Lxkssj5,"Lxkssj5[i]",colorBlue,1);
zd=IIf(sbzb3+sbzb4>=0,sbzb3+sbzb4,0);
fd=IIf(sbzb3+sbzb4<0,sbzb3+sbzb4,0);
Plot(zd,"sb",colorRed,3);
Plot(fd,"sb",colorBlue,3);
Buy=Sell=0;
zxg=Ref(sbzb2,-BarsSince(sbzb2))>1;
xz=Highest(sbzb3+sbzb4);
a=IIf(sbzb3+sbzb4>xz*0.6 AND Ref(sbzb3,-1)+Ref(sbzb4,-1)<Ref(xz,-1)*0.6,1,0);
//Plot(a*20,"",colorRed,2);
//Plot(xz*0.6,"sbzb3",colorBlue,1);
AddToComposite( sbzb3+sbzb4, "~sbzb30", "sbzb" );
_SECTION_END();
代码中的重要参数:
1.xxx,买入条件
2.yyy,卖出条件
3. Lxkscs,每次连续失败中的连续亏损次数
4. Lxkssj,每次连续失败中的连续亏损天数
5. Lxksfd3,每次连续失败中的连续亏损幅度
6. CLxkscs,有多少次连续失败
7. dtsyl,动态收益率
8.DMC,动态回撤
9. sbzb2,历史数据的失败指标
9. sbzb3,持仓的失败指标
使用说明:
失败指标和普通指标最大的区别在于它提示的不是买或卖的信号,而是提示可以开始趋势跟踪(当然失败指标的计算过程是绝对不含有未来函数的)。下面图中第一张是价格,第二张是失败指标,第三张是macd指标。
失败指标红柱高时预示后面可能出现趋势,可以开始趋势跟踪,而趋势过程中则以蓝柱表示。失败指标不是一个与价格直接逻辑相关的指标。看图中有明显的趋势,不一定有明显的蓝柱,而有明显的盘整,也不一定有明显的红柱,但反过来则是一定的,就是说明显的红柱一定对应明显的盘整。事实上,它要实现的就是寻找介入时机的问题,而好的时机必然是要经过过滤的。作为买卖条件它没有多少价值,但是可以帮助选择品种、选择时机,作为资金调度的参照。
MACD指标则是趋势发生的同时指标同步变化,直接看红、蓝是没有意义的,它只是价格换个形式来表现。如要分析,结合价格和macd的形态等主观上综合分析。
存在的问题:
1标准系统的选取,见理念部分
2必须有较长的历史数据,少于1000bar就没什么意义了
3市场扫描寻找机会(Amibroker+Amiquote可实现,Amiquote注册码:V10G8E7F6B6T76)