通达信游资专用副图源码:从.doc清洗到公式管理器编译排错
2026/9/17 11:11:52 网站建设 项目流程

简介:这是一份面向A股短线交易者、通达信软件用户的副图指标公式源码文档,侧重游资风格的波段与趋势捕捉。文档围绕价格数据的数学处理展开,涵盖多周期简单与指数移动平均线、中间价与标准差通道、趋势强弱比值、金叉死叉过滤以及成交量配合等模块,并用DRAWTEXT标注买入、卖出与抄底提示,辅以STICKLINE柱体区分升降趋势。资源包内含1个doc文件,约161KB,可直接复制公式到通达信公式管理器中新建副图指标,对照源码逐段理解各变量的计算逻辑与信号触发条件。目前已有335人学习下载,适合希望研究游资操盘思路、完善自选指标体系的投资者参考。需要留意的是,任何技术指标都应结合市场环境与个人交易策略综合使用,不宜单独依赖信号决策。

1. 一份打着「游资专用」的副图 .doc,真正值钱的是可复现的公式结构

群里转来的文件名通常长这样:通达信指标公式源码游资专用 副图源码.doc。双击打开,里面是彩色加粗的中文公式,还带章节编号和「内部资料」字样,看着像回事;把内容复制进通达信公式管理器,点测试,第一行就弹出语法错误。这个落差不是你的操作问题,而是载体问题——Word 文档不是通达信的公式格式,它只是一份带排版的文本。

剥开「游资专用」这层包装,文件里装的是一段技术指标公式:读的是行情软件本地已有的开高低收、成交量、成交额和分时数据,算出几条曲线画在 K 线下方。所谓游资痕迹,本质是用量比、主动买占比、均价偏离这些可观测量去近似推断,没有哪条公式能直接看到席位。它能不能用,取决于参数怎么设、信号会不会漂、以及你是否知道它什么时候失效。

后面按一条完整链路走:从 .doc 里把公式抠出来并洗干净,落到公式管理器里编译成副图指标,再讲资金强度、量能饱和度这类核心算法怎么写,然后是参数表、报错定位、未来函数排查,最后是 tn6 互转与批量校验。手上有源码文件却导不进去的人,可以照着一步步做。

2. .doc 里的通达信副图源码怎么落到公式管理器:提取、清洗、编译

2.1 先分清 doc、txt、tn6 三种载体能不能直接导入

拿到文件先看扩展名,这一步决定了后面要走多少弯路。通达信公式管理器认的导入格式是它自己的打包文件,Word 文档不在其中,任何「把 doc 拖进公式管理器」的尝试都会失败。常见载体的差异如下。

载体扩展名内容形态能否直接导入典型来源
Word 文档.doc / .docx排版文本,含全角标点、批注、图片不能论坛附件、群文件转发
纯文本.txt一行行公式,半角符号可以,导入公式时选文本文件手工整理、从公式管理器导出
公式包.tn6通达信自有打包格式,含公式名、参数、多条公式可以,导入公式时选 tn6公式管理器导出
早期公式包.tne老版本导出格式部分版本可以老资源
其它软件公式各自格式语法体系不同不能跨平台搬运

.doc 是二进制复合文档,Word 保存时会顺手把中文输入法打出的全角冒号、全角分号原样写进去,还会插入软回车(垂直制表符)和不间断空格。这三类字符在通达信编译器眼里都是非法字符,所以流程上必然要过一遍「抽取 + 清洗」,direct 粘贴是没有出路的。

提示:如果文档里的公式是截图贴进去的,先做 OCR 再清洗;OCR 对:=()的识别率很低,必须人工核对赋值符号。

2.2 用 python 把 .doc/.docx 里的公式正文抽成纯文本

python-docx 只认 .docx,遇到老 .doc 要先转换。LibreOffice 命令行转换不需要打开界面,适合批量处理,转换完目录里就有了可读的 docx。

# 老版 .doc 先转成 docx,headless 模式批量跑 libreoffice --headless --convert-to docx --outdir ./docx ./游资专用副图源码.doc # 目录里若有多个文档,用通配符一次转完 ls ./docx

转换完成后抽取正文。这里有个容易漏的点:很多分享文档把公式塞在表格里做「分栏」,只读doc.paragraphs会得到空字符串。

