学习如何基于比尔·威廉姆斯(Bill Williams)的 MFI 设计交易系统(基础篇)
📘

学习如何基于比尔·威廉姆斯(Bill Williams)的 MFI 设计交易系统(基础篇)

第 1/3 篇

「用比尔·威廉姆斯 MFI 搭一套 MT5 系统」

比尔·威廉姆斯(Bill Williams)的市场 facilitation 指数(MFI)衡量每一单位成交量带来的价格变动幅度,公式为 (High - Low) / Volume。它不预测方向,只揭示当前价格运动是否得到成交量确认,适合作为趋势延续或衰竭的辅助过滤器。 在 MT5 里可直接调用内置 iMFI 或手动计算。下面这段 MQL5 演示了如何取最近一根棒的 MFI 值,并在值大于零且成交量放大时给出多头倾向信号——注意这只是过滤条件,不是入场指令。 外汇与贵金属杠杆高、滑点大,MFI 信号在重大数据行情中可能瞬间失效,实盘前务必在策略测试器用至少 3 个月 tick 数据回测。

MQL5 / C++
class="type">class="kw">double mfi = iMFI(_Symbol, PERIOD_M15, class="num">13, class="num">0);
class="type">class="kw">double vol = iVolume(_Symbol, PERIOD_M15, class="num">0);
class="type">class="kw">double vol_prev = iVolume(_Symbol, PERIOD_M15, class="num">1);
if(mfi > class="num">0 && vol > vol_prev * class="num">1.2)
   Print("MFI确认多头倾向: 价格运动获量能支撑");

从 BW MFI 切入指标化交易

这一篇换了个方向,专门聊怎么用最主流的技术指标搭交易系统。先抛出一个能当辅助武器的工具:比尔·威廉姆斯的市场促进指数(BW MFI),把它和你已经用的其它技术工具叠在一起,对行情动能的辨识度可能会更高。 系列会按 BW MFI 定义、策略、策略蓝图、交易系统、结束语这条线走。实盘验证统一在 MetaTrader 5 上跑,系统代码用 MQL5 在 MetaEditor 里写;没装过环境的,去上一期《在 MetaEditor 中编写 MQL5 代码》照着配一遍就行。 所有贴出来的策略只作教学用,实盘前必须自己回测,而且大概率要调参。没有哪种策略适合所有人,有些逻辑可能跟你的交易风格根本不搭。 外汇和贵金属是高杠杆品种,把材料搬进任何真实账户都等于自担风险,亏损概率不低,编码练手和实盘下单是两件事。

◍ 比尔·威廉姆斯 MFI 的四色逻辑

比尔·威廉姆斯把市场促进指数(MFI)做成了一个看「价格区间 ÷ 成交量」的子窗口指标,核心公式就是 (High - Low) / Volume。它不预测点位,只衡量每一根 K 线里,价格摆动的幅度有没有得到成交量的确认。 在 MT5 里不用手算,插入菜单 → 指标 → 比尔·威廉姆斯 → 市场促进指数即可加载。参数窗口里能调六样东西:四种状态对应的柱线颜色、成交量类型(跳价或实际量)、柱线粗细。 加载后子窗口会出现四色柱线,每一种对应一种市况:绿色 = MFI 与成交量同增,资金有兴趣介入;棕色 = 两者同减,没人关注;蓝色 = MFI 增但量缩,走势缺量支持;粉红 = MFI 减但量增,多空陷入平衡。 外汇与贵金属杠杆高、滑点大,四色只是状态读数,不能单独作为开仓依据,需结合结构位与更高周期过滤。

「用 BW MFI 四种状态切市场节奏」

BW MFI 把量价关系压成四种柱线状态,核心只看两个变量的先后对比:当期 BW MFI 与前期比,当期交易量与前期比。两者同升出绿柱,视为走势健康;同降出褐柱,倾向动能衰退;MFI 升但量缩出蓝柱,是假动作概率信号;MFI 降但量增出粉柱,反映抛压下的深蹲平衡。 把这四态直接转成交易动作,就是第二层用法:绿态找入场点,褐态找离场点,蓝态警惕假突破,粉态看市场是否换手完毕。注意这只是状态映射,不是触发单,外汇与贵金属波动高、滑点大,实盘前必须在 MT5 用历史数据验过自己的品种周期。 加一条移动平均线做过滤,能砍掉不少噪音:绿态且收盘价站上 MA 才认买入,绿态但收在 MA 下方反手认卖出。同理可叠支撑阻力或 MACD,思路一致——用外部工具给 BW MFI 的状态加一道确认闸。 [CODE] // 四种状态判定伪代码(基于 BW MFI 与成交量) if (bwMfi[0] > bwMfi[1] && volume[0] > volume[1]) state = GREEN; // 绿柱:量价同升 if (bwMfi[0] < bwMfi[1] && volume[0] < volume[1]) state = BROWN; // 褐柱:量价同降 if (bwMfi[0] > bwMfi[1] && volume[0] < volume[1]) state = BLUE; // 蓝柱:价升量缩 if (bwMfi[0] < bwMfi[1] && volume[0] > volume[1]) state = PINK; // 粉柱:价降量增 // 配合 MA 的买入过滤 if (state == GREEN && close[0] > ma[0]) signal = BUY; // 绿态且收在均线上 if (state == GREEN && close[0] < ma[0]) signal = SELL; // 绿态但收在均线下 [/CODE] 上面这段可直接粘进 MT5 的 EA 草稿里改 bwMfi[] 引用,先把状态打印到日志,跑两周 EURUSD 的 M15 看粉柱后是否常接反转,再决定要不要接信号层。

MQL5 / C++
class=class="str">"cmt">// 四种状态判定伪代码(基于 BW MFI 与成交量)
if (bwMfi[class="num">0] > bwMfi[class="num">1] && volume[class="num">0] > volume[class="num">1]) state = GREEN;   class=class="str">"cmt">// 绿柱:量价同升
if (bwMfi[class="num">0] < bwMfi[class="num">1] && volume[class="num">0] < volume[class="num">1]) state = BROWN;  class=class="str">"cmt">// 褐柱:量价同降
if (bwMfi[class="num">0] > bwMfi[class="num">1] && volume[class="num">0] < volume[class="num">1]) state = BLUE;   class=class="str">"cmt">// 蓝柱:价升量缩
if (bwMfi[class="num">0] < bwMfi[class="num">1] && volume[class="num">0] > volume[class="num">1]) state = PINK;   class=class="str">"cmt">// 粉柱:价降量增
class=class="str">"cmt">// 配合 MA 的买入过滤
if (state == GREEN && close[class="num">0] > ma[class="num">0]) signal = BUY;   class=class="str">"cmt">// 绿态且收在均线上
if (state == GREEN && close[class="num">0] < ma[class="num">0]) signal = SELL;  class=class="str">"cmt">// 绿态但收在均线下

常见问题

红色为买入盘主导、绿色为卖出盘主导、蓝色为多空均衡、棕色为混沌无序;看颜色切换可判断当前节奏。
可用内置编辑器写条件判断脚本,当颜色由蓝变红或绿时弹窗;具体代码按四色枚举值触发即可。
可以,小布能对接品种页实时识别 MFI 状态切换并推送提醒,你不用自己写脚本盯盘。
倾向叠加波动率阈值或只在蓝转红/绿初段进场,避免棕色混沌区频繁操作以降低无效交易。
默认周期在外汇较稳,贵金属波动大可把计算周期略调小;属高风险品种,需先模拟验证。