图4
假设a点是前一向下线段的终点,线段确认过程如下: 第一步,当出现了一条向上的笔后,我们就测该笔的电压: ①若该笔触及超高压,那么它就是线段,如图中①。
②若该笔虽未触及超高压,但已达到高电压,那么进入第二步判断,如图中②。
③若该笔连一般的高压都未达到,那么它不能成线段,如图中③。 注:图中的③是指当前的ab笔不能构成新线段,但并不一定会发展成如图中③的形态,也有可能成为如图E或者F的形态。
第二步,对②形态作进一步判断:
如果是先短后长,ab构成突破状态,则ab笔自成线段,如图中的A。 如果是先长后短,ab笔不能自成线段,如图中的B。此时需等待向下的笔c的出现,c出现后又分二种情形:一种是c点跌破a点,那么进入第三步;一种是c点没有跌破a点,那么跳转至第四步。
第三步,继向上的b笔后又出现了c笔,而且c点低于a点,线段分二种情形来确定:
⒈(b-c)>=HighVoltage,即构成了一条第二类的新线段,此时c笔自成线段,而b笔成为视同线段,如图中的C。
⒉(b-c)
第四步,继向上的b笔后又出现了c笔,但c点没有跌破a点,那么: 或形成向上Z字走势,如图中E;或形成向下Z字走势,如图中F。其中向上的Z字形要求d突破b,即d>b;而向下的Z字形并不要求e一定要突破a,但必须突破c,即e 亲爱的读者,我之所以用这么大的篇幅来讲解电指标的基本运算,是因为我们已经离EA很近了,希望您能做到知其然,知其所以然。 ⑷电指标的核心运算 ⒈形态坐标变量 图5 在图5中: A图: ①假设 ▲Start与a已成一条向下的线段 ▲ab笔不满足成线条件 ▲abcd形成了第一类新线段 ②需求 在d点出现之前,指标只画了Start与a一条向下的线段,当d点出现后需要在ad之间画一条向上的线段 ③记忆 形态坐标变量管理以下信息: △d点坐标:RightShift, RightPrice。 △a点坐标:LeftShift, LeftPrice。 △Start点坐标:BeforeShift, BeforePrice。 B图: ①假设 ▲Start与a已成一条向下的线段 ▲ab笔不满足成线条件 ▲bcde形成了第一类新线段 ②需求 在e点出现之前,指标只画了Start与a一条向下的线段,当e点出现后需要在be之间画一条向下的线段,在ab间画一条向上的(视同)线段 ③记忆 形态坐标变量管理以下信息: △e点坐标:RightShift, RightPrice。 △b点坐标:MiddShift, MiddPrice。 △a点坐标:LeftShift, LeftPrice。 △Start点坐标:BeforeShift, BeforePrice。 ⒉形态坐标记忆的逻辑关系 以上形态坐标记忆逻辑是依据自左向右运算的。 ⒊简化约定 如前第三步所述,在B图需求中画ab(视同)线段是没有意义的,因此我们把它简化为Start与e一条向下的线段,有兴趣的读者可以自行添加。 电指标的核心运算由函数GetElectricity()承担,函数GetElectricity()解读如下: ⒈参数表 int nY_Shift 左侧起始坐标,该值与LeftShift保持一致。 ⒉状态代码 ①笔即线,代码1。 ●笔触及超高压,如图6所示。 图6 运算代码: //●笔触及超高压,代码1 if( (nY_High-nY_Low)>=(1+Delta)*HighVoltage ) { if( LineTowards>0 ) { RightPrice = nY_High; } else { RightPrice = nY_Low; } return(1); } 其中此前已对右侧坐标赋值:RightShift = Stroke[nY_Pos][3];,而LineTowards存储的是笔方向(即新线段方向)=±1。 ●笔触及高压线并创新高或新低,如图7所示。 图7 图7与图6的不同之处在于它必须是创新高或新低,所以它肯定是非首柱的,即BeforePrice>0;图6就没有这个限制,它可以发生在BeforePrice=0的位置。 运算代码: //●非首柱笔触及高压线 if( nY_Shift<(TotalStroke-2) && (nY_High-nY_Low)>=HighVoltage ) { //且创新高或新低,绝对值为1 if( (LastTowards<0 && nY_High>BeforePrice) || (LastTowards>0 nY_Low ②笔成电(Z字形),代码2或3。 笔成电分为正向电(如图8所示)和反向电(如图9所示)二种。 图8 图9 ●延续原线方向的电称为正向电,包括图8中的 A和B二种情形,状态代码为2;与原线方向相反的电称为反向电,包括图9中的 A和B二种情形,状态代码为3。 ●Z字形包括一重和多重振荡。