公式一:名称:一线一级
aa:=ma(c,100);
bb:=ma(c,20);
KD:=cross(c,bb) and c>=aa; //开多条件
PD:=cross(aa,c); //平多条件
KK:=cross(bb,c) and c<=aa; //开空条件
PK:=cross(c,aa); //平空条件
平空:SELLSHORT(PK,1,THISCLOSE); //平空信号
开多:BUY(KD AND HOLDING=0,1,THISCLOSE); //开多信号
平多:SELL(PD,1,THISCLOSE); //平多信号
开空:BUYSHORT(KK AND HOLDING=0,1,THISCLOSE); //开空信号
收益:asset/10000,noaxis,COLORMAGENTA ,LINETHICK6;
公式二:名称:一线2级
盈利2:STKINDI( '','一线一级.收益',0,4),noaxis,COLORMAGENTA ,LINETHICK6;
RSV:=(盈利2-LLV(盈利2,9))/(HHV(盈利2,9)-LLV(盈利2,9))*100;
K:SMA(RSV,3,1);
D:SMA(K,3,1);
J:=3*K-2*D;
由于“盈利2”是引用同周期公式一中“收益”的数据,而“收益”是有一部分时间没有仓位的,在公式二中,这部分数据严重失真,怎么样才能够去掉这部分数据!!!
此主题相关图片如下:z755e3mstmodfg0cdm_2$g.png

最好的办法是在原先代码里面做过滤,判断下holding
result:if(holding=0,0,asset/10000);
最终引用,引用这个result
这样只是满足 不持仓的时候 RESULT 取0值。在公式二中,只是把不持仓的那段数据变成0,而这个“0”依然是参与到公式二的计算中去的!
我的意思是不持仓的时候KDJ不计算,分开的两段持仓时间内的“盈利”合并成连续计算数值,就像连续月份中的计算差不多(应该没有主力月份那么繁琐)或者像5分钟周期内出现封板情况的时候,把那些封板的数据直接去掉再计算KDJ
一样。
没办法,你要引用的数据属于序列变量,无法进行特定的过滤