制定交易规则,可以从三件事开始:把模糊的判断改成能够核对的条件,写清买卖和仓位安排,再补上未成交、数据缺失等情况下的处理办法。 判断一套规则是否写清楚,可以做一个检查:让另一个人拿着同样的数据,能否按照你的文字作出一致的判断?
“这只股票比较强,回调以后可以低吸”,是很多人熟悉的想法。但如果没有说明什么算强势、回调多少、什么时候买、买多少以及如何退出,这个想法仍然需要在交易时临场解释。
在上一篇《普通人可以进行量化交易吗?》中,我们讨论了普通投资者如何从规则、记录和复盘开始量化研究。这一篇接着解决一个更具体的问题:有了一个交易想法,怎样把它写成第一版可以检验的规则?
本文以普通 A 股股票为背景,用“强势股回调”贯穿演示。案例中的数字仅用于展示规则的写法,没有经过收益验证,不构成一套可以直接采用的投资方案。
一、为什么炒股想法还不能直接成为交易规则?
经验可以帮助我们发现值得研究的现象。问题在于,经验中的许多词语,没有统一的判断标准。
比如下面这些说法:
| 常见想法 | 还需要回答的问题 |
|---|---|
| 最近涨得不错,可以关注 | 最近是几天?涨幅达到多少?和谁比较? |
| 回调到支撑附近,可以低吸 | 支撑怎样计算?附近允许多大偏差? |
| 成交量明显放大,可能突破 | 与哪个时间窗口比较?放大多少?突破哪个价位? |
| 走势不对就卖出 | 哪个条件意味着不对?何时检查?能否实际卖出? |
如果这些问题没有答案,交易者就可能在上涨以后认为“当时明显有承接”,在下跌以后又认为“那次不算有效支撑”。相同的图形,因为后续结果不同,得到不同解释,研究就很难重复。
先把观察、假设和规则写在不同的位置
假设你复盘时发现,一些近期涨幅较大的股票,在回调以后又出现了反弹。这是一项观察。
由此可以提出一个研究假设:近期强势股票在一定程度的回调后,后续价格表现可能存在值得研究的特征。
接下来才是规则:用什么条件识别近期强势,回调多少进入候选范围,在什么时点参与,又按什么条件退出。
这里的每一步都需要检查。观察到过反弹,不代表所有符合描述的股票都有相同表现;一套规则能够写成公式,也不代表它已经拥有盈利依据。
条件越多,不一定越接近一套好策略
为了让规则显得完整,有人会不断加入均线、换手、题材、资金流等条件。条件增加以后,历史上不理想的样本可能少了,但也可能只是越来越贴合已经看过的走势。
第一版规则可以尽量简单。先确定一个能够解释的研究问题,把判断和执行过程写清楚。后续发现缺陷时,再记录修改的理由和版本,避免一边看结果、一边悄悄改变标准。
二、一套完整的交易规则,需要写清哪些内容?
入门时,可以先用五个模块组织交易规则:选股、买入、仓位、退出和风险处理。
| 模块 | 核心问题 | 至少需要写清的内容 |
|---|---|---|
| 选股规则 | 买什么? | 研究范围、观察窗口、筛选条件、排除条件 |
| 买入规则 | 什么时候买? | 判断时点、信号条件、委托价格、有效时间 |
| 仓位规则 | 买多少? | 单只投入上限、总仓位上限、资金冲突处理 |
| 退出规则 | 什么时候卖? | 触发条件、检查时间、委托方式、条件优先级 |
| 风险规则 | 什么情况下暂停? | 数据异常、交易限制、订单异常、风险暴露变化 |
这五个模块还要共同使用一套时间和数据口径。
选股规则:先确定范围,再讨论形态
“研究 A 股”仍然是很大的范围。不同市场、板块和证券品种,在交易单位、涨跌幅限制和可交易条件上可能存在差异。第一版研究可以先限定一个自己能够理解和核对的范围。
此外,还需要说明怎样处理上市时间较短、停牌、风险警示以及缺失数据的股票。历史研究中的股票范围,也应尽量还原到当时的状态,不能只使用今天仍然上市的股票筛选过去的机会。1
买入规则:把信号出现和实际成交分开
“股价回调就买”至少包含两个问题:什么时候确认回调,以及确认以后怎样参与。
例如,使用当天收盘价才能确认的条件,要等收盘以后才能知道结果。安排下一交易日执行,是一种时间上说得通的写法;在历史图上看到当天收盘符合条件,再把当天盘中的低价当成买入价,就使用了决策时尚不可获得的信息。1
还要区分信号、委托与成交。符合条件的股票可能没有进入计划价格,也可能只成交了一部分,或者委托被拒绝。这些都是规则需要处理的正常分支。
仓位规则:投入比例不等于最大亏损比例
“每只股票买一些”无法约束实际持仓。至少应确定单只股票投入上限、账户总投入上限,以及多只股票同时出现信号时的选择办法。
如果规定一只股票投入账户净值的某个比例,这描述的是资金投入。它不代表账户只会承担同样比例以内的某种固定损失,更不能把计划止损价理解成必然成交价。跳空、停牌和无法卖出,都可能改变实际风险。
退出规则:既要写条件,也要写顺序
退出可以由价格、时间或研究假设的失效触发。如果同时存在多种条件,还要写清哪一条先处理。
例如,已经触发退出条件时,是否还允许补仓?到了计划退出时间却无法成交,持仓怎样处理?这些问题如果留到交易时决定,仍然会给临场解释留下很大空间。
以普通 A 股股票为例,当日新买入的股票通常不能当日卖出。一套写着“买入后跌到某价立刻止损”的规则,需要先检查它是否符合对应品种的交易制度。上交所交易规则对交收前卖出限制及回转交易品种有具体规定。2
风险规则:明确哪些情况下不再开新仓
风险处理不只有止损。数据未更新、持仓和成交回报对不上、撤单状态不明时,继续下单可能让实际仓位偏离计划。
一条实用的约束是:只有确认数据、资金、持仓和订单状态能够核对,才允许新增交易。发生异常以后,先处理已有风险,再恢复新的计划。
三、完整案例:把“强势股回调低吸”拆成具体规则
下面从一句模糊的想法开始,逐步写出一版研究规则:
最近比较强的股票,回调到合适的位置,可以考虑低吸,反弹以后卖出。
这句话中的“最近”“比较强”“合适的位置”和“反弹以后”,都还没有确定含义。
为了专注于规则写法,下面只演示上交所主板普通 A 股,采用单只持仓、固定时间退出的简化方案。20 日、15%、2% 和 10% 等参数均为演示设定,不能据此认定参数有效或适合个人使用。
第一步:给“强势”和“回调”一个计算定义
设 t 为最近一个已经收盘、且数据已经完成更新的交易日。先给候选股票设置以下条件:
- 截至
t日,上市已满 60 个交易日。 - 不处于风险警示或退市整理状态。
- 最近 21 个交易所交易日的数据完整,且这段窗口内没有停牌或除权除息事件。
- 最近 20 个交易日的收盘价涨幅不低于 15%。
- 当前收盘价相对最近 20 个交易日最高收盘价的回撤,位于 3% 至 8% 之间,包含边界。
这里使用同一来源的未复权日线,并通过排除观察窗口内的除权除息事件,简化演示中的价格比较。正式扩大研究时,需要设计更完整的复权、停牌和公司行为处理办法。Tushare 的日线接口文档明确说明,该接口提供未复权行情,停牌期间不提供数据。3
两个价格条件可以写成:
20 日涨幅 = [收盘价(t) ÷ 收盘价(t−20) − 1] × 100%
H20(t) = 从 t−19 到 t,共 20 个交易日的最高收盘价
距高点回撤 = [1 − 收盘价(t) ÷ H20(t)] × 100%
注意,计算 20 日涨幅要用到相隔 20 个交易日的两个收盘价,因此需要至少 21 个交易日的数据。这里的高点也已经明确为最高收盘价,不能在复盘时临时改用最高价。
假设某只股票在 t 日收盘为 10 元,t−20 日收盘为 8.50 元,最近 20 日最高收盘价为 10.80 元,那么:
20 日涨幅 ≈ 17.65%
距高点回撤 ≈ 7.41%
它符合这两个价格条件,接下来还要核对其他筛选条件。入选只表示满足本次定义,尚未说明它值得买入或未来会反弹。
第二步:写清下一交易日怎样参与
为了把“低吸”变成可以核对的计划,这个演示版本规定:
- 在
t日盘后完成筛选,保存完整候选名单。 - 如果当前存在持仓、未完成委托或待核对的订单状态,本轮信号不再新增买入。
- 多只股票同时入选时,按 20 日涨幅从高到低排序;相同时按股票代码升序,只选择第一只,不临时替换。
- 下一交易日 9:30 起,首次取得有效报价时检查交易状态和申报条件。正常交易、价格在允许申报范围内且资金足够,才提交一次限价买单。
- 买入限价为
t日收盘价的 98%,向下取到 0.01 元;不向上改价。10:00 撤销尚未成交的部分,并以回报确认撤单结果。
如果选中的股票无法交易、委托条件不满足或委托被拒,本轮就跳过;如果只有部分成交,就保留实际成交数量,不追加补足。
以前面收盘价 10 元的假设股票为例,买入限价为 9.80 元。但下一交易日最低价低于 9.80 元,也不能仅凭一根日线就认定委托已经全部成交:还要核对触价发生在委托有效期内、订单是否已生效,以及是否存在排队和成交量限制。
日线最低价能帮助发现候选情况,不能代替完整的成交证据。
第三步:确定资金上限和数量
这个简化版本只允许同时持有一只股票,一次开仓的买入金额与估算买入费用合计,不超过 t 日账户净值的 10%,同时不能超过实际可用现金。
数量按照对应市场的申报单位取整,必须给费用留出空间。以上交所主板普通 A 股竞价买入为例,买入申报数量通常应为 100 股或其整数倍。2
假设账户净值为 10 万元,这次投入上限为 1 万元,限价为 9.80 元,那么 1000 股对应 9800 元,还要确认剩余空间足以覆盖估算费用。资金连最低申报数量及费用都无法满足时,就放弃本次计划。
实际只成交 300 股,就按 300 股记录持仓;没有成交,就记录为未成交。不能为了让研究结果整齐,把所有信号都按计划数量计算。
第四步:用固定时间退出,减少额外判断
原始想法中的“反弹以后卖出”,仍然很模糊。为了先建立可检验的流程,这个版本使用固定时间退出:
在买入后的下一交易日,9:35 起首次取得有效买一报价、且报价符合申报要求时,按该买一价提交限价卖单,数量为该笔持仓的全部可卖数量;9:40 撤销剩余未成交部分。若当天未能全部退出,剩余持仓在之后的交易日按同样的时间安排继续处理。
没有有效报价、停牌或无法合法申报时,记录未能提交的原因。存在剩余持仓时,不新增买入。买一价也只是提交委托时的报价,不能保证委托发出后一定成交。
这样设计,是为了先回答一个范围较小的问题:在这套选股、买入和退出安排下,实际可能得到怎样的结果?它没有检验“盘中最高能涨多少”,也没有证明固定时间退出优于其他退出方式。
这个演示版本同样没有承诺固定的最大亏损。若后续加入止损、止盈或分批退出,应分别定义触发方式、可卖时间和成交假设,作为新的规则版本检验。
第五步:把异常处理也放进规则表
将前面的约定汇总以后,一份规则摘要可以写成:
| 项目 | 演示版本的约定 |
|---|---|
| 研究假设 | 检查近期强势股票在限定回调后,按固定买卖流程的表现 |
| 股票范围 | 上交所主板普通 A 股,满足上市时间、状态和数据完整性条件 |
| 筛选条件 | 20 日收盘价涨幅至少 15%,距 20 日最高收盘价回撤 3%—8% |
| 判断时间 | t 日盘后,数据更新并核对以后 |
| 候选冲突 | 按涨幅降序、代码升序,只选择第一只 |
| 买入计划 | 下一交易日按约定检查后提交一次限价单,限价为 t 日收盘价的 98% |
| 委托期限 | 未成交部分 10:00 撤销,确认回报;不追价、不替换标的 |
| 资金安排 | 单只持仓,买入金额与估算买入费用合计不超过账户净值的 10%及可用现金 |
| 退出安排 | 买入后下一交易日 9:35 起按约定报价退出,9:40 撤销剩余部分;未退出则后续交易日重复 |
| 新仓限制 | 有持仓、未完成委托或订单状态不明时,不开新仓 |
| 数据异常 | 缺失或无法确认时不发新单,保存原因 |
| 公司行为 | 若候选股票在执行日除权除息,取消原计划;持仓期间发生公司行为时暂停新计划,核对股份、现金与成本后再处理可卖持仓 |
这张表需要与上面的详细定义一起使用。它让规则中的决定有了依据,也让尚未覆盖的情况更容易被发现。正式执行前,还应针对所用券商、行情来源和交易品种核对具体要求。
四、如何检查交易规则是否足够明确、能够执行?
在计算收益之前,可以先对规则做一次检查。这个阶段的目标,是发现含糊和矛盾,避免把执行错误当成策略表现。
检查一:另一人能否用同样的数据得出相同结论?
拿几个样本日期,把同一份数据和规则交给另一个人,分别记录是否入选、计划价格和计划数量,再比较结果。
如果判断不同,先查条件是否存在多种解释。例如,“最近 20 日”是否包含当天,“回撤 8%”是否包含边界,“均线附近”允许偏离多少。
这个检查有助于提高研究的一致性,但真实成交还会受行情、延迟和订单处理影响,不能要求不同账户必然获得相同成交结果。
检查二:作出判断时,所需信息是否已经可用?
给每个字段标记可获得时间。日线收盘数据、公告内容和盘中报价,都有自己的产生与更新时间。
例如,使用了全天成交量,就不能把信号安排在当天上午确认。使用财报数据时,也要关注实际披露时间,不能因为报表属于某个季度,就假定季度结束时已经知道内容。这类时间错位会形成前视偏差。1
检查三:没有交易和没有成交,是否都有记录方式?
规则应允许出现以下结果:没有候选、没有资金、条件不满足、未提交、被拒绝、未成交以及部分成交。
如果研究表里只有最后赚钱或亏钱的交易,就无法核对原先有多少信号、多少计划没有执行,也无法解释资金为什么被占用。
检查四:多个条件相遇时,是否知道先做什么?
例如,旧持仓尚未退出,同时出现新的买入信号;撤单尚未确认,又收到新的成交回报。规则应给出处理顺序,不能把同一笔资金或同一份持仓重复使用。
前面的演示通过单只持仓和异常暂停,减少了冲突。若改成同时持有多只股票,就需要进一步写清排序、资金预留、同类风险敞口和总仓位限制。
检查五:能否说清这套规则究竟在检验什么?
记录后续最高价,是研究潜在价格空间;按预先约定的时间和价格退出,是研究某种执行方案。两者回答的问题不同。
同样,保存几只后来上涨的股票,可以用于分析案例,却不能代替完整候选名单的检验。规则要和记录方式配套,才能知道结论来自什么样本。
五、不会编程,怎样用表格开始研究交易规则?
当研究范围较小、频率较低时,可以先用行情工具和表格检查规则。人工方式的价值,是帮助你看清流程;样本扩大以后,再考虑用程序减少重复操作。
先做三张表,保留从信号到成交的过程
| 表格 | 建议字段 | 主要用途 |
|---|---|---|
| 规则与版本表 | 版本号、生效时间、参数、修改原因、数据来源、费用假设 | 确认每一轮究竟使用了哪套约定 |
| 候选与计划表 | 信号日期、股票代码、条件数值、入选或排除原因、计划价格、计划数量、未交易原因 | 保留完整筛选与决策过程 |
| 委托与成交表 | 委托时间、回报状态、实际数量和价格、费用、退出原因、剩余持仓、执行偏差 | 核对计划如何变成实际结果 |
做历史检查时,还应标记哪些内容来自真实记录,哪些只是模拟假设。没有订单证据的日线推演,不应填成账户实际成交。
先挑一小批日期检查流程即可。这一阶段关注的是公式和记录能否算对、规则是否存在歧义;少量案例不能用来确认胜率或盈利能力。
一份可以直接填写的交易规则模板
可以复制下面的模板,先写出自己的第一版。暂时无法回答的项目,标记为待解决;如果它会影响买卖或结果计算,就应在验证前补齐。
规则名称:
版本号与生效时间:
1. 研究假设
我观察到了什么现象:
我想检验的具体问题:
2. 股票范围与数据
市场、板块、证券品种:
上市时间及状态要求:
数据来源、观察窗口、可获得时间:
价格复权、停牌、缺失和公司行为处理:
3. 选股条件
每个条件的公式、阈值及边界:
排除条件:
多个候选的排序和选择方式:
4. 买入安排
信号确认时间与数据截止时间:
委托时间、类型、价格与有效期限:
未成交、部分成交、拒单和撤单处理:
5. 仓位安排
计算资金上限时使用的净值时点:
单只投入上限、总仓位上限:
数量取整、费用预留、资金冲突处理:
6. 退出安排
退出条件及优先级:
检查时间、可卖时间、委托方式:
无法成交、剩余持仓和公司行为处理:
7. 风险与暂停条件
什么情况下不再开新仓:
数据、订单、资金和持仓异常怎样处理:
恢复研究或交易前要核对什么:
8. 记录与验证
保留哪些候选、计划、成交及未成交信息:
费用、滑点和成交假设:
历史研究区间与独立检验区间:
什么问题会触发规则修改:
修改规则时,保留旧版本和修改时间
如果发现规则遗漏,可以修正;如果看到某笔亏损以后决定增加过滤条件,也可以提出新版本。关键是保存修改原因,并承认看过的结果已经影响了这次选择。
例如,将买入折扣由 2% 改为 3%,就改变了成交机会、资金占用和后续结果。不能把两个版本的有利结果挑出来拼成一条收益记录,也不能把已经反复用于修改规则的数据,继续当作独立验证。1
六、规则写好以后,如何开始历史验证?
一份写清楚的规则,让研究有了可以复查的起点。接下来,可以分成三个阶段推进。
先检查历史样本中的逻辑和数据。 核对筛选日期、信号数值、可获得时间,以及无法成交时的处理。保留未成交和失败样本,避免只研究最后上涨的股票。
再在固定口径下评估结果。 至少需要同时观察交易次数、胜率、平均盈利与平均亏损、账户最大回撤、资金占用以及交易成本。
胜率表示盈利交易在约定样本中的占比;常说的盈亏比需要说明是否指平均盈利与平均亏损绝对值之比;最大回撤应基于按一致方法估值的账户净值序列计算。停牌或无法退出的持仓,也不能因为尚未卖出就从账户风险中消失。
这些指标需要结合阅读。胜率较高,仍可能因为少数大额亏损而损失资金;单笔结果不错,也可能受到低成交率、仓位限制和费用的影响。
最后用未参与规则选择的数据检验,再按固定版本模拟跟踪。 在较早的数据上形成规则,留出后面的时间段检验,是一种常见安排。若看过检验结果以后再次调参,这部分数据就已经参与了研究,需要重新认识证据的边界。1
这一篇先把规则写清楚。下一步值得展开的问题是:怎样选取历史样本,怎样设定成交与费用假设,以及如何区分历史图上的机会和真正可能执行的交易。
七、关于制定交易规则的常见问题
不会编程,也能制定量化交易规则吗?
可以。先用文字、公式和表格写清条件,再做小范围检查。规则能够稳定解释以后,编程可以帮助扩大范围、重复计算和核对执行。软件本身不能补上含糊的交易逻辑。
有了一个选股公式,就算完整的交易策略吗?
选股公式回答了哪些股票进入候选范围。完整方案还需要买入、仓位、退出、异常处理和记录口径,否则无法判断候选怎样变成持仓,以及最终结果怎样计算。
第一版规则要写多少个条件才合适?
没有统一数量。可以先围绕一个明确假设,使用少量能够解释的条件,把数据、时间和执行细节补齐。增加条件时,应说明它解决什么问题,并记录为可检验的修改。
规则必须完全机械化吗?
如果保留了题材判断等人工环节,应写明判断依据、发生时间和当时的记录,并承认这部分可能存在判断差异。这样便于区分机械条件的结果与人工选择的影响,也避免复盘后重新解释当时的决定。
写好规则,是不是就可以投入实盘?
规则写清楚,只说明研究对象更明确了。是否具有研究依据、扣除成本后表现如何、资金和时间是否支持执行,都还需要检查。涉及软件参与实际交易时,也要另行确认适用的程序化交易要求和券商接入条件,上一篇已介绍相关边界。
参考资料
Footnotes
-
QuantConnect:Research Guide。用于参考假设驱动研究、过拟合、前视偏差和幸存者偏差等一般研究原则,不作为境内交易制度的依据。 ↩ ↩2 ↩3 ↩4 ↩5
-
上海证券交易所:《上海证券交易所交易规则(2026 年修订)》。附件 1 第 3.1.4—3.1.5 条涉及交收前卖出及回转交易,第 3.3.8 条涉及竞价交易申报数量,第 3.3.11 条涉及申报价格最小变动单位。本文案例限定为上交所主板普通 A 股,其他品种应分别核对适用规则。 ↩ ↩2
-
Tushare:A 股日线行情(daily)。文档说明了未复权行情、数据更新时间及停牌期间不提供数据等事项;实际研究还需要核对所用数据源的具体口径。 ↩