问题:在设计系统过程中,有时候需要知道临界位。比如突破前10期高点,那么临界位就是ref(hhv(h,10),1),那么,macd、KDJ、双MA等的临界位是多少呢?在此,本文以寻找macd临界位为例,谈谈思路
macd的代码如下:
diff:=ema(c,12)-ema(c,26);
dea:=ema(diff,9);
临界位,就是diff=dea时对应的C,于是
diff=dea
ema(c,12)-ema(c,26)=ema(diff,9)
[ref(ema(c,12),1)*11/13+c*2/13]-[ref(ema(c,26),1)*25/27+c*2/27]=ref(ema(dea,9),1)*8/10+diff*2/10
再把diff代入上面的等式
最后整理可得:C=(351*REF(DEA,1)+325*REF(EMA(C,26),1)-297*REF(EMA(C,12),1))/28;
也就是临界位为 LJ=(351*REF(DEA,1)+325*REF(EMA(C,26),1)-297*REF(EMA(C,12),1))/28;
完整的公式如下:
diff:=ema(c,12)-ema(c,26);
dea:=ema(diff,9);
LJ:=(351*REF(DEA,1)+325*REF(EMA(C,26),1)-297*REF(EMA(C,12),1))/28;
把上面的代码复制到金字塔里,加载在主图上,可以得到一条临界位连线,而且这条线是固定的,不会漂浮的。C>LJ,则macd金叉,C<LJ,则MACD死叉。对于其它指标,同样的原理也可以计算得出。
此临界位线,配合仓位控制,可以以空间缓冲地带的形式解决信号反复问题,比如:
n:=5*mindiff;
tbuy(c>Lj+n and tholding<=0,1);
tsell(c<Lj-n,tbuyholding(1));
tbuyshort(c<Lj-n and tholding>=0,1);
tsellshort(c>Lj+n,tsellholding(1));
//注意,此代码的具体的细节(比如时间控制)还未具体去推敲,在此先发表,以供大家参考