简介:这是一份通达信指标公式源码文档,聚焦“高春牛组合”副图与选股公式,适合股票技术分析爱好者、量化研究者及通达信用户参考借鉴。文档为doc格式,共1个文件,压缩包约425KB,内容围绕指标公式底层逻辑展开,从VOL、MA、CAR等基础计算入手,逐步拆解金牛、春笋、高精等组合条件,并给出完整的高春牛组合选股逻辑。文中详细解释了各条件语句的构成关系,如VOL与均量线比较、MA多周期排列、DEA与成本线COST(5)的配合,以及VAR系列超跌判断等,帮助读者理解复合指标的编写思路。目前已有293人学习下载,适合希望优化自身选股策略、研究组合指标构造方式的投资者。该文档并非单纯罗列代码,而是用文字逐项解析公式要点,可迁移到其他指标开发与实战筛选场景中。
1. 传说中的“高春牛组合”到底在讲什么
当一份命名为“高春牛组合副图、选股公式、成功率90无未来”的.doc文件出现在分享群里,多数人第一反应是把代码复制进通达信,跑一次历史回测。回测界面上的资金曲线确实漂亮,胜率数字也好看,看起来这就是一套可以长期复制的通用买卖点。但真正用起来,从盘中预警到盘后选股,再到实际下单,结果总差一步:要么信号在次日消失,要么选出来的股票走势与回测完全对不上。
问题通常不出在“心态不好”,而出在公式结构上。副图公式只负责画信号,选股公式要把同一套逻辑重新编译成单独的触发条件,而“成功率90%”和“无未来”这两个关键词,分别对应着完全不同的验证方法。高春牛组合作为一套副图加选股公式包,至少要拆成判断逻辑层、画线展示层、选股触发层三层来看,否则你粘贴进去的只是代码字面,不是它的真实行为。
这篇文章从通达信公式源码的落地路径入手,先说透无未来函数到底指什么,再给出副图和选股公式各自可运行的写法,最后用三个能直接执行的方法,验证一个指标声称的“成功率90%”到底能不能被复现出来。适合正在用通达信自编指标、却总被信号漂移和选股不一致困扰的人。
2. “高春牛组合”的公式结构里,哪些函数带未来数据
2.1 副图公式、选股公式、预警公式的层次划分
高春牛组合的完整形态,通常是一张副图和一张选股公式。副图负责画柱线和图标,选股公式负责在收盘后或预警系统里筛选股票。很多.doc文件会把两段代码混在一起,或者只给其中一段,然后告诉你“把代码同时粘到副图和选股里”。这句话本身就有歧义,因为通达信的公式管理器把“副图指标”和“条件选股”当成两个不同节点,编译规则不同。
副图指标允许输出多个序列,允许调用DRAWICON、STICKLINE、DRAWTEXT等绘图函数;条件选股公式却只能输出一个条件序列,值为0或1,并且不允许出现任何绘图函数。对高春牛组合来说,副图公式通常长这样:前面是均线、量能和K线形态的中间计算,后面用DRAWICON把最终信号画出来。选股公式则是删掉所有绘图行,把同样的中间变量直接放到输出位置。
再往后是预警公式。通达信的“条件预警”实际上直接引用条件选股公式,不额外建第三套公式。也就是说,副图、选股、预警三者共用一套判断逻辑,只是出口不同。理解这一层之后,再去套用.doc源码,就不会犯“副图能编译、选股却报错”的错。编译不过时也不要急着删行,先分清是错在绘图函数,还是错在输出语句的写法。
2.2 无未来函数的严格定义和常见伪装
通达信没有“未来函数”这个官方分类,但社区对此有一个共识:当前K线算出来的信号,如果引用到了未来K线才能确认的数据,那就是未来数据。最直白的例子是ZIG(3,5)。它依据价格涨跌幅度画之字转向,后面的折点必须在后续K线走出后才会被识别为顶或底;折点没确认之前,副图上标注的历史买点会随着新K线生成而移动。
BACKSET(X,N)是另一种典型。它把当前周期成立的条件回填到之前N根K线上,历史图上会提前出现一段“信号区域”,实盘中你根本等不到那根K线走完。DRAWLINE和POLYLINE同样需要留意:连线端点是动态条件时,整条线会随新K线刷新,画出来的历史信号等于事后补画。
更有迷惑性的是PEAK、TROUGH这类函数。它们本身取的是过去周期的峰谷值,不一定引用未来,但当公式以“当前价突破最近波峰”作为信号时,这个波峰需要后续K线确认是否构成真正的转折点,所以在实际操作中还是带着未来倾向。“无未来”的验证,不应只依赖函数清单。最可靠的验证工具是时间差:把今天公式选出的股票记下来,五天后重新跑一次同样公式,如果结果完全一致,它才至少在这一段窗口里做到了无未来。
2.3 从.doc提取公式,先做两步文本清洗
.doc文件里的源码受Word排版影响,最常见的问题有三个:中文逗号和中文分号混入公式、全角括号被替换进参数列表、换行符变成软回车。通达信的公式解析器对全角符号极度敏感,一个中文分号就可能让整段公式无法编译。
我一般先把.doc里的源码复制到Windows记事本,按Ctrl+H打开替换,将中文逗号,替换为英文逗号,,中文分号;替换为英文分号;,全角括号()替换为半角()。替换完成后粘贴进公式编辑器,点击“测试公式”,根据报错行号逐段定位问题。如果报错信息指向“未定义的变量”,通常是源码中某个中间变量被Word断行截断了,把换行位置调整回同一个逻辑行即可。
提示:公式类型选错也是编译报错的主因。若代码粘进“条件选股”后提示“不能包含绘图函数”,就把绘图行删除,另存为副图版本;最稳妥的做法是副图和选股各保存一个文件,互不混用。
2.4 为什么“成功率90%”不能直接等同于可实盘
高春牛组合的“90%成功率”,在.doc语境里通常指历史回测中的单笔胜率。回测胜率高并不等于实盘可用,原因至少有四类:第一,回测没有扣佣金和滑点;第二,回测没有剔除停牌日和一字板根本买不进的情况;第三,评测系统默认按信号当日收盘价成交,等于用了未来数据;第四,公式参数可能被优化到刚好拟合历史曲线,这叫过拟合,不叫预测能力。明白了这四点,再去看任何宣称“无未来、高胜率”的指标源码,都会多一层校验意识。
3. 高春牛副图公式的写法:三层条件与画线参数
3.1 副图公式最小可运行实例
通达信的副图公式结构是“中间变量计算+条件判断+绘图函数”。下面这个示例不依赖未来函数,把价格站上均线、成交量放量、前阴后阳反包三个条件组合在一起,对应高春牛常用的启动特征:
{高春牛副图演示-无未来} N1:=5; N2:=10; N3:=20; MA5:=MA(CLOSE,N1); MA10:=MA(CLOSE,N2); MA20:=MA(CLOSE,N3); VOL5:=MA(VOL,5); 放量:=VOL>VOL5*1.2; 趋势:=CLOSE>MA20 AND MA5>MA10; 反包:=CLOSE>OPEN AND REF(CLOSE,1)<REF(OPEN,1); 牛信号:=放量 AND 趋势 AND 反包; STICKLINE(牛信号,0,1,2,0),COLORRED; DRAWICON(牛信号,1,1);代码逻辑说明:MA5、MA10、MA20分别是5日、10日、20日收盘价均线,VOL5是成交量5日均线。“放量”判断当日成交量大于5日均量的1.2倍;“趋势”判断收盘价站在20日均线上方,同时5日均线在10日均线上方;“反包”判断当前K线为阳线,且前一根K线为阴线。三个条件同时成立时,牛信号为1。
参数说明:N1/N2/N3控制短、中、长周期均线。现在代码里写的是固定值,想让使用者可调,需要改成通达信标准参数声明N1:5,1,100,1;并放在代码首段。放量中的1.2是量能倍率,倍率越高信号越少,误报率也会下降。STICKLINE的四个参数分别表示条件、画线起始位置、画线结束位置、柱线宽度,最后一个0表示实心柱;DRAWICON的第三个参数1是通达信内置图标编号。
3.2 绘图函数的选择决定副图好不好读
副图不仅要表达信号,还要解决“信号密度”和“视觉误读”。高春牛副图源码里最常用的绘图函数有五个,用法差异很大。
| 函数 | 常用语法 | 用途 | 容易踩的坑 |
|---|---|---|---|
| STICKLINE | STICKLINE(条件,低价,高价,宽度,空心) | 画红绿柱 | 宽度参数范围0到7,填太大会遮住其它内容 |
| DRAWICON | DRAWICON(条件,位置,图标号) | 标记买卖点 | 图标号超出内置范围会显示空白方块 |
| DRAWTEXT | DRAWTEXT(条件,位置,'文字') | 在图上写字 | 文字必须用半角单引号包起来 |
| DRAWKLINE | DRAWKLINE(H,O,L,C) | 在副图嵌入K线 | 参数顺序必须是高开低收,写错图形完全错位 |
| DRAWLINE | DRAWLINE(条件1,点1,条件2,点2,扩展) | 画趋势线 | 条件引用动态点时,线会随行情漂移 |
高春牛组合的副图通常用STICKLINE刻画价格强度,再用DRAWICON标出“牛”信号位置。如果源码里还出现了DRAWTEXT,文字内容一般用来显示买入理由,注意通达信只支持半角单引号,中文双引号会直接编译失败。
3.3 副图不显示信号的排查顺序
如果编译通过但副图没有任何信号,按以下顺序排查。先把牛信号改为直接输出,也就是在代码末尾加一行牛信号:放量 AND 趋势 AND 反包;,再打开副图观察数值。如果全是0,说明条件从未同时成立过;如果数值忽0忽1,说明条件有值,问题出在画线函数的位置或坐标范围。
其次,检查STICKLINE的Y轴位置。将画线高度设为0和1时,副图默认坐标可以直接显示;如果把高度设成收盘价级别的数字,又没配合DRAWKLINE引用K线坐标,柱线会被画到显示范围之外。最后,看看是不是条件本身太苛刻。“放量”在缩量环境里几乎不成立,把1.2临时改成1,信号是否出现,这是副图公式调试最直接的方法。
3.4 参数怎么调才接近“成功率90%”
高春牛组合在.doc里宣称的高胜率,往往对应较少的交易次数。短线参数N1=5、N2=10、N3=20在震荡市会产生大量信号,胜率被稀释。把MA20改成MA30,会收紧趋势条件,信号数量减少,历史胜率通常随之上升;波段参数N1=10、N2=20、N3=60是许多指标默认的长周期版本。调整原则是优先固定“反包”这类K线形态条件,再单独调均线周期。K线形态条件参数越少,统计规律越稳定,而均线参数却很容易被过拟合。
4. 高春牛选股公式怎么改:删掉画线,加上过滤
4.1 副图到选股的语法差异
在通达信公式管理器里,“条件选股公式”和“副图指标公式”的核心差异在输出位置。条件选股公式不能包含绘图函数,输出只能有一个条件表达式,值为1表示入选,0表示不入选。把高春牛副图改成选股时,需要删除STICKLINE、DRAWICON等绘图行,保留中间变量和信号判断。
{高春牛选股演示-无未来} N1:=5; N2:=10; N3:=20; MA5:=MA(CLOSE,N1); MA10:=MA(CLOSE,N2); MA20:=MA(CLOSE,N3); VOL5:=MA(VOL,5); 放量:=VOL>VOL5*1.2; 趋势:=CLOSE>MA20 AND MA5>MA10; 反包:=CLOSE>OPEN AND REF(CLOSE,1)<REF(OPEN,1); 牛信号:=放量 AND 趋势 AND 反包; FILTER(牛信号,3);代码逻辑说明:这段代码与副图版的前半部分完全一致,只删掉了最后两行绘图函数,把输出从DRAWICON换成了FILTER(牛信号,3)。FILTER的作用是过滤信号:牛信号成立后,在接下来3个交易日内不再对同一只股票重复选出。这样处理以后,选股结果里同一只股票不会连续多日重复出现,便于做去重复盘。
参数说明:FILTER的第二个参数是过滤周期数,数值越大选股结果越少。若.doc原公式没有这一个过滤函数,在连续上涨行情里,同一只股票会被重复选出多次,看似选股很多,实际质量下降。过滤天数建议设为3到5之间,太小起不到过滤作用,太大容易漏掉二次启动的股票。
4.2 盘后选股比盘中预警稳定
选股公式独立运行时,应放在收盘后执行。盘中CLOSE尚未确认,反包条件里的CLOSE>OPEN可能在几分钟内从成立变成不成立,选股结果会频繁闪烁。通达信的“功能→选股器→条件选股”里有“高级”按钮,可以选择“选股入板块”,把结果保存到自建板块。建议把这个板块命名为“GCN池”,方便后续批量导出和复盘。
预警的设置路径是“功能→预警系统→条件预警设置→添加公式”。预警触发时机选择“每次计算完毕”还是“仅一次”,实际效果差异很大。像FILTER这类带状态记忆的函数,在预警系统中会提前计算过滤状态,导致盘中预警和盘后选股结果不完全一致。最稳妥的做法是盘中只看副图,不做自动选股;每天收盘后统一跑一次选股公式,再把结果放进板块。
4.3 选股公式的参数表与场景搭配
| 使用场景 | 均线周期(N1/N2/N3) | 量能倍率 | 过滤天数 | 信号频率 |
|---|---|---|---|---|
| 短线快进快出 | 5/10/20 | 1.2 | 2 | 高 |
| 波段持有 | 10/20/60 | 1.3 | 5 | 中 |
| 中线确认 | 20/60/120 | 1.5 | 8 | 低 |
短线参数在牛市行情里每天可能选出几十只股票,过滤天数设为2是为了保留连续启动信号。波段参数把均线拉长到60日,量能倍率提高到1.3,过滤5天,能把重复计数压下去。等参数用到20/60/120,均线周期变得非常钝,信号数量少到每个月只剩个位数。此时若胜率仍接近90%,统计置信度反而不足,需要配合历史信号数量一起评估,不能只盯胜率数值。
4.4 选股结果导出后如何复盘
跑完选股只是第一步。用“数据→数据导出”把选股结果导出为CSV,字段至少包含股票代码、当日收盘价、次日开盘价。复盘时只看三个指标:次日最高价是否高于当日收盘价、5日内是否触碰过MA20、5日内最大涨幅是否超过3%。这三个指标分别衡量信号有效性、止损缓冲和盈亏比。样本数量不少于30次,少于30次时,90%胜率很可能是几次行情运气叠加出来的。
5. 高春牛成功率90%是不是真的:无未来函数验证三步
5.1 第一步:源码关键词扫描
用记事本打开待粘贴的源码,做一次函数级扫描。要防的并不只是ZIG一个函数,建议直接搜索ZIG、PEAK、TROUGH、BACKSET、DRAWLINE、POLYLINE、XMA这7个关键词。其中PEAK和TROUGH虽然取的是过去周期的峰谷值,但转折点需要未来确认,实际效果仍带未来倾向;XMA是移动平均线延后显示的函数,不算传统未来函数,却会让信号的时间点被模糊掉。
DRAWLINE和POLYLINE要单独判断。如果连线端点是动态条件,画出的线会随新的K线刷新,历史信号相当于事后补画。即使这些画线不直接改变公式返回值,也会在视觉上误导你的复盘结论。
5.2 第二步:逐日快照对比,比逐行读代码更可信
在通达信中,每天收盘后记录一次选股结果,连续记录5天以上。把每天的股票代码存进以日期命名的板块,第6天回到“期货”按钮……用板块历史功能比对第1天和第6天的选股列表。如果第1天选出的股票,在第6天被移除了,说明公式的某些输入条件随行情发生了重新计算,未来函数在起作用。真无未来的公式,某一天的选股结果在后续查看时应完全不变。
这个验证方法绕开公式语法,直接观察行为,对不熟悉通达信公式语言的用户最友好。唯一要注意的是,比对前先确认数据下载完整,通达信的“盘后数据下载”没做完,历史K线缺口会直接影响选股结果。
5.3 第三步:用通达信公式评测系统重新跑成功率
通达信自带的“程序交易评测系统”路径是“功能→公式系统→程序交易评测”。评测时,买入规则选“信号出现后的下一交易日开盘”,卖出规则可以设为“收盘价跌破MA20”。这一步杜绝了“信号当日就以收盘价成交”这类隐性未来数据。
评测参数还有三个容易被忽略的地方:手续费按万2.5以上设置,滑点按0.1%计入;初始资金按实际账户额度填写;统计口径选“全部平仓交易”。重新跑出来的成功率若明显低于90%,先不要下结论说公式造假,回去检查评测周期是否覆盖了单边下跌行情,再检查.doc里的原始参数是否被公式管理器里的默认值覆盖。
5.4 信号数量与胜率的反比关系
把放量倍数从1.1逐渐调到2.0,每隔0.1记录一次成功率,通常会得到一条先升后降的曲线。真正可信的90%应该出现在中等参数区间,而不是只在小样本处出现。如果信号数量少于10次,90%没有统计意义;如果信号数量很多但仍然接近90%,还要检查评测口径是否把“买入后5日不亏损”当成了胜负标准,这种统计方式会系统性放大胜率。
6. 高春牛组合落地时最该做的仓位过滤和信号留痕
副图公式负责观察,选股公式负责筛选,但真正让“成功率90%”变成账户成绩的,是把两个工具放进一套不依赖盘感的操作流程里。
第一件事是给信号加板块标签。选股结果导入“GCN预警池”之后,把该板块加到自选股第一页,每天开盘前只看这一页,盘中不再频繁翻看其它板块。通达信允许给板块设置颜色标签,红色代表“信号当日”,蓝色代表“信号前一日”,比临时看图找信号要快得多。
第二件事是设置二次确认。高春牛组合的信号一般定义在日线级别,若想降低误报,可以切到60分钟K线确认趋势方向。通达信直接输入“60”就能切换周期,如果60分钟均线方向与日线信号朝同一个方向,再执行买入。这个做法不改变公式本身,只是把组合的使用环境变苛刻,过滤掉日线级别的高位钝化信号。
第三件事是用自选股备注记录每一笔信号的实际结果。通达信在自选股列表右键选择“修改备注”,写入买入日期和预期止损价。每周统计一次,将“买入后5日最高价与止损价之比大于1.5”的信号标记为有效。坚持八周,如果有效信号比例低于70%,说明当前参数偏离了源文档声称的胜率,应回到第4章调整量能倍率或过滤天数。
最后是信号留痕验证:打开副图公式编辑器,把最后一行DRAWICON(牛信号,1,1);里的图标号从1改成2,保存后观察历史信号位置是否发生变化。无未来函数的公式只改变图标样式,图标位置不应变动。如果图标位置随行情刷新而移动,说明公式内部引用了隐含的未来数据,这时即便成功率显示90%,也不能直接用于实盘决策。
本文还有配套的精品资源,点击获取