简介:这是一份面向通达信用户的副图指标公式源码文档,适合具备一定技术分析基础、希望跟踪主力资金动向的投资者研究使用。指标由资金能量、主力资金、金线、银线、爆发线、起步线、抄底线等组件构成,通过价格与成交量加权、EMA平滑及多周期均线交叉,输出加仓、爆发、空仓、半仓等信号提示,可用于研判资金集散与趋势拐点。资源包共1个文件,为doc格式文档,大小约320KB,内含完整公式源码,便于直接导入通达信或按个人需求修改参数。目前已有497人学习下载。读者可据此理解各条线的计算逻辑与信号触发条件,掌握主力资金强度量化、金银线交叉判断及买卖点识别思路,并结合自身策略进行定制优化。
1. 资金涌动金钻副图指标到底在算什么
很多人第一次看到“资金涌动金钻副图指标 准确率90% 无未来通达信指标公式源码”这类标题,第一反应是去找一份能直接导入的公式文件。但真正决定这个指标能不能用的,不是名字里的“金钻”或“90%”,而是它背后那套资金流计算逻辑是否自洽、是否引用了未来数据。副图指标和主图指标最大的区别在于,副图通常只做信号提示,不参与K线绘制,所以它更容易被写成“事后看起来很美”的形态——收盘后信号全对,盘中却反复漂移。
这个指标的核心思路,一般是用成交量加权价格的变化来估算当日资金净流入方向,再叠加均线平滑和阈值判断,形成“资金涌动”的柱状或线状信号。所谓“无未来”,指的是公式里不能出现REFX、ZIG、PEAK这类会引用未来K线或做未来函数拟合的函数。通达信里很多标榜高准确率的指标,问题就出在用了ZIG做转折点,回测时信号完美,实盘时最后一根K线信号会消失。所以拿到任何一份源码,第一件事不是看它准不准,而是搜一遍有没有未来函数。
适合读这篇的人,是手里已经有通达信、想自己改公式或者判断一份源码能不能用的从业者。下面从资金流公式的构造原理讲起,再到通达信公式管理器的实际录入、参数调整、信号验证,最后落到怎么把“准确率90%”这种话翻译成可检验的统计口径。
2. 通达信资金流副图公式的构造与无未来函数判断
2.1 资金涌动类指标常用的三个计算模块
绝大多数资金流副图指标,拆开看就是三块:基础资金流估算、平滑处理、信号触发。基础资金流最常见的是用(CLOSE-REF(CLOSE,1))/REF(CLOSE,1)*VOL做价格变化乘以成交量,再按正负分拆成流入流出。也有用AMOUNT直接算成交额的,但成交额受高价股影响大,一般会做归一化。
平滑处理通常用EMA或SMA,周期取 3、5、13 这类短周期,目的是让资金流曲线不至于太毛刺。信号触发则是设定一个阈值,比如资金流上穿0轴、或者快慢线金叉,就在副图画柱或图标。通达信里画柱用STICKLINE,画图标用DRAWICON,这两个函数在副图里很常用。
{资金涌动副图基础框架,无未来函数} VOLUME:=VOL; PRICE_CHG:=(CLOSE-REF(CLOSE,1))/REF(CLOSE,1); RAW_FLOW:=PRICE_CHG*VOLUME; {原始资金流,正为流入,负为流出} FLOW_EMA3:=EMA(RAW_FLOW,3); {3周期平滑,短灵敏} FLOW_EMA13:=EMA(RAW_FLOW,13); {13周期平滑,看趋势} SIGNAL:=CROSS(FLOW_EMA3,FLOW_EMA13); {快线上穿慢线作为涌动信号} STICKLINE(RAW_FLOW>0,0,RAW_FLOW,2,0),COLORRED; STICKLINE(RAW_FLOW<0,0,RAW_FLOW,2,0),COLORGREEN; DRAWICON(SIGNAL,FLOW_EMA3,1); {信号位置画图标}这段代码里RAW_FLOW是核心,PRICE_CHG用REF(CLOSE,1)只引用前一根K线,属于正常回溯,不是未来函数。EMA是通达信内置指数移动平均,计算时只用到当前及历史数据。CROSS判断上穿,同样不涉及未来。STICKLINE的五个参数分别是条件、起点、终点、宽度、是否空心,这里用 2 号实心柱。DRAWICON的第三个参数 1 是通达信内置图标编号,具体图标样式可以在公式管理器里预览。
2.2 怎么快速判断一份源码有没有未来函数
拿到一份标着“无未来”的源码,不要信标题,直接搜关键词。通达信公式编辑器里按 Ctrl+F,依次搜REFX、ZIG、PEAK、TROUGH、BARSLAST配合REF的异常用法。REFX是引用未来第 N 根K线,ZIG是之字转向,这两个只要出现,基本可以判定有未来函数。PEAK和TROUGH是未来函数家族里的峰值谷值,同样不能用。
还有一个隐蔽的坑:有些公式用BACKSET函数。BACKSET(X,N)的作用是当 X 成立时,把前 N 根K线的条件也设为成立。这个函数在通达信里属于未来函数,因为它会修改历史K线的显示状态。搜到BACKSET就要警惕。
| 函数名 | 是否未来函数 | 典型用途 | 处理建议 |
|---|---|---|---|
| REFX | 是 | 引用未来K线 | 直接删除或替换为REF |
| ZIG | 是 | 之字转向画线 | 不可用于实盘信号 |
| PEAK/TROUGH | 是 | 峰值谷值定位 | 回测好看,实盘失效 |
| BACKSET | 是 | 回溯设置条件 | 替换为普通条件判断 |
| REF | 否 | 引用历史K线 | 正常使用 |
| EMA/SMA | 否 | 平滑计算 | 正常使用 |
判断完之后,还要做一步验证:把公式加载到副图,然后切换到“训练模式”或者用键盘方向键逐根K线回放。如果最后一根K线的信号在回放过程中反复出现又消失,说明有未来函数残留。真正无未来的公式,逐根回放时信号一旦出现就不会再变。
2.3 在通达信公式管理器里录入和调试的完整步骤
通达信公式管理器入口是 Ctrl+F,打开后选“技术指标公式”下的“其他类型”,点“新建”。公式名称填“资金涌动副图”,画线方法选“副图”,然后粘贴代码。这里有个细节:如果代码里用了DRAWICON,要确保图标编号在通达信里存在,否则公式会报错但不提示具体位置。
录入后点“测试公式”,如果提示“编译成功”,再点“确定”保存。回到K线图,在副图区域右键,选择“选择指标”,找到刚建的“资金涌动副图”。如果副图没显示,检查两点:一是公式有没有输出线,二是画线方法是不是选成了“主图叠加”。
调试阶段建议把FLOW_EMA3和FLOW_EMA13都输出成线,观察交叉点是否和价格转折有对应关系。如果发现信号太密集,把EMA周期从 3 和 13 改成 5 和 21,或者加一个FILTER函数过滤重复信号。FILTER(SIGNAL,5)表示信号出现后5根K线内不再重复触发。
3. 资金涌动副图指标的参数调优与信号验证
3.1 三个必调参数:平滑周期、阈值、过滤窗口
资金涌动类副图指标的可调参数不多,但每一个都直接影响信号频率和准确率。第一个是快慢线平滑周期。默认 3 和 13 偏灵敏,适合短线;改成 5 和 21 后信号减少,但单次信号的有效性会提高。第二个是阈值,如果公式里用RAW_FLOW>阈值做触发,阈值设 0 就是所有流入都算信号,设成MA(ABS(RAW_FLOW),20)的某个倍数就能过滤小单。
第三个是过滤窗口。FILTER函数的第二个参数就是窗口大小,设 3 到 5 比较常见。设太大比如 10,会漏掉连续信号;设太小比如 1,等于没过滤。我一般会先用 5 跑一遍,看信号数量是否落在可接受范围。
{参数调优版本,加入阈值和过滤} VOLUME:=VOL; PRICE_CHG:=(CLOSE-REF(CLOSE,1))/REF(CLOSE,1); RAW_FLOW:=PRICE_CHG*VOLUME; FLOW_FAST:=EMA(RAW_FLOW,5); {快线周期改为5} FLOW_SLOW:=EMA(RAW_FLOW,21); {慢线周期改为21} THRESHOLD:=MA(ABS(RAW_FLOW),20)*0.5; {动态阈值,取20日均绝对值的0.5倍} CROSS_SIGNAL:=CROSS(FLOW_FAST,FLOW_SLOW) AND ABS(RAW_FLOW)>THRESHOLD; FINAL_SIGNAL:=FILTER(CROSS_SIGNAL,5); {5根K线内不重复} STICKLINE(RAW_FLOW>0,0,RAW_FLOW,2,0),COLORRED; STICKLINE(RAW_FLOW<0,0,RAW_FLOW,2,0),COLORGREEN; DRAWICON(FINAL_SIGNAL,FLOW_FAST,1);这里THRESHOLD用了MA(ABS(RAW_FLOW),20)*0.5,意思是只有当资金流绝对值超过近20日平均波动的一半时,才认为是有意义的涌动。FILTER的 5 是过滤窗口,可以根据标的波动率调整。DRAWICON只画在FINAL_SIGNAL为真的位置,避免图标堆叠。
3.2 用通达信条件选股验证信号的历史表现
副图指标看完之后,下一步是把它转成条件选股公式,跑一遍历史信号统计。在公式管理器里新建一个“条件选股公式”,把副图里的FINAL_SIGNAL作为唯一输出条件。注意条件选股公式只能有一个输出,所以要把画线部分全部删掉。
{条件选股版本,只输出信号} VOLUME:=VOL; PRICE_CHG:=(CLOSE-REF(CLOSE,1))/REF(CLOSE,1); RAW_FLOW:=PRICE_CHG*VOLUME; FLOW_FAST:=EMA(RAW_FLOW,5); FLOW_SLOW:=EMA(RAW_FLOW,21); THRESHOLD:=MA(ABS(RAW_FLOW),20)*0.5; CROSS_SIGNAL:=CROSS(FLOW_FAST,FLOW_SLOW) AND ABS(RAW_FLOW)>THRESHOLD; FINAL_SIGNAL:FILTER(CROSS_SIGNAL,5);保存后,在通达信“条件选股”界面选择这个公式,选一个时间段,比如最近一年,执行选股。选出来的股票列表就是历史上出现过信号的标的。然后手动或者用通达信的“区间统计”功能,看信号出现后 1 日、3 日、5 日的涨跌分布。如果标题说“准确率90%”,你要明确它指的是信号后上涨的概率,还是信号后跑赢大盘的概率,这两个口径差别很大。
| 统计口径 | 定义 | 常见数值范围 | 注意事项 |
|---|---|---|---|
| 信号后1日上涨概率 | 次日收盘价高于信号日收盘价 | 45%-60% | 受大盘影响大 |
| 信号后5日上涨概率 | 5日后收盘价高于信号日 | 50%-65% | 需剔除停牌 |
| 信号后跑赢大盘概率 | 同期涨幅超过指数 | 40%-55% | 更接近真实alpha |
| 信号后最大回撤 | 信号后最低价相对信号日 | 负5%到负15% | 决定止损设置 |
跑完统计你会发现,任何单一副图指标都很难稳定到 90%。如果一份源码宣称 90%,要么是统计口径做了手脚,要么是样本区间特殊。更务实的做法是把这个副图信号当过滤器,而不是当唯一买卖依据。
3.3 副图信号和主图均线、MACD 的共振用法
单独看资金涌动副图,信号会偏多。我一般会加两层共振条件:第一层是主图价格在 20 日均线之上,第二层是 MACD 的 DIF 大于 DEA 或者绿柱缩短。这样过滤后信号数量会下降一半以上,但质量明显提升。
在通达信里实现共振,不需要改副图公式,而是用“条件选股”里的组合条件。先选资金涌动信号,再叠加CLOSE>MA(CLOSE,20)和MACD.DIF>MACD.DEA。通达信的条件选股支持多个公式同时选,取交集。如果你想把共振条件写进副图,也可以在FINAL_SIGNAL后面加AND CLOSE>MA(CLOSE,20),但这样副图就依赖主图数据,公式可读性会变差。
提示:共振条件越多,信号越少,但不要为了追求高准确率无限叠加条件。一般两到三个独立维度的共振就够了,超过三个容易过拟合。
4. 把“准确率90%”翻译成可检验的统计口径
4.1 用通达信导出信号数据到外部做统计
通达信本身的条件选股结果可以导出为 TXT 或 CSV。在选股结果界面右键,选择“导出数据”,格式选 CSV。导出的文件里一般有代码、名称、信号日期。拿到这个文件后,用 Python 做进一步统计会更灵活。
import pandas as pd import akshare as ak # 读取通达信导出的信号列表 signals = pd.read_csv('signals.csv', encoding='gbk') signals.columns = ['code', 'name', 'date'] signals['date'] = pd.to_datetime(signals['date']) results = [] for _, row in signals.iterrows(): code = row['code'] sig_date = row['date'] # 用akshare获取该股票日线数据 df = ak.stock_zh_a_hist(symbol=code, period="daily", start_date=(sig_date - pd.Timedelta(days=10)).strftime('%Y%m%d'), end_date=(sig_date + pd.Timedelta(days=10)).strftime('%Y%m%d')) df['日期'] = pd.to_datetime(df['日期']) df = df.set_index('日期') if sig_date not in df.index: continue sig_close = df.loc[sig_date, '收盘'] # 计算信号后1日、3日、5日收益 for n in [1, 3, 5]: future = df.index[df.index > sig_date] if len(future) >= n: ret = (df.loc[future[n-1], '收盘'] - sig_close) / sig_close results.append({'code': code, 'signal_date': sig_date, 'horizon': n, 'return': ret}) res_df = pd.DataFrame(results) print(res_df.groupby('horizon')['return'].describe()) print("上涨概率:") print(res_df.groupby('horizon')['return'].apply(lambda x: (x > 0).mean()))这段代码用akshare拉取个股日线,计算信号后 1、3、5 日的收益率分布。groupby('horizon')按持有周期分组,describe()给出均值、标准差、分位数,(x>0).mean()给出上涨概率。注意akshare的接口需要联网,且股票代码格式要和通达信导出一致,通常带市场前缀,比如sh600000或sz000001,如果导出的只有 6 位数字,需要在代码里补前缀。
4.2 区分“信号准确率”和“交易系统胜率”
很多人把信号准确率和交易系统胜率混为一谈。信号准确率只统计信号出现后价格是否上涨,不涉及买入时机、仓位、止损。交易系统胜率则要考虑你是在信号当天收盘买,还是次日开盘买,止损设多少,止盈设多少。同一个信号,不同的买卖规则,胜率可以差 20 个百分点。
我一般会做两个版本的统计:一个是信号日收盘买入、次日收盘卖出,这是最理想的执行;另一个是信号次日开盘买入、跌破信号日最低价止损。后者的胜率通常比前者低,但更接近实盘。如果标题里的“90%”是前者,那它没有考虑滑点和执行延迟,参考价值有限。
注意:用外部数据做统计时,要确认复权方式。通达信默认是不复权,akshare 默认是前复权,两者在除权除息日附近会有价格差异,导致收益率计算偏差。建议统一用前复权数据。
4.3 参数过拟合的识别:样本内和样本外表现差异
资金涌动副图指标的可调参数虽然不多,但平滑周期、阈值倍数、过滤窗口组合起来也有几十种。如果在一段历史数据上反复调参,直到准确率看起来很高,这就是过拟合。识别方法是把数据分成两段:前 70% 做样本内调参,后 30% 做样本外验证。如果样本外准确率比样本内低 15 个百分点以上,说明参数过拟合了。
具体操作上,可以在 Python 里把信号数据按日期排序,前 70% 的信号算一组,后 30% 算另一组,分别统计上涨概率。如果两组差异很大,就回到通达信里把参数往保守方向调,比如把快线周期从 3 改成 5,把阈值倍数从 0.5 改成 0.8。保守参数通常样本外表现更稳。
5. 副图指标源码的二次修改与实盘接入技巧
5.1 把副图信号改成预警公式并接入通达信预警系统
副图指标只能看,不能主动提醒。实盘里更实用的是把它改成预警公式。在公式管理器里新建“条件预警公式”,把FINAL_SIGNAL作为输出,然后到通达信的“预警设置”里添加这个公式,设置监控的股票池和预警周期。预警周期建议选“日线”,如果做短线可以选“60分钟”。
预警公式和选股公式的区别在于,预警是盘中实时计算的,所以公式里不能有REF引用当天收盘价之后的数据。上面那个FINAL_SIGNAL只用到CLOSE、VOL和REF(CLOSE,1),盘中计算时CLOSE是当前价,VOL是当前成交量,逻辑上没问题。但要注意,盘中成交量是不完整的,信号可能在尾盘才稳定。
{预警公式,盘中实时计算} VOLUME:=VOL; PRICE_CHG:=(CLOSE-REF(CLOSE,1))/REF(CLOSE,1); RAW_FLOW:=PRICE_CHG*VOLUME; FLOW_FAST:=EMA(RAW_FLOW,5); FLOW_SLOW:=EMA(RAW_FLOW,21); THRESHOLD:=MA(ABS(RAW_FLOW),20)*0.5; CROSS_SIGNAL:=CROSS(FLOW_FAST,FLOW_SLOW) AND ABS(RAW_FLOW)>THRESHOLD; FINAL_SIGNAL:FILTER(CROSS_SIGNAL,5);接入预警后,通达信会在信号触发时弹窗或声音提示。如果同时监控的股票多,建议把预警周期改成 60 分钟,减少盘中频繁触发。另外,预警公式里的FILTER窗口在盘中可能会因为成交量变化而反复,所以实盘里我一般会把FILTER去掉,改成人工确认。
5.2 用 DRAWICON 和 STICKLINE 优化副图可读性
副图指标的可读性直接影响使用效率。通达信的DRAWICON支持很多内置图标,但默认图标比较小,可以配合STICKLINE在信号位置画一根醒目的柱子。比如在FINAL_SIGNAL为真时,在 0 轴附近画一根黄色柱子,比单纯画图标更容易看到。
{可读性优化版本} VOLUME:=VOL; PRICE_CHG:=(CLOSE-REF(CLOSE,1))/REF(CLOSE,1); RAW_FLOW:=PRICE_CHG*VOLUME; FLOW_FAST:=EMA(RAW_FLOW,5); FLOW_SLOW:=EMA(RAW_FLOW,21); THRESHOLD:=MA(ABS(RAW_FLOW),20)*0.5; CROSS_SIGNAL:=CROSS(FLOW_FAST,FLOW_SLOW) AND ABS(RAW_FLOW)>THRESHOLD; FINAL_SIGNAL:=FILTER(CROSS_SIGNAL,5); STICKLINE(RAW_FLOW>0,0,RAW_FLOW,2,0),COLORRED; STICKLINE(RAW_FLOW<0,0,RAW_FLOW,2,0),COLORGREEN; STICKLINE(FINAL_SIGNAL,0,FLOW_FAST,3,0),COLORYELLOW; {信号位置画黄色粗柱} DRAWICON(FINAL_SIGNAL,FLOW_FAST*1.1,1); {图标画在快线上方}这里STICKLINE(FINAL_SIGNAL,0,FLOW_FAST,3,0)的第三个参数 3 是柱子宽度,比资金流柱的 2 更宽,视觉上更突出。DRAWICON的第二个参数FLOW_FAST*1.1是把图标画在快线上方 10% 的位置,避免和柱子重叠。这些细节不影响信号逻辑,但实盘看盘时能省不少眼力。
5.3 源码文件格式转换:tn6 转 txt 的常见做法
通达信的公式文件有两种常见格式:.tn6和.txt。.tn6是加密或打包后的格式,不能直接用文本编辑器打开。如果你拿到的是.tn6文件,想改成.txt导入,常见做法是在通达信公式管理器里先导入.tn6,然后在公式列表里选中它,点“导出”,选择导出为.txt格式。导出的.txt就是明文公式源码,可以直接编辑。
如果导入.tn6时提示格式不兼容,检查通达信版本。不同版本的公式管理器对.tn6的支持有差异,较老的版本可能只认.tne或.exp。这种情况下,可以尝试在公式管理器里用“导入公式”功能,选择文件类型为“所有文件”,再手动选.tn6。导入成功后,公式会出现在“其他类型”里,再导出为.txt即可。
提示:导出为 txt 后,公式里的中文注释可能会乱码,用 Notepad++ 打开时把编码切成 GBK 就能正常显示。如果公式里用了自定义变量名,导出后变量名会保留,但函数名可能会被转成小写,导入前检查一遍
EMA、CROSS这些函数名是否被改成了小写,通达信对函数名大小写不敏感,但部分第三方编辑器会报错。
本文还有配套的精品资源,点击获取