ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

神算子主图指标源码拆解:通达信公式导入、调参与信号回验

神算子主图指标源码拆解:通达信公式导入、调参与信号回验 简介这份通达信指标公式源码文档面向A股技术分析爱好者、指标编写初学者及习惯在通达信平台上做副图与主图定制的中高级用户核心解决如何用一组源码把价格区间、支撑压力位与风险收益分区直观画到K线图上的问题。整包仅1个doc文件压缩后约218KB属于纯文本公式源码类资料可直接复制到通达信公式管理器中新建主图指标使用。内容以N120周期的高低点为基准通过GD、DD、KJ等变量构建分区高度并借助DRAWBAND、DRAWTEXT、STICKLINE等函数绘制低、支撑、强势、突破、警示、压力、高共八条黄金分割级别线同时标注风险区、警示区、突破区、拉升区、关注区、低吸区六大操作提示另含以EXPMA加权均价衍生的上轨参考线。已有445人学习下载适合希望理解主图分区逻辑、学习绘图函数写法或直接套用观察支撑压力变化的读者。1. 神算子主图指标不是预测工具而是一份把成本线与信号点画进 K 线的公式源码论坛里流传的“神算子主图指标.doc”十有八九是一份几十行的通达信公式源码打开后全是 MA、HHV、DRAWICON 拼成的算式不是能自动下单的黑盒。它的作用是把主力成本线、压力线、支撑线和买卖点提示叠加到 K 线上让人一眼看出价格站在成本区上方还是下方。麻烦也在这里直接导入、看到箭头就动手第二天箭头消失、位置挪了于是骂指标骗人。决定它能不能用的是源码里有没有未来函数、参数跟持仓周期是否匹配、主图叠加的输出值是不是价格量纲。后面按读源码、复现模块、调参数、排坑、验证的顺序推进适合手里已有这份 .doc 想跑通的新手也适合把别人的主图指标拆开改成自己版本的老手。2. 从 .doc 到公式管理器通达信主图指标源码的还原与语法骨架拿到一份 .doc 后缀的指标公式源码第一反应不该是往公式管理器里粘而是先判断它属于哪一类公式、画在哪个区域。通达信把公式分成技术指标公式、条件选股公式、五彩 K 线公式、交易系统公式几大类技术指标公式里又分主图叠加和副图。神算子这类主图指标本质就是「主图叠加」类型的技术指标公式一旦类型选错图形会彻底乱掉。2.1 主图指标和副图指标为什么不能直接混用主图叠加公式的坐标系是价格本身Y 轴单位和 K 线共用。它输出的每一个带:的变量都会被当作一个「价格」画进 K 线区域。如果一份公式里写了获利比例:WINNER(C)*100;这种 0 到 100 区间的值直接按主图叠加加载K 线会被压缩成底部一条细线上面飘着一条毫无意义的横线。判断办法很直接把公式里所有输出语句的表达式看一眼凡是依赖WINNER、KDJ、RSI、CCI这类震荡类函数、结果落在 0 到 100 或 -100 到 100 区间的都属于副图逻辑。要放进主图必须换算回价格量纲例如获利盘价格:WINNER(C)*C;这种写法才是「以价格为纵轴」的合理表达。反过来主图公式也不能直接当副图加载。一条主力成本:SUM(AMOUNT,N)/SUM(VOL,N)/100;放到副图里数值在几元到几十元之间来回副图窗口会被拉成锯齿。很多「神算子主图指标源码导入后只有一条直线」的抱怨来源就是这一步类型选错。提示先看公式里有没有WINNER、RSI、KDJ、BIAS再看输出值量纲基本就能判断出这份源码设计的是主图还是副图。2.2 把 .doc 里的指标公式源码转成通达信能识别的文本.doc 是排版文档不是代码文件。Word 会在你复制的时候带进全角空格、中文引号、自动编号、软回车还有论坛水印和「回复可见」的废话段落。通达信的语法解析器只认半角标点和英文变量名一个全角逗号就能让整段公式报「语法错误」。常见做法是先粘贴到记事本逐段剔除说明文字再用一段脚本做批量清洗。下面的 Python 脚本处理的就是这个环节它把全角标点换成半角、删掉行首编号和水印行最后用 GBK 编码写回文件因为通达信在中文 Windows 环境下默认读 ANSI。import re # 通达信公式源码通常是 ANSI(GBK) 编码errorsignore 防止个别乱码字符中断读取 src open(神算子主图指标.txt, encodinggbk, errorsignore).read() # 全角标点映射表公式里出现任何一个全角符号都会导致解析失败 table str.maketrans({ : :, : ;, : ,, : (, : ), : , : , : , : , : -, “: , ”: , : , }) src src.translate(table) # 去掉行首的「1.」「1、」「(1)」这类文档自动编号 src re.sub(r^\s*[\(]?\d[\)\.、]\s*, , src, flagsre.M) # 去掉整行的水印、说明、分隔线等非代码内容 src re.sub(r^\s*(?:【.*?】|.*?论坛.*?|.*?版权所有.*?|[-*]{3,})\s*$, , src, flagsre.M) # 合并多余空行通达信允许空行但不利于阅读 src re.sub(r\n{2,}, \n, src) open(clean_ssuz.txt, w, encodinggbk, errorsignore).write(src) print(清洗完成剩余行数, len(src.splitlines()))脚本里有三个点值得说明。errorsignore是因为论坛转载的 doc 里常有无法映射的符号硬读会抛异常str.maketrans的映射表按你实际遇到的全角字符增补即可不用一次求全最后写文件时用encodinggbk是因为通达信公式编辑器的粘贴板对 UTF-8 中文注释兼容性不稳定纯 ASCII 的变量名加 GBK 注释是最稳的组合。清洗完打开clean_ssuz.txt手动扫一遍每一行要么是空行要么是注释{...}要么是「变量名 :或: 表达式 ;」。出现别的形态就说明还有说明文字没删干净。至于网上问得很多的 tn6 格式那是通达信自己的公式打包文件用文本编辑器打开只会看到乱码。正常路径是在公式管理器里用「导入公式」加载不建议去研究怎么反解成 txt多数加密包拿不到明文白白浪费时间。2.3 通达信公式语法里必须先记住的几类函数读别人的主图指标源码卡人的从来不是数学而是函数名。下面这张表覆盖了神算子这类主图指标里出现频率最高的十来个函数看到源码里有不认识的回来查这一栏基本都能对上。函数写法返回值含义在主图指标里的典型用途MA(C,20)20 周期收盘均线趋势线、多空分界EMA(C,13)13 周期指数移动平均更灵敏的短周期线REF(X,1)上一周期的 X让压力位不受当根波动污染HHV(H,20)/LLV(L,20)20 周期最高价 / 最低价压力线、支撑线CROSS(A,B)A 上穿 B 返回 1否则 0金叉买点判定BARSLAST(条件)距上次条件成立经过的周期数限制信号有效期STICKLINE画柱体K 线着色、倍量柱标记DRAWICON在指定价格位置画图标买卖点箭头DRAWTEXT在指定价格位置写文字「买」「卖」「警」字样WINNER(C)当前价以下的获利盘比例套牢盘、压力估算AMOUNT/VOL成交额元/ 成交量手加权均价、主力成本线有两个语法细节必须记住。:是赋值只参与计算不画图:是输出会画线并且强制建立坐标系。同一份源码里如果有十几条:输出主图上会挤成一团实际改的时候把不看的行改成:或者行尾加NODRAW就行。每条语句必须以半角分号结尾最后一行可以省略分号但建议补上。2.4 新建主图叠加公式的完整操作路径用 CtrlF 打开公式管理器也可以走菜单「功能 → 公式系统 → 公式管理器」不同版本菜单层级略有差异入口位置基本一致。进去之后按下面的顺序操作展开左侧树选「技术指标公式」→「用户」点右侧「新建」。公式名称填英文缩写比如SSUZ中文名可以填「神算子主图」中文名允许重名但英文名不允许所以先用英文名做唯一标识。「画线方法」下拉框选「主图叠加」。这一步决定它是画在 K 线上还是画在副图窗口。参数列表里逐条填入参数格式是「名称 最小 最大 默认」例如N / 1 / 120 / 20。把clean_ssuz.txt的内容粘进编辑区点「测试公式」。这里会直接告诉你哪一行有语法错误比在主图上看到乱线再回头找快得多。点「确定」保存回到 K 线图键盘输入公式英文名SSUZ回车公式就会叠加到当前主图。验证是否加载成功可以用一份最小骨架做对照把它粘进去测试能看到两条均线和向上箭头就说明公式管理器的路径是通的{神算子主图-最小可运行骨架用于验证加载路径} MA5:MA(C,5),COLORWHITE,LINETHICK1; MA20:MA(C,20),COLORYELLOW,LINETHICK2; DRAWICON(CROSS(MA5,MA20),L*0.99,1);MA5和MA20前面的冒号是输出会画线DRAWICON的第三个参数1是图标编号代表一个向上的箭头编号不存在的图标会静默不显示这是新手最容易误判成「公式没生效」的地方。L*0.99把箭头压在最低价下方一点避免盖住 K 线实体。3. 神算子主图指标的四类核心模块拆解与代码复现拆开看这类主图指标的源码结构高度相似一段算成本线和均线一段算压力支撑一段给 K 线着色或者标倍量柱最后一段用交叉条件输出买卖点箭头。把四段分别写通再拼起来就等于把整份源码重写了一遍这比逐行猜作者意图高效得多。3.1 主力成本线用 AMOUNT 和 VOL 算出筹码重心主力成本线是主图指标里最有信息量的一根线算法本身很简单就是一段时间内的成交额加权均价。通达信里AMOUNT的单位是元VOL的单位是手一手等于 100 股所以两者相除之后必须再除以 100 才回到「每股价格」。{主力成本线N 周期成交额加权均价} 成本线:SUM(AMOUNT,N)/SUM(VOL,N)/100,COLORRED,LINETHICK2; {再用一条短期成本线做对比看资金是否在抬升成本} 短成本:SUM(AMOUNT,5)/SUM(VOL,5)/100,COLORYELLOW;N就是第 2 章里定义的那个参数默认 20 对应一个月左右的交易日。SUM(AMOUNT,N)是最近 N 根 K 线的成交额累加SUM(VOL,N)/100是同一区间折算成股的成交量两者相除得到均价。逻辑上它比简单均线更贴近真实持仓成本因为放量日的权重大。实践里这条线有几个明确特征。价格长期在成本线之上运行说明最近 N 天的买入者整体是浮盈的抛压相对小价格跌破成本线之后反复上不去成本线就变成上方压力。它的缺点是滞后N 取到 60 以上时转势之后要过很久线才会拐头所以常见做法是同时画 20 和 60 两条短成本上穿长成本作为资金重新进场的参考。注意AMOUNT在某些行情源或分时周期下可能返回 0导致成本线出现除零或者断裂。正式加载前先在一只活跃股上确认这条线是连续的。3.2 压力线与支撑线HHV/LLV 加 REF 的正确写法压力支撑的计算公式看着简单但 90% 的源码在这里埋了坑。直觉写法是压力:HHV(H,20);问题是当根 K 线的最高价还没走完HHV会随着盘中价格实时变化压力线就会在图上跳来跳去。正确做法是用REF把统计区间整体前移一根让压力位只由已经收盘的 K 线决定。{三根压力线分别对应短中长三个周期的高点} 压力1:REF(HHV(H,20),1),COLORGREEN,LINETHICK1; 压力2:REF(HHV(H,60),1),COLORGREEN,DOTLINE; 压力3:REF(HHV(H,120),1),COLORGREEN,DOTLINE; {对应的支撑线用 LLV 换方向} 支撑1:REF(LLV(L,20),1),COLORBLUE,LINETHICK1; 支撑2:REF(LLV(L,60),1),COLORBLUE,DOTLINE;REF(HHV(H,20),1)的意思是「前一根 K 线为终点、往前数 20 根的最高价」整条线不会因为当根波动而重算。DOTLINE是画线样式修饰词写在语句末尾把线改成虚线用来区分不同周期的压力类似的还有LINETHICK1到LINETHICK3控制粗细。多周期叠加的用法是价格同时站上压力1和压力2说明突破了近三个月的高点区间这种位置往往伴随放量。反之价格在压力3下方反复试探不破说明长周期套牢盘还在压着。这套「三根压力线」的画法在不少主图指标里换个名字重复出现逻辑是同一套。3.3 K 线着色与倍量柱标记主图指标让人一眼看懂的关键在配色。通达信默认 K 线是红涨绿跌公式通过STICKLINE重画 K 线实体来覆盖默认颜色从而实现「只给特定条件的 K 线换色」。{把放量倍量的 K 线实体单独标出来} 倍量:VREF(V,1)*2 AND CO; STICKLINE(倍量,O,C,3,1),COLORMAGENTA; {把站在主力成本线之上的 K 线涂成黄色直观区分强弱区} 强势区:CSUM(AMOUNT,N)/SUM(VOL,N)/100; STICKLINE(强势区,O,C,0.5,1),COLORYELLOW;STICKLINE有五个参数顺序是「条件、价格1、价格2、宽度、是否空心」。宽度取值一般是 0 到 20取 3 接近默认 K 线实体的粗细最后一个参数填 1 是空心柱填 0 是实心柱。上面代码里用0.5的宽度画背景色是为了让它垫在原始 K 线下面不遮挡实体。倍量判定VREF(V,1)*2的倍数阈值不要写死成 2震荡市里 1.5 倍就算明显放量趋势市里 2 倍以上才有意义。这也是主图指标里最值得做成参数的地方之一改成一个可调参数R默认 1.8比硬编码要实用。3.4 买卖点提示CROSS 加 DRAWICON 的落地写法信号部分是最容易出问题的。很多流传版本的买卖点用的是ZIG类函数历史图上每个拐点都标得又准又漂亮实盘时最后一个信号会随着价格变化不停移动这就是典型的信号闪烁。稳妥写法是把信号建立在确定性的交叉条件上并且加一层过滤。{基础金叉5 日线上穿 20 日线且当日成交量高于 5 日均量} 金叉:CROSS(MA(C,5),MA(C,20)) AND VMA(V,5); 死叉:CROSS(MA(C,20),MA(C,5)); {过滤距上次死叉至少间隔 3 根 K 线避免均线缠绕时连续出信号} 有效金叉:金叉 AND BARSLAST(死叉)3; DRAWICON(有效金叉,L*0.98,1); DRAWICON(死叉,H*1.02,2); DRAWTEXT(有效金叉,L*0.96,买),COLORRED; DRAWTEXT(死叉,H*1.04,卖),COLORGREEN;CROSS(A,B)在 A 上穿 B 的那一根返回 1之后返回 0所以它天然是「只标记一次」的不会像AB那样在整个上涨段里连续出信号。BARSLAST(死叉)3是在做去噪均线缠绕的震荡区间里金叉死叉会交替出现加了最小间隔之后信号数量能砍掉一半以上。DRAWICON的坐标参数需要留出视觉空间。箭头画在L*0.98、文字画在L*0.96是因为主图 Y 轴是线性的价格越高需要的绝对偏移越大低价股上L-0.1就够高价股上L*0.98更稳。文字标签用的是单引号包裹的半角字符串中文标签在 GBK 编码下能正常显示。4. 参数怎么设、未来函数怎么排神算子主图指标最常踩的坑同一份源码参数不同表现可以完全相反。有人用 5 和 20 觉得信号太密有人改成 10 和 60 又嫌反应慢问题不在公式在于参数和持仓周期没对齐。这一章把参数、未来函数和显示异常三件事一起说清楚。4.1 参数表与调参思路先把参数集中列成一张表写进公式的时候按这个填后面调的时候只改数值不动结构。参数名含义默认值建议范围改大后的效果N主力成本线周期205 ~ 60线更平滑转势滞后更明显N1压力支撑周期2010 ~ 120压力位更远突破信号更少更重M1短均线周期53 ~ 13信号变少单次信号更可靠M2长均线周期2013 ~ 60过滤震荡但错过快速启动R倍量倍数阈值1.81.5 ~ 3.0只有极端放量才标记G信号最小间隔32 ~ 10信号数量明显下降调参有三条经验。一次只改一个参数改完在图上直接对比同一段行情同时改两个以上你分不清是哪个起了作用。第二先固定结构再调数值也就是先把该有几条线、几个信号点定下来再去调周期反过来做会越调越乱。第三参数改完必须回公式管理器点「确定」再重新加载光按 F5 刷新 K 线不会让公式重新编译这是很多人改了参数没反应的真实原因。短线用法一般是M15, M213, N10中线可以放到M110, M230, N30。没有普适最优值判断标准只有一个在你实际持仓周期上信号出现后下一根 K 线是否还能站住。4.2 未来函数与信号闪烁的识别方法未来函数是主图指标口碑崩塌的头号原因。所谓未来函数就是计算当根 K 线的值时引用了后续 K 线的数据。历史图上它能把每一个高低点都标得完美实盘时数据还没来信号自然就消失了。通达信里常见的未来函数包括ZIG、PEAK、TROUGH、PEAKBARS、TROUGHBARS、BACKSET、REFX、REFXV。看到这几个名字就要提高警惕。{反例ZIG 会随新数据重绘历史信号漂亮但会移动} 买点1:ZIG(3,5)REF(ZIG(3,5),1); {正例用确定的交叉条件并把判断延后一根 K 线确认} 信号:CROSS(MA(C,5),MA(C,20)); DRAWICON(REF(信号,1),L*0.98,1);正例里的REF(信号,1)是常用的规避手法只有当上一根 K 线确认了交叉才在当前 K 线画图标等于把判断推迟一根。代价是买点价格略高换来的是信号不会消失。手工验证的办法有三个可以叠加用。看公式管理器保存时有没有弹出「含未来函数」的提示弹了就别指望实盘一致。把图表周期切到 1 分钟观察最近的信号点在你不断刷新时是否来回移动。再有就是给信号单独写一个副图用X:信号;输出把副图显示区间设成和主图一致逐日核对主图箭头和副图数值是否同一天出现。4.3 常见报错与显示异常的排查清单公式加载失败或显示异常绝大多数都能归到下面几类。按这张表从上往下查比在网上搜报错信息快。现象常见原因处理方式提示语法错误全角标点、中文分号、行尾漏分号用 2.2 的脚本清洗后再粘提示变量未定义变量名里有空格或引用了未赋值的名字变量名统一用英文字母加数字K 线被压成一条线主图叠加公式里输出了 0~100 的震荡值改副图或乘以C换算成价格只有部分线显示输出值远离价格区间被坐标轴挤出去检查表达式量纲必要时加NODRAW关掉箭头图标不显示图标编号不存在或坐标算成了负数换用 1~20 内的常用编号坐标用L*0.98导入 tn6 后公式为空版本不兼容或包已加密放弃导入改为手工粘贴明文源码改了参数没变化只按了 F5公式未重新编译回公式管理器点「确定」再重载还有一类不算报错但很影响使用公式太多导致软件卡顿。通达信公式是逐根 K 线解释执行的主图叠加公式里每多一条DRAWICON和DRAWTEXT全市场翻页时的开销都会上来。常见做法是主图只保留成本线和买卖点把均线族和倍量统计拆到副图需要时再切回来。同时运行的窗口数也别拉太满20 路以上的分时窗口叠加多个自定义公式响应会明显变慢。5. 进阶用导出数据回验主图信号把通达信指标公式源码变成可验证的策略公式在主图上画得像那么回事不等于它有效。最便宜的验证方式是把日线数据导出成文本用 Python 把公式逻辑重算一遍看信号出现后 5 根 K 线的分布。这一步不需要任何外部数据源通达信自带的数据导出就够用。导出路径一般是「系统 → 盘后数据下载」补齐日线之后在 K 线图上右键选「数据导出」或者在「系统 → 导出数据」里选当前品种格式选 txt字段勾选日期、开盘、最高、最低、收盘、成交量、成交额。导出的文件是制表符分隔的 GBK 文本。import pandas as pd df pd.read_csv(SH600000.txt, sep\t, encodinggbk) df.columns [date, open, high, low, close, vol, amount] df df.sort_values(date).reset_index(dropTrue) # 与公式 SUM(AMOUNT,N)/SUM(VOL,N)/100 完全对齐rolling(N) 就是当根及前 N-1 根 N 20 df[cost] df.amount.rolling(N).sum() / df.vol.rolling(N).sum() / 100 # 复算金叉条件注意 shift(1) 对应公式里的 REF df[ma5] df.close.rolling(5).mean() df[ma20] df.close.rolling(20).mean() df[cross] (df.ma5 df.ma20) (df.ma5.shift(1) df.ma20.shift(1)) df[vol_ok] df.vol df.vol.rolling(5).mean() # shift(-5) 引入了未来数据只用于事后统计绝不能出现在选股或实盘信号里 df[ret5] df.close.shift(-5) / df.close - 1 sig df[df.cross df.vol_ok] print(信号数量, len(sig)) print(sig.ret5.describe()) print(胜率, (sig.ret5 0).mean().round(3))这段代码里有几处和公式一一对应值得逐条核对。rolling(N).sum()在 pandas 里包含当根通达信的SUM(X,N)同样包含当根所以两者口径一致不需要再往前挪一根。shift(1)对应公式里的REF(X,1)。shift(-5)是本章唯一引入未来数据的地方它只在计算已完成的历史收益时使用一旦出现在实盘信号里就等价于在公式里写了未来函数。回验的重点不是胜率数字本身而是三件事。信号数量是否合理如果一段两年日线上出现几百个信号说明去噪参数不够要去调G或者量能过滤。收益分布是否对称如果均值被少数极端值拉起来、中位数接近零说明信号捕捉的是个别行情而非稳定规律。以及把参数换成另一组再看一遍如果结论翻转说明这套参数是拟合出来的。最后一件事把验证过的逻辑做成条件选股公式。条件选股公式和主图指标公式的语法几乎一致但有一条硬约束它不能包含DRAWICON、DRAWTEXT、STICKLINE、PARTLINE这类画线函数写了会直接报错。所以正确做法是保留计算部分把所有画线语句删掉最后一行留一个布尔表达式作为选股条件。{条件选股公式主图金叉且站上主力成本线} MA5:MA(C,5); MA20:MA(C,20); 成本:SUM(AMOUNT,20)/SUM(VOL,20)/100; 金叉:CROSS(MA5,MA20) AND VMA(V,5); XG:金叉 AND C成本;中间变量全部用:赋值只有最后一行用:输出这样公式管理器才知道要选什么。做成条件选股之后主图看形态、选股公式批量筛标的同一套源码逻辑就能同时服务于盯盘和选股两个场景这才是把一份 .doc 拆到底的价值。本文还有配套的精品资源点击获取
返回列表