SPL量化工作台使用教程-15 放量高点阻力突破策略
摘要: 该策略通过识别市场放量大涨形成的阶段性高点,构建由多个放量高点均价组成的“阻力墙”。当价格强势突破该阻力位时,视为趋势启动信号入场;若突破后再次跌破则止损。策略核心包括:筛选成交量翻倍的K线高点(如Top5最高价均值作为阻力位),以收盘价确认突破有效性,并设置止损(回破阻力位)和止盈(如2倍止损幅度)。回测显示,该策略在特定股票上可实现稳定盈利(如2023年收益3.08%)。其优势在于结合
核心思想: 市场在放量大涨时形成的阶段性高点具有重要的阻力意义。当价格后续能够强势突破这个由多个放量高点构成的“阻力墙”时,往往意味着真正的强势趋势到来,是极佳的入场时机。
A、策略逻辑
- 识别关键放量点:首先,我们不是关注所有的高点,而是只关注那些伴随着成交量显著放大(能量驱动)的价格高点。这些点代表了当时多空双方激烈博弈的位置,尤其是多方获胜的位置,其高点将成为未来重要的阻力位。
- 构建阻力区域:单个放量高点的阻力可能不可靠。因此,我们找出近期多个这样的放量高点,并取它们中的最高价TOP 5的平均值,形成一个“阻力区域”。这个区域比单一价格点更具代表性,过滤了噪音。
- 等待有效突破:当价格运行到这个阻力区域附近时,我们并不立即行动。而是等待价格以强势的姿态(例如,用收盘价确认)完全突破这个区域,这表明买方力量已经完全消化了历史上所有的抛压,后市继续上涨的概率较大。
- 出场与风险控制:入场后,如果价格再次跌回阻力区域下方,说明此次突破是“假突破”,应立即止损离场
B、计算公式与参数
- N:回顾的历史周期,例如 N=100(天)。
- Volume_Multiple:成交量放大倍数,例如 2。
- Top_X:所要选取的放量高点的个数,例如 X=5。
- Lookback_Close:突破确认的周期,例如 2(天),用于判断收盘价是否站稳。
具体计算步骤:
- 筛选条件K线:
对于每一个交易日 t,在过去的 N 根K线中,筛选出所有满足以下条件的K线:
条件: (成交量(t_i) / 成交量(t_i-1)) >= Volume_Multiple
- 找出顶级高点:
将所有满足条件的K线对应的最高价 (high(t_i)) 取出,形成一个列表。
从这个列表中,找出前 Top_X 个最大的最高价(如 Top 5 Highest Highs)。
- 计算关键阻力位:
阻力位 Resistance = 平均值(Top_X个最高价)
- 生成交易信号:
- 买入信号(Bullish Breakout):
当前收盘价(close(t)) > Resistance
AND
前M根K线的收盘价(例如close(t-1)) <= Resistance (确保是刚刚突破,而不是早已突破) - 卖出信号(Sell / Stop Loss):
当前收盘价(close(t)) < Resistance (突破后再次跌回阻力位下方,视为假突破,止损出场)
- 买入信号(Bullish Breakout):
C、买卖时机
买入时机(开多仓):
在交易日结束时(例如,下午3点),如果系统计算出当日收盘价首次成功突破了计算得到的Resistance阻力位,则在下一个交易日开盘时以昨日收盘价买入。
- 为什么用收盘价确认? 避免盘中假突破的噪音。
- 为什么下一个交易日开盘买入? 这是一个非常普遍且合理的交易指令执行方式,确保了策略的可操作性。
卖出时机(平多仓/止损):
- 主动止损:在持仓后的任何一天,如果收盘价跌破了之前突破的那个Resistance位
(此时它已转变为支撑位),则在下一个交易日开盘时卖出平仓,止损离场。
- 主动止盈:可以设置一个固定的风险回报比,例如“盈利达到止损幅度2倍时止盈离
场”。
-
- 假设你在 Entry_Price 入场,止损价是 Resistance。
- 止损幅度 Stop_Loss_Range = Entry_Price - Resistance
- 目标盈利价 Take_Profit_Price = Entry_Price + (2 * Stop_Loss_Range)
- 当收盘价达到或超过 Take_Profit_Price 时,下一个交易日开盘止盈。
- 被动止盈:如果一直未触发止损和主动止盈,可以一直持有,直到反向信号出现(例
如,一个基于放量低点的支撑下破策略信号)。
根据上述描述,我们来实现此策略(需要注意,这里因为需要用到前100个交易日的数据,所以要先设置提前读100天的数据):
第一步先定义关键阻力位Resistance指标:

- SPL公式:什么是~?
SPL公式中,波浪号~用作当前行引用符号。当对K线数据进行循环计算时,~表示当前正在处理的那根K线。在循环函数(如sum()、select()等)中,~提供了对当前行的直接引用,简化了集合运算的表达。
用法示例:
~[-100:-1] //其含义为过去100个交易日的K线数据组成的集合
技术特性说明:
- 上下文绑定:~的取值由当前执行的迭代上下文决定
- 动态引用:在多层嵌套迭代中,~总是指向最内层循环的当前元素
- 类型多态:~可以表示简单数据类型的值,也可以表示行、序列等对象
- 表达式简写:与字段名配合使用时可以省略,如~.成交量可简写为成交量。之前例子都使用了这个简写形式,也就一直没有出现过~。
此符号的设计显著提升了SPL公式处理结构化数据时的简洁性和表达效率。
- SPL公式:什么是select函数?
函数说明:
选出序列中符合条件的成员
语法:
|
A.select( x ) |
备注:
针对序列A的每个成员计算表达式x,返回使表达式的值为真的成员组成的新序列。参数省略时返回所有成员。
参数:
|
A |
序列。 |
|
x |
布尔表达式,可为null。 |
返回值:
序列/序表
用法示例:
~[-100:-1].select(成交量/成交量[-1]>=2) //其含义为从过去100个交易日的K线数据中,选出成交量比头天翻倍的K线
- SPL公式:什么是top函数?
函数说明:
序列成员计算表达式后获取前n个值组成的序列。
语法:
|
A.top(n,x) |
针对序列A的成员计算表达式x后排序,返回前n个x值组成的序列。 |
|
A.top(n;x,...) |
针对序列A的成员计算表达式x,…后排序,返回前n个A成员组成的序列。 |
|
A.top(n,y,x) |
针对序列A的成员先计算表达式x,再对x结果值进行y计算,然后根据y值对x排序,获取前n个x值组成的序列。 |
备注:
针对序列的每个成员计算表达式,排序后返回前n个值组成的序列。
序列存在重复成员时,默认采用连续排名方式。
n>0时取前n个最小值,n<0时取前n个最大值,n为0时返回null,n不可省略,x省略解释为~。
参数:
|
A |
序列。 |
|
n |
整数。 |
|
y |
表达式。 |
|
x |
表达式。 |
选项:
|
@1 |
n为±1时返回单值。 |
|
@0 |
不忽略null,缺省忽略null。 |
|
@r |
采用美式排序,即并列名次占用名次。 |
|
@i |
采用中式排序,即并列名次不占用名次。 |
序列
用法示例:
~[-100:-1].select(成交量/成交量[-1]>=2).top(-5,最高) //其含义为从过去100个交易日的K线数中,选出成交量比头天翻倍的K线,再从中选出最高价排前五的K线
第二步:定义买入信号:

第三步:定义卖出信号:

第四步:定义策略:

提交后可以看到回测结果:

可以看到,600690这只股票使用此策略后,在23年实现了3.08%的盈利。
SPL量化工作台(临时)网址:http://stock.raqsoft.com.cn:8092/model.jsp
因股票信息量大,请在大屏幕电脑上使用浏览器操作,不合适小屏幕手机体验。
工作台首页:https://www.raqsoft.com.cn/wx/splqt.html (长期有效,临时网址变更时可从这里获取最新的)。
社区网址:https://c.raqsoft.com.cn/tag/QuantitativeTrading
更多推荐


所有评论(0)