跳到正文

研究指南

股票策略开发

股票放量突破回测案例:前高触发、失效退出与最长持有期

放量突破是事件入场,不是价格维持高位就每天买。先冻结前高与均量窗口,定义失效和最长持有退出,再把下一开盘订单及限制接到现金。把触发日高价放进突破阈值,可能直接删除本来存在的事件;信号看起来少了,并不一定是市场没有机会。

本指南在一只虚构普通A股现金股票上实际计算完整五十五和二十观察窗口。bar、许可标记、账户值全合成,CoTrading策略模板仍为规划或待核实。许可输入不复现交易所队列,也不覆盖全部板块、上市期和特殊状态,不能据此宣称真实市场撮合已完整实现。

事件只用此前完整观察

完整收盘严格高于此前五十五根最高价,排除当前bar;当期量严格超过此前二十根均量一点五倍,也排除当前。首个事件需要完整五十五条先前观察,不接受部分窗口。参数在看结果前固定,不为了产生交易临时缩短热身,或把当期加入平均来改门槛。

条件从假变真才是事件,连续真不授权重复进入,已有仓位不加股。事件、目标和实际数量分开,避免高位连续几天把暴露倍增。若希望每次创新高继续加仓,属于另一策略,需要独立资金与次数规则,不能把它解释成同一个突破事件自然延续。

输入OHLC有限正,量有限非负,必需字段无效就拒绝,不造可交易观察。真实适配还需公司行动一致、历史资格和日历。形状完整不保证来源正确,代码前缀也不能提供全部制度状态。参数与输入定义一起存,后续才能从原数据重算阈值而非只看图。

冻结两个退出及优先级

失效定义完整收盘严格低于此前二十根低点,排除当前,再请求下一允许开盘卖出。最长持有为实际进入后二十个开盘间隔,不从信号形成或最近重复触发重新算。原进入时点必须保存,否则连续高价可能意外把计时不断重置,造成未声明更久持有。

每开盘先处理退出,待处理失效在同时到期时优先标原因,再处理进入。卖出阻止保留股和现金,退出义务继续,不因目标到期就制造变现。上交所二〇二六年规则说明交易与交收需核具体品种,本例仅最小同会话不卖检查与显式许可。

不能从代码前缀推断全部限制,也不宣称真实涨停队列。股数一百是固定教学选择,不表示各板块数量约定一样。样例许可来自给定情景,不是自动识别真实证券状态;扩展历史需要来源与日期版本,不能拿一列布尔值省去规则和成交容量核对。

首次突破手算

前五十五根高十一、低九、收十、量一百。索引五十五收十二,当前高十二点五、低十、量二百。此前五十五高十一、此前二十均量一百,十二高于十一,二百高于一百五十,形成事件。当期完整收盘行不生成回到过去的成交,订单最早下一给定开盘。

若阈值错误纳入当前高十二点五,十二就不够高,事件消失。脚本精确断言中间前高与均量,能暴露这个错误;只断言最终买卖序列可能难定位。均量包含当前也会改变阈值,即使这组输入仍通过量门槛,也必须遵守排除当前约定,不能因结果一样就放过。

下一开盘五十六为十二点二,买一百股、虚构费一,初始一万变现金八千七百七十九。实际价不同触发收盘,不能用十二替代以美化进入。数量与现金分别断言,不仅标持有真;真实账户是否能按给定开盘全成属于之后的执行证据,本例直接声明假设。

正常到期退出现金

后续收十二,不触发前低失效。进入仍五十六,不随每天评价重置。七十六开盘已经过二十个间隔,给定十二卖一百,再费一,净入一千一百九十九,最终现金与权益九千九百七十八,持仓零。价格亏二十、费二、净亏二十二,负例照实保留。

首次买入当天用收十二估值,现金加一千二百为权益九千九百七十九;它不是卖出,不多扣费用。现金、股数、估值分开,才能区分图表波动与交易动作。不能用最后权益概括全部路径,让缺一笔订单或重复费用仍被一个汇总数字遮住。

