评论

收藏

判断指标交叉函数

avatar 老周 | 2012 人阅读 | 0 人评论 | 2016-11-08

常规下, 指标出现交叉说明行情出现了反转, 大多数操盘手都会将此 k 线形态作为衡量下单或者平仓的参考。通常的,依据同一指标“快线”和“慢线”来判断交叉,如果快线向上穿透慢线叫做“金叉” ,如果快线向下穿透慢线叫做“死叉” 。我们以 7 个周期和 14 个周期移动平均线为例来演绎一下判断交叉的方法。


假设移动平均线采用收盘价为平均数基准价, 按简单平均法计算数值, 分别加载 7 个周期和 14 个周期之后的图表如下:


QQ图片20161108151245.png

通过对交叉位置特点进行分析, 将设计交叉算法的原理描述如下: 先获取当前 k 线的快慢两线数值,再获取前一 k 线的快慢两线数值。如果当前 k 线的快线大于慢线,且前一 k 线的快线小于慢线,则双线形态为金叉,如果当前 k 线的快线小于慢线,且前一 k 线的快线大于慢线,则双线形态为死叉。


以下代码为标准的判断两线交叉自定义函数, 输入参数有 4 个, 分别是当前 k 线的快慢数值和前一 k 线的快慢数值,函数输出为“9” ,表示没有出现交叉, “0”表示完成了金叉,
“1”表示完成了死叉。

  1. /*
  2. 函 数:计算指标交叉信号
  3. 输入参数:double myFast0:当前快线值
  4. double mySlow0:当前慢线值
  5. double myFast1:前一快线值
  6. double mySlow1:前一慢线值
  7. 输出参数:向上交叉为 0,向下交叉为 1,无效交叉为 9
  8. 算 法:
  9. */
  10. int iCrossSignal(double myFast0,double mySlow0,double myFast1,double mySlow1)
  11. {
  12. int myReturn=9;
  13. if (myFast0>mySlow0 && myFast1<=mySlow1)
  14. {
  15. myReturn=0;
  16. }
  17. if (myFast0<mySlow0 && myFast1>=mySlow1)
  18. {
  19. myReturn=1;
  20. }
  21. return(myReturn);
  22. }
复制代码

这个函数的好处就在于你可以选择任意两根曲线, 判断其交叉结果。 还是以上面两根均线交叉为例,举例说明调用函数的方法如下:


  1. double myMA_Fast_0=iMA(NULL,0, 7,0,MODE_SMA,PRICE_CLOSE,0); //获取当前 k 线快线数值
  2. double myMA_Slow_0=iMA(NULL,0,14,0,MODE_SMA,PRICE_CLOSE,0); //获取当前 k 线慢线数值
  3. double myMA_Fast_1=iMA(NULL,0, 7,0,MODE_SMA,PRICE_CLOSE,1); //获取前一 k 线快线数值
  4. double myMA_Slow_1=iMA(NULL,0,14,0,MODE_SMA,PRICE_CLOSE,1); //获取前一 k 线快线数值
  5. int myMACrossSignal=iCrossSignal(myMA_Fast_0,myMA_Slow_0,myMA_Fast_1,myMA_Slow_1); //获取交叉信号代码
  6. if (myMACrossSignal ==0) print("金叉");
  7. if (myMACrossSignal ==1) print("死叉");
  8. if (myMACrossSignal ==9) print("无交叉");
复制代码

友情提示:当前价格决定了均线数值,而当前 k 线没有最终成型,因此利用程序抓取当前指标数值判断交叉,结果会非常敏感,瞬间的交叉会被程序识别,肉眼却无法感知,也许当前 k 线形成后,双线并没有最终出现交叉。这将导致频繁发出交叉信号,策略的程序化设计中需要特别注意。

""
还没有人打赏,支持一下
您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则