MT5指标编译通过 · EX5 11KB 自动发布 4 0

趋势指标柱状图

congwei174·13 小时前发布

快慢均线差值柱状图,绿柱看涨、红柱看跌

趋势指标柱状图

MT5 真机运行截图 · 服务器把编译好的 EX5 挂到黄金 H1 图表上截的,你装上去看到的就是这个样子

TrendIndicatorHistogram.mq5141 行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#property copyright   "XAUOF Indicator Workshop"
#property version     "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2

// 上升柱(绿色)
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrLime
#property indicator_width1  3
#property indicator_label1  "Up"

// 下降柱(红色)
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrRed
#property indicator_width2  3
#property indicator_label2  "Down"

//--- 输入参数
input int    FastMAPeriod   = 10;   // 快速均线周期
input int    FastMAMethod   = 1;    // 快速均线方法(0=SMA, 1=EMA, 2=SMMA, 3=LWMA)
input int    FastMAApplyTo  = 0;    // 快速均线应用价格(0=收盘价)
input int    SlowMAPeriod   = 1;    // 慢速均线周期
input int    SlowMAMethod   = 1;    // 慢速均线方法
input int    SlowMAApplyTo  = 0;    // 慢速均线应用价格

//--- 指标缓冲区
double UpBuffer[];
double DownBuffer[];

//--- 均线句柄和临时缓冲区
int    fastMAHandle;
int    slowMAHandle;
double fastMA[];
double slowMA[];

//+------------------------------------------------------------------+
//| 自定义指标初始化函数                                               |
//+------------------------------------------------------------------+
int OnInit()
{
   // 创建快速均线句柄
   fastMAHandle = iMA(_Symbol, PERIOD_CURRENT, FastMAPeriod, 0, 
                      (ENUM_MA_METHOD)FastMAMethod, (ENUM_APPLIED_PRICE)FastMAApplyTo);
   if(fastMAHandle == INVALID_HANDLE)
   {
      Print("创建快速均线句柄失败");
      return INIT_FAILED;
   }
   
   // 创建慢速均线句柄
   slowMAHandle = iMA(_Symbol, PERIOD_CURRENT, SlowMAPeriod, 0, 
                      (ENUM_MA_METHOD)SlowMAMethod, (ENUM_APPLIED_PRICE)SlowMAApplyTo);
   if(slowMAHandle == INVALID_HANDLE)
   {
      Print("创建慢速均线句柄失败");
      return INIT_FAILED;
   }
   
   // 绑定缓冲区
   SetIndexBuffer(0, UpBuffer, INDICATOR_DATA);
   SetIndexBuffer(1, DownBuffer, INDICATOR_DATA);
   
   // 设置空值
   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0);
   PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, 0);
   
   // 分配临时缓冲区
   ArraySetAsSeries(fastMA, false);
   ArraySetAsSeries(slowMA, false);
   ArraySetAsSeries(UpBuffer, false);
   ArraySetAsSeries(DownBuffer, false);
   
   return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
//| 自定义指标计算函数                                                 |
//+------------------------------------------------------------------+
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[])
{
   // 等待指标计算完成
   if(BarsCalculated(fastMAHandle) < rates_total) return 0;
   if(BarsCalculated(slowMAHandle) < rates_total) return 0;
   
   // 拷贝均线数据
   if(CopyBuffer(fastMAHandle, 0, 0, rates_total, fastMA) < rates_total) return 0;
   if(CopyBuffer(slowMAHandle, 0, 0, rates_total, slowMA) < rates_total) return 0;
   
   // 确定计算起点
   int start = (prev_calculated > 0) ? prev_calculated - 1 : MathMax(FastMAPeriod, SlowMAPeriod);
   
   // 首次计算时初始化
   if(prev_calculated == 0)
   {
      ArrayInitialize(UpBuffer, 0);
      ArrayInitialize(DownBuffer, 0);
   }
   
   // 计算柱状图
   for(int i = start; i < rates_total && !IsStopped(); i++)
   {
      double diff = fastMA[i] - slowMA[i]; // 快慢线差值
      
      if(diff > 0)
      {
         // 快线在上,画绿柱
         UpBuffer[i] = diff;
         DownBuffer[i] = 0;
      }
      else
      {
         // 快线在下,画红柱
         UpBuffer[i] = 0;
         DownBuffer[i] = diff;
      }
   }
   
   return rates_total;
}

