通达信危中择机金砖选股公式源码解析与实战
简介这份通达信指标公式源码文档面向股票技术分析爱好者与量化选股初学者围绕「危中择机 金砖选股」策略提供可直接导入软件的选股公式帮助使用者在复杂行情中筛选具备上涨潜力的标的。资源包内含1个doc文件大小约138KB以文档形式集中呈现公式源码与逻辑说明便于对照阅读和复制调试。文档核心基于赢家函数构建齐胸、齐腰、齐踝三档持股成本分布并衍生出状态1至状态5、TJ1至TJ6、BT001至BT004等多组触发条件配合JLBT过滤、DXBT长周期交叉以及怒放、半开两类买入信号完整展示了从情绪判断到信号确认的编写思路。目前已有115人学习适合希望理解筹码分布选股逻辑、并在此基础上二次修改公式的读者参考。1. 危中择机金砖选股一份公式文档能解决什么真实问题很多人第一次看到“通达信指标公式源码 危中择机 金砖选股 选股公式.doc”这类标题第一反应是去找一个能直接导入的公式文件然后指望它每天自动弹出几只票。但真正在一线用过通达信公式做选股的人都知道公式本身只是把一套交易逻辑翻译成机器能执行的判断条件它不会替你决定仓位也不会替你扛回撤。这份文档真正有价值的地方在于它把“危中择机”这个偏主观的择时思路拆成了可量化、可回测、可复现的条件组合再通过“金砖选股”这个筛选框架落到具体的选股输出上。换句话说它解决的是从“我觉得现在跌得差不多了”到“系统告诉我哪些标的在超跌后出现了资金承接迹象”之间的翻译问题。适合两类人一类是已经有自己的交易直觉但苦于手工翻票效率太低的老手另一类是想学通达信公式编写需要一个完整案例来理解条件选股、指标引用和信号过滤的新手。下面我会按“先理解逻辑再动手写公式最后调参排错”的顺序把这份文档背后的技术路径完整拆一遍。2. 拆解“危中择机”的量化条件从交易语言到公式语言2.1 危中择机到底在描述什么市场状态“危中择机”四个字拆开看“危”指的是市场或个股处于短期急跌、连续阴线、跌破关键均线、情绪指标进入低位区域的状态“择机”则是在这种状态下寻找止跌信号比如长下影线、缩量企稳、资金回流、指标背离。落到通达信公式里你不能直接写“跌得差不多了”必须把它翻译成具体的数值判断。常见做法是用三个维度来定义“危”第一价格维度比如收盘价低于20日均线超过一定幅度或者连续N根K线收阴第二成交量维度比如成交量萎缩到5日均量的某个比例以下代表抛压衰竭第三摆动指标维度比如KDJ的J值小于0或者RSI低于30。这三个维度不需要同时满足但至少要覆盖两个否则“危”的定义会太宽选出来的票全是下跌趋势中继而不是真正的超跌区域。“择机”的部分则要引入确认信号。我一般会看两类一类是K线形态确认比如出现锤子线、早晨之星、阳包阴另一类是量价确认比如当日收阳且成交量大于前一日或者MACD绿柱缩短。确认信号的作用是过滤掉那些“还在跌但看起来便宜”的标的只保留“跌势出现停顿迹象”的标的。2.2 把条件写成通达信可执行的逻辑表达式通达信公式语言本质上是一套面向数组的表达式系统每个变量代表一条时间序列条件判断返回0或1。下面这段代码是我根据“危中择机”思路写的一个基础框架你可以直接复制到通达信的公式编辑器里测试{危中择机基础条件框架} {参数定义N1为均线周期N2为连续阴线根数N3为缩量比例} N1:20; N2:3; N3:0.7; {维度一价格偏离} MA20:MA(CLOSE,N1); 偏离度:(MA20-CLOSE)/MA20*100; 价格危:偏离度8; {收盘价低于20日线8%以上} {维度二连续阴线} 阴线:CLOSEOPEN; 连续阴线:EVERY(阴线,N2); 量危:VOLMA(VOL,5)*N3; {成交量低于5日均量70%} {维度三摆动指标低位} J值:KDJ.J; 指标危:J值0; {危的条件至少满足两个} 危:价格危连续阴线量危指标危2; {择机确认当日收阳且放量} 确认阳:CLOSEOPEN AND CLOSEREF(CLOSE,1); 确认量:VOLREF(VOL,1); 择机:确认阳 AND 确认量; {输出信号} XG:危 AND 择机;这段代码的逻辑说明偏离度衡量的是价格偏离均线的程度数值越大说明短期跌得越狠连续阴线用EVERY函数判断最近N2根K线是否全部收阴量危判断成交量是否萎缩到5日均量的N3倍以下指标危用KDJ的J值是否小于0来判断超卖。最后用加法把四个条件汇总要求至少满足两个再叠加“收阳且放量”的确认信号。参数说明N1默认20代表短期均线周期如果你做的是更短线的超跌反弹可以改成10N2默认3代表连续阴线根数改成4或5会让“危”的条件更严格N3默认0.7代表缩量比例数值越小要求缩量越极端。这三个参数没有绝对最优值需要根据你关注的标的池和交易周期来调。2.3 金砖选股框架如何做二次过滤“金砖选股”这个名字听起来像是一个独立的选股器但在通达信公式体系里它通常是一组附加条件的集合用来在“危中择机”信号出现后进一步筛选出质地更好的标的。常见的附加条件包括市值大于某个阈值、换手率在合理区间、非ST、上市时间超过一年、所属行业不在近期强监管名单里。这些条件在通达信里可以通过引用财务数据函数和板块函数来实现。比如FINANCE(40)可以取流通市值DYNAINFO(37)可以取换手率NAMELIKE(ST)可以排除ST股。下面是一个金砖过滤的示例{金砖选股附加过滤条件} 流通市值:FINANCE(40)/100000000; {单位亿元} 市值条件:流通市值20 AND 流通市值500; 换手率:DYNAINFO(37); 换手条件:换手率1 AND 换手率15; 非ST:NOT(NAMELIKE(ST)); 上市天数:FINANCE(42); 上市条件:上市天数250; 金砖过滤:市值条件 AND 换手条件 AND 非ST AND 上市条件; {最终选股信号} 最终选股:危 AND 择机 AND 金砖过滤;这里的逻辑是流通市值在20亿到500亿之间避免太小盘流动性差和太大盘弹性不足换手率在1%到15%之间太低说明没人关注太高说明分歧过大排除ST股和上市不足250天的新股。这些阈值不是固定的你可以根据自己的风险偏好调整。比如你只做小盘股可以把市值上限降到200亿如果你不想碰高换手标的可以把换手率上限降到10%。3. 在通达信里落地选股公式从编辑器到条件选股的完整操作3.1 公式编辑器的入口和基本操作打开通达信客户端按CtrlF调出公式管理器或者从菜单栏找到“功能”-“公式系统”-“公式管理器”。在公式管理器里选择“条件选股公式”分类点击“新建”就会弹出一个公式编辑窗口。窗口里需要填几个关键信息公式名称、公式描述、参数列表如果有参数、公式代码。公式名称建议用英文或拼音比如WZZJ_JZ避免用中文名称在某些版本里出现乱码。公式描述可以写“危中择机金砖选股”方便以后在列表里识别。参数列表如果你在代码里用了N1、N2、N3这样的变量需要在参数列表里声明格式是N1(1,100,20)分别代表参数名、最小值、最大值、默认值。代码粘贴进去之后点击“测试公式”按钮如果语法没问题会提示“编译测试成功”。如果有错误编辑器会在下方显示错误行号和错误类型常见错误包括括号不匹配、变量未定义、函数名拼写错误。3.2 条件选股的执行流程和结果解读公式编译通过后回到通达信主界面按CtrlT调出条件选股对话框或者从“功能”-“选股器”-“条件选股”进入。在条件选股对话框里找到你刚才新建的公式点击“加入条件”然后选择选股范围。选股范围可以是“沪深A股”、“自选股”、“某个板块”建议第一次测试时先用“沪深A股”全市场跑一遍看看信号数量是否合理。点击“执行选股”后通达信会扫描指定范围内的所有标的把满足条件的股票列在结果窗口里。结果窗口里会显示股票代码、名称、现价、涨跌幅等信息。你可以把结果保存到自选股板块方便后续跟踪。这里有一个血泪经验第一次跑全市场选股时如果信号数量超过200只说明你的条件太宽松了需要收紧参数如果信号数量是0说明条件太严或者你的通达信数据没有完整下载。数据完整性是很多人忽略的坑后面会专门讲。3.3 把选股结果接入预警和回测选股公式不仅能手动执行还可以接入通达信的预警系统。在条件选股对话框里有一个“预警”按钮点击后可以设置预警条件比如“当信号出现时弹出提示”或“当信号出现时发出声音”。预警的好处是你不需要每天手动跑选股系统会在盘中自动监控。如果你想验证这个公式的历史表现通达信自带的回测功能比较弱常见做法是把选股信号导出成文本文件然后用Python或Excel做简单的统计分析。比如统计信号出现后5日、10日、20日的涨跌幅分布看看胜率和盈亏比是否满足你的要求。这一步不是必须的但如果你想认真用这个公式建议至少做一次历史信号的手工抽查随机选20个历史信号看看当时的K线形态和后续走势。4. 参数调优与常见翻车现场避坑与排查4.1 信号数量忽多忽少先查数据完整性现象同样的公式今天跑出50只明天跑出5只后天跑出200只信号数量剧烈波动。原因通达信的本地数据不完整或者除权除息导致历史数据被重新计算。很多人只下载了日线数据没有下载财务数据和除权数据导致FINANCE函数和DYNAINFO函数返回异常值。解决在通达信里按CtrlD调出数据管理检查“日线数据”和“财务数据”的下载状态。建议每天收盘后执行一次“盘后数据下载”把日线和财务数据补全。另外除权除息日前后均线和成交量会跳变最好在公式里加入REF(CLOSE,1)这样的前一日引用做平滑或者直接用前复权数据。4.2 选出来的票全是下跌中继确认信号太弱现象公式选出的标的买入后继续下跌根本没有反弹。原因“择机”的确认条件太弱只用了“收阳且放量”但下跌趋势中的单日阳线经常是诱多。解决把确认条件加强。常见做法是要求“阳线实体大于前一日阴线实体的一半”或者“收盘价站上5日均线”或者“MACD绿柱连续两天缩短”。下面是一个加强版的确认条件{加强版择机确认} 昨日阴线实体:REF(OPEN,1)-REF(CLOSE,1); 今日阳线实体:CLOSE-OPEN; 实体确认:今日阳线实体昨日阴线实体*0.5; 均线确认:CLOSEMA(CLOSE,5); MACD确认:MACD.MACDREF(MACD.MACD,1) AND REF(MACD.MACD,1)REF(MACD.MACD,2); 择机加强:实体确认 AND 均线确认 AND MACD确认;这个加强版要求同时满足三个条件信号数量会大幅减少但质量会提升。代价是可能会错过一些快速反弹的标的需要你自己权衡。4.3 参数过拟合历史表现好但实盘失效现象用历史数据回测胜率70%以上实盘跑了一个月胜率不到40%。原因参数调得太细比如把N1设成13、N2设成4、N3设成0.63这种非整数参数在历史上刚好拟合了某段行情但没有逻辑支撑。解决参数尽量用整数和常见值比如均线用5、10、20、60缩量比例用0.5、0.6、0.7连续阴线用3、4、5。另外不要只在一段行情上测试至少覆盖一轮完整的上涨、下跌、震荡周期。如果某个参数组合只在特定行情里表现好换一段行情就崩说明过拟合了。4.4 公式引用未来函数信号闪烁现象盘中看到信号出现收盘后信号消失了或者盘中没信号收盘后信号又出现了。原因公式里用了未来函数比如ZIG、PEAK、TROUGH或者用了DYNAINFO里的盘中动态数据。未来函数会引用未来才知道的数据导致信号在盘中不断变化。解决检查公式里是否用了未来函数。通达信里常见的未来函数包括ZIG、PEAK、TROUGH、BARSLAST在某些用法下、REF如果引用了未来周期。把未来函数替换成只依赖历史数据的函数比如用HHV和LLV代替PEAK和TROUGH。另外DYNAINFO函数在盘中会变化如果要用最好只在收盘后选股或者用REF(DYNAINFO(37),1)取前一日数据。4.5 选股结果里出现停牌股和退市股现象选出来的票里有停牌几个月的或者已经公告退市的。原因公式没有排除停牌和退市状态。解决在公式里加入停牌和退市过滤。通达信里可以用DYNAINFO(4)0判断是否停牌现价为0代表停牌用FINANCE(42)250判断上市天数用NAMELIKE(ST)排除ST。另外退市股通常在名称里有“退”字可以用NOT(NAMELIKE(退))排除。5. 进阶用法把选股公式变成可复用的信号系统5.1 用公式组合做多条件分层选股单一公式选股容易漏掉一些机会也容易选出太多标的。我一般会把“危中择机”拆成三个层次第一层是“危”的条件用来建立观察池第二层是“择机”的确认用来触发买入信号第三层是“金砖”过滤用来排除质地差的标的。三层条件可以分别写成三个公式然后用通达信的“组合选股”功能串联起来。具体操作是先跑第一层公式把结果保存到自选股板块A再在板块A里跑第二层公式结果保存到板块B最后在板块B里跑第三层公式得到最终结果。这样做的好处是每一步都可以单独调整参数而且中间结果可以人工复核。比如第一层跑出300只你可以手动剔除一些明显不合理的行业再跑第二层。5.2 把信号导出做外部统计分析通达信的选股结果可以导出成文本文件格式是每行一个股票代码。导出后你可以用Python做更灵活的统计分析。下面是一个简单的Python脚本用来统计信号出现后N日的涨跌幅import pandas as pd import numpy as np # 假设信号文件是signal.txt每行一个股票代码 # 假设价格数据文件是price.csv包含date, code, close三列 signals pd.read_csv(signal.txt, headerNone, names[code]) prices pd.read_csv(price.csv, parse_dates[date]) # 对每个信号找到信号日之后5日、10日、20日的收盘价 results [] for code in signals[code]: stock_prices prices[prices[code] code].sort_values(date) if len(stock_prices) 25: continue # 这里假设信号日就是stock_prices的第一行实际使用时需要根据信号日期匹配 for horizon in [5, 10, 20]: if len(stock_prices) horizon: ret (stock_prices.iloc[horizon][close] - stock_prices.iloc[0][close]) / stock_prices.iloc[0][close] results.append({code: code, horizon: horizon, return: ret}) df pd.DataFrame(results) print(df.groupby(horizon)[return].describe())这个脚本的逻辑是读取信号列表和价格数据对每个信号计算持有5日、10日、20日的收益率最后按持有周期分组统计。参数说明horizon列表可以根据你的交易周期调整短线可以改成1、3、5中线可以改成10、20、60。注意这个脚本假设信号日就是价格数据的第一行实际使用时需要根据信号日期做匹配否则统计结果没有意义。5.3 用通达信预警做盘中实时监控如果你不想每天手动跑选股可以用通达信的预警功能做盘中实时监控。设置方法是在条件选股对话框里点击“预警”选择“当条件满足时预警”然后设置预警频率。预警频率建议设为“每分钟一次”太频繁会拖慢客户端太稀疏会错过信号。预警的缺点是只能监控有限数量的标的全市场预警对电脑性能要求较高。我一般会把第一层“危”的条件做成预警监控全市场当某只票进入“危”的状态时弹出提示然后手动查看是否满足“择机”和“金砖”条件。这样既不会漏掉机会也不会被太多信号干扰。5.4 一个我踩过的坑不要迷信公式的“胜率”最后说一个我自己的教训。刚开始用这类选股公式时我花了很多时间优化参数追求回测胜率最大化。后来发现回测胜率70%的公式实盘可能只有40%因为回测时你用的是历史数据实盘时你面对的是实时行情、滑点、情绪波动。公式能帮你缩小范围但不能替你决策。我现在用这类公式的习惯是把它当成一个“观察池生成器”而不是“买入信号发生器”。每天收盘后跑一遍把结果放进自选股第二天盘中观察这些标的的走势结合大盘环境和板块轮动再决定是否出手。公式的价值在于帮你节省翻票时间而不是替你承担交易责任。希望这个思路能帮到你。本文还有配套的精品资源点击获取