使用比尔威廉姆系统的交易信号模块·综合运用
🧩

使用比尔威廉姆系统的交易信号模块·综合运用

(3/3)·从图形面板到EA创建与局限,补齐自动识别分形动量的最后一块拼图

案例拆解 第 3/3 篇

多数人在比尔威廉姆系统上卡在模式识别的半途——规则读得懂,真到图表上找分形、判加速就漏信号。把五维逻辑硬写成EA常陷入误标,本篇顺着前两层铺垫,直接收口到模块落地与边界。

五个维度信号怎么单独开关

EA 把信号拆成 5 个独立维度,每个都能分别控制“是否显示”和“是否参与交易”。具体对应:分形(Dim1.Fractals 线)、AO 动能(Dim2.AO 线)、AC 加速(Dim3.AC 线)、区域交易(Dim4.Zones 线)、平衡线交易(Dim5.Balance 线)。 除了逐维开关,还有一个 'Show out of trend signals' 参数,打开后会在趋势不明甚至逆势区域也把信号画出来,方便你观察 Bill Williams 体系里那些“非趋势内”的异动。 交易端设置极简,只有一个 Lot size(手数大小)需要填,风控重心其实落在你给的手数上,外汇和贵金属波动剧烈,高杠杆下错手数可能瞬间放大亏损。 部署前必须先解压附件 billwilliamsts.zip,把里面文件按原结构丢进 MT5 终端对应目录(通常是 MQL5/Indicators 与 Files),不然 EA 加载后读不到维度数据,面板会空跑。

◍ 用向导生成比尔威廉姆信号EA并接上图表事件

在 MT5 的 MQL 编辑器里点「新建」,弹窗中选「EA交易 (生成)」,命名后进入信号源添加步骤。信号生成器挑 Bill Williams 交易系统那一项,后续确认不修改源码、勾选交易信号模块即可。 向导还会让你填跟踪止损与资金管理参数,这两处直接决定仓位与回撤上限,外汇和贵金属波动大,参数设宽了容易在单根大 K 线被扫,属高风险操作,建议先在策略测试器跑历史数据。 生成出的文件默认不会响应交易面板上的参数变动,必须手动改两处:一是声明 filter0 全局变量并把比尔威廉姆信号过滤器实例化,二是补一个 OnChartEvent 处理函数把图表事件喂给过滤器。改完编译,EA 就能实时读面板参数了。 下面这段是改动核心,逐行看:首两行 new 出 CBillWilliamsSignal 对象(原文重复赋值可删一处);接着在全局区声明 ExtExpert 专家对象和 filter0 指针;OnChartEvent 内调用 filter0.ChartEvent 把 id、lparam、dparam、sparam 透传,图表上的按钮/参数调整才会被信号层捕获。

MQL5 / C++
class=class="str">"cmt">//--- 创建 CBillWilliamsSignal 过滤器
CBillWilliamsSignal *filter0=new CBillWilliamsSignal;
filter0=new CBillWilliamsSignal;
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| 全局专家对象                                                    |
class=class="str">"cmt">//+------------------------------------------------------------------+
CExpert ExtExpert;
CBillWilliamsSignal *filter0;
class="type">void OnChartEvent(const class="type">int id,
                const class="type">long &lparam,
                const class="type">class="kw">double &dparam,
                const class="type">class="kw">string &sparam)
{
  filter0.ChartEvent(id,lparam,dparam,sparam);
}

「向导生成的EA有两道硬伤」

用MT5向导搭EA,底层走的是标准库交易接口,这带来两个绕不开的限制。 仓位一旦建好,就没法在EA里直接改手数——除非你自己改标准库源码去扩展功能,这对普通用户门槛不低。 这类EA还只能丢市价单,挂单、止损转场之类动作它根本不会做。 为了补掉这些坑,我们基于交易信号类重写了逻辑,做成了 BillWilliamsEA.mq5,放在附件里可直接拖进MT5跑。 回测给了三组参照:EURUSD D1 在2015年单年、2010–2015整段,以及 EURJPY D1 的2010–2015,对应图表见原附图26/27/28,明细数据在 EUR-D1-2015.zip、EUR-D1-2010-2015.zip、EURJPY-D1-2010-2015.zip 里,自己解压看权益曲线再决定要不要用。 外汇和贵金属杠杆高,历史回测漂亮不代表未来能复制,上实盘前先开模拟账户验一遍信号触发。

一点提醒

回测文件里 EUR 日线 2010–2015 的压缩包有 84.57 KB,2015 单年也有 50.88 KB,EURJPY 同区间 88.52 KB,样本量足够你在 MT5 里复跑验证。比尔·威廉姆系统的延迟是硬伤,只有趋势很明确时才进场,平缓市表现大概率弱于突破类系统,这点和作者原注里的典型状况一致。 真要拿这套 EA 跑实盘,得把止损单技术综合进去,否则延迟触发容易吃连续毛刺。外汇和贵金属杠杆高、滑点诡异,先用 ZIP 里的历史数据做离线测试,别直接挂真钱。 有用户 2025 年反馈装了顾问后马丁格尔开得太凶,正向单扛不住亏损——这类现象提示你:参数没调顺之前,它大概率不适合无脑跟。

MQL5 / C++
class="kw">return INIT_FAILED;
class="kw">return class="kw">false;
把重复劳动交给小布
这些五维信号的识别与标记,小布盯盘的AIGC已内置,打开对应品种页即可看到分形与动量的实时标注,你只管判断区域和平衡线是否被触碰。

常见问题

不会。面板设置同时控制CBillWilliamsTS类的标记与交易分支,禁用即既不标也不做单,优化参数时建议先禁再测。
模块本身不绑周期,但五维信号在M15与H1的噪声差异很大,回测要先固定周期再谈样本外。
平衡线作为第五维是收敛条件,叠加前四维也自然收窄触发,属正常概率收缩而非bug。
可以,品种页的标注支持按维度筛选查看,但决策仍归你,外汇贵金属杠杆高,信号只是概率倾向不是指令。
分形突破常遇瞬时滑点,用限价挂单替代市价追单能降摩擦,但无法消除跳空风险。