☰
富途牛牛与文华财经指标公式全解析:同名MACD为何画线不同
2026/10/10 4:25:39 网站建设 项目流程

两年前我在一个交流群里看到有人问:“富途牛牛里的MACD,和文华财经里的MACD,到底是不是同一个东西?”当时大家七嘴八舌,有人说一样的,有人说不一样,还有人贴了个公式过来,结果在文华财经里编译都过不了。后来我把这件事认真研究了一遍,结论是:指标公式看起来大同小异,但两个终端的底层逻辑、函数生态、信号处理方式差距很大。这篇文章就把我这几年的使用体会和整理过的指标公式笔记摊开来讲,希望能帮那些正在纠结“指标能不能通用、参数怎么设、自定义怎么弄”的朋友理清楚。

1. 两个终端的指标基因:为什么同一指标长得不一样

很多人第一次把富途牛牛和文华财经摆在一起看,都会觉得它们都是“看盘软件”,指标应该差不多。其实这两兄弟的侧重点完全不同,指标层面的差异不是某一个函数名字不同,而是整套设计思路的差异。

1.1 富途牛牛的指标体系:兼顾普通用户和进阶玩家

富途牛牛的用户群体非常杂,有炒港美股的新手,也有做A股、期货、期权的老手。所以它的内置指标集做得比较“全”,MA、BOLL、MACD、KDJ、RSI这些主流指标基本都预置好了,你只要在K线图上点两下就能调出来。

真正让部分用户觉得“不够用”的,是它自定义指标的部分。富途牛牛的自定义指标能力分两个层次:

  • 第一层是内置的“指标管理器”脚本编辑器,可以写一些基于K线数据的自定义计算,适合画线、算比值、做条件标记。语法不难,但调试能力比较弱,报错信息也偏简略。
  • 第二层是Python数据脚本,可以调历史行情、做更复杂的计算和回测逻辑,功能强很多,但需要你有Python基础。

我在富途牛牛头几个月基本没碰自定义指标,后来开始做港美股里的自定义震荡指标时,才认真去读了一遍它的脚本说明。它的脚本偏“描述性”,写出来的东西更像是对指标计算过程的翻译,而不是编程。比如你想计算十日最高价的移动平均线,它会有专门的函数去做,不需要你手写循环。

1.2 文华财经的指标体系:以信号语言为核心

文华财经在国内期货圈子的地位很稳,它最大的特点不是“能画多少种线”,而是有一套完整的WH语言体系。赢顺、赢智这些终端里写的指标、选股模型、交易信号,底层都是WH语言。

WH语言和一般看盘软件里的指标编辑器有个本质区别:它是“面向交易信号”的。你不仅可以把计算结果画成线,还能用条件语句直接生成开仓、平仓信号。这一点在期货日内策略上特别重要,很多做程序化交易的人最早接触的语言不是Python,而是WH语言。

WH语言对历史引用、区间极值、前值偏移这类操作的支持非常成熟。比如REF(前N周期值)、HHV(最高值)、LLV(最低值)、CROSS(交叉)这些函数,写起来非常顺手。但代价是,它的语法有自己的一套规则,你从其他地方找来的公式,经常要改函数名、调参数结构才能编译通过。

1.3 为什么“同名指标”在两边画出来不一样

这是特别容易踩坑的地方。同样是MACD,富途牛牛默认参数可能是12、26、9,文华财经也是12、26、9,但两边算出来的数值曲线不一定完全一致。原因不在公式本身,而在数据源。

  • 富途牛牛在港美股上默认可能是前复权方式计算行情,如果你看的是分红拆股比较多的股票,除权除息日的价格跳空会影响均线、MACD的历史段。
  • 文华财经在期货上处理的是连续合约或主力合约数据,涉及换月拼接,不同合约之间的价差会直接进入指标计算。
  • 两边对停牌、非交易时段、节假日的数据处理也不一样,有的填充,有的直接跳过。