最长持有控制的是退出请求,不保证任何市场条件下准时成交。正常分支有许可,所以能按期卖;限制分支要保留真实持仓。把这层区别提前写清,后面遇到执行拒绝就不会把算法目标直接当已发生现金,或者强制按一个实际上不能成交的价格平仓。

失效与下一开盘跳空

独立分支把五十七收盘改八、当前低七点五,此前二十低仍九,因为不含当前。八跌破九,请求退出,当期没有卖单;五十八实际开盘七点八才成交。卖一百净收七百七十九,最终九千五百五十八,价格亏四百四十、费二。没有把触发八保证为卖价。

若把当前低也算入,会比较八与七点五,错误漏掉失效;若用收八代替下一开盘七点八,又会高估现金。两错在不同层,窗口决定何时请求,开盘决定收入。脚本断言触发行前低、当期无单、后续精确卖单与现金,不能只看退出信号变零就结束。

这些合成结果不是估计突破风险分布,只验证路径。真实价格跳空、流动性和限制可能更复杂,日线不提供完整队列。不能把一个亏损例写成最大损失,也不能因为给定止损事件就保证损失被锁定。策略规则和可执行价格必须各有依据。

禁止买入与延后卖出

另一次将五十六买许可设假,一次性事件尝试被拒,现金一万、费零、股数零。不能替换以前收盘,也不无限重试旧事件。后来平价未形成新突破,所以保持未进入。拒绝记录与原事件都保留,不能删掉候选让结果看起来从来没有出现不可买机会。

再单独阻止七十六卖出,没有收入与新费,仍现金八千七百七十九、一百股。七十七下一允许开盘十二点二执行原到期义务,最终九千九百九十八,总费二。实际持有超过目标期限,应报告延迟暴露,不说二十期上限严格实现,更不能伪造七十六已经空仓。

名为开盘限制的标记只是合成情景,未实现完整历史价格带和排队模型。它足以检查拒绝后账不动,却不证明实际某个涨停一定无法成交或某种队列一定可成交。具体市场与交易品种要另核,特殊状态不能因本例全部断言通过就自动称覆盖。

运行完整窗口验收

下载完整示例,保存R586.py,用Python 3.12及以上运行python R586.py。标准库源文件docs/growth/research/round-5/examples/R586.py只用合成输入,不联网、不访问真实账户,也不启动任何产品或数据服务。

断言覆盖热身、此前阈值、事件时点、进入股数现金、正常到期、失效、禁止买入和延迟卖出。精确订单、费用、数量、现金均核对,不仅看信号个数。多组截断前缀复现历史账,改变更晚高收也不能改早期进入;期限不依传入末行,短数据不会凭空终结持仓。

真实扩展先补市场证据

归档公式、窗口端点、事件、尝试有效期、退出优先、实际计时、许可来源和费率版本。扩大历史前复建正常与被阻止订单,特殊状态、上市年龄、价格带和流动性各有自己的输入测试。来源或撮合变更后,先找首个阈值、事件与成交差异,再解释新收益,避免结果归因混乱。

完成条件是规则和展示账户路径可重现,不证明突破有效,不保证最长持有始终准时,也不认证日线文件实现真实撮合。这个有限成果仍有实际作用:下一位研究者知道哪一行触发、哪一行尝试、钱何时改变,便可在明确边界上补真实模型,而不必从一条曲线反向猜过程。

复核最长持有时同时看数量和现金,不只看退出标签。七十六受阻路径保留两者到七十七,正常路径已空仓。这两行是后续执行模型变更必须保留的验收边界;不能因为都源自同一到期规则,就强制把报表写成完全相同。目标规则相同,实际路径仍可不同,差异必须可解释。

常见问题

触发日高价包含在前高吗?

本五十五期阈值排除当前bar。

最多二十期保证准时退出吗?

不保证,执行阻止保留持仓,必须报告延迟。

相关阅读