微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在使用EMA而不是SMA的信号线的Expert Advisor中对MACD进行编码

如何解决如何在使用EMA而不是SMA的信号线的Expert Advisor中对MACD进行编码

#include <MovingAverages.mqh>

input int fast = 7;
input int slow = 26;
input int signallength =9;
input int cloSEOropen = 1; //close=0,open=1
input int movingavglength =114;
double ema,macd,signal;
double ind_buffer1[26],ind_buffer2[26];
bool sellsignaldone  = false;
bool buysignaldone = false;

void OnTick()
  { 
   ema = iMA(NULL,movingavglength,MODE_EMA,PRICE_CLOSE,1);

//---- macd counted in the 1-st buffer
   for(int i=0; i<slow-1; i++)
      ind_buffer1[i]=iMA(NULL,fast,cloSEOropen,i)-iMA(NULL,slow,i);
//---- signal line counted in the 2-nd buffer
   for(int i=0; i<slow-1; i++)
      ind_buffer2[i]=iMAOnArray(ind_buffer1,signallength,i);

    macd = ind_buffer1[1];
    signal = ind_buffer2[1];
   
   if (macd > signal && macd<0 && Close[1]>ema && !buysignaldone && OrdersTotal()==0) {
      buysignaldone = true;
      OrderSend(NULL,OP_BUY,1/Ask,Ask,3,Ask-(Ask*0.004),Ask+(Ask*0.008),"Buy Order",clrGreen);
      
   }
   if (macd < signal) {
      buysignaldone = false;
   }
   
   if (macd < signal && macd>0 && Close[1]<ema && !sellsignaldone && OrdersTotal()==0) {
      sellsignaldone = true;
      OrderSend(NULL,OP_SELL,1/Bid,Bid,Bid+(Bid*0.004),Bid-(Bid*0.008),"Sell Order",clrRed);
   }
   
   if (macd > signal) {
      sellsignaldone = false;
   }
   
  }

您不能为此使用iMACD。我不确定自己做错了什么,但是信号在错误的地方

enter image description here

交叉在这里

enter image description here

解决方法

使用iOsMA可获得更好的结果,但仍然与指标不一样。

#property strict

#include <MovingAverages.mqh>

input int fast = 7;
input int slow = 26;
input int signallength =9;
input int closeoropen = 1; //close=0,open=1
input int movingavglength =114;
double sma1,sma2,ema,macd,fastema,slowema,signal;
double ind_buffer1[26],ind_buffer2[26];
bool sellsignaldone  = false;
bool buysignaldone = false;

void OnTick()
  { 
    signal = iOsMA(NULL,fast,slow,signallength,closeoropen,1);
    fastema = iMA(NULL,MODE_EMA,1);
    slowema = iMA(NULL,1);
    macd = fastema-slowema;
    ema = iMA(NULL,movingavglength,PRICE_CLOSE,1);

   if (signal>0 && macd<0 && Close[1]>ema && !buysignaldone && OrdersTotal()==0) {
      buysignaldone = true;
      OrderSend(NULL,OP_BUY,1/Ask,Ask,3,Ask-(Ask*0.004),Ask+(Ask*0.008),"Buy Order",clrGreen);
      
   }
   if (macd < signal) {
      buysignaldone = false;
   }
   
   if (signal<0 && macd>0 && Close[1]<ema && !sellsignaldone && OrdersTotal()==0) {
      sellsignaldone = true;
      OrderSend(NULL,OP_SELL,1/Bid,Bid,Bid+(Bid*0.004),Bid-(Bid*0.008),"Sell Order",clrRed);
   }
   
   if (macd > signal) {
      sellsignaldone = false;
   }
   
  }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。