所以你在富途牛牛上用MA(5)和文华财经上用MA(5),在最近几天可能形态接近,但拉长到半年、一年,走势可能差很多。搞清楚这个底层差异,后面再聊“移植公式”才有意义。

2. 拆掉误解:指标公式的通用骨架

既然要看指标公式,就得先知道公式到底是怎么组成的。别看市面上的指标五花八门,拆到底层,其实就三块:输入、计算、输出。

输入很好理解,就是K线的开盘价、最高价、最低价、收盘价、成交量,以及你设定的周期参数。计算是把这些原始数据变成你要的中间值,比如求平均、找极值、做平滑、算比值。输出是把计算结果显示到图表上,可以是一根线,也可以是一系列信号点。

我见过不少朋友第一次打开指标编辑器时被一堆函数吓到,其实你先别管函数名多不多,只要理解下面这几个高频操作,大部分指标就能读懂了:

  • 引用前N周期数据:大部分语言里叫REF或类似含义,用于拿昨天、前天的值。
  • 求N周期内最高/最低值:用于编写波幅类指标,比如通道线、动能指标。
  • 求移动平均值:分简单平均(MA)和指数平均(EMA),后面MACD、RSI都会用。
  • 判断上穿/下穿:拿两条线做比较,A从下方穿过B就是“金叉”,这是信号类公式的核心。
  • 条件判断和逻辑组合:多个条件拼在一起才组成完整的交易信号。

拿MACD举例,它的骨架其实就三步:先算快线和慢线的指数平均差值(DIF),再对DIF做平均得到DEA,然后用DIF减去DEA画成柱状体(MACD柱)。不管你在哪个软件里看到MACD公式,本质都是这三步,区别只是“引用前值”和“求平均值”的函数名不一样。

只要把这个骨架装进脑子里,你再拿到任何一段指标源码,基本都能快速定位它在算什么、输出什么。

3. 七类高频指标的公式拆解与参数对照

我整理了自己平时用得比较多、也经常在富途牛牛和文华财经之间来回搬的七类指标。这里把每类指标的核心公式和两边参数设置列出来,方便直接对照。

指标类型典型指标富途牛牛内置参数文华财经WH参数核心计算对象
均线类MA / EMAMA 5、10、20、60MA 5、10、20、60收盘价平均线
波动类BOLL周期20,标准差2周期20,标准差2价格波动通道
趋势类MACD12、26、912、26、9快慢均线差
随机类KDJ9、3、39、3、3区间随机指标
强弱类RSI1414涨跌幅度比
动量类WR1414最高低位置
量能类VOL / 量比5、10日均量5、10日均量成交量均值

参数表只是参考,实际用的时候还是要根据自己的交易标的去调。下面我把几个最容易产生歧义的指标单独拆开讲讲。

3.1 均线类(MA / EMA)

均线是所有人最先接触的指标。MA是简单移动平均,EMA是指数移动平均。EMA对近期价格更敏感,所以反应比MA快,但也更容易被短期波动“骗到”。

在文华财经里,EMA函数是直接提供的,写起来很简单。富途牛牛的内置指标列表里也能直接选“指数平均线”,不用自己写。如果你想在指标编辑器里手动实现,就是把“前一日EMA值加权”这个逻辑翻译成代码。

个人建议:做趋势跟踪用长周期均线尽量不要频繁切换MA和EMA,因为你一旦换了,均线的历史轨迹就变了,你之前总结的经验可能不再适用。

3.2 波动类(BOLL)

BOLL布林带的逻辑是以中轨均线为中心,上下各加“一定倍数的标准差”作为轨道。参数一般用20周期、2倍标准差。

文华财经里布林带写起来很直观:

MID := MA(CLOSE, 20); UPPER := MID + 2 * STD(CLOSE, 20); LOWER := MID - 2 * STD(CLOSE, 20); DRAWLINE(UPPER, 'UPPER', RED); DRAWLINE(LOWER, 'LOWER', GREEN);

