聚宽上看到的一套趋势股策略:逻辑、风险与代码问题

量化交易
聚宽
趋势交易
策略研究
从选股、仓位、ATR止损到订单状态,逐层拆解一套热门题材趋势股策略。
发布于

2026-09-01

最近在聚宽上看到一套趋势股策略。它的代码很长,包含热门概念、六类技术形态、仓位评分、ATR跟踪止损、时间止损和盘中风险监控。乍看之下,几乎覆盖了趋势交易的所有环节。

但量化策略最容易产生一种错觉:模块越多,看起来越专业;日志越详细,好像风险控制越可靠。真正值得检查的不是它写了多少指标,而是每个指标是否改变了交易、订单是否真实成交,以及回测中使用的信息在当时能否获得。

本文只讨论代码呈现出来的规则和问题,不评价原作者,也不把文章标题中的收益数字当成已经验证的事实。

策略从股票池、概念池、形态筛选到退出的信号链

策略信号链

一、这套策略到底在做什么?

它不是传统基本面选股,也不是简单的均线策略。更准确的描述是:

从中证1000的热门题材中,寻找昨日技术形态合格、今天集合竞价高开的股票,最多集中持有3只,通过ATR跟踪止损和10个交易日的持仓上限退出。

选股流程可以概括为:

全市场股票
→ 排除ST、停牌、特定板块和上市时间过短的股票
→ 与中证1000成分股取交集
→ 只保留热门概念中的股票
→ 计算约80日量价指标
→ 匹配技术形态
→ 使用当天开盘涨幅确认
→ 最多买入3只

其中任何一步获取失败,都可能改变候选池。例如中证1000成分获取失败时,代码会退回更大的初始股票池;概念池为空时,则可能跳过概念过滤。因此,同一份代码在不同数据权限和数据环境下,实际交易范围未必相同。

二、热门概念如何形成?

代码使用两类信息构建概念池:

  1. 昨日涨停股票所属概念;
  2. 今日集合竞价接近涨停股票所属概念。

它统计概念出现次数,并在竞价数据可用时加入成交量权重,最后选择排名靠前的概念。这个思路试图捕捉资金关注度,而不是预测所有行业的长期价值。

问题在于,“涨停较多”只能作为热度代理,并不等于机构资金持续流入。另外,概念归属数据如果没有按历史日期准确还原,就可能把后来形成的概念标签带回过去。即使打开防未来数据选项,也不能自动消除这类成分回填风险。

三、“六维评估”其实是六类形态

代码名称容易让人误以为每只股票必须通过六个彼此独立的维度。实际逻辑是:股票只要匹配其中一类技术形态,就可能进入候选名单。

形态 主要特征
吸筹期地量地价 价格靠近均线、RSI偏低、成交量萎缩
洗盘期缩量回调 上升结构未破坏,回调时缩量
突破型放量启动 昨日明显上涨、放量、收盘位置较强
主升浪回踩低吸 均线多头排列,价格靠近短期均线
极端超跌反弹 短期大跌、远离长期均线、量能冻结
标准多头排列 均线向上、量价和MACD偏强

每一类形态都有“核心条件”和“辅助条件”。核心条件必须全部通过,再结合辅助条件计算分数。代码中核心部分占75%权重,辅助部分占25%,总分至少达到90分。

“吸筹”“洗盘”“主升浪”只是对K线结构的命名。代码无法知道某个主力是否真的在吸筹,也无法证明一次缩量回调必然是洗盘。理解策略时,应把这些名称还原成价格、均线、成交量和RSI条件。

四、它不是纯粹低吸,而是高开确认

技术形态使用昨日以前的数据,但下单前还会检查当天开盘表现:

  • 放量突破型通常要求高开3%至7%;
  • 其他主要形态要求高开超过1%;
  • 多头排列备用分支要求更高的开盘确认。

这意味着策略并非看到回调就买,而是在昨日形态成立后,等待今天高开确认。优点是减少弱势股票;缺点是买入成本更高,也更容易遇到高开低走。

代码计划在9:25附近选股、9:28提交订单。聚宽回测中的预定调用时间,并不保证实盘能在日志显示的参考价格成交。集合竞价、开盘撮合、涨停和流动性都会扩大回测与实盘之间的差距。

五、ATR跟踪止损是相对清晰的一部分

买入后,策略计算ATR(14),初始止损线大致为:

买入价格 − 1.5 × ATR(14)

持仓上涨后,止损线改为:

持仓期间最高价格 − 1.5 × ATR(14)

止损线只能上移,不能下移。假设10元买入、ATR为0.4元,初始止损约为9.4元;随后价格涨到12元,止损线可提高到11.4元。它既能控制初始风险,也能保护一部分浮盈。

此外,股票持有达到第10个交易日后会尝试强制退出。由此可见,这是一套短期题材波段系统,不是长期趋势跟踪。

ATR规则本身并不能保证止损价成交。A股存在T+1、跌停和跳空,实际损失可能超过理论止损距离。

六、最严重的问题:日志成功不等于订单成交

代码在买入时,先记录买入信息、初始化ATR止损,再提交目标持仓订单;卖出时也会先记录盈亏,再提交清仓订单,并立即删除部分持仓管理状态。

这会产生危险的状态错位:

