只能记录金叉或者死叉的那个K的位置对应的开高低收。 而不是你说的记录刚好触发死叉的那个价格。这个不好做。
历史K上都是成形的数据,不存在触发死叉时的即时价格。 至于获取金叉死叉的位置可以用
BARSLAST(死叉);//上一次死叉位置
SUMBARS(死叉,N);//N个死叉的位置
这2个函数都可以
获取到位置之后 就可以使用ref函数去引用那个位置的开高低收价格了。没必要使用数组取去记录。
input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6);//参数设置
DIFF : EMA(CLOSE,S) - EMA(CLOSE,P);
DEA : EMA(DIFF,M);
MACD1 : 2*(DIFF-DEA), COLORSTICK;
macdjc:cross(diff,dea);//macd金叉
macdsc:cross(dea,diff);//macd死叉
Lastsc:=BARSLAST(macdsc);//上一个死叉的K线位置
LastscOpen:ref(o,Lastsc);//上一个死叉的开盘价
10dsc:=SUMBARS(macdsc,10);//最近的第10个死叉的位置
10dscOpen:ref(o,10dsc);//第10个死叉位置的开盘价
input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6);//参数设置
macdjc:cross(diff,dea);//macd金叉 Lastsc:=BARSLAST(macdsc);//上一个死叉的K线位置 10dsc:=SUMBARS(macdsc,10);//最近的第10个死叉的位置 我在这个代码那里加上了if lastsc<>0 then DRAWTEXT(1,low,'S'); 结果主图叠加全部是S?怎么会??? |
因为之前只要有死叉lastsc就不可能是0了,除非你在当前图表最前面的某些K上,也就是历史上第一个死叉出现之前,这个值才可能是0.
上图我限制了K线数量,标记的位置就是第一个死叉之前的K。这时候那个lastsc就是0.
这个BARSLAST(macdsc)返回值是基于你当前K位置的,也就是你图表上十字光标的位置的那个K之前的第一个死叉。
还有2句代码啊。
10dsc:=SUMBARS(macdsc,10);//最近的第10个死叉的位置
10dscOpen:ref(o,10dsc);//最近的第10个死叉位置的开盘价
这里参数10改成3就可以了。
你需要这三个死叉的位置的话,那就复制上面的代码 修改下参数。
1dsc:=SUMBARS(macdsc,1);
1dscOpen:ref(o,1dsc);
2dsc:=SUMBARS(macdsc,2);
2dscOpen:ref(o,2dsc);
如果你不扩充数据起始位置的话,历史上的K的金叉或者死叉肯定是固定的了。其次当前最新K的上的死叉信号可能会多次闪烁,这种在闪烁中的死叉信号没办法进行很好的记录。