from docx import Document import pathlib SRC = pathlib.Path("./docx") DST = pathlib.Path("./txt") DST.mkdir(exist_ok=True) for f in SRC.glob("*.docx"): doc = Document(str(f)) lines = [p.text for p in doc.paragraphs] # 普通段落 for t in doc.tables: # 表格里的公式段落 for row in t.rows: for cell in row.cells: lines.extend(cell.text.splitlines()) text = "\n".join(lines) (DST / (f.stem + ".txt")).write_text(text, encoding="utf-8") print(f.name, len(text))

逻辑说明:doc.paragraphs按文档顺序返回段落对象,p.text取纯文本不带样式;doc.tables单独遍历,因为表格单元格里的文字不属于顶层段落。输出统一用 UTF-8,避免后续读写出现乱码。参数上没有可调项,唯一要改的是SRCDST两个路径。如果打印出来的字符数只有几十,说明公式是以图片形式存在的,得回到 OCR 流程。

2.3 全角符号与 Word 隐形字符的清洗规则

抽取出来的文本不能直接粘贴,得先做字符级替换。下面这张表是踩过坑之后总结的高频字符,左边是 Word 里的原样,右边是通达信能接受的形式。

现象原始字符替换为不替换的后果
中文冒号:变量:=...被当成整行,报未知变量
中文分号;语句不结束,最后一行合并报错
中文逗号,函数参数解析失败
全角括号()()函数名无法识别
中文引号“ ”"DRAWTEXT 的文字参数报错
软回车\x0b\n多行挤成一行
不间断空格\xa0普通空格变量名中混入不可见字符
import re, pathlib FULL2HALF = str.maketrans({ ":": ":", ";": ";", ",": ",", "(": "(", ")": ")", "“": '"', "”": '"', "‘": "'", "’": "'", "<": "<", ">": ">", "=": "=", "+": "+", "-": "-", "*": "*", }) def clean(src: str) -> str: s = src.replace("\u00a0", " ").replace("\x0b", "\n") # 隐形字符 s = s.translate(FULL2HALF) # 全角转半角 s = re.sub(r"[ \t]+$", "", s, flags=re.M) # 去掉行尾空格 s = re.sub(r"\n{3,}", "\n\n", s) # 压缩空行 s = re.sub(r"^(第\s*\d+\s*[章节].*)$", r"{\1}", s, flags=re.M) # 中文小标题转注释 return s for f in pathlib.Path("./txt").glob("*.txt"): out = pathlib.Path("./clean") / f.name out.parent.mkdir(exist_ok=True) out.write_text(clean(f.read_text(encoding="utf-8")), encoding="utf-8")

逐条说明:translate用映射表一次替换全部全角符号,比链式replace快且不会互相干扰;re.M^$按行匹配,行尾空格和中文小标题都是逐行处理;最后一条把「第三章 资金强度」这类标题包进{},通达信把花括号内容当注释,不会参与编译。改造过的源码如果要发出去,先确认里面没有个人备注。

2.4 在公式管理器 6.06 里新建副图指标并完成第一次编译

清洗完就可以落地了。通达信打开公式管理器是 Ctrl+F,也可以走「功能 → 公式系统 → 公式管理器」。展开左侧的「技术指标」,选中一个自定义分组,点「新建」。公式名称用英文或拼音,别用空格和中文标点,避免调用时输入困难。

关键一步是「画线方法」下拉框,必须选「副图」,选成主图会导致坐标体系和 K 线冲突,曲线画不出来。切到「参数」标签页填参数名和区间,参数名要和源码里用的一致,比如 N、M、P。粘贴清洗后的源码,点「测试公式」。

编译器会返回第一个错误所在的行号,改完再测,重复到提示「测试通过」为止。点「确定」保存,回到 K 线图,输入公式名的首字母就能调出。常见做法是先拿几只走势差异大的票对照看,确认曲线没有压在 0 轴不动、也没有跑到坐标框外面,再考虑挂预警。

3. 游资专用副图源码的核心结构:资金强度、量能饱和度、情绪线怎么算

3.1 副图能拿到的数据边界:为什么「游资痕迹」只能做近似

通达信普通版本地数据里能直接用的,是每根 K 线的开高低收、成交量、成交额,以及分时序列。逐笔委托队列、大单标记、席位信息属于更高等级的数据服务,普通公式取不到。所以市面上的资金类副图,走的都是代理变量路线:用收盘价在当日振幅中的位置拆分主动性成交,用成交量与均量的比值衡量放量程度,用成交额除以成交量还原当日均价,再和收盘价比较。