日志认为已经卖出
→ 实际订单被拒绝或只成交一部分
→ 股票仍然留在账户中
→ ATR和持仓模式却已经被删除

可能导致这种情况的原因包括:跌停、停牌、T+1、资金不足、部分成交和委托失败。

可靠的实盘程序应该至少区分:

生成信号 → 提交委托 → 部分成交 → 全部成交 → 更新持仓状态

只有确认实际清仓后,才能删除止损线、持仓模式和卖出条件。否则日志可能很漂亮,真实账户却出现无人管理的残余持仓。

七、注释中的35%仓位没有真正进入下单公式

代码定义了一个35%的趋势股参数,日志也给人“只使用35%仓位”的印象。但实际买入金额使用的是:

总资产 × 仓位系数 ÷ 最大持股数

当仓位系数为100%、最多持有3只时,每只目标约为总资产的三分之一,合计可能接近满仓,而不是35%。

仓位系数下降时,代码还会同时减少持股数量。例如系数50%时,最多可能只买1只,每只目标约16.7%,最终实际投入并不是简单的50%。

所以必须区分三件事:

  1. 参数被定义了;
  2. 日志打印了;
  3. 参数真正进入下单金额计算。

三者并不天然等价。

八、“盘中紧急降仓”主要停留在变量层面

策略会监控:

  • 指数短时间快速下跌;
  • 上午指数跌幅较大;
  • 多次放量下跌;
  • 波动率明显上升。

触发后,代码会把临时仓位比例改成30%或50%。但没有看到紧接着把现有持仓调整到目标比例的完整下单流程。仓位计算主要在早盘进行,盘中变量还可能在每日重置时被清除。

因此日志出现“紧急降仓”时,不代表账户已经实际减仓。正确的验证方法是检查成交记录和持仓市值,而不是搜索日志关键词。

九、动态止盈目标主要用于展示

代码根据持仓天数生成6%、12%、18%等目标,并在日志中打印“止盈目标”。但主要卖出流程并没有用这些目标价触发清仓。

实际影响卖出的主要还是:

  • ATR跟踪止损;
  • 持有满10个交易日;
  • 开盘低开检查;
  • 尾盘接近跌停;
  • 概念炸板检查。

因此不能根据日志中的目标数字,理解为程序会在达到目标时自动止盈。

十、涨停保护和盘中风控可能脱节

如果股票开盘接近涨停,代码给它设置“涨停”标记,盘中ATR监控会跳过该股票。但代码没有形成非常清晰的开板后解除标记、恢复ATR管理的闭环。

这可能造成:股票早盘涨停,后来打开并快速回落,但ATR监控仍将其排除。对于题材股,这恰恰是最需要管理的风险场景之一。

概念炸板风控也需要谨慎理解:它主要统计持仓股票所属概念的炸板情况。策略最多持有3只,要满足同一概念至少3只持仓同时炸板,条件相当苛刻,并不等于全市场概念炸板监控。

十一、个别指标存在实现问题

成交量脉冲指标使用后一行数据判断放量之后是否缩量。对于历史序列最后一行,后一行不存在,因此该条件通常不能按设想工作。后续又使用“没有放量脉冲”作为辅助条件,可能让这个加分项过于容易通过。

另外,代码将盘中检查由每分钟降低到每5分钟,并声称不改变交易行为。事实上,风控检查延迟最多4分钟就可能改变卖出价格,甚至决定是否触发。任何频率调整都应通过逐笔交易对照验证,而不能仅凭注释认定结果一致。

策略注释与实际执行之间的差异

注释与实际代码的差异

十二、回测前应该完成哪些审计?

如果要进一步研究这套代码,合理顺序不是立刻追求更高收益,而是先做执行审计:

  1. 以成交回报而不是委托提交更新买卖记录;
  2. 卖出失败时保留ATR和持仓管理状态;
  3. 统一检查T+1、停牌、涨跌停和部分成交;
  4. 让35%、30%、50%真正进入目标仓位公式;
  5. 风险比例改变后,明确执行实际减仓;
  6. 开板后恢复ATR监控;
  7. 删除未生效的动态止盈,或者补全真实触发逻辑;
  8. 核查概念成分在历史日期是否真实可得;
  9. 固定候选股票的次级排序,保证回测可重复;
  10. 对比优化前后全部成交,确认降频和缓存没有改变交易。

完成这些工作以后,才适合评估选股形态是否真的有超额收益。

结语

这套策略的研究价值在于,它展示了如何把热门概念、技术形态、开盘确认、动态仓位和ATR退出连接成一条完整思路。但它也说明了量化代码中最常见的问题:写出了风险规则,不代表实际执行了风险规则;提交了订单,也不代表订单已经成交。

一套策略能否实盘,不只取决于回测收益,还取决于数据在当时是否可得、仓位公式是否与注释一致、订单状态是否闭环,以及极端行情下是否仍有人管理未成交持仓。

与其首先问“这条曲线能赚多少”,不如先问四个问题:

信号是否真实?
委托是否成交?
持仓状态是否同步?
实盘能否复现?

这四个问题,往往比再增加一个指标更重要。

本文仅用于程序和策略研究,不构成投资建议。文中讨论的源代码来自聚宽公开文章页面,实际效果应以独立复现、完整日志和样本外验证为准。