富途牛牛里你可以直接在指标库添加BOLL,但如果你想自定义带宽,就得去指标管理里重新定义。标准差的算法两边虽然名字一样,但注意看数据长度是否一致,差一个周期,轨道就完全不一样。

3.3 MACD

MACD可能是被误解最多的指标。很多人把它当“金叉死叉信号器”,其实它最早是用来观察趋势动能变化的。DIF线是快慢均线之差,DEA是DIF的平滑线,柱状体是两者差值的放大。

WH语言里标准的MACD写法:

DIF := EMA(CLOSE, 12) - EMA(CLOSE, 26); DEA := EMA(DIF, 9); MACD := (DIF - DEA) * 2; DRAWLINE(DIF, 'DIF', RED); DRAWLINE(DEA, 'DEA', BLUE); DRAWKLINE(MACD, 'MACD', 0);

有两点容易搞混:

  • 富途牛牛内置的MACD柱高度和文华财经可能倍率不同,文华里常见乘2,富途里不一定乘。
  • MACD在趋势市里效果好,但在震荡市里会产生大量无效信号。所以不是参数越灵敏越好。

3.4 KDJ

KDJ属于随机指标,计算逻辑是用当前收盘价在最近N周期价格区间中的相对位置来反映超买超卖。富途和文华默认参数都是9、3、3,但“平滑算法”在两边略有不同,真正画出来会有细微差异。

WH语言里的简化版本是这样:

RSV := (CLOSE - LLV(LOW, 9)) / (HHV(HIGH, 9) - LLV(LOW, 9)) * 100; K := SMA(RSV, 3, 1); D := SMA(K, 3, 1); J := 3 * K - 2 * D;

注意这里SMA的权重参数写法,不同软件对SMA的递归初始化方式不一样,可能导致前几十根K线的值有偏差。这也是很多人在文华财经里跑历史回测,发现信号和富途牛牛对不上的原因之一。

3.5 RSI

RSI的计算逻辑相对简单,在一定周期内统计上涨幅度占全部波动的比例。默认14周期。WH语言里这样写:

LC := REF(CLOSE, 1); UP := MAX(CLOSE - LC, 0); DOWN := MAX(LC - CLOSE, 0); RSI := SMA(UP, 14, 1) / (SMA(UP, 14, 1) + SMA(DOWN, 14, 1)) * 100;

RSI最大的问题不是公式,而是“参数选择”。14是默认值,但是5、6、7这种短周期的RSI在暴涨暴跌行情里会不停触发超买超卖,看着很热闹,实际操作价值反而不高。

3.6 WR(威廉指标)

WR和KDJ是近亲,都是找价格的区间位置。默认14周期。很多人分不清KDJ和WR,其实就是计算方法差了一步平滑。WR对短线高低点的反应极快,但也超级敏感,经常出现钝化现象——就是价格从高位回落了,WR还在超卖区趴着,让人不知道该怎么解读。

3.7 量能类(VOL / 量比)

成交量本身不算技术指标,但它经常被叠在均线、MACD里做确认条件。富途牛牛和文华财经里最基本的量能指标就是成交量柱状图加5日和10日均量线。

量比这个指标在A股和港股里算法相对一致,但期货里需要注意:不同品种的成交量单位不同,有些是按手,有些是按张,直接跨品种对比没有意义。

4. 同一条自定义指标,在两边分别怎么写

理论聊完,来点实操。我拿“双均线趋势过滤器”这个最简单的自定义指标为例,演示同样一个思路在富途牛牛和文华财经里分别怎么写。

这个指标的逻辑:价格在60日均线上方只看多,在60日均线下方只看空,然后用5日均线和10日均线的交叉作为加减仓的触发信号,最后输出“多头区/空头区”的文字标记和两条均线。

4.1 在富途牛牛里新建一个双均线趋势过滤器

