失败指标

周泓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)

说点什么