ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

潜龙抄底A指标源码逐行拆解:通达信低点偏度选股公式与Python复算

潜龙抄底A指标源码逐行拆解:通达信低点偏度选股公式与Python复算 简介这是一份通达信副图选股指标‘潜龙抄底A’的公式源码与逐句解读教程面向股票技术分析爱好者和通达信用户尤其适合希望学习指标编写逻辑的初、中级投资者。指标设计融合了短期趋势与底部结构判断以5日均线X_1反映短期方向用X_4度量当前低价与前一日低价的波动强度再通过EMA对X_5平滑处理结合30日最低价X_6和指标高点X_7确定底部区间并引入0.618黄金分割系数对买入信号进行加权X_9最后经X_10标准化到0100以X_10大于30且当日开盘价为正作为选股触发条件XG实现相对稳健的抄底提示。资源为1个doc文件共166KB内容包含可直接导入通达信的完整公式源码以及每个变量的作用注释帮助读者理解整套选股思路便于后续自行修改或扩展。已有171人学习下载适合需要参考成熟抄底策略、提升自身公式编写能力的投资者。1. 潜龙抄底A一个靠“低点偏度”触发而不是均线支撑的副图源码我拆过不下两百个自称“抄底”的指标源码“潜龙抄底A”是少数让我看完第一遍就想跑回测的。它的核心变量 X_4 是一个 RSI 变体但分子用的是绝对波动而非涨幅结果就是股价越往下砸这个变量涨得越快而不是像普通 RSI 那样在超卖区域钝化。更值得注意的是 X_5 里那个IF(CLOSE*1.3,...)的条件写法它并不像文档注释里写的“根据收盘价超过 1.3 倍昨日低价则放大 10 倍”因为CLOSE*1.3在正常交易价格下恒为真整个放大/缩小切换实际从未发生过。这个指标解决的核心问题是在低位震荡行情里把恐慌性急跌与前几天的横盘状态区分开并把累积恐慌度映射成 0 到 100 的选股分。适合正在补技术分析短板、又不想被网上“副图源码”带偏的量化入门者也适合手工复盘时需要一个可解释信号的人。2. 源码逐行拆解从 X_1 到 XG 的信号链路2.1 基线与昨日基准X_1、X_2、X_3 的真实作用X_1:MA(CLOSE,5)是 5 日均线按理说用于判断短期趋势。但我在通读全文后确认X_1 在整个公式里从未被后续任何变量引用。也就是说哪怕删掉这一行选股结果也不会有任何变化。这在分享类源码里非常常见——原作者可能一开始设计了均线过滤后来改了思路却没删代码。X_2 是常数 1它的作用更接近于“留一个参数口”所有乘X_2的地方数学上等价于不乘真正有意义的是它提示了一个改造方向如果你想把整条信号链路整体缩放只需要改 X_2 这一个变量而不必动后面的公式。X_3 是REF(LOW,1)引用昨日最低价作为后续所有波动计算的基准这一步没有引入未来函数因为在计算当日指标时昨日最低价在开盘前就已经是确定值。2.2 X_4 的偏度学为什么跌得越狠它涨得越快X_4 是理解整个指标最关键的变量但网上多数解读把它说成“价格波动强度”这不够准确。它的结构是X_4:SMA(ABS(LOW-X_3),3,1)/SMA(MAX(LOW-X_3,0),3,1)*100*X_2;分母MAX(LOW-X_3,0)只保留“当日最低价高于昨日最低价”的部分低于昨日低点的位移被置零分子ABS(LOW-X_3)则把上涨和下跌位移都算进去。把这个比值用 SMA 递归平滑后乘以 100得到的是一个以 100 为中轴的比值指标。分三种情况看当日最低价与昨日最低价的关系分子 ABS 行为分母 MAX 行为X_4 量级低点抬升LOW 昨低等于上涨位移等于上涨位移分子分母相等稳定在 100 附近低点持平LOW ≈ 昨低接近 0接近 0可能出现除零不稳定接近 100 或溢出低点下沉LOW 昨低保留下跌幅值被置零SMA 递归后滑向 0远大于 100可达上千所以 X_4 的真实含义不是“波动强度”而是“低点位移的偏度”当价格连续几天创阶段新低时分母的递归平滑值快速衰减分子却还保留着之前的波动幅值两者相除的结果会呈指数级放大。这也解释了为什么连续阴跌几天后X_4 会突然飙高——它度量的是向下偏离的加速度而不是下跌本身。提示如果你在副图里看到 X_4 的值出现两位数甚至四位数的尖峰不要以为是数据错误这正是该指标识别“恐慌段”的机制。2.3 X_5 的条件陷阱IF 恒真分支会让缩放逻辑失效X_5:EMA(IF(CLOSE*1.3,X_4*10,X_4/10),3)*X_2;这段代码表面上是当收盘价大于某个阈值时把 X_4 放大 10 倍否则缩小 10 倍。但通达信的条件判断规则是IF 的第一个参数只要是非 0 数值就视为真。CLOSE 是收盘价A 股价格不可能为 0 或负值所以CLOSE*1.3永远是一个正数这个 IF 分支实际上恒真X_4 永远被乘以 10 后再做 3 日 EMA。作者的本意大概率是IF(CLOSEX_3*1.3,...)漏写了关系运算符。这个恒真分支并不致命因为后续 X_7 和 X_9 的比值结构会把缩放倍数的影响部分抵消但它改变了信号触发的灵敏阈值。如果你把 X_5 里的*10改成*5整个指标的选股频率会显著变化因为 30 日最高值 X_7 的基准被整体抬高了。2.4 底部窗口与顶值跟踪X_6、X_7 确定自适应区间X_6:LLV(LOW,30)是 30 日最低价X_7:HHV(X_5,30)是 X_5 在过去 30 天的最高值。这两个变量构成一条自适应的“恐慌通道”X_6 告诉你当前价格离最近一个月的极端低点有多远X_7 告诉你恐慌指标在最近一个月曾经冲到什么位置。后面的买入信号只有在当日最低价触及或跌破 X_6 时才会被激活这保证了它只参与“跌到关键位置”这一段行情的判定避开高位横盘时的无效信号。2.5 X_8 的恒真过滤与 X_9 的 618 之谜X_8:IF(MA(CLOSE,58),1,0)*X_2;在价格正常的情况下MA(CLOSE,58) 必然是一个正数IF 条件恒真X_8 恒等于 1。它和第二节的 X_1 一样属于冗余代码。接下来是最容易被营销文案曲解的一行X_9:EMA(IF(LOWX_6,(X_5X_7*2)/2,0),3)/618*X_8*X_2;网上解读说“618% 的权重调整反映黄金分割比率”。但通达信公式引擎里/618就是除以六百一十八没有任何百分比语义——如果你想表达黄金分割的 61.8%应该写成*0.618。这个误读直接改变了量级判断X_9 被压缩得很厉害这意味着 XG 里那个30的阈值实际要求 X_4 在极端恐慌状态下持续走高X_5 的 30 日高点也要同步抬高两者共振才能把分数推到 30 以上。不是随便一个低位十字星就能触发的。2.6 信号落点X_10 截断与 DYNAINFO(4) 的选股语义X_10:IF(X_9100,100,X_9);做上限截断防止极端数据破坏副图显示比例。XG:X_1030 AND DYNAINFO(4)0;是最终条件。DYNAINFO(4) 是当日开盘价大于 0 用于过滤停牌股——停牌股票取不到有效开盘价动态行情函数会返回 0 或空值。这个条件在盘中预警时是动态刷新的在盘后选股时取的是当日最终数据。整个信号链路可以浓缩为低点偏度 X_4 走高 → EMA 平滑放大成 X_5 → 与 30 日极值比较 → 归一化截断 → 阈值选股。3. 公式管理器 6.06 里导入编译与条件选股的完整流程3.1 新建副图公式的正确姿势打开通达信客户端按CtrlF调出公式管理器在“技术指标公式”分类下点击“新建”。公式管理器 6.06 是当前主流版本编辑器支持语法着色但不会帮你提示括号匹配。粘贴源码时要注意先把文档里的公式复制到系统自带的记事本里过一遍确认没有隐藏字符或中文引号。通达信源码最容易踩的坑是全角括号和全角分号——从 Word 文档复制的公式经常把;换成中文分号编辑器编译时会报“缺少分号”或“变量定义错误”。新建副图公式时名称填“潜龙抄底A”画线方法选“副图”把第 2 章拆解的那段源码整体粘贴进去。如果你希望 X_4、X_5 这些中间变量也能显示出来可以把变量名后面的:改成:通达信只有单冒号的变量才会输出到副图。如果只想看最终的 X_10 和选股信号保持原样即可。测试一下编译输出“测试通过”后点确定保存。3.2 条件选股公式与 XG 输出线的处理副图公式和条件选股公式在通达信里是两个不同的公式类型。副图公式里写XG:...表示中间赋值不输出但在条件选股界面调用“指标选股”时公式引擎需要识别一个表示结果的输出变量。正确做法是在公式管理器左侧选择“条件选股公式”分类新建一个公式把同一段源码粘进去并且把最后一行改成XG:X_1030 AND DYNAINFO(4)0;单冒号XG:在条件选股公式里会被识别为最终结果编译后才能进入选股器的指标列表。DYNAINFO(4) 在条件选股公式里同样有效因为它读取的是动态行情数据与公式类型无关。3.3 历史区间回测与盘中预警的入口用“功能 → 选股器 → 条件选股”打开选股对话框在“公式”下拉框里找到刚建好的“潜龙抄底A”把选股范围限制为“沪深 A 股”。如果想验证历史信号不要直接用默认的“当前行情”而是勾选“历史区间”把起止日期设置到近三个月再点“执行选股”。通达信会把历史每一天满足条件的股票列表逐日拉出来你可以观察信号出现的位置是否真处于相对低位。盘中预警则在“功能 → 预警系统 → 条件预警设置”里添加该选股公式周期选日线触发频率建议设为每 5 分钟扫描一次避免盘中高频调用拖慢行情速度。3.4 tn6 格式文件与源码文本的边界如果你拿到的资源包里有.tn6文件而不是.doc或.txt源码情况会不同。tn6 是通达信编译后的加密格式公式管理器可以直接导入使用但无法在编辑器中查看或修改源码。网上流传的“tn6 转 txt”工具大多不可靠因为通达信没有开放反编译接口。常见做法是用公式管理器“导入公式”直接加载 tn6副图显示和条件选股功能正常但你不能改参数如果想要可编辑的源码文本需要找原作者要明文。这点在交易团队内部协作时尤其重要——交付物应该同时包含 tn6 和 txt 源码否则后来的人只能把一个黑盒留在策略库里。注意不要使用所谓的“通达信指标和谐器”去解密 tn6 文件这类工具往往携带恶意脚本而且解密后的源码可能与原始逻辑不一致风险远大于收益。4. 三个源码缺陷与 Python 复算验证4.1 除零边界X_4 在低点持平时的行为当LOW REF(LOW,1)时分母SMA(MAX(LOW-X_3,0),3,1)会得到 0X_4 变成除零表达式。通达信公式引擎对除零的处理在不同版本上有差异部分版本会返回 0部分版本会保留上一次计算值。这个差异会导致同样一段行情在两个不同版本的通达信上选出不同的股票。如果你负责团队里的策略维护建议在公式开头加一行防护SAFE_DENOM:IF(SMA(MAX(LOW-X_3,0),3,1)0,0.0001,SMA(MAX(LOW-X_3,0),3,1)); X_4:SMA(ABS(LOW-X_3),3,1)/SAFE_DENOM*100;用极小值替换零分母保证 X_4 在低点持平的日子里回落到接近 100 的中性水平而不是触发未定义行为。4.2 恒真条件与前 58 根 K 线的冷启动X_5 的IF(CLOSE*1.3,...)恒真已经在前文分析过。另一个隐蔽问题是 X_8 在上市不足 58 个交易日的次新股上会怎样——MA(CLOSE,58) 在前 58 根 K 线上返回空值或 0IF 条件判断为假X_8 取 0导致整条信号在次新股的早盘阶段被屏蔽。也就是说该指标对上市时间超过 58 天的股票才有效这在选股时需要用上市日期做前置过滤。4.3 用 Python 复算信号链路验证指标行为想把它当作量化指标公式源码来做历史回测时一个常见问题是通达信的 SMA 和 EMA 与 Pandas 里的同名函数算法不同。通达信的 SMA(X,N,M) 递归式是Y_i(M*X_i(N-M)*Y_{i-1})/N当 M1,N3 时权重很轻平滑效果远弱于 EMAEMA(X,N) 的递归式是Y_i(2*X_i(N-1)*Y_{i-1})/(N1)。用 Pandas 的ewm直接算会得到完全不同的曲线。我一般这样复算import numpy as np def tdx_sma(x, n, m1): y np.full(len(x), np.nan, dtypefloat) for i in range(len(x)): if i 0: y[i] x[i] else: y[i] (m * x[i] (n - m) * y[i - 1]) / n return y def tdx_ema(x, n): y np.full(len(x), np.nan, dtypefloat) k 2 / (n 1) for i in range(len(x)): if i 0: y[i] x[i] else: y[i] k * x[i] (1 - k) * y[i - 1] return y # low 为日线最低价序列close 为收盘价序列 pre_low np.roll(low, 1) pre_low[0] low[0] sm_abs tdx_sma(np.abs(low - pre_low), 3, 1) sm_pos tdx_sma(np.maximum(low - pre_low, 0), 3, 1) x4 np.where(sm_pos 0, sm_abs, 100 * sm_abs / sm_pos)这段代码的关键在np.where(sm_pos 0, sm_abs, ...)它把除零位置用分子本身替代效果比固定常数更接近通达信部分版本的行为。实际复算时你会发现X_4 在连续下跌段的量级经常超过 1000经过 X_5 的 10 倍放大后 X_7 可能到几万X_9 除以 618 之后回落到几十恰好落在 30 阈值附近——这就是整个指标量纲设计的内在逻辑不是巧合。4.4 未来函数检查与 DYNAINFO(4) 的盘前限制检查一遍全部函数REF 只引用昨日数据LLV、HHV 在当前 K 线上取值SMA、EMA 是递归平滑不改变对齐IF 条件分支不引入未来信息。DYNAINFO(4) 在盘中取的是实时开盘价在盘后取当日最终值用在 XG 里不会造成信号漂移。需要注意它在集合竞价阶段可能返回 0所以早盘 9:25 到 9:30 之间跑选股会漏掉一批票最好等开盘后再执行。5. 参数化改造修正恒真条件与归一化分母5.1 改造目标与参数设计原始代码最大的问题不是逻辑而是三个“看起来有用但实际无行为”的写法X_1 未参与计算、X_8 恒为真、X_5 条件恒真。改造版应该修正这些缺陷同时保留 X_4 的低点偏度核心。把 3、30、58、618 这四个硬编码数字提升为参数并给 X_9 的除数起一个明确的名字{ 潜龙抄底A 参数化改造版 } N1:3; { X_4 的 SMA 平滑周期 } N2:30; { 底部/顶部统计窗口 } N3:58; { 长期趋势过滤周期 } GOLD:618; { 归一化除数 } VAR_MA5:MA(CLOSE,5); PRE_LOW:REF(LOW,1); DIF_ABS:ABS(LOW-PRE_LOW); DIF_POS:MAX(LOW-PRE_LOW,0); SMA_ABS:SMA(DIF_ABS,N1,1); SMA_POS:SMA(DIF_POS,N1,1); VOL_INTEN:IF(SMA_POS0,SMA_ABS,100*SMA_ABS/SMA_POS); { 修正 X_5用明确的关系表达式替换恒真写法 } BOOSTED:IF(CLOSEPRE_LOW*1.3,VOL_INTEN*10,VOL_INTEN/10); SMOOTH:EMA(BOOSTED,3); BOTTOM:LLV(LOW,N2); TOPVAL:HHV(SMOOTH,N2); TREND_OK:IF(MA(CLOSE,N3)0,1,0); SCORE_RAW:EMA(IF(LOWBOTTOM,(SMOOTHTOPVAL*2)/2,0),3)/GOLD*TREND_OK; SCORE:IF(SCORE_RAW100,100,SCORE_RAW); SEL:SCORE30 AND DYNAINFO(4)0; STICKLINE(SCORE30,0,SCORE,2,0),COLORRED;这段代码把原来模糊不清的IF(CLOSE*1.3,...)改成了明确的关系表达式CLOSEPRE_LOW*1.3意思是当日收盘价高于昨日最低价的 1.3 倍时才放大波动强度否则缩小。同时把 X_9 的 618 改成参数 GOLD保留原始量纲不变——如果你在回测中发现信号太少可以先把 GOLD 降到 500 观察变化而不是直接改 SCORE 的阈值 30。5.2 副图可视化的增量信息加了一行STICKLINE(SCORE30,0,SCORE,2,0),COLORRED;把分数以红色柱状图画出柱子的高度就是信号强度。这个可视化有两个用途一是观察 SCORE 逼近 30 阈值的“蓄势”过程二是对比信号出现后的走势判断阈值前后 SCORE 回落的速度。副图里还能加一条参考线30,DOTLINE;让阈值位置更直观。实际调参时我会先看 N1 从 3 改到 5 对 SCORE 波形的影响——N1 越大曲线越平滑信号越少但滞后越明显这个取舍没有标准答案。5.3 参数敏感性需要注意的边界把 N2 从 30 改成 60底部确认窗口变大BOTTOM 值更低LOWBOTTOM 更难触发直接结果是选股频率显著下降。把 GOLD 从 618 改到 300SCORE 整体放大一倍原来 15 分的次强信号会跨过 30 阈值选股数量暴涨。这类修改没有对错但要意识到原始 GOLD618 本身就是一种强烈的过滤强度设定不要只调阈值 30 而忽略归一化分母的影响。改完参数后建议用第 3 节的历史区间选股跑一遍对比信号数量与后续 10 日收益分布再决定参数去向。6. 阈值前移与连续确认盘中预警的增量信息SCORE 达到 30 才触发信号但 SCORE 从 20 爬到 30 往往需要两到三天这段时间如果价格已经反弹了 5 个百分点入场意义就小了一半。更实用的做法是把阈值前移到 25 作为“观察线”并用 COUNT 函数统计最近几天内信号出现的次数只有连续确认才画提示SEL_RAW:SCORE30 AND DYNAINFO(4)0; SEL_CNT:COUNT(SEL_RAW,3); PRELINE:25,COLORGRAY; OBSERVE:SCORE25 AND SCORE30,COLORYELLOW; DRAWTEXT(SEL_CNT2,10,连续确认),COLOR00FFFF;COUNT(SEL_RAW,3) 统计最近 3 个交易日内满足 SEL_RAW 的天数。上一次信号如果是 30 分但隔了一天就跌回 20 分以下说明恐慌度没有得到承接这时候追进去大概率是接飞刀。只有 3 天里至少两天满足条件才说明低点偏度维持在阈值之上恐慌状态具有持续性。DRAWTEXT 在副图 10 的位置输出“连续确认”文字提示。配套的盘中预警设置在条件预警里加载修改版的选股公式并且额外加一个预警条件OBSERVESCORE 在 25 到 30 之间作为预触发。具体做法是把上述公式另存为一个副图指标预警系统里引用该指标设置“指标值大于等于 0”触发。这样操作会把预警提前到 SCORE 突破 25 的时刻而非等到 30。需要注意的是盘中 DYNAINFO(4) 会变化集合竞价阶段 SCORE 可能失真预警时间窗口建议设定为 9:35 到 14:50。想验证这套阈值是否适合你的标的池把 N2 从 30 调到 45、GOLD 从 618 调到 400然后对比同一段行情里信号前移的天数差异再回答自己一个问题这个指标在震荡筑底和单边下跌中段的表现哪个更符合你想要的买点。本文还有配套的精品资源点击获取
返回列表