简介:通达信猎庄狙击主图指标公式源码为一份doc格式的教程文档,适合有一定基础的股票技术分析爱好者、通达信软件用户,用于学习主图指标公式编写与猎庄思路。文档围绕完整源码逐项拆解,重点介绍了MA、RSI、EMA、DRAWTEXT、吸筹、庄家吸筹、散户、RSV及KD指标的计算方法,并结合VAR1-VAR8等变量解释公式底层逻辑,能帮助读者理解每个赋值语句的作用及信号画法,进而掌握在主图中标注买卖点、绘制度量柱和强弱线的技巧。资源包为1个doc文件,大小241KB,内容精炼、结构清晰,已有1424人学习下载。通过这份文档,既可快速读懂“猎庄狙击”指标的设计思路,也可为自行修改、优化通达信公式提供可借鉴的模板与排错参考。
1. 看懂《猎庄狙击主图指标公式源码》前,先弄明白三件事
拿到一份标注“源码”的doc文档,大部分人的第一反应是复制粘贴,然后在公式管理器里得到一行“缺少分号”。这不是操作失误,而是这类主图指标的交付形式决定了:你必须先理解通达信公式系统的运行方式,再谈安装和调试。“猎庄狙击”这个名字,拆开就是两个设计目标。猎庄,盯的是主力资金行为相关的量能与成本变化;狙击,找的是一个风险收益比相对合理的买点。它被做成主图指标,是因为主图能把信号直接画在K线上,同时叠加成本线、压力位这类辅助参考,读起来比副图更直观。下面的内容按“读懂公式语言 → 本地安装调试 → 信号拆解与参数优化 → 选股预警和盘后验证”的顺序展开。新手可以跟着走一遍,写过几年指标的人可以直接跳到第4章看参数优化和未来函数处理,后面两节里有几个日常最容易踩的坑。
2. 通达信公式语言:把主图源码拆成变量、信号与绘图
2.1 主图与副图在计算和输出上的差异
通达信里的技术指标公式,按照叠加位置分成主图和副图两类。主图公式直接画在K线图上,和K线共用同一套价格坐标;副图公式在独立的窗口里显示,有自己的纵轴范围。这个差异直接决定了源码里哪些语句能直接输出,哪些必须先做转换。猎庄狙击主图指标常见做法,是主图输出一两条价格量纲的线,比如狙击线、成本线;信号则用图标或文字标在K线下方。如果你在源码里看到量能饱和度、主力追踪这类0到100之间的数值,它们通常是副图逻辑。硬塞进主图,要么贴边,要么把K线压扁。有些主图会把这类量能值画在主图底部的小柱子上,但用的是 STICKLINE 把数值映射到价格坐标上,本质是借用绘图函数,不是直接输出量能曲线。
读源码先做的一件事,是统计带冒号的输出语句。在通达信公式语言里,:=定义中间变量,:定义输出线。输出线太多会盖住K线,而且部分版本对输出线数量有限制。拿到文档后,先把所有:行圈出来,决定哪些保留、哪些改:=。这一步做完,整段源码的结构就基本清楚了。
2.2 必须掌握的三类函数:变量、条件、绘图
通达信公式接近C语法,行尾用分号,注释用大括号。函数按用途可以分成三类:数据与统计类负责取行情、算均值;条件类负责判断交叉、计数和回头看;绘图类负责把结果画出来。大多数主图源码都可以用这三类函数读通。
| 类型 | 常见函数 | 作用 | 示例 |
|---|---|---|---|
| 数据与统计 | CLOSE、HIGH、LOW、VOL、MA、SMA、HHV、LLV | 取价格和成交量,做移动平均与极值统计 | MA(CLOSE,5) |
| 条件与计数 | CROSS、REF、COUNT、IF、FILTER | 判断上穿下穿、引用历史值、统计满足次数、过滤重复信号 | CROSS(MA1,MA2) |
| 绘图 | DRAWICON、DRAWTEXT、STICKLINE、PARTLINE | 画图标、写文字、画柱线、分段着色 | DRAWICON(C,L*0.97,1) |
这三类函数在阅读时的优先级不同。先找数据来源,也就是哪几行引用了 CLOSE、VOL、AMOUNT;再找统计和平滑,MA、SMA、EMA、HHV、LLV;最后找条件交叉和绘图函数。按这个顺序推理,源码的意图会很快浮出来。在函数选用上,通达信没有现成的“标准库大全”,我一般用快捷键F1打开函数说明。需要注意,不同版本之间SMA这类函数的参数位数是固定的,比如 SMA(X,N,M) 里的M是权重,不是周期,写错位置会直接编译报错。
2.3 用20行代码写一个最小主图指标,理解猎庄狙击类源码的骨架
下面给一段最小可运行的主图公式,不是原文档的源码,而是按猎庄狙击类主图的常见结构写的演示骨架,用来展示阅读顺序。
{狙击演示:最小主图结构} N:=10; {统计窗口} VAR1:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100; VAR2:=SMA(VAR1,3,1); {第一次平滑} VAR3:=SMA(VAR2,3,1); {第二次平滑} 狙击线:MA(CLOSE,10),COLORYELLOW; STICKLINE(VAR2>VAR3,LOW-0.01,LOW-0.05,2,0),COLORRED; DRAWICON(CROSS(VAR2,VAR3),LOW*0.97,1);代码逻辑按三行解释:VAR1 把当前价格放在 N 日高低点区间里做归一化,得到 0 到 100 之间的位置值;VAR2 和 VAR3 对这个值做两次平滑,形成两条快慢线。当快线上穿慢线时,DRAWICON 在K线下方画一个图标,这就是所谓的狙击信号。STICKLINE 同时在价格下方画一根小柱,表示快线位于慢线上方。狙击线输出的是10日均线,作为价格量纲的参考线。把这套骨架代入猎庄狙击源码里,绝大多数内容都能对上号。量能饱和度对应 VAR1 这类归一化计算,主力追踪对应 VAR2、VAR3 这类双线平滑,买点对应 CROSS 交叉和 DLLAWICON 绘图。读源码时逐个对应,比逐行抄写高效得多。
3. 安装与调试:从 .doc 到通达信公式管理器的完整步骤
3.1 复制粘贴之前先做文本预处理
Word文档里的公式文本是排版过的,不是纯文本。直接复制到通达信,最常见的问题是全角逗号、全角括号、行首编号和被Word自动断行拆开的语句。这些字符在公式系统里都是非法符号,报错信息通常是“未定义的标识符”或者“语法错误”,和公式本身逻辑无关。我在拿到一份doc源码时,会先做一次文本清洗,而不是直接粘贴。清洗步骤固定:把全角逗号、分号、括号替换成半角;去掉行首的数字编号;压缩多余空格;再用编辑器检查不可见字符。这个流程可以用一个小脚本完成。
import re src = open("raw.txt", encoding="utf-8").read() src = re.sub(r"^\s*\d+[\.、]\s*", "", src, flags=re.M) # 去掉行首编号 src = src.replace(",", ",").replace(";", ";") src = src.replace("(", "(").replace(")", ")") src = src.replace(":", ":") src = re.sub(r"[ \t]+", " ", src) open("clean.txt", "w", encoding="utf-8").write(src)脚本去掉了行首编号和全角标点。需要保留公式内部的中文注释,因为通达信支持大括号中文注释,这一步不影响。清洗后如果还报错,再用二分法定位:把后半段代码用大括号注释掉,看前半段能否编译通过,逐步缩小范围。
3.2 公式管理器的入口、主图叠加与TN6文件导入
通达信里新建指标公式的入口是公式管理器,快捷键 Ctrl+F。在左侧分类树里找到“技术指标”,右键新建公式,编辑区右下方有“主图叠加”和“副图”两个选项。主图指标必须选择主图叠加,否则画线和K线坐标不一致,画出来的线会出现在独立的副图窗口里,和预期的效果完全不同。
| 操作 | 位置/快捷键 | 说明 |
|---|---|---|
| 打开公式管理器 | Ctrl+F | 左侧分类树,可展开技术指标 |
| 新建技术指标 | 在“技术指标”分类右键新建 | 输入公式名称 |
| 选择主图/副图 | 编辑页底部选项 | 主图指标选“主图叠加” |
| 编译测试 | 编辑页下方“测试”按钮 | 有错误会提示行号和原因 |
| 导入TN6/TNE | 公式管理器“导入公式” | TN6为公式文件格式,加密公式不显示源码 |
网上常见的问题“通达信指标公式tn6格式文件如何转为txt格式文件”,是分情况的。如果 TN6 导入后能打开公式编辑器,说明公式未加密,直接复制文本另存为txt即可。如果导入后编辑器里看不到源码,说明是加密公式,能调用参数但不能阅读内部实现,也只能通过参数设置来间接调整,不存在通用的解密转txt方法。不同版本公式管理器界面有差异,比如常提到的公式管理器6.06,但分类树加编辑区的布局基本一致。
3.3 编译报错的排查顺序和常见诱因
公式编辑器提示的错误分成几类,处理顺序也固定。先看变量是否定义,再看分号是否遗漏,最后查函数参数。
| 报错表现 | 常见原因 | 修正方式 |
|---|---|---|
| 未定义变量或标识符 | 全角符号、变量名大小写不一致、中文变量名混用 | 统一为半角英文变量名 |
| 语句缺少分号 | Word断行导致两行代码粘连 | 在行尾补“;” |
| 函数参数个数不对 | 函数用法错误,如MA只写一个参数 | 用F1查函数说明 |
| 变量未定义 | 引用了后面才定义的变量,通达信对顺序有要求 | 调整变量定义顺序 |
| 输出线太多 | :定义输出线超过限制 | 把不需要输出的:改成:= |
排错时,我一般按从上往下的顺序处理,因为公式语言沿用C语言的顺序依赖,变量必须定义后再引用。通达信不像高级语言那样有编译器的完整诊断,错误提示行不一定精确到字符,但通常在出错语句附近,看一眼光标位置,往往能发现问题。
3.4 未来函数的识别与信号漂移处理
这类主图文档在网络上流传时,最常见的隐藏问题是未来函数。所谓未来函数,是指公式在计算当前K线时会引用之后的K线数据。常见函数包括 ZIG、PEAK、TROUGH、BACKSET、REFX 等。含有未来函数的指标,历史信号非常完美,但在实际行情中,信号会随着后续K线出现而消失或移动。排查方法是,在公式编辑器里按 F1 查看函数说明,或者直接搜索 ZIG、BACKSET 这类关键字。更严谨的做法是换用不依赖后续数据的写法。比如用 REF(CROSS(...),1) 把信号确认延迟到下一根K线,虽然买点晚一天,但信号不会漂移。对于交易者来说,稳定的信号比完美的历史回放重要得多。也可以把指标加载到最近一段行情里,记录信号数量,过几天再打开看同一位置信号是否还在,这也是识别未来函数的一个简单实验。
4. 猎庄狙击信号拆解:常见公式结构、参数优化与三重过滤
4.1 从命名看公式结构:猎庄、狙击、量能
一个名为猎庄狙击的主图指标,源码里通常包含三大要素。第一个要素是量能类数据。量能饱和度、主力追踪这类副图指标经常和猎庄狙击主图配对出现,负责判断资金活跃程度。主图里若出现 VAR1 之类的归一化公式,本质是量能或价格位置的0到100打分。第二个要素是成本或趋势线。主图输出一条相对慢的线,可能是均线,也可能是筹码成本线,用 COST、WINNER 计算。它的作用是参考“中枢”位置。第三个要素是狙击信号。当快线上穿慢线、价格突破成本线,或者量能突然放大时,触发器产生信号。源码里表现为 CROSS、>= 或 COUNT 的组合。需要强调的是,名字只是包装。同一份命名下,不同版本源码的计算方式可能完全不同。拿到源码先画数据流,再决定是否使用,比看名字选指标靠谱得多。
4.2 参数优化:先建立参数平台,再找稳健区间
参数可以直接写在公式里,但更规范的做法是在公式管理器的“参数”页签里定义 N、M,这样能通过公式管理器的参数测试功能对参数进行扫描。参数扫描时,保持其他条件不变,只让一个参数变化,观察信号数量、胜率和盈亏比的变化。
| 参数 | 典型含义 | 搜索范围 | 步长 |
|---|---|---|---|
| N | 高低点统计窗口 | 5~60 | 1~2 |
| M | 快线平滑周期 | 3~15 | 1 |
| FILTER | 信号过滤周期 | 1~10 | 1 |
参数优化的操作路径是:在公式编辑器里把指标参数录入参数页签,设置最小值、最大值和步长;然后在公式测试系统里选择这个指标,指定测试股票和时间段,运行参数优化。系统会按历史行情逐组计算胜率、盈亏比等统计值。在使用结果时,除了找最优参数,还要看参数平台。如果 N=6 时收益最好,N=5 和 N=7 却大幅亏损,说明参数敏感度过高,指标容易过拟合;反过来,连续5组参数表现接近,才是相对稳健的信号。一个指标如果只能靠某个“神奇参数”才有效,那么它大概率是拟合出来的。另外,尽量不要同时扫描两个参数,参数组合数量是乘积增长。N 从5到60共56个,M 从3到15共13个,组合728组,乘以几百只股票,计算量非常大。
4.3 三重过滤:让“狙击信号”少而准
交叉信号在震荡行情里会频繁出现,一组源码往往只看价格,不看趋势和量能。我常用的做法是加三层过滤:量能、趋势和信号间隔。原公式已有量能饱和度时,第一层过滤可以改为“饱和度大于某阈值”,不过也要用同样的统计方法验证其稳定性。
{猎庄狙击简化版:加三重过滤} 狙击信号:=CROSS(VAR2,VAR3); 量能过滤:=VOL>MA(VOL,5)*1.2; 趋势过滤:=CLOSE>MA(CLOSE,60); 信号过滤:=FILTER(狙击信号 AND 量能过滤 AND 趋势过滤,5); DRAWICON(信号过滤,LOW*0.97,1);这段代码的逻辑是:量能过滤要求当日成交量大于5日均量的1.2倍,过滤缩量突破;趋势过滤要求收盘价站上60日均线,过滤下跌途中的反弹;FILTER(信号,5) 让信号出现后在5个周期内只显示一次,避免连续触发。加完过滤后,信号数量会下降很多。判断指标是否有价值,要看删除过滤后信号数量与加过滤后信号数量的比例关系。如果1万根K线只有2次信号,那这个指标不具备实战统计意义,需要适当放宽过滤条件再评估。
5. 从读懂到可用:把指标接入选股、预警和盘后验证工作流
5.1 主图信号改造成条件选股与盘中预警
主图指标编译通过之后,不能直接进选股器。条件选股公式要求输出一个最终条件,其他行都是中间计算。把4.3的例子整理成独立的条件选股公式,新建到条件选股分类下。
{条件选股版猎庄狙击} N:=10; VAR1:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100; VAR2:=SMA(VAR1,3,1); VAR3:=SMA(VAR2,3,1); 条件:=CROSS(VAR2,VAR3) AND VOL>MA(VOL,5)*1.2 AND CLOSE>MA(CLOSE,60); FILTER(条件,5);选股公式的最后一行返回0或1,满足条件时输出1。FILTER 的第二参数是过滤周期,一般设5。这个参数的作用是控制同一只股票在一次选股结果里只出现一次,避免连续 N 天满足条件导致重复输出。盘中预警和选股是同一套公式。在通达信菜单的“功能-预警系统-条件预警”里,添加这个条件选股公式,指定股票池,启动预警。行情每次刷新时,预警线程会重新计算一次,触发后弹窗或声音提示。盘中预警计算量不算大,但公式里如果用了多个周期数据,扫描整个股票池时会明显卡顿,需要控制股票池规模。
5.2 盘后用Python独立复算,验证信号的真实分布
通达信公式编辑器调试不方便,中间变量的值需要挨个输出。更高效的方式是用数据导出功能,把日线数据导出成 CSV 或 Excel,再用 Python 复算。
import pandas as pd df = pd.read_csv("300750.csv", encoding="gbk") # 通达信导出,注意编码 df["ma5"] = df["close"].rolling(5).mean() df["ma60"] = df["close"].rolling(60).mean() df["var1"] = (df["close"] - df["low"].rolling(10).min()) / ( df["high"].rolling(10).max() - df["low"].rolling(10).min() ) df["sgn"] = (df["var1"] > df["var1"].shift(1)) & (df["vol"] > df["vol"].rolling(5).mean() * 1.2) print(df.loc[df["sgn"], ["date", "close", "vol"]].tail(30))这段代码把通达信公式里的 VAR1 逻辑用 pandas 复算了一遍,并统计信号分布。注意通达信导出文件的编码可能是 gbk,不是 utf-8。复算结果和通达信画出的信号不一致时,先检查前复权设置和停牌日空值处理,这两项最容易造成差异。用这种方式验证参数优化的结论,比直接在通达信里反复改参数更直观。
本文还有配套的精品资源,点击获取