理解这一点很重要,它决定了你该怎么用这些指标。代理变量的噪声不小,一根大阳线里的主动买占比可能被振幅放大得离谱,所以看趋势变化比看绝对值更有意义。谁要是把某条资金线当成真实资金流,很容易在震荡市里被反复打脸。

可观测量常见代理含义稳定性
收盘价在振幅中的位置主动性成交占比的近似中,日线尾盘拉升会失真
成交量 / 均量放量倍数、量能饱和度较高,跨周期都能用
成交额 / 成交量当日均价,用于偏离度计算
分时均价与现价之差日内强弱中,受开盘跳空影响

3.2 量能饱和度归一化与 1.00 圆圈的三种画法

量能饱和度的思路是把放量程度压到 0 到 1 之间,1.00 表示「放量到顶」。做法是先算量比,再除以一个放大倍数,最后用 MIN 截断,避免极端行情把坐标撑变形。参数 M 就是放大倍数,M 越小越容易触顶,M 越大越难触顶,通常取 3 左右。

到顶那一下怎么画,有三种写法,兼容性和效果各不相同。柱状填充最直观,用 STICKLINE 从 0 画到饱和值;图标法用 DRAWICON,但图标编号在不同版本里对应关系不一致,移植性差;文字法用 DRAWTEXT 直接在 1.00 位置写字符串,跨版本最省心,缺点是只能看到点,看不到柱子。

{量能饱和度 副图 —— 三种到顶标记写法} N:=20; M:=3; 量均:=MA(VOL,N); 量比:=VOL/IF(量均=0,1,量均); 饱和:MIN(1,量比/M),COLORYELLOW,LINETHICK2; {主曲线,0~1} {写法一:柱状填充,最直观} STICKLINE(饱和>0,0,饱和,2,0),COLORYELLOW; {写法二:图标,编号依版本而定} DRAWICON(饱和>=0.999,1.00,1); {写法三:文字标 1.00,移植性最好} DRAWTEXT(饱和>=0.999,1.00,'1.00'),COLORRED; 顶线:1.00,COLORGRAY,DOTLINE; {1.00 参考线}

参数说明:MA(VOL,N)是 N 周期成交量均值,N 取 20 时代表一个月的平均量能;IF(量均=0,1,量均)是除零保护,停牌或数据缺失时量均可能为 0,不保护会直接中断计算;MIN(1,量比/M)把结果压进 0 到 1;STICKLINE(条件,起点,终点,宽度,空心标志)中空心标志 0 表示实心柱。三种写法建议只留一种,同时保留会在画面上重叠。

3.3 主力资金强度:主动额拆分与均价线偏离

资金强度要解决的是「这根 K 线的成交额里,有多少是往上买的」。普通行情数据没有逐笔方向,业内常用的近似是把当日振幅当成分布区间,收盘价越靠近最高价,认为主动性买入比例越高。

{主力资金强度 副图 —— 主动性成交额近似} P:=20; 均价:=AMOUNT/IF(VOL=0,1,VOL)/100; {成交额/成交量,还原当日均价} 强弱:=IF(HIGH=LOW,0.5,(CLOSE-LOW)/(HIGH-LOW)); {0~1,越靠上越强} 主动额:=AMOUNT*强弱; {近似主动买入额} 净额:=主动额-(AMOUNT-主动额); {净额 = 主动 - 被动} 资金:净额/IF(MA(AMOUNT,P)=0,1,MA(AMOUNT,P)),COLORRED; 零轴:0,COLORGRAY,DOTLINE;

逻辑说明:AMOUNT单位是元,VOL单位是手,除以 100 之后才是每股均价;HIGH=LOW表示一字板或数据异常,此时比例无意义,直接给 0.5 中性值,这是必须补的分支,否则分母为零会让整条公式失效。最后一步除以 P 周期成交额均值做归一化,目的是把不同市值、不同价位的股票拉到可比较的量级上,否则大盘股的资金线会比小盘股高出一个数量级,同一张副图没法通用。

需要留意的是,一字涨停时HIGH=LOW,强弱值恒定,资金线会走平,这不代表没有资金活动,只是数据本身无法区分。看到线走平先查当天是不是涨跌停,不要急着改参数。

