MT4版MACD改进版指标,0轴上下柱状区分颜色。-Forex MT4/5 指标下载论坛-Forex EA-融策资源网

MT4版MACD改进版指标,0轴上下柱状区分颜色。

Snipaste_2025-02-18_20-19-51

抖音里的一个朋友留言,希望帮他把以下逻辑写成MT4里可以用的MACD指标!现呈上。有需要的朋友也可以免费下载,如果你有自己的想发,也可以跟贴,留言你的逻辑博主看到了也可以免费给你写成指标或者EA交易系统!这样做的目的只有一个,我想打造一个交易圈技术交流的论坛!

DIFF:EMA(CLOSE,12)-EMA(CLOSE,26),COLORMAGENTA;
//短周期与长周期的收盘价的指数平滑移动平均值做差。
DEA:EMA(DIFF,9);
//DIFF的M个周期指数平滑移动平均 MACD:2*(DIFF-DEA),COLORSTICK; PARTLINE(DIFF>DEA,DIFF,COLORRED),LINETHICK1; PARTLINE(DIFF<DEA,DIFF,COLORGREEN),LINETHICK1;

 
MACD-ZUZU.zip
zip文件
12.0K

安装方法:https://www.rongcegw.cn/forum-post/781.html/

//+------------------------------------------------------------------+
//|                                                      MACD_ZUZU.mq4 |
//|                        Generated by MetaEditor                   |
//|                                                                  |
//+------------------------------------------------------------------+
#property strict

// Indicator settings
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 clrNONE     // DIFF线(不显示)
#property indicator_color2 clrLime     // DEA线(显示为绿色)
#property indicator_color3 clrCyan     // 0轴上方柱状图(青色)
#property indicator_color4 clrGreen    // 0轴下方柱状图(绿色)
#property indicator_color5 clrGray     // 0轴线
#property indicator_width2 1           // DEA线宽度
#property indicator_width3 2           // 柱状图宽度
#property indicator_width4 2
#property indicator_width5 1

// 指标缓冲区
double DIFFBuffer[];
double DEABuffer[];
double HistogramUpBuffer[];
double HistogramDownBuffer[];
double ZeroBuffer[];

// 输入参数
input int FastEMA = 12;     // 快线EMA周期
input int SlowEMA = 26;     // 慢线EMA周期
input int SignalSMA = 9;    // 信号线周期

//+------------------------------------------------------------------+
//| 自定义指标初始化函数                                             |
//+------------------------------------------------------------------+
int OnInit()
{
    // 绑定缓冲区
    SetIndexBuffer(0, DIFFBuffer);
    SetIndexBuffer(1, DEABuffer);
    SetIndexBuffer(2, HistogramUpBuffer);
    SetIndexBuffer(3, HistogramDownBuffer);
    SetIndexBuffer(4, ZeroBuffer);

    // 设置绘图样式
    SetIndexStyle(0, DRAW_NONE);       // 隐藏DIFF线
    SetIndexStyle(1, DRAW_LINE);       // 显示DEA线
    SetIndexStyle(2, DRAW_HISTOGRAM);  // 0轴上方柱状图(青色)
    SetIndexStyle(3, DRAW_HISTOGRAM);  // 0轴下方柱状图(绿色)
    SetIndexStyle(4, DRAW_LINE);       // 0轴线(灰色)

    // 设置指标名称
    IndicatorShortName("MACD_ZUZU");

    //--- 获取指标窗口句柄 ---
    long chartID = ChartID();                     // 当前图表ID
    int subWindow = ChartWindowFind(chartID, "MACD_ZUZU"); // 根据指标名称查找窗口句柄

    //--- 创建标注 ---
    ObjectCreate(chartID, "Label", OBJ_LABEL, subWindow, 0, 0);
    ObjectSetString(chartID, "Label", OBJPROP_TEXT, "其他指标>>>www.rongcegw.cn");
    ObjectSetInteger(chartID, "Label", OBJPROP_COLOR, clrGray);
    ObjectSetInteger(chartID, "Label", OBJPROP_XDISTANCE, 300);   // 距离右侧10像素
    ObjectSetInteger(chartID, "Label", OBJPROP_YDISTANCE, 20);   // 距离顶部20像素
    ObjectSetInteger(chartID, "Label", OBJPROP_CORNER, CORNER_RIGHT_UPPER);
    ObjectSetInteger(chartID, "Label", OBJPROP_FONTSIZE, 10);

    return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| 自定义指标反初始化函数                                           |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
    // 删除标注
    ObjectDelete(0, "Label");
}

//+------------------------------------------------------------------+
//| 自定义指标迭代函数                                               |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
    // 计算起始位置
    int start = (prev_calculated == 0) ? 0 : prev_calculated - 1;

    // 主计算循环
    for(int i = start; i < rates_total; i++)
    {
        // 计算DIFF值(快线EMA - 慢线EMA)
        double EMA12 = iMA(NULL, 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, i);
        double EMA26 = iMA(NULL, 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, i);
        DIFFBuffer[i] = EMA12 - EMA26;

        // 计算DEA值(DIFF的EMA)
        DEABuffer[i] = iMAOnArray(DIFFBuffer, 0, SignalSMA, 0, MODE_EMA, i);

        // 计算柱状图
        if(DIFFBuffer[i] > 0)
        {
            HistogramUpBuffer[i] = DIFFBuffer[i];   // 0轴上方用青色
            HistogramDownBuffer[i] = 0;
        }
        else
        {
            HistogramUpBuffer[i] = 0;
            HistogramDownBuffer[i] = DIFFBuffer[i]; // 0轴下方用绿色
        }

        // 固定0轴值
        ZeroBuffer[i] = 0;
    }

    return(rates_total);
}

 

请登录后发表评论

    没有回复内容