设为首页 收藏本站 切换语言

写了一个均线通道指标,使用5、13、144、169、288、338的周期,但不能显示到主图上,有朋友可以帮忙指点一下么?

| 发表于 2025-1-18 14:54:19 | 显示全部楼层 |复制链接
//+------------------------------------------------------------------+
//|                                              MultiMA.mq4         |
//|                        Custom Multi Moving Average Indicator      |
//+------------------------------------------------------------------+
#property strict
#property indicator_chart_window  // 将指标显示在主图窗口中

// 定义均线周期
input int MA1_Period = 5;      // 第一条均线周期(5)
input int MA2_Period = 13;     // 第二条均线周期(13)
input int MA3_Period = 144;    // 第三条均线周期(144)
input int MA4_Period = 169;    // 第四条均线周期(169)
input int MA5_Period = 288;    // 第五条均线周期(288)
input int MA6_Period = 338;    // 第六条均线周期(338)

// 定义均线类型
input int MA_Method = MODE_SMA; // 均线类型:MODE_SMA(简单移动平均), MODE_EMA(指数移动平均), MODE_SMMA(平滑移动平均), MODE_LWMA(线性加权移动平均)

// 定义均线价格类型
input int MA_Price = PRICE_CLOSE; // 价格类型:PRICE_CLOSE(收盘价), PRICE_OPEN(开盘价), PRICE_HIGH(最高价), PRICE_LOW(最低价)等

// 定义均线颜色
color MA1_Color = clrRed;      // 第一条均线颜色(红色)
color MA2_Color = clrRed;      // 第二条均线颜色(红色)
color MA3_Color = clrYellow;   // 第三条均线颜色(黄色)
color MA4_Color = clrYellow;   // 第四条均线颜色(黄色)
color MA5_Color = clrGreen;    // 第五条均线颜色(绿色)
color MA6_Color = clrGreen;    // 第六条均线颜色(绿色)

// 定义缓冲区
double MA1_Buffer[];  // 第一条均线的数据缓冲区
double MA2_Buffer[];  // 第二条均线的数据缓冲区
double MA3_Buffer[];  // 第三条均线的数据缓冲区
double MA4_Buffer[];  // 第四条均线的数据缓冲区
double MA5_Buffer[];  // 第五条均线的数据缓冲区
double MA6_Buffer[];  // 第六条均线的数据缓冲区

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//| 自定义指标初始化函数                                             |
//+------------------------------------------------------------------+
int OnInit()
  {
   // 设置指标窗口
   IndicatorBuffers(6);  // 设置6个缓冲区
   IndicatorShortName("MultiMA");  // 设置指标名称
   
   // 设置均线1
   SetIndexBuffer(0, MA1_Buffer);  // 将缓冲区0与MA1_Buffer关联
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2, MA1_Color);  // 设置均线1的样式:实线,线宽为2,颜色为红色
   SetIndexLabel(0, "MA " + IntegerToString(MA1_Period));  // 设置均线1的标签
   
   // 设置均线2
   SetIndexBuffer(1, MA2_Buffer);  // 将缓冲区1与MA2_Buffer关联
   SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2, MA2_Color);  // 设置均线2的样式:实线,线宽为2,颜色为红色
   SetIndexLabel(1, "MA " + IntegerToString(MA2_Period));  // 设置均线2的标签
   
   // 设置均线3
   SetIndexBuffer(2, MA3_Buffer);  // 将缓冲区2与MA3_Buffer关联
   SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 2, MA3_Color);  // 设置均线3的样式:实线,线宽为2,颜色为黄色
   SetIndexLabel(2, "MA " + IntegerToString(MA3_Period));  // 设置均线3的标签
   
   // 设置均线4
   SetIndexBuffer(3, MA4_Buffer);  // 将缓冲区3与MA4_Buffer关联
   SetIndexStyle(3, DRAW_LINE, STYLE_SOLID, 2, MA4_Color);  // 设置均线4的样式:实线,线宽为2,颜色为黄色
   SetIndexLabel(3, "MA " + IntegerToString(MA4_Period));  // 设置均线4的标签
   
   // 设置均线5
   SetIndexBuffer(4, MA5_Buffer);  // 将缓冲区4与MA5_Buffer关联
   SetIndexStyle(4, DRAW_LINE, STYLE_SOLID, 2, MA5_Color);  // 设置均线5的样式:实线,线宽为2,颜色为绿色
   SetIndexLabel(4, "MA " + IntegerToString(MA5_Period));  // 设置均线5的标签
   
   // 设置均线6
   SetIndexBuffer(5, MA6_Buffer);  // 将缓冲区5与MA6_Buffer关联
   SetIndexStyle(5, DRAW_LINE, STYLE_SOLID, 2, MA6_Color);  // 设置均线6的样式:实线,线宽为2,颜色为绿色
   SetIndexLabel(5, "MA " + IntegerToString(MA6_Period));  // 设置均线6的标签
   
   return(INIT_SUCCEEDED);  // 初始化成功
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//| 自定义指标计算函数                                               |
//+------------------------------------------------------------------+
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[])
  {
   // 计算均线
   for(int i = 0; i < rates_total; i++)
     {
      MA1_Buffer[i] = iMA(NULL, 0, MA1_Period, 0, MA_Method, MA_Price, i);  // 计算第一条均线
      MA2_Buffer[i] = iMA(NULL, 0, MA2_Period, 0, MA_Method, MA_Price, i);  // 计算第二条均线
      MA3_Buffer[i] = iMA(NULL, 0, MA3_Period, 0, MA_Method, MA_Price, i);  // 计算第三条均线
      MA4_Buffer[i] = iMA(NULL, 0, MA4_Period, 0, MA_Method, MA_Price, i);  // 计算第四条均线
      MA5_Buffer[i] = iMA(NULL, 0, MA5_Period, 0, MA_Method, MA_Price, i);  // 计算第五条均线
      MA6_Buffer[i] = iMA(NULL, 0, MA6_Period, 0, MA_Method, MA_Price, i);  // 计算第六条均线
     }
   
   // 调试输出
   Print("MA1 Value: ", MA1_Buffer[0]);  // 输出第一条均线的值
   Print("MA2 Value: ", MA2_Buffer[0]);  // 输出第二条均线的值
   Print("MA3 Value: ", MA3_Buffer[0]);  // 输出第三条均线的值
   Print("MA4 Value: ", MA4_Buffer[0]);  // 输出第四条均线的值
   Print("MA5 Value: ", MA5_Buffer[0]);  // 输出第五条均线的值
   Print("MA6 Value: ", MA6_Buffer[0]);  // 输出第六条均线的值
   
   return(rates_total);  // 返回计算的总K线数
  }
举报

评论 使用道具

精彩评论1

ballchang
D
| 发表于 2025-1-31 19:04:58 | 显示全部楼层
#property indicator_buffers 4
#property indicator_plots   2

没指定绘图数量和缓冲区数量吗?mql4 和 mql5 这一块的逻辑应该是一样的吧,没指定绑定了 buffer 也不给你绘图
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)