3.4 三条线合成一张副图:坐标统一与阈值标线

量能饱和度在 0 到 1 之间,资金强度归一化后大约在 -3 到 3 之间,两条量纲不同的曲线画在一起,资金线会把量能线压成一条平线。常见做法是先各自压缩,再按权重合成一条情绪线,把原始曲线用淡色保留作参考。

曲线原始范围压缩方式建议权重
量能饱和度0 ~ 1本身已在 0~10.6
资金强度约 -3 ~ 3除以 3 后截断0.4
情绪线0 ~ 1两条加权求和输出用

权重不是拍脑袋定的。量能数据来自真实成交量,噪声小,权重给高一点;资金强度是估算值,权重压低,避免它一个人带偏整条线。合成前先把资金强度截断到 -1 到 1,再线性映射到 0 到 1,这一步不做,情绪线会出现负值,和饱和度无法同轴比较。两条原始曲线用 COLORGRAY 之类的淡色画,情绪线加粗,视觉上主次分明。

4. 副图源码调参与排错:参数表、编译错误、未来函数

4.1 参数标签页怎么填:周期、阈值、平滑的取值区间

参数填在公式管理器的「参数」标签页,格式是「参数名(最小值,最大值,默认值)」。填完点「测试公式」,参数名要和源码里出现的完全一致,多一个空格都会报未知变量。

参数含义建议区间默认调大的效果调小的效果
N量能均线周期5 ~ 6020曲线更平滑,突发放量被稀释更灵敏,日内噪声多
M饱和放大倍数1 ~ 103更难触顶,信号变少频繁触顶,失去区分度
P资金均额周期5 ~ 6020偏向中期资金结构偏向日内,跳动剧烈
W资金权重0 ~ 10.4资金主导,震荡市易误报量能主导,忽略资金转弱

调参不要一次改多个。固定 P 和 W,只动 N,从 10、20、30 各跑一遍同一只票,把触顶次数记下来,比凭感觉改靠谱得多。参数区间也别开太宽,最大值给到 200 会让不懂的人随便填,反而更容易出问题。

4.2 编译报错逐条定位:未定义变量、除零、函数不适用

公式管理器的报错信息比较简短,多数时候只给行号和一句提示。下面这张对照表覆盖了绝大部分情况。

报错提示真实原因处理办法
行 N:未知变量全角冒号、变量名含空格或不可见字符回到清洗脚本重跑
行 N:语法错误缺分号、括号不配对逐行数括号,确认每句以分号收尾
行 N:函数名错误拼写不符,如把 PLOYLINE 写成 POLYLINE查函数列表核对拼写
结果恒为 0 或空分母为零未做保护分母统一套IF(x=0,1,x)
选股时报画线函数不可用公式里带 DRAWTEXT、STICKLINE 等拆成显示版和选股版两份

有一个拼写坑值得单独说:通达信的多点连线函数写作PLOYLINE,不是常规拼写的POLYLINE,不少从别处抄来的源码在这行反复报错,改一个字母就好。另外函数名区分大小写的情况在部分版本存在,养成全大写或全小写统一的习惯,能省掉很多排查时间。

4.3 信号漂移的根源:ZIG、PEAK、BACKSET 这类未来函数

源码里出现ZIGPEAKTROUGHBACKSETREFXBARSNEXT,就要提高警惕。这类函数在计算某个时点的值时会用到该时点之后的数据,历史图上看起来每个拐点都抓得准,实盘走到最后一根时数值还会变,也就是常说的信号漂移。

判断方法很直接:把公式装在图上,今天记下最后几根 K 线的信号状态,明天开盘前再看一次同样的历史位置,如果状态发生了改变,说明用了未来数据。也可以借助公式管理器自带的检测或第三方检测工具,但要清楚这些工具只能查已知函数名,改头换面的写法查不出来。

漂移对副图的影响比对选股小,但也别拿它做回测。用带未来函数的公式统计胜率,得到的结果没有参考价值,因为回测时每个信号都提前知道了后面的走势。

4.4 把副图源码复用成预警与选股条件

同一套算法要挂预警或者做条件选股,必须去掉全部画线函数,把结论收成一个输出变量。选股公式里出现 DRAWTEXT、DRAWICON、STICKLINE,编译阶段就会被拦下来。

