SMC Ultimate
- 指标
-
Ahmed Hamed Hamed Eadwan
CHINESE TRANSLATION — 中文
============================
TITLE:
MQL5 开发者与交易者 | R protocols 创始人
ABOUT:
您好,我是 Ahmed,来自阿拉伯联合酋长国的交易者和 MQL5 开发者,
R protocols 的创始人。
我自 1984 年开始编写代码,自 2006 年开始交易市场。
多年来,我为自己开发交易工具,通过真实市场经验不断完善它们。
现在,我将这些工具与 MQL5 社区分享。 - 版本: 1.0
- 激活: 5
SMC Ultimate
面向 MetaTrader 5 的机构级 Smart Money Concepts (SMC) / ICT 决策引擎。分析市场结构、流动性、Order Block 与 Fair Value Gap,并转换为评分、编码状态以及已确认的 Buy/Sell 信号。
可完全独立运行(图表面板、绘图与提醒),也可通过稳定的 4 缓冲区合约与固定的 88 个输入参数,可靠地与 iCustom 集成,供 EA 调用。
首个公开版本(version 1.0)上线价。价格可能在早期更新与评价之后上调。
主要功能
- HTF 与 LTF 市场结构:摆动点、BOS 与 CHoCH
- 流动性地图:equal high/low 与扫损(sweep)检测
- Order Block 与 Fair Value Gap(含触达/失效状态)
- Premium / Discount 上下文评分
- 可配置权重的多因子决策分,带迟滞锁定
- Anti-Repaint:确认信号锁定在已收盘 K 线(shift 1)
- 图表仪表盘:趋势、区域、分数、信号与缓冲区读数
- 提醒:弹窗、声音、推送(冷却与每根K线一次)
- EA Mode:关闭绘图,为兼容 EA 供数
- 基于 ChartID 的对象前缀,支持多实例
- 可选 ATR 自适应 EQH/EQL 与 FVG 容差
- 点差过滤、时段/工作日过滤、美分账户模式
信号如何工作
结构与流动性引擎按已收盘逻辑更新。上下文将价格归入 Premium、Discount 或 Neutral。决策引擎按可配置权重生成有上限的分数。可选 Strict-SMC 扫损规则过滤低质量入场。默认启用 Anti-Repaint 时,确认的 Buy/Sell 写入 shift 1,收盘后不再改写。入场箭头仅出现在已确认的收盘K,而非正在形成的K线。
Anti-Repaint 与 Two-Pass
Anti-Repaint 是核心完整性功能,默认开启。历史确认信号在收盘后保持固定。
Two-Pass Mitigation 为实验功能,默认关闭,可 refining 历史 OB/FVG 失效精度。
若两者同时开启,Anti-Repaint 自动优先:
- 当前会话禁用 Two-Pass
- 不修改 input 值(88 槽 EA 合约保持完整)
- Experts 日志写入警告
- 允许 GUI 时弹出 Alert
- 面板显示:2-Pass:OFF(AR-Override)
若需主动使用 Two-Pass,请将 Anti-Repaint 设为 false。完整双模式合并计划在后续更新中提供。
仪表盘
- LTF / HTF 趋势
- Premium-Discount 区域及 extreme 标记
- Swing、BOS、CHoCH、Sweep 计数
- 活跃 OB / FVG 数量
- 分数与信号:BUY、SELL 或 No Signal
- 迟滞锁定状态
- Anti-Repaint 与实际 Two-Pass 状态
- 点差、对象数量、HTF 数据健康度
- 缓冲区读数:Score、Signal、State
EA 缓冲区
向 EA 与自定义工具导出 4 个指标缓冲区:
- Buffer 0 - SMC_BUY:确认 BUY 时为 1.0(仅 shift 1)
- Buffer 1 - SMC_SELL:确认 SELL 时为 1.0(仅 shift 1)
- Buffer 2 - SMC_SCORE:决策强度,软上限约 +/-200
- Buffer 3 - SMC_STATE:编码的 HTF/LTF 趋势与 sweep;点差阻断时 +100000
确认的 Buy/Sell 仅写在 shift 1。shift 0 的 Score/State 为 bar-1 上下文的实时预览。时间过滤会抑制 Buy/Sell 但保留 State。88 个输入位置固定,保证 iCustom 按槽位读取稳定。
iCustom 集成(EA 代码风格)
请使用 Market 安装后 Navigator 中的准确名称。示例:Market\SMC Ultimate。确认入场仅在 shift 1。缓冲区布局固定:
- 0 = SMC_BUY
- 1 = SMC_SELL
- 2 = SMC_SCORE
- 3 = SMC_STATE
请始终在 shift 1 读取确认信号。
输入:88 个位置槽。请勿重排。41-46 为保留槽。省略的尾部输入保持默认值。
MQL5 代码(EA 骨架)
#define SMC_BUF_BUY 0
#define SMC_BUF_SELL 1
#define SMC_BUF_SCORE 2
#define SMC_BUF_STATE 3
#define SMC_SHIFT_CONFIRMED 1
#define SMC_SPREAD_BLOCK_MARK 100000.0
int g_smc_handle = INVALID_HANDLE;
datetime g_smc_last_bar = 0;
int OnInit()
{
g_smc_handle = iCustom(_Symbol, PERIOD_CURRENT, "Market\\SMC Ultimate");
if(g_smc_handle == INVALID_HANDLE)
{
Print("SMC Ultimate: iCustom failed, error=", GetLastError());
return INIT_FAILED;
}
return INIT_SUCCEEDED;
}
// Optional: pass inputs by frozen 88-slot order only if needed
// g_smc_handle = iCustom(_Symbol, PERIOD_CURRENT, "Market\\SMC Ultimate", ...);
// Enable EA Mode in indicator inputs for chart-less EA use.
bool SMC_Read(const int buffer_index, const int shift, double &out_value)
{
out_value = EMPTY_VALUE;
if(g_smc_handle == INVALID_HANDLE) return false;
double tmp[];
ArraySetAsSeries(tmp, true);
if(CopyBuffer(g_smc_handle, buffer_index, shift, 1, tmp) != 1)
return false;
out_value = tmp[0];
return true;
}
bool SMC_IsValidNum(const double v)
{
return (v != EMPTY_VALUE && MathIsValidNumber(v));
}
bool SMC_DecodeState(double state_raw,
bool &spread_blocked,
int &htf_trend,
int <f_trend,
int &sweep_enc)
{
spread_blocked = false;
htf_trend = 0; ltf_trend = 0; sweep_enc = 0;
if(!SMC_IsValidNum(state_raw)) return false;
double s = state_raw;
if(s >= SMC_SPREAD_BLOCK_MARK)
{
spread_blocked = true;
s -= SMC_SPREAD_BLOCK_MARK;
}
int sv = (int)MathRound(s);
htf_trend = sv / 100 - 1; // -1 bear, 0 flat, +1 bull
ltf_trend = (sv % 100) / 10 - 1; // -1 bear, 0 flat, +1 bull
sweep_enc = sv % 10; // 0 none, 1 buy-side, 2 sell-side
return true;
}
void OnTick()
{
datetime t[];
ArraySetAsSeries(t, true);
if(CopyTime(_Symbol, PERIOD_CURRENT, 0, 2, t) != 2) return;
if(t[0] == g_smc_last_bar) return;
g_smc_last_bar = t[0];
double buy=0, sell=0, score=0, state=0;
if(!SMC_Read(SMC_BUF_BUY, SMC_SHIFT_CONFIRMED, buy)) return;
if(!SMC_Read(SMC_BUF_SELL, SMC_SHIFT_CONFIRMED, sell)) return;
if(!SMC_Read(SMC_BUF_SCORE,SMC_SHIFT_CONFIRMED, score)) return;
if(!SMC_Read(SMC_BUF_STATE,SMC_SHIFT_CONFIRMED, state)) return;
bool spread_blocked; int htf, ltf, sweep;
if(!SMC_DecodeState(state, spread_blocked, htf, ltf, sweep)) return;
if(spread_blocked) return;
const bool is_buy =
SMC_IsValidNum(buy) && buy > 0.5 && buy < 1.0e10;
const bool is_sell =
SMC_IsValidNum(sell) && sell > 0.5 && sell < 1.0e10;
if(is_buy)
{
PrintFormat("SMC BUY confirmed | score=%.0f htf=%d ltf=%d sweep=%d",
score, htf, ltf, sweep);
// --- risk + OrderSend / trade.Buy() ---
}
else if(is_sell)
{
PrintFormat("SMC SELL confirmed | score=%.0f htf=%d ltf=%d sweep=%d",
score, htf, ltf, sweep);
// --- risk + OrderSend / trade.Sell() ---
}
}
void OnDeinit(const int reason)
{
if(g_smc_handle != INVALID_HANDLE)
{
IndicatorRelease(g_smc_handle);
g_smc_handle = INVALID_HANDLE;
}
}
集成规则
- 仅交易 shift 1 的 Buy/Sell,切勿使用 shift 0
- shift 0 的 Score/State 仅作监控预览,不是最终入场
- EMPTY_VALUE / 无效数值 = 无确认信号
- 若 State >= 100000,减去 100000 并跳过新开仓(点差阻断)
- State 编码:(htf+1)*100 + (ltf+1)*10 + sweepEnc
- 若 EA 无需面板/对象,请启用 EA Mode
- 使用前务必检查 CopyBuffer 返回值
- 手数、止损止盈与资金管理仅在您的 EA 内实现
SMC Ultimate 提供决策缓冲区。执行与风险由您的 EA 负责。
建议起步设置
- 挂载到常用周期(常见 M15-H1;支持任意周期)
- 保持 Anti-Repaint = true
- 除非明确需要,保持 Two-Pass = false
- 按品种设置 MaxSpread
- 先观察实盘再调节 MinDecisionScore 与权重
- 供 EA 使用:启用 EA Mode,并用 iCustom 读取四个缓冲区
最佳实践
- 将其视为决策引擎,而非保证盈利的信号打印机
- 更高把握通常来自 HTF 同向 + 支撑性 sweep + 非极端区域
- 始终尊重经纪商点差与自身风险限额
- 策略测试中如需验证对象与提醒,请使用可视模式
- 建议每图一个实例;多实例通过 ChartID 隔离
输入分组(共 88,顺序固定)
- 安全:点差、Strict SMC、Anti-Repaint、EA Mode
- 交易时间与工作日过滤
- ATR 自适应容差
- 决策评分权重
- 核心结构:HTF、swing strength、lookback
- 决策阈值与区域失效(含实验性 Two-Pass)
- 固定模式常量
- EA 兼容保留槽
- 图表对象上限
- 视觉开关、提醒与面板布局
- 颜色与日志
按输入位置集成时,请勿重排、删除或改用保留槽。
版本 1.0
MQL5 Market 首个公开发布。完整 SMC/ICT 栈、Anti-Repaint 快照引擎、带 AR 冲突主动处理的实验性 Two-Pass、4 缓冲区 EA 合约、固定 88 输入、ChartID 多实例前缀、ATR 自适应、机构级面板以及点差/时段/迟滞控制。
支持
请通过作者主页的 MQL5.org 站内消息联系。来信请注明品种、周期、输入截图以及 Experts 标签信息,并预留合理回复时间。
免责声明
交易存在亏损风险。历史结构形态不保证未来结果。SMC Ultimate 是分析型决策支持指标,并非投资建议。风险管理与交易执行完全由您自行负责。
