效果示意图 · AI 根据源码绘制
#property copyright "XAUOF指标工坊"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_plots 7
// 前四条均线
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrMagenta
#property indicator_width1 2
#property indicator_label1 "快速均线"
#property indicator_type2 DRAW_LINE
#property indicator_color2 clrLime
#property indicator_width2 1
#property indicator_label2 "短期均线"
#property indicator_type3 DRAW_LINE
#property indicator_color3 clrLime
#property indicator_width3 1
#property indicator_label3 "中期均线"
#property indicator_type4 DRAW_LINE
#property indicator_color4 clrLime
#property indicator_width4 2
#property indicator_label4 "长期均线"
// 买卖箭头
#property indicator_type5 DRAW_ARROW
#property indicator_color5 clrLime
#property indicator_width5 2
#property indicator_label5 "买入信号"
#property indicator_type6 DRAW_ARROW
#property indicator_color6 clrMagenta
#property indicator_width6 2
#property indicator_label6 "卖出信号"
// 辅助缓冲区(不画图,用于存储前一根K线的快线值,判断穿越)
#property indicator_type7 DRAW_NONE
//--- 可调参数
input int MA_Fast = 10; // 紫色快速均线周期(推荐10-15)
input int MA_Short = 20; // 绿色短期均线周期(推荐20)
input int MA_Mid = 50; // 绿色中期均线周期(推荐50)
input int MA_Long = 200; // 绿色长期均线周期(推荐200)
input ENUM_MA_METHOD MA_Method = MODE_EMA; // 均线算法(EMA更灵敏)
input ENUM_APPLIED_PRICE MA_Price = PRICE_CLOSE; // 均线应用价格
input bool Show_Buy_Arrow = true; // 是否显示买入箭头
input bool Show_Sell_Arrow = true; // 是否显示卖出箭头
input int Arrow_Gap = 30; // 箭头与价格的间距(点数)
//--- 指标缓冲区
double BufferFast[]; // 紫色快线
double BufferShort[]; // 绿色短线
double BufferMid[]; // 绿色中线
double BufferLong[]; // 绿色长线
double BufferBuy[]; // 买入箭头
double BufferSell[]; // 卖出箭头
double BufferPrevFast[]; // 辅助:前一根快线值
//--- 指标句柄
int handleFast, handleShort, handleMid, handleLong;
//+------------------------------------------------------------------+
int OnInit()
{
// 创建均线句柄
handleFast = iMA(_Symbol, PERIOD_CURRENT, MA_Fast, 0, MA_Method, MA_Price);
handleShort = iMA(_Symbol, PERIOD_CURRENT, MA_Short, 0, MA_Method, MA_Price);
handleMid = iMA(_Symbol, PERIOD_CURRENT, MA_Mid, 0, MA_Method, MA_Price);
handleLong = iMA(_Symbol, PERIOD_CURRENT, MA_Long, 0, MA_Method, MA_Price);
if(handleFast == INVALID_HANDLE || handleShort == INVALID_HANDLE ||
handleMid == INVALID_HANDLE || handleLong == INVALID_HANDLE)
{
Print("均线句柄创建失败");
return(INIT_FAILED);
}
// 绑定缓冲区
SetIndexBuffer(0, BufferFast, INDICATOR_DATA);
SetIndexBuffer(1, BufferShort, INDICATOR_DATA);
SetIndexBuffer(2, BufferMid, INDICATOR_DATA);
SetIndexBuffer(3, BufferLong, INDICATOR_DATA);
SetIndexBuffer(4, BufferBuy, INDICATOR_DATA);
SetIndexBuffer(5, BufferSell, INDICATOR_DATA);
SetIndexBuffer(6, BufferPrevFast, INDICATOR_CALCULATIONS);
// 设置箭头样式
PlotIndexSetInteger(4, PLOT_ARROW, 233); // 买入箭头向上
PlotIndexSetInteger(5, PLOT_ARROW, 234); // 卖出箭头向下
// 设置数组为时间序列(0 = 最新K线)
ArraySetAsSeries(BufferFast, true);
ArraySetAsSeries(BufferShort, true);
ArraySetAsSeries(BufferMid, true);
ArraySetAsSeries(BufferLong, true);
ArraySetAsSeries(BufferBuy, true);
ArraySetAsSeries(BufferSell, true);
ArraySetAsSeries(BufferPrevFast, true);
// 设置指标名称
IndicatorSetString(INDICATOR_SHORTNAME, "多周期均线共振");
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[])
{
// 设置价格数组为时间序列
ArraySetAsSeries(close, true);
ArraySetAsSeries(high, true);
ArraySetAsSeries(low, true);
// 计算起始位置
int start = prev_calculated > 0 ? prev_calculated - 1 : 0;
// 从指标句柄拷贝数据到缓冲区
if(CopyBuffer(handleFast, 0, 0, rates_total, BufferFast) <= 0) return(0);
if(CopyBuffer(handleShort, 0, 0, rates_total, BufferShort) <= 0) return(0);
if(CopyBuffer(handleMid, 0, 0, rates_total, BufferMid) <= 0) return(0);
if(CopyBuffer(handleLong, 0, 0, rates_total, BufferLong) <= 0) return(0);
// 主循环:从右往左计算(i=0 是最新K线)
for(int i = start; i < rates_total && !IsStopped(); i++)
{
// 初始化箭头缓冲区为空值
BufferBuy[i] = EMPTY_VALUE;
BufferSell[i] = EMPTY_VALUE;
// 需要至少两根K线才能判断穿越
if(i < 1) continue;
// 保存前一根快线值(用于下一次循环判断穿越)
BufferPrevFast[i] = BufferFast[i];
// 获取当前和前一根的快线、短线值
double fastNow = BufferFast[i];
double fastPrev = BufferFast[i+1];
double shortNow = BufferShort[i];
double shortPrev = BufferShort[i+1];
double closeNow = close[i];
// 判断是否为 0(避免无效数据)
if(fastNow == 0 || shortNow == 0) continue;
// 买入信号:快线上穿短线 且 价格在快线上方
if(Show_Buy_Arrow)
{
if(fastPrev < shortPrev && fastNow > shortNow && closeNow > fastNow)
{
// 箭头画在K线最低价下方
BufferBuy[i] = low[i] - Arrow_Gap * _Point;
}
}
// 卖出信号:快线下穿短线 且 价格在快线下方
if(Show_Sell_Arrow)
{
if(fastPrev > shortPrev && fastNow < shortNow && closeNow < fastNow)
{
// 箭头画在K线最高价上方
BufferSell[i] = high[i] + Arrow_Gap * _Point;
}
}
}
return(rates_total);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// 释放指标句柄
if(handleFast != INVALID_HANDLE) IndicatorRelease(handleFast);
if(handleShort != INVALID_HANDLE) IndicatorRelease(handleShort);
if(handleMid != INVALID_HANDLE) IndicatorRelease(handleMid);
if(handleLong != INVALID_HANDLE) IndicatorRelease(handleLong);
}
//+------------------------------------------------------------------+作品说明
从图上识别到:三条绿色均线(目测周期分别约为20、50、200),一条紫色均线(周期较短,约10-15),价格上方有绿色向上箭头(买入信号),下方有紫色向下箭头(卖出信号)。信号逻辑推测为:快线上穿慢线且价格在均线上方时显示买入箭头,反之显示卖出箭头。
使用说明
- 安装方法
- 将代码保存为
GoldMultiMAArrows.mq5,放入 MT5 的MQL5\Indicators文件夹 - 在 MetaEditor 中编译(F7),无错误后拖到图表即可
- 参数调整
MA_Fast:紫色快线周期,默认 10,数值越小越灵敏MA_Short/Mid/Long:三条绿色均线,分别为 20/50/200,可根据品种特性调整MA_Method:均线算法,EMA 更贴近价格,SMA 更平滑Arrow_Gap:箭头与 K 线的间距,图表放大时可调大此值避免箭头挤在一起
- 信号解读
- 绿色向上箭头:快线(紫色)上穿短线(绿色)且价格在快线上方,考虑买入
- 紫色向下箭头:快线下穿短线且价格在快线下方,考虑卖出
- 箭头出现后,建议结合长期均线趋势(价格在 200 均线上方为多头趋势)以及其他指标(如 MACD、RSI)确认
- 注意事项
- 此指标为趋势跟踪型,震荡行情中会有假信号,建议配合布林带或 ATR 过滤
- 箭头只在 K 线收盘后才最终确定,盘中箭头可能消失,不要盘中追单
- 黄金波动大,务必设置止损,箭头只是参考信号,不是自动交易指令
AI 解读根据源码逐行分析写成,供参考,以实际运行为准
这是什么
这是一个基于四条移动均线共振的趋势跟踪指标,专为 MT5 设计。图表上显示一条紫色快速均线(默认 10 周期)和三条绿色慢速均线(20/50/200 周期),当快线上穿短线且价格站上快线时,K 线下方出现绿色向上箭头提示买入;反之出现紫色向下箭头提示卖出。适合在黄金等趋势性强的品种上捕捉中短期入场时机。
逻辑原理
指标通过 iMA 函数计算四条 EMA 均线(默认算法,可切换 SMA),分别对应快速(10)、短期(20)、中期(50)、长期(200)周期。核心信号逻辑是快线与短线的穿越配合价格位置:
- 买入箭头:前一根 K 线快线在短线下方,当前 K 线快线上穿短线,且收盘价在快线上方,箭头画在 K 线最低价下方
- 卖出箭头:前一根快线在短线上方,当前快线下穿短线,且收盘价在快线下方,箭头画在 K 线最高价上方
中期和长期均线不参与信号判断,仅作为趋势背景参考(例如价格在 200 均线上方可视为多头趋势)。箭头只在 K 线完全收盘后确定,盘中不会提前显示。
参数说明
- MA_Fast(默认 10):紫色快速均线周期,数值越小越灵敏,剥头皮可降到 5-8,波段交易可提高到 15-20
- MA_Short(默认 20):绿色短期均线,与快线配合产生穿越信号,日内交易常用 20,4 小时图可调到 30
- MA_Mid(默认 50):绿色中期均线,仅作趋势参考,无需频繁调整
- MA_Long(默认 200):绿色长期均线,经典趋势分界线,不建议修改
- MA_Method(默认 EMA):均线算法,EMA 更贴近价格反应快,SMA 更平滑但滞后,趋势跟踪建议用 EMA
- MA_Price(默认 PRICE_CLOSE):均线计算价格,收盘价最常用,特殊需求可选典型价或加权价
- Show_Buy_Arrow / Show_Sell_Arrow(默认开启):是否显示买入 / 卖出箭头,可单独关闭某一方向信号
- Arrow_Gap(默认 30):箭头与 K 线的间距点数,图表放大后箭头挤在一起可调大此值到 50-100
怎么用
将代码保存为 .mq5 文件放入 MT5 的 MQL5\Indicators 文件夹,在 MetaEditor 中按 F7 编译无误后,从导航器窗口拖到图表即可。指标默认加载到主图窗口,四条均线和箭头会自动绘制。
看信号:绿色向上箭头出现后,可在下一根 K 线开盘时考虑做多,止损设在快线下方或最近低点;紫色向下箭头同理做空。建议配合长期均线趋势过滤:价格在 200 均线上方只做多信号,下方只做空信号,可大幅减少假突破。
调参:默认参数适合黄金 H1 时间框架,其他品种需根据波动特性调整。欧美等波动小的品种可把快线周期降到 8,原油等波动大的可提高到 12-15。箭头间距根据图表缩放比例调整,以不遮挡 K 线为宜。
适用场景
- 品种:适合黄金、原油、指数等趋势性强的品种,外汇主要货币对(欧美、镑美)也可用,但震荡期需谨慎。不适合小市值加密货币或冷门商品,这类品种假突破多
- 周期:H1 和 H4 效果最好,日线也可,M15 以下假信号多不推荐。周线以上均线周期需相应放大(例如 50/100/500)
- 行情:单边趋势行情表现优异,震荡整理期会频繁出箭头但价格来回扫损。建议配合 ATR 或布林带宽度过滤:ATR 过小时不交易
- 时段:欧美盘重叠时段(北京时间 15:00-24:00)信号质量高,亚洲盘波动小容易假突破
风险提示
- 滞后性:均线本质是历史价格平均值,穿越信号出现时价格往往已走出一段,入场点不是最优。急涨急跌行情中箭头出现时可能已接近短期顶底
- 假信号:震荡行情中快线会反复上下穿短线,产生连续亏损的买卖箭头。代码没有过滤机制,需交易者自行结合 ADX、布林带宽度等指标判断是否震荡
- 不重绘但盘中不稳定:箭头只在 K 线收盘后最终确定,盘中显示的箭头可能因价格回撤而在收盘时消失。不要在盘中看到箭头就立即下单
- 无止损逻辑:代码只画箭头不管止损,必须手动设置。建议止损放在快线下方 20-30 点或最近摆动低点,止盈可参考长期均线或固定盈亏比
- 参数敏感:快线周期改 1-2 个数字,信号数量和胜率会明显变化。默认参数未必适合所有品种和周期,需回测优化后再实盘
常见问题
- 这个指标的箭头会重绘吗
- 不会。箭头只在 K 线完全收盘后根据收盘价和均线值计算,一旦画出就不会消失或移动。但盘中显示的箭头可能在收盘时消失,因为盘中价格随时在变。
- 默认参数适合什么周期和品种
- 默认 10/20/50/200 周期组合适合黄金 H1 时间框架。H4 和日线也可直接用,M15 以下假信号多。其他品种需自行测试,欧美等低波动品种可把快线降到 8,原油可提高到 12-15。
- 只有箭头没有均线可以吗
- 代码里均线和箭头是绑定的,不能只显示箭头。如果不想看均线,可以在图表上右键点指标选择"可见性",把前四条均线的颜色改成透明(clrNone)需要修改代码重新编译。
- 震荡行情怎么过滤假信号
- 代码本身没有过滤逻辑。建议手动加 ATR 指标,ATR 低于均值时不交易;或加布林带,价格在中轨附近来回时忽略箭头。也可以只在价格突破 50 或 200 均线后才跟箭头方向交易。
- MT4 能用这个指标吗
- 不能直接用。这是 MQL5 代码,MT4 用的是 MQL4,语法和函数不同。需要把 iMA 句柄改成 iMA 函数调用、缓冲区设置改成 SetIndexBuffer 等,工作量较大,建议直接用 MT5 或找 MT4 版本。
Gold Multi-Timeframe MA Resonance Arrow Indicator MT5
Four EMA lines (10/20/50/200 periods) with crossover arrows. Green up-arrow when fast MA crosses above short MA and price is above fast MA; purple down-arrow on opposite. Suitable for gold trend trading with adjustable periods and arrow spacing.
Source code is shown above. Compiled EX5 files are available to VIP members.
评论
还没有人评论,来抢个沙发。