{游资承接预警 —— 条件选股公式,不含画线函数} N:=20; M:=3; P:=20; 量均:=MA(VOL,N); 饱和:=MIN(1,(VOL/IF(量均=0,1,量均))/M); 均价:=AMOUNT/IF(VOL=0,1,VOL)/100; 强弱:=IF(HIGH=LOW,0.5,(CLOSE-LOW)/(HIGH-LOW)); 净额:=AMOUNT*强弱-(AMOUNT-AMOUNT*强弱); 资金:=净额/IF(MA(AMOUNT,P)=0,1,MA(AMOUNT,P)); XG:饱和>=0.999 AND 资金>0.5 AND CLOSE>REF(CLOSE,1);

说明:公式新建时类型选「条件选股」,画线方法那一栏就不用管了。输出变量固定叫XG,通达信按这个名字识别选股结果。三个条件分别是量能触顶、资金强度过阈值、当日收红,用 AND 连接,条件越多信号越少,实测下来一天可能只出一两个,属于正常范围。挂预警时在「预警设置」里选这个公式,周期选日线,触发方式选「实时监控」,具体可选项随版本略有差异。

5. 副图源码的进阶玩法:tn6 互转、批量校验与版本留痕

5.1 tn6 与 txt 的互转:什么时候必须用 tn6

公式管理器里选中一条指标,右键或菜单里有导出选项,能导成 tn6 打包文件,部分版本支持导出为文本。tn6 的优势是自带公式名、参数和画线方法,导入方不用手工重填;文本只保留公式体,导入后还要自己建公式、自己填参数。要在多台机器之间同步,或者发给同事,用 tn6 明显省事。

反过来,需要看源码内容、做 diff 比对、改参数,就得用文本。遇到只有 tn6 没有源码的情况,先导入到自己的公式管理器,再导出成文本,就拿到了可读的公式体。注意不同版本的 tn6 兼容性有差异,低版本导出的包在高版本里一般能导入,反过来不一定,跨版本传递时留一句版本备注给自己。

5.2 批量校验:一次检查多个副图源码能不能编译

收了一堆清洗好的 txt,一条条手工粘贴测试太慢。可行的做法是写个脚本把每个文件里的公式体读出来,做静态检查:括号是否配对、每句是否以分号结尾、是否含未来函数关键字、分母是否都做了除零保护。

检查项正则或方法命中后的处理
括号配对统计()数量手工补齐
语句结尾每行末尾是否为;或注释补分号
全角残留匹配[\uFF00-\uFFEF]回清洗脚本
未来函数匹配 ZIG、PEAK、BACKSET 等标记,人工确认
除零风险查找裸除法/后是否为 IF 包裹补 IF 保护
import re, pathlib RISKY = ("ZIG", "PEAK", "TROUGH", "BACKSET", "REFX", "BARSNEXT") for f in pathlib.Path("./clean").glob("*.txt"): s = f.read_text(encoding="utf-8") problems = [] if s.count("(") != s.count(")"): problems.append("括号不配对") if re.search(r"[\uFF00-\uFFEF]", s): problems.append("含全角字符") for k in RISKY: if re.search(rf"\b{k}\b", s): problems.append(f"疑似未来函数 {k}") print(f.name, "|", ";".join(problems) if problems else "静态检查通过")

这段脚本只做静态筛查,不替代真机编译,但能把明显有问题的文件先挡掉,剩下的再逐条导入测试,效率差出好几倍。\b做单词边界匹配,避免把变量名里包含 PEAK 的标识符误判成函数调用,实际用的时候根据自己命名习惯微调。

5.3 版本留痕:源码文件怎么命名和比对

改造过的公式一定要留痕,不然过两个月自己也说不清哪版是好的。命名按「公式名_版本_日期」的格式,比如youzi_chengjie_v1.2_20250315.txt,版本号在公式体第一行的注释里也写一份。改动前后用diff看一眼,只改了参数还是改了算法,一眼能分出来。

diff -u youzi_chengjie_v1.1_20250310.txt youzi_chengjie_v1.2_20250315.txt

调参到某个阶段感觉效果不错,就把那一版单独复制出来冻结,后面的改动另开文件,别在同一个文件上反复覆盖。真到了要复盘某次信号为什么没触发,手里有历史版本,五分钟就能查清是公式的问题还是参数的问题。

本文还有配套的精品资源,点击获取

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

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

立即咨询