第一个要注意的是:富途牛牛内置指标管理器的入口和版本有关,有的版本叫“指标管理”,有的版本叫“脚本编辑器”,但逻辑一样。

我一般这么操作:

  • 打开K线图,点击下方的“指标”按钮,进入“自定义指标”管理页。
  • 新建一个指标,命名成“双均线过滤器”。
  • 在编辑器里定义两条均线,以及它们的交叉条件。
  • 编译通过后,再把它拖到图表上使用。

富途牛牛的自定义脚本语法偏向“描述式”,比如定义均线可以直接使用均线函数,然后通过“上穿”“下穿”之类的逻辑判断来标记信号。你不需要手写循环,也不用维护数组。用起来的直观感受是:写起来快,但如果你想做复杂的历史回测,还是得切到Python那边去做。

4.2 在文华财经里翻译成WH语言

同样的逻辑,到了文华财经就要转换成WH语言。WH语言的变量定义用冒号等号(:=),画线用DRAWLINE函数,标信号可以用MARKTEXT或者DRAWICON。

一个简单的版本:

MA5 := MA(CLOSE, 5); MA10 := MA(CLOSE, 10); MA60 := MA(CLOSE, 60); UP_MA := MA5 > MA10 && CLOSE > MA60; DOWN_MA := MA5 < MA10 && CLOSE < MA60; DRAWLINE(MA5, 'MA5', YELLOW); DRAWLINE(MA10, 'MA10', WHITE); DRAWLINE(MA60, 'MA60', BLUE); MARKTEXT(UP_MA, LOW, '多', RED); MARKTEXT(DOWN_MA, HIGH, '空', GREEN);

这里有几个WH语言特有的习惯需要注意:

  • 条件表达式里用的是大于号小于号,逻辑与是“&&”,这个和很多脚本语言的写法一致。
  • MARKTEXT会在指定K线下方或上方写字,实际绘图时位置会自动偏移,你不需要手动算坐标。
  • WH语言里的字符串要用单引号,不能用双引号,搞错了直接编译报错。

写完编译,如果报错,多半是两个原因:一是函数名拼写不对,二是某个变量引用的周期参数不是整数。排除这两类问题,基本都能跑通。

4.3 为什么两边的写法风格差这么多

我在两边都写过之后最深的感受是:富途牛牛的脚本是为“画图辅助”服务的,它让你快速把想法可视化;文华财经的WH语言是为“交易逻辑”服务的,它把条件直接放在语言层面,能更方便地生成买入卖出信号。

这个差异不是谁好谁坏,而是目标用户不同。富途牛牛的用户群体里做港美股长线的人很多,画线看趋势就够了;文华财经的期货用户更依赖信号来执行日内或波段交易,所以语言里处处都是“条件”。

你如果打算两边都维护同一套策略思路,不要试图把公式文件直接复制,而是应该把“逻辑”整理成一份文档,再分别用两边语法实现一遍。第一次麻烦,后面就有经验了。

5. 参数优化不会告诉你的那些事

指标公式写到能跑,只是第一步。真正决定一套指标有没有用的,是参数和用法。这里想聊聊参数优化这件事,很多人在这里摔得头破血流。

5.1 优化不是越敏感越好

有些朋友喜欢把KDJ的周期从9改到6,把RSI的周期从14改到5,理由是“更灵敏,信号更多”。信号多不等于赚钱多。你把参数调得太短,只会让指标和你眼前看到的行情形成某种偶然契合,等市场风格一变,立刻失效。

我自己的习惯是:先在一个相对长的周期里跑一遍历史数据,看指标在上涨、下跌、横盘三种状态下的表现,再决定要不要微调参数。所谓“参数优化”,优化的是“适应多种行情的能力”,不是“拟合某一段历史行情的能力”。

5.2 未来函数是最隐蔽的坑

未来函数是指你的指标用了当前这根K线之后才可能出现的数据。最典型的就是“用当根K线的最高价判断当根K线是否突破”——这根K线还没走完,最高价会不停变化,指标就会不停闪烁。

