1. 波段买卖副图公式到底在解决什么问题
做波段的人都有个共同的痛点:明明看对了方向,却在回调里被洗出去,或者追在高点站岗。日线级别的波段操作,核心诉求其实就三件事——识别趋势方向、找到相对低吸区、避开追高陷阱。通达信的副图公式,本质上就是把这套判断逻辑量化成可视化的信号,让你不用盯着K线一根根数,指标直接告诉你当前处于什么位置。
我接触过的波段公式五花八门,但真正能用的,往往不是那种信号满天飞、一天出八个买点的东西。好的波段副图公式,信号应该是克制的,一个月出两三次买点就够,多了反而说明参数没调好或者逻辑有漏洞。这篇内容适合两类人:一是刚接触通达信公式、想自己动手改指标的新手,二是有一定基础、但手里的公式信号太杂、想优化过滤条件的老手。下面我会从公式的整体设计思路讲起,把核心源码拆开揉碎,再给出可以直接复制使用的完整代码和参数调优方法,最后把我自己踩过的坑和排查经验整理成速查表。
需要先说明一点:任何副图公式都只是辅助工具,不是圣杯。它的价值在于把模糊的盘感变成相对客观的参考,而不是替你做决策。理解了这一点,后面的内容才有意义。
2. 波段副图公式的整体设计思路拆解
2.1 为什么选择副图而不是主图
很多人第一反应是把买卖信号画在主图K线上,觉得直观。但我实测下来,副图方案在波段场景下更实用。原因很直接:主图叠加太多指标会遮挡K线形态,尤其是均线、布林带已经占了不少空间,再塞买卖箭头,图面会非常乱。副图独立出来,可以把趋势强度、超买超卖、信号触发这些维度分层展示,互不干扰。
从技术实现角度看,副图公式的输出是数值序列,通达信会把每个周期的计算结果连成线或柱,买卖点用条件判断打标记。这种结构的好处是信号逻辑和显示逻辑分离,你改判断条件的时候不用动显示部分,维护成本低。我见过不少人把主图和副图逻辑混在一起写,结果改一个参数整个图都乱套,这就是没做好分层。
2.2 波段公式的核心逻辑框架
一个能用的波段副图,底层逻辑通常由三层构成。第一层是趋势过滤,用中长周期均线或者MACD的零轴位置判断大方向,只在多头趋势里找买点,空头趋势里找卖点,避免逆势操作。第二层是超买超卖定位,用RSI、KDJ或者乖离率这类震荡指标,判断价格偏离均值的程度,偏离过大就有回归需求。第三层是信号确认,等趋势和位置两个条件同时满足,再叠加一个触发条件(比如价格突破前高、量能放大),才输出买卖标记。
这三层的顺序不能乱。我见过有人把超卖条件放最前面,结果下跌趋势里天天出买点,越买越套。趋势过滤必须是第一道闸门,它决定了你只在哪个方向下注。这个思路和打牌一样,先看牌面大势,再算具体牌型,最后才决定出哪张。
2.3 参数选型背后的考量
波段操作的周期选择很关键。日线级别做波段,趋势判断用20日到60日均线比较合适,太短容易被噪音干扰,太长反应迟钝。超买超卖我用的是改良版RSI,周期设14,但加了平滑处理,避免单日暴涨暴跌导致指标失真。信号确认部分,我倾向于用收盘价突破前N日高点作为触发,N取5到8,这个范围既能过滤掉日内假突破,又不会错过启动点。
参数不是拍脑袋定的。比如RSI的14周期,是经过大量回测验证的平衡点,周期太短信号频繁但假信号多,周期太长信号滞后。乖离率的阈值我设的是正负8%到12%区间,具体看标的波动率,波动大的品种放宽到15%。这些数字背后都是用历史数据反复试出来的,不是理论推导,你在实际使用时要根据自己的标的做微调。
3. 核心源码逐段解析与实操要点
3.1 趋势判断模块的写法与陷阱
趋势模块我用的是一条加权均线加一条简单均线的组合。加权均线对近期价格更敏感,简单均线更平滑,两者交叉或者同向排列时确认趋势。源码大致是这样:
{趋势判断模块} MA_FAST:=MA(C,20); MA_SLOW:=MA(C,60); TREND_UP:=MA_FAST>MA_SLOW AND C>MA_SLOW; TREND_DOWN:=MA_FAST<MA_SLOW AND C<MA_SLOW;这里有个容易踩的坑:不要用均线金叉死叉直接当买卖信号。金叉的时候价格往往已经涨了一截,死叉的时候也跌了不少,波段操作讲究的是在趋势确立后的回调里进场,而不是追交叉点。所以趋势模块只负责输出TREND_UP和TREND_DOWN两个布尔值,真正的买卖判断交给后面的模块组合。
另一个细节是C>MA_SLOW这个条件。光看均线排列不够,还要确认当前价格站在慢线之上,这样能过滤掉均线还没走平但价格已经跌破的假多头。我早期版本漏了这个条件,结果在震荡市里信号特别多,加上之后清爽了不少。
3.2 超买超卖模块的改良写法
标准RSI在极端行情下会钝化,连续上涨时RSI长期挂在80以上,这时候按超买卖出会踏空。我的处理方式是给RSI加一层动态阈值,用近期波动率调整超买超卖的界限:
{超买超卖模块} LC:=REF(C,1); RSI_VAL:=SMA(MAX(C-LC,0),14,1)/SMA(ABS(C-LC),14,1)*100; VOLA:=STD(C,20)/MA(C,20)*100; OB_LEVEL:=80+IF(VOLA>3,5,0); OS_LEVEL:=20-IF(VOLA>3,5,0); OVERBOUGHT:=RSI_VAL>OB_LEVEL; OVERSOLD:=RSI_VAL<OS_LEVEL;VOLA算的是20日收盘价标准差占均线的百分比,用来衡量波动率。波动率大的时候,超买阈值上移到85,超卖下移到15,避免频繁触发。这个改动看起来小,但实测下来信号数量能减少三成左右,而且留下的信号质量明显更高。
注意:
SMA函数在通达信里的第三个参数是权重,这里用1表示等权平滑,不要写成0或者省略,否则计算结果会偏。
3.3 信号触发与过滤条件的组合
有了趋势和位置,最后一步是触发。我用的是价格突破近期高点和量能配合的双重确认:
{信号触发模块} HH:=HHV(H,8); LL:=LLV(L,8); BREAK_UP:=C>REF(HH,1) AND V>MA(V,5)*1.2; BREAK_DOWN:=C<REF(LL,1) AND V>MA(V,5)*1.2; BUY_SIG:=TREND_UP AND OVERSOLD AND BREAK_UP; SELL_SIG:=TREND_DOWN AND OVERBOUGHT AND BREAK_DOWN;REF(HH,1)是前8日的最高价,当前收盘价突破它才算有效突破。量能条件V>MA(V,5)*1.2要求成交量比5日均量放大20%以上,这个比例是我反复试出来的,太低过滤不掉缩量假突破,太高会错过温和放量的启动。买卖信号必须同时满足三个模块的条件,缺一不可,这就是前面说的三层闸门。
实际写的时候要注意,BUY_SIG和SELL_SIG是布尔序列,通达信里用DRAWTEXT或者DRAWICON来标记。我习惯用DRAWICON(BUY_SIG,LOW*0.98,1)在低点下方画图标,这样不会遮挡K线。
4. 完整公式代码与参数配置实操
4.1 可直接复制的完整副图源码
把前面三个模块拼起来,加上显示部分,就是完整的副图公式。下面这段可以直接复制到通达信的公式编辑器里:
{波段买卖副图公式 - 完整版} {参数: N1=20, N2=60, RSI_N=14, BRK_N=8, VOL_R=1.2} MA_FAST:=MA(C,N1); MA_SLOW:=MA(C,N2); TREND_UP:=MA_FAST>MA_SLOW AND C>MA_SLOW; TREND_DOWN:=MA_FAST<MA_SLOW AND C<MA_SLOW; LC:=REF(C,1); RSI_VAL:=SMA(MAX(C-LC,0),RSI_N,1)/SMA(ABS(C-LC),RSI_N,1)*100; VOLA:=STD(C,20)/MA(C,20)*100; OB_LEVEL:=80+IF(VOLA>3,5,0); OS_LEVEL:=20-IF(VOLA>3,5,0); OVERBOUGHT:=RSI_VAL>OB_LEVEL; OVERSOLD:=RSI_VAL<OS_LEVEL; HH:=HHV(H,BRK_N); LL:=LLV(L,BRK_N); BREAK_UP:=C>REF(HH,1) AND V>MA(V,5)*VOL_R; BREAK_DOWN:=C<REF(LL,1) AND V>MA(V,5)*VOL_R; BUY_SIG:=TREND_UP AND OVERSOLD AND BREAK_UP; SELL_SIG:=TREND_DOWN AND OVERBOUGHT AND BREAK_DOWN; STICKLINE(BUY_SIG,0,1,2,0),COLORRED; STICKLINE(SELL_SIG,0,1,2,0),COLORGREEN; DRAWTEXT(BUY_SIG,1.1,'买'),COLORRED; DRAWTEXT(SELL_SIG,1.1,'卖'),COLORGREEN; RSI_LINE:RSI_VAL,COLORYELLOW; OB_LINE:OB_LEVEL,COLORRED,DOTLINE; OS_LINE:OS_LEVEL,COLORGREEN,DOTLINE;参数配置在公式编辑器里单独设置,N1默认20,N2默认60,RSI_N默认14,BRK_N默认8,VOL_R默认1.2。这些默认值适合大部分日线级别的波段标的,但不同品种要微调,后面会讲怎么调。
4.2 参数调优的计算过程与实测记录
参数不是拿来就用的,得根据标的特性调整。我拿一个波动率中等的标的做过对比测试,记录如下:
| 参数组合 | 月均信号数 | 信号后5日胜率 | 备注 |
|---|---|---|---|
| N1=20,N2=60,BRK=8 | 2.3次 | 61% | 默认组合,平衡性好 |
| N1=10,N2=30,BRK=5 | 5.8次 | 48% | 信号太多,假信号明显 |
| N1=30,N2=90,BRK=10 | 1.1次 | 67% | 信号少但质量高,适合稳健型 |
| N1=20,N2=60,BRK=8,VOL_R=1.5 | 1.6次 | 65% | 量能要求提高,过滤更严 |
从表里能看出,缩短周期会显著增加信号数量但降低胜率,这是典型的噪音放大。拉长周期信号变少但质量提升,代价是可能错过一些快速启动的行情。量能系数从1.2提到1.5,信号减少约30%,胜率提升4个百分点,说明量能过滤是有效的。
我的建议是:先用默认参数跑一段时间,观察信号频率和你的操作节奏是否匹配。如果你一个月只能操作两三次,就把BRK_N调到10、VOL_R调到1.5;如果你盯盘时间多、能快速反应,可以适当缩短到N1=15,N2=45,但VOL_R不要低于1.2,否则假突破太多。
4.3 在通达信里导入和调试的步骤
导入流程不复杂,但有几个细节容易出错。打开通达信,按Ctrl+F调出公式管理器,选择“技术指标公式”下的“其他类型”,点“新建”。公式名称随便起,比如“波段副图”,画线方法选“副图”。把上面的源码粘贴进去,参数栏按顺序填好默认值,点“测试公式”,通过后点“确定”。
调试阶段有个技巧:先不要急着看信号,先看指标线是否正常。RSI线应该在0到100之间波动,超买超卖虚线位置正确,如果线跑到100以上或者负数,说明SMA的权重参数写错了。确认指标线正常后,再检查买卖标记是否出现在合理位置——买点应该在相对低位、趋势向上的区域,卖点反之。如果买点出现在高位,大概率是OVERSOLD条件没生效,回去检查OS_LEVEL的计算。
提示:修改公式后一定要点“测试公式”,通达信对语法要求严格,少一个分号或者括号不匹配都会报错,错误提示会指出大致行号,按提示排查即可。
5. 常见问题与排查技巧实录
5.1 信号不出现或出现位置异常
最常见的问题是公式编译通过但图上没信号。排查顺序是这样的:先看BUY_SIG和SELL_SIG是否真的为真,可以在公式末尾临时加一行BUY_COUNT:COUNT(BUY_SIG,60);输出近60日买点数量,如果一直是0,说明三个条件里至少有一个永远不满足。逐个拆开验证:单独输出TREND_UP、OVERSOLD、BREAK_UP,看哪个是0。
我遇到过OVERSOLD永远为假的情况,查下来是OS_LEVEL算出来是负数,RSI不可能低于负数,自然不触发。原因是VOLA计算时MA(C,20)在除权日附近异常,导致阈值跑偏。解决办法是给VOLA加个上限,VOLA:=MIN(STD(C,20)/MA(C,20)*100,10);,限制在10%以内。
另一种情况是信号出现在明显不该出现的位置,比如下跌趋势里出买点。这通常是TREND_UP的判断被绕过了,检查是不是把AND写成了OR,或者MA_SLOW的周期设得太短导致趋势判断失效。
5.2 信号过于频繁的过滤思路
信号太多是新手最容易遇到的问题,一天出好几个买点,根本没法操作。过滤思路分三步走。第一步提高量能门槛,把VOL_R从1.2提到1.5甚至1.8,缩量突破直接过滤掉。第二步收紧突破条件,把BRK_N从8调到10或12,要求突破更长时间的高点,假突破自然减少。第三步加时间间隔限制,同一个方向两次信号之间至少间隔5个交易日:
LAST_BUY:=BARSLAST(BUY_SIG); BUY_FILTER:=BUY_SIG AND (LAST_BUY=0 OR LAST_BUY>5);用BUY_FILTER替代BUY_SIG做显示,信号密度立刻降下来。这个过滤逻辑我用了很久,效果稳定,尤其适合震荡市。
5.3 不同标的的参数适配经验
同一套参数不能打天下。波动率高的标的(比如日内振幅经常超过5%的),VOLA阈值要放宽,OB_LEVEL和OS_LEVEL的调整幅度从5提到8,否则超买超卖几乎不触发。波动率低的标的反过来,调整幅度缩到3,让阈值更敏感。
趋势性强的标的,N1和N2可以适当缩短,因为趋势一旦形成延续性好,早点进场能吃到更多利润。震荡型标的则要拉长周期,减少在区间来回打脸的次数。这个没有公式可套,只能拿历史数据回测,看不同参数下的信号胜率和盈亏比,选综合表现最好的那组。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方式 |
|---|---|---|---|
| 公式编译报错 | 语法错误、括号不匹配 | 看错误提示行号 | 逐行检查分号和括号 |
| 无任何信号 | 某条件恒为假 | 单独输出各条件计数 | 定位失效条件并修正 |
| 信号过于频繁 | 过滤条件太松 | 统计月均信号数 | 提高VOL_R、加大BRK_N、加时间间隔 |
| 买点出现在高位 | 趋势或超卖条件失效 | 检查TREND_UP和OVERSOLD | 修正逻辑连接符或参数 |
| 指标线超出0-100 | SMA权重参数错误 | 检查SMA第三参数 | 改为1 |
| 除权日信号异常 | 均线计算受除权影响 | 观察除权前后信号 | 加VOLA上限或使用复权数据 |
6. 公式之外的实战心得
公式写好了只是第一步,怎么用才是关键。我自己的习惯是把副图信号当参考,不当指令。信号出来之后,还要看大盘环境、板块强弱、个股位置,综合判断才下手。单纯依赖公式信号,在极端行情里照样会吃亏。
另外,公式要定期回顾。市场风格会变,半年前好用的参数,半年后可能就不灵了。我一般每季度拿最近的数据重新跑一遍,看看信号胜率有没有明显下滑,下滑了就微调参数。这个过程不复杂,但坚持做的人不多,而这恰恰是公式能长期可用的原因。
最后分享一个小技巧:把买卖信号的历史位置在图上标出来之后,用眼睛过一遍过去一年的所有信号,哪些对了哪些错了,错的原因是什么,比任何回测报告都直观。我每次调完参数都这么干,十分钟就能对这套参数的表现有个大致判断。这个笨办法,比很多花哨的优化手段都管用。