📅 财经日历 📊 实时波动 📈 大盘云图 📶 行情走势 🆚 投机情绪 🚀 今日热点

    请高手把MT4的这个macd源码转换为可在博易大师中使用

    2020-05-26 · 2042 阅读
    //+------------------------------------------------------------------+
    //|                                                  Custom MACD.mq4 |
    //+------------------------------------------------------------------+

    #property  copyright "Copyright ?2015, Jack Nickson, Inc."
    #define INDICATOR_NAME"MACD_Colored"
    //---- indicator settings
    #property  indicator_separate_window
    #property  indicator_buffers 4
    #property  indicator_color1  Lime
    #property  indicator_color2  Red
    #property  indicator_color3  Yellow
    #property  indicator_color4  Silver
    #property  indicator_style4  STYLE_DOT
    #property  indicator_level1  0
    #property  indicator_level2  0
    #property  indicator_level3  0
    #property  indicator_level4  0
    #property  indicator_level5 0
    #property  indicator_level6  0
    #property  indicator_levelcolor  Gray
    #property  indicator_levelstyle  STYLE_DOT
    //---- indicator parameters
    extern int FastEMA=5;
    extern int SlowEMA=13;
    extern int SignalSMA=1;
    extern double MinDiff=0;
    extern int FontSize=8;
    extern color FontColor=Silver;
    //---- indicator buffers
    double     MacdBuffer[];
    double     MacdBufferUp[];
    double     MacdBufferDn[];
    double     MacdBufferEq[];
    double     SignalBuffer[];
    //bool firsttime=true;
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int init()
      {
    //---- drawing settings
       SetIndexStyle(0,DRAW_HISTOGRAM);
       SetIndexStyle(1,DRAW_HISTOGRAM);
       SetIndexStyle(2,DRAW_HISTOGRAM);
       SetIndexStyle(3,DRAW_LINE);
       SetLevelValue(0,45);
       SetLevelValue(1,30);
       SetLevelValue(2,15);
       SetLevelValue(3,-15);
       SetLevelValue(4,-30);
       SetLevelValue(5,-45);
       SetIndexDrawBegin(1,SignalSMA);
       IndicatorDigits(1);
    //---- indicator buffers mapping
       SetIndexBuffer(0,MacdBufferUp);
       SetIndexBuffer(1,MacdBufferDn);
       SetIndexBuffer(2,MacdBufferEq);
       SetIndexBuffer(3,SignalBuffer);
    //---- name for DataWindow and indicator subwindow label
       IndicatorShortName(WindowExpertName()+" ("+FastEMA+","+SlowEMA+","+SignalSMA+")");
       SetIndexLabel(0,"MACD UP");
       SetIndexLabel(1,"MACD DN");
       SetIndexLabel(2,"MACD EQ");
       SetIndexLabel(3,"Signal");
    //---- initialization done
       return(0);
    }
    int deinit()
    {
    string objname=WindowExpertName()+","+Symbol()+","+Period();
    ObjectDelete(objname);
    }
    //+------------------------------------------------------------------+
    //| Moving Averages Convergence/Divergence                           |
    //+------------------------------------------------------------------+
    int start()
      {
       int limit;
       int counted_bars=IndicatorCounted();
    //---- last counted bar will be recounted
       limit=MathMin(Bars-SlowEMA,Bars-counted_bars+1);
    //   if(!firsttime)
    //   Print("LIMIT=",limit);
       ArrayResize(MacdBuffer,limit);
       ArraySetAsSeries(MacdBuffer,true);
    //---- macd counted in the 1-st buffer
       for(int i=0;i<limit;i++) {
          MacdBuffer[i]=(iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-
          iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i))/Point;
       }
       for(i=limit-2;i>=0;i--)
       {
       if(MathAbs(MacdBuffer[i]-MacdBuffer[i+1])<MinDiff)
       {
      MacdBufferEq[i]=MacdBuffer[i];
      MacdBufferUp[i]=0;
      MacdBufferDn[i]=0;
       }
       else
       {
       if(MacdBuffer[i]>MacdBuffer[i+1])
       {
       MacdBufferUp[i]=MacdBuffer[i];
       MacdBufferDn[i]=0;
       MacdBufferEq[i]=0;
       }
       else
       {
       MacdBufferDn[i]=MacdBuffer[i];
       MacdBufferUp[i]=0;
       MacdBufferEq[i]=0;
       }
       }
       }
    //---- signal line counted in the 2-nd buffer
       for(i=0; i<limit; i++)
          SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
    //---- change color calculation
    double priMACD=(iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,1)-
          iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,1))/Point;
       double close[];
       ArrayResize(close,Bars);
       ArraySetAsSeries(close,true);
       ArrayCopy(close,Close,0,0,ArraySize(close));
    double curMACD=(iMAOnArray(close,0,FastEMA,0,MODE_EMA,0)-
          iMAOnArray(close,0,SlowEMA,0,MODE_EMA,0))/Point;
    //   for(int x=0;x<ArraySize(close);x++)
    //   Print(x,"=",close[x]);
    int pips;
    //Print("PRI=",priMACD," BUF=",MacdBuffer[1]);
    //Print("CUR=",curMACD," BUF=",MacdBuffer[0]);
    if(curMACD<priMACD)
    {
    while(curMACD<priMACD)
    {
    pips++;
    close[0]+=Point;
    curMACD=(iMAOnArray(close,0,FastEMA,0,MODE_EMA,0)-
          iMAOnArray(close,0,SlowEMA,0,MODE_EMA,0))/Point;
    //Print("PIPS=",pips," CLOSE=",close[0]," CUR=",curMACD);
    }
    }
    else
    {
    while(curMACD>priMACD)
    {
    pips--;
    close[0]-=Point;
    curMACD=(iMAOnArray(close,0,FastEMA,0,MODE_EMA,0)-
          iMAOnArray(close,0,SlowEMA,0,MODE_EMA,0))/Point;
    //Print("PIPS=",pips," CLOSE=",close[0]," CUR=",curMACD);
    }
    }
    //   IndicatorShortName(WindowExpertName()+" (Pips "+pips+")");
    //Print(WindowExpertName()," ",
    //WindowFind(WindowExpertName()+" ("+FastEMA+","+SlowEMA+","+SignalSMA+")"));
    string objname=WindowExpertName()+","+Symbol()+","+Period();
    if(ObjectFind(objname)<0)
    ObjectCreate(objname,OBJ_TEXT,
    WindowFind(WindowExpertName()+" ("+FastEMA+","+SlowEMA+","+SignalSMA+")"),
    Time[0]+Period()*60,MacdBuffer[0]/2);
    else
    ObjectMove(objname,0,Time[0]+Period()*60,MacdBuffer[0]/2);
    if(pips!=0)
    ObjectSetText(objname,DoubleToStr(pips,0),FontSize,"Courier",FontColor);
    else
    ObjectSetText(objname," ",FontSize,"Courier",FontColor);
    //---- done
       return(0);
    }
    //+------------------------------------------------------------------+

    ""
    还没有人打赏,支持一下
    回复

    举报

     

    回答|共 4 个

    我是6哥 LV2

    发表于 2020-5-26 08:45:25 | 显示全部楼层

    回帖奖励 +50 枚金币

    哈哈哈哈哈哈哈哈哈哈哈哈

    热得快2019 LV1

    发表于 2020-6-6 16:13:12 | 显示全部楼层

    新人完全看不懂

    超越22333 LV3

    发表于 2025-4-18 10:49:34 | 显示全部楼层

    看着就头大!

    超越22333 LV3

    发表于 2025-4-18 10:50:17 | 显示全部楼层

    我是6哥 发表于 2020-5-26 08:45
    哈哈哈哈哈哈哈哈哈哈哈哈

    太复杂了,我也想自己写指标
    您需要登录后才可以回帖 登录 | 注册

    提醒: 禁止引战、谩骂、灌水内容

    微信二维码

    有问题联系客服