在富途牛牛和文华财经里,有些指标公式在盘中会触发重绘,K线收盘后信号又变没了。这不是软件bug,是你用了未来数据。我判断一个指标是不是有未来函数,最简单的方法就是打开“信号复盘”看它历史上每个信号出现时,后续几根K线到底怎么走。如果信号点出现在“明明还没涨”的位置,那多半是未来函数。

5.3 多周期确认比单一周期更实用

单独看日线MACD金叉,胜率不高;但如果你把周线趋势和日线MACD放在一起看,就会过滤掉很多逆大势的信号。富途牛牛支持多窗口对比,文华财经也支持多周期K线同屏。我现在的做法是:用长周期均线确定方向,短周期指标找入场点。

这不是什么高深技巧,但实际用下来,比单纯优化某套参数的收益更稳定。

6. 迁移指标最容易踩的四个坑

最后把我踩过、也见过别人踩的四个坑集中整理成排查清单,你遇到类似问题可以直接照着查。

坑一:复权方式导致均线对不上

现象:同一个股票,两边拉开一年均线图,发现某一天开始均线明显错位。原因大概率是除权除息那天的价格跳空,一个软件做了前复权,另一个没有。排查方法也很简单:在还没除权的历史段里对比数据,如果那一段能对上,问题就出在复权设置上。

解决方式:确定你更信任哪边的数据口径,然后在另一侧手动选择相同复权方式。

坑二:历史引用不存在的空值

写WH语言时,如果对前N周期取REF,但数据列表前面不足N根K线,就会得到空值。空值参与加减乘除后,整个指标可能直接变成空线。排查方法:把指标起始位置拉长,多加载一些历史数据;或者在公式里加一个判断,遇到空值直接返回0或跳过。

坑三:信号闪烁导致实盘无法执行

有些信号在盘中反复出现又消失,比如“价格上穿60日均线”这条件,在价格正好贴着均线运行时,可能一分钟内上穿下穿好几次。实盘操作时你根本没法执行。解决方案是在条件里加一个“过滤周期”,让信号至少在N根K线内保持稳定,或者加一个“首次触发”的判断,只在第一次满足条件时给出信号。

坑四:主力合约换月导致历史数据断层

期货里文华财经的连续合约是拼接出来的,主力合约切换那天,两段合约之间往往存在价差。即使你用同一个指标公式,换月附近的数值也可能出现突变。我看到有不少人拿连续合约的历史数据做优化,在换月附近的参数会被“假信号”带偏。

排查方法很简单:把指标图上显示换月标记,凡是换月附近的异常信号,单独排查一遍,不要让它参与正常样本统计。

这四个坑看着不大,但任何一个都会让你辛辛苦苦写出来的公式“看起来时灵时不灵”,最终白白怀疑公式本身。

7. 写在最后:指标是你策略的地图,不是导航

用了这么多年富途牛牛和文华财经,我越来越觉得,指标公式这件事,最重要的并不是找到“万能公式”,而是搞清楚每个公式到底在算什么、适合什么场景。

富途牛牛适合你做多市场研究、长线趋势跟踪、港美股策略验证;文华财经适合你做期货日内、信号执行类的系统化交易。两边各有各的语言习惯和数据规则,你能搬运的是思路,不能搬运的是格式。

如果你现在刚起步,我的建议是先只深入一个指标,把它在两边都跑通,再做第二个。不要一上来就攒“指标大全”,指标多的结果通常是你什么信号都信,什么信号都拿不住。先把一个指标的底层逻辑吃透,比收藏一百个公式有用的多。

最后分享一个小习惯:每次写完一个自定义指标,我都会在旁边新建一个文本笔记,把“这个指标是为了解决什么场景、参数为什么这么设、最适合什么周期”写下来。等三个月后再回看,你会发现很多当初觉得完美的公式,其实还有一堆可以优化的地方。这个习惯,比任何指标代码都值钱。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询