常规下, 指标出现交叉说明行情出现了反转, 大多数操盘手都会将此 k 线形态作为衡量下单或者平仓的参考。通常的,依据同一指标“快线”和“慢线”来判断交叉,如果快线向上穿透慢线叫做“金叉” ,如果快线向下穿透慢线叫做“死叉” 。我们以 7 个周期和 14 个周期移动平均线为例来演绎一下判断交叉的方法。
假设移动平均线采用收盘价为平均数基准价, 按简单平均法计算数值, 分别加载 7 个周期和 14 个周期之后的图表如下:
通过对交叉位置特点进行分析, 将设计交叉算法的原理描述如下: 先获取当前 k 线的快慢两线数值,再获取前一 k 线的快慢两线数值。如果当前 k 线的快线大于慢线,且前一 k 线的快线小于慢线,则双线形态为金叉,如果当前 k 线的快线小于慢线,且前一 k 线的快线大于慢线,则双线形态为死叉。
以下代码为标准的判断两线交叉自定义函数, 输入参数有 4 个, 分别是当前 k 线的快慢数值和前一 k 线的快慢数值,函数输出为“9” ,表示没有出现交叉, “0”表示完成了金叉,
“1”表示完成了死叉。
- /*
- 函 数:计算指标交叉信号
- 输入参数:double myFast0:当前快线值
- double mySlow0:当前慢线值
- double myFast1:前一快线值
- double mySlow1:前一慢线值
- 输出参数:向上交叉为 0,向下交叉为 1,无效交叉为 9
- 算 法:
- */
- int iCrossSignal(double myFast0,double mySlow0,double myFast1,double mySlow1)
- {
- int myReturn=9;
- if (myFast0>mySlow0 && myFast1<=mySlow1)
- {
- myReturn=0;
- }
- if (myFast0<mySlow0 && myFast1>=mySlow1)
- {
- myReturn=1;
- }
- return(myReturn);
- }
复制代码
这个函数的好处就在于你可以选择任意两根曲线, 判断其交叉结果。 还是以上面两根均线交叉为例,举例说明调用函数的方法如下:
- double myMA_Fast_0=iMA(NULL,0, 7,0,MODE_SMA,PRICE_CLOSE,0); //获取当前 k 线快线数值
- double myMA_Slow_0=iMA(NULL,0,14,0,MODE_SMA,PRICE_CLOSE,0); //获取当前 k 线慢线数值
- double myMA_Fast_1=iMA(NULL,0, 7,0,MODE_SMA,PRICE_CLOSE,1); //获取前一 k 线快线数值
- double myMA_Slow_1=iMA(NULL,0,14,0,MODE_SMA,PRICE_CLOSE,1); //获取前一 k 线快线数值
- int myMACrossSignal=iCrossSignal(myMA_Fast_0,myMA_Slow_0,myMA_Fast_1,myMA_Slow_1); //获取交叉信号代码
- if (myMACrossSignal ==0) print("金叉");
- if (myMACrossSignal ==1) print("死叉");
- if (myMACrossSignal ==9) print("无交叉");
复制代码
友情提示:当前价格决定了均线数值,而当前 k 线没有最终成型,因此利用程序抓取当前指标数值判断交叉,结果会非常敏感,瞬间的交叉会被程序识别,肉眼却无法感知,也许当前 k 线形成后,双线并没有最终出现交叉。这将导致频繁发出交叉信号,策略的程序化设计中需要特别注意。
|