//+------------------------------------------------------------------+
//| 自定义指标清理函数                                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // 释放指标句柄
   if(fastMAHandle != INVALID_HANDLE) IndicatorRelease(fastMAHandle);
   if(slowMAHandle != INVALID_HANDLE) IndicatorRelease(slowMAHandle);
}
//+------------------------------------------------------------------+
MT5 运行截图 · 完整视图带价格轴和时间轴的整张图表(约 150 根 H1 K 线),上面的封面是它最近 80 根 K 线的放大视图
趋势指标柱状图 在 MT5 上的真实截图

作品说明

从图上识别到的指标特征:

这是一个副图指标,名为 "Trend Indicator Histogram"(趋势指标柱状图)。从参数面板可以看到:

  • 一条绿色上升线(UpColor = Lime)
  • 一条红色下降线(DownColor = Red)
  • 线宽分别为 3(上升)和 3(下降)
  • 使用了快速 MA(FastMAPeriod = 10,方法 = 1 即 EMA,应用价格 = 0 即收盘价)
  • 使用了慢速 MA(SlowMAPeriod = 1,方法 = 1 即 EMA,应用价格 = 0 即收盘价)

副图显示的是柱状图,红色表示趋势向下,绿色表示趋势向上(中间有一小段绿色凸起)。逻辑应该是快慢均线差值的柱状图:快线高于慢线时画绿柱,低于时画红柱。

使用说明

将代码保存为 TrendIndicatorHistogram.mq5,放入 MT5 的 MQL5/Indicators 文件夹,重启 MT5 或按 F4 打开 MetaEditor 编译。

  1. 安装方法
  1. 参数调整
  • FastMAPeriod:快速均线周期,默认 10,周期越小越灵敏
  • FastMAMethod:均线算法,1 = EMA(指数移动平均),更贴近当前价格
  • SlowMAPeriod:慢速均线周期,默认 1(即取当前收盘价),可调大增加平滑度
  • 参数面板里的值已按截图设置,直接使用即可
  1. 信号判断
  • 绿柱(向上):快线高于慢线,趋势向上,可考虑做多或持多
  • 红柱(向下):快线低于慢线,趋势向下,可考虑做空或持空
  • 柱子高度表示趋势强弱,柱子变矮预示可能反转
  1. 注意事项
  • 这是副图指标,会单独显示在图表下方窗口
  • 慢速周期设为 1 时相当于和价格直接比较,可根据需要调整到更大周期(如 20、50)形成经典双均线差值指标
  • 单纯的柱状图没有买卖箭头,需结合主图 K 线或其他指标配合使用

AI 解读根据源码逐行分析写成,供参考,以实际运行为准

这是什么

这是一个 MT5 副图指标,在图表下方单独窗口显示快慢均线的差值柱状图。快线高于慢线时画绿柱,低于时画红柱,柱子高度代表趋势强弱。用来辅助判断趋势方向和动能变化。

逻辑原理

指标内部创建两条移动均线:快速均线(默认 10 周期 EMA)和慢速均线(默认 1 周期 EMA)。每根 K 线上计算快线减慢线的差值。差值为正时在副图画绿柱,为负时画红柱。

具体来说:

  • 快线 > 慢线 → 差值为正 → 绿柱向上 → 趋势看涨
  • 快线 < 慢线 → 差值为负 → 红柱向下 → 趋势看跌
  • 柱子从高变矮 → 趋势减弱,可能反转
  • 柱子从一种颜色切换到另一种 → 趋势转向

慢速周期设为 1 时,慢线实际等于当前收盘价,此时指标变成「快速均线与价格的差值」。如果把慢速周期调大(比如 20、50),就成了经典的双均线差值指标(类似 MACD 柱状图逻辑)。

参数说明

  • FastMAPeriod(10):快速均线周期。数值越小越灵敏,越大越平滑。短线可用 5-15,中长线可用 20-50。
  • FastMAMethod(1):快速均线算法。0=SMA 简单移动平均,1=EMA 指数移动平均(默认,更贴近当前价格),2=SMMA 平滑移动平均,3=LWMA 线性加权移动平均。
  • FastMAApplyTo(0):快速均线应用价格。0=收盘价(常用),1=开盘价,2=最高价,3=最低价,4=中间价等。
  • SlowMAPeriod(1):慢速均线周期。默认 1 相当于取当前收盘价。可调大到 20、50、200 形成经典双均线差值。
  • SlowMAMethod(1):慢速均线算法,选项同快速均线。
  • SlowMAApplyTo(0):慢速均线应用价格,选项同快速均线。

怎么用

  1. 将源码保存为 TrendIndicatorHistogram.mq5,放入 MT5 安装目录的 MQL5/Indicators 文件夹。
  2. 重启 MT5 或打开 MetaEditor(F4)编译。
  3. 在图表上右键 → 技术指标 → 自定义 → Trend Indicator Histogram,拖到图表上。
  4. 指标会在下方副图窗口显示柱状图。绿柱区域可考虑做多或持多,红柱区域可考虑做空或持空。
  5. 注意柱子高度变化:柱子变矮预示动能衰竭,可能反转;颜色切换(绿转红或红转绿)是趋势转向信号。
  6. 建议配合主图 K 线形态或其他指标(如支撑阻力、RSI)一起用,不要单独作为进出场依据。

适用场景

  • 品种:外汇主要货币对(EUR/USD、GBP/USD)、黄金(XAU/USD)、原油、指数等有明显趋势的品种。震荡市或波动极小的品种效果较差。
  • 周期:H1 小时图及以上周期较稳定。M5、M15 等短周期噪音多,需配合更小的快速均线周期使用。
  • 行情:单边趋势行情最适合,柱状图会持续保持一种颜色且高度明显。盘整震荡时柱子频繁变色且矮小,容易产生假信号。
  • 策略:适合趋势跟踪策略,在绿柱区持多、红柱区持空;或在柱子颜色切换时寻找反转机会。不适合高频剥头皮(滞后性)。

风险提示

  • 滞后性:均线类指标本质是历史价格的平滑,信号总是滞后于实际转折点。快速行情中可能错过最佳进场点或出场晚。
  • 震荡市假信号:横盘或小幅波动时,柱子会频繁在红绿之间切换,这些信号可靠性低,容易反复止损。
  • 参数敏感:慢速周期为 1 时指标非常灵敏,适合激进交易者;保守者建议把慢速周期调到 20 以上减少噪音。
  • 无止损逻辑:指标只提供趋势方向判断,不包含止损止盈逻辑,必须自己设定风控规则。
  • 无报警功能:代码里没有弹窗、声音或推送通知,需要人工盯盘或自行添加报警代码。

常见问题

这个指标会重绘吗?
不会重绘。指标基于已确定的均线值计算,历史柱状图不会因新 K 线出现而改变。
慢速周期为 1 是什么意思?
慢速周期 1 相当于取当前收盘价,此时指标实际是快速均线与价格的差值。如果想要经典双均线差值效果,建议把慢速周期改成 20、50 或更大。
MT4 能用吗?
不能直接用。这是 MQL5 代码,MT4 使用 MQL4 语言,语法和函数不同。需要用 MQL4 重写。
参数默认值适合什么周期?
默认快速 10 周期 EMA、慢速 1 周期适合 H1 小时图及以上的趋势跟踪。M15 以下短周期建议把快速周期减到 5,或把慢速周期加大到 10 以上过滤噪音。
柱子高度有具体数值含义吗?
柱子高度是快慢均线差值的点数(pips)。高度越大说明两线距离越远,趋势越强;高度收窄说明趋势减弱,可能反转或盘整。

Trend Indicator Histogram for MT5

A sub-chart histogram that plots the difference between fast and slow moving averages. Green bars indicate uptrend (fast MA above slow MA), red bars indicate downtrend. Customizable periods and MA methods for flexible trend tracking.

Source code is shown above. Compiled EX5 files are available to VIP members.

评论

后可以留言,比如反馈用着怎么样、想加什么功能。

还没有人评论,来抢个沙发。