基于支撑阻力位突破和回测的多级量化趋势交易策略


创建日期: 2025-02-24 14:22:25 最后修改: 2025-02-26 12:00:13
复制: 1 点击次数: 25
1
关注
100
关注者

基于支撑阻力位突破和回测的多级量化趋势交易策略 基于支撑阻力位突破和回测的多级量化趋势交易策略

概述

这是一个基于支撑阻力位突破和回测的量化交易策略。策略通过识别关键价格支撑位和阻力位,在价格突破后的回测确认点进行交易。该策略采用左右看回bar数动态定位关键点位,并结合回测容差来过滤假突破,从而提高交易的准确性和稳定性。

策略原理

策略主要包含以下核心逻辑: 1. 通过左右看回指定数量的K线来识别关键支撑和阻力pivot点位 2. 设置状态变量追踪候选支撑阻力位的突破和回测情况 3. 在出现新的pivot点时更新候选支撑阻力位 4. 当价格突破候选支撑阻力位且回测时进行交易: - 价格跌破支撑后回升至支撑位附近时做多 - 价格突破阻力后回落至阻力位附近时做空 5. 使用容差参数来过滤回测时的价格波动,提高信号质量

策略优势

  1. 采用经典的技术分析理论,逻辑清晰易懂
  2. 通过动态识别关键点位,适应性强
  3. 结合突破和回测双重确认,降低假信号
  4. 使用容差参数过滤噪音,提高准确率
  5. 代码结构清晰,易于维护和扩展
  6. 适用于多个时间周期和品种

策略风险

  1. 在震荡市场可能频繁交易导致亏损
  2. 突破假信号仍然存在
  3. 参数优化可能存在过拟合风险
  4. 市场波动过大时止损可能较大
  5. 需要考虑交易成本的影响

策略优化方向

  1. 增加趋势过滤器,只在主趋势方向交易
  2. 加入成交量确认机制
  3. 优化入场时机,可考虑增加技术指标确认
  4. 完善止损止盈机制
  5. 增加仓位管理逻辑
  6. 考虑加入多时间周期分析

总结

该策略通过经典的支撑阻力理论和突破回测逻辑构建,具有较好的理论基础。通过参数优化和风险控制可以获得稳定的交易效果。策略代码结构清晰,易于理解和扩展,具有较强的实用价值。建议在实盘交易中结合市场情况和个人风险偏好进行适当的参数调整。

策略源码
/*backtest
start: 2024-03-13 09:40:00
end: 2025-02-23 15:00:00
period: 1d
basePeriod: 1m
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/

//@version=5
strategy("SR突破与回测策略(4小时)", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// ===== 用户输入 =====
leftBars    = input.int(3, "左侧支点K线数量", minval=1)  // 计算支撑/阻力时,左侧的K线数量
rightBars   = input.int(3, "右侧支点K线数量", minval=1)  // 计算支撑/阻力时,右侧的K线数量
tolerance   = input.float(0.005, "回测容忍度(比例)", step=0.001)  // 支撑/阻力回测时的容忍度,设置为价格范围的一个小比例

// ===== 计算支点 =====
pLow  = ta.pivotlow(low, leftBars, rightBars)  // 计算最低点(支撑点)
pHigh = ta.pivothigh(high, leftBars, rightBars)  // 计算最高点(阻力点)

// ===== 用于候选支撑和阻力的状态变量 =====
var float candidateSupport  = na  // 支撑候选点
var bool  supportBroken     = false  // 支撑是否被突破
var bool  supportRetested   = false  // 支撑是否被回测

var float candidateResistance = na  // 阻力候选点
var bool  resistanceBroken    = false  // 阻力是否被突破
var bool  resistanceRetested  = false  // 阻力是否被回测

// ===== 更新候选支撑和阻力 =====
if not na(pLow)  // 如果找到了有效的支撑点
    candidateSupport := pLow  // 设置候选支撑点
    supportBroken    := false  // 重置支撑突破标志
    supportRetested  := false  // 重置支撑回测标志

if not na(pHigh)  // 如果找到了有效的阻力点
    candidateResistance := pHigh  // 设置候选阻力点
    resistanceBroken    := false  // 重置阻力突破标志
    resistanceRetested  := false  // 重置阻力回测标志

// ===== 检查突破和回测 =====
// -- 支撑:价格突破支撑并回测 --
if not na(candidateSupport)  // 如果有有效的支撑候选点
    if not supportBroken and low < candidateSupport  // 如果价格突破支撑
        supportBroken := true  // 设置支撑已被突破

    // 如果支撑被突破并且价格回测支撑
    if supportBroken and not supportRetested and close >= candidateSupport and math.abs(low - candidateSupport) <= candidateSupport * tolerance
        supportRetested := true  // 标记支撑被回测
        label.new(bar_index, candidateSupport, "支撑回测", 
                  style=label.style_label_up, color=color.green, textcolor=color.white, size=size.tiny)  // 在图表上标记支撑回测
        // 示例交易逻辑:在支撑回测时开多单
        strategy.entry("Long_Support", strategy.long)  // 执行多头开仓

// -- 阻力:价格突破阻力并回测 --
if not na(candidateResistance)  // 如果有有效的阻力候选点
    if not resistanceBroken and high > candidateResistance  // 如果价格突破阻力
        resistanceBroken := true  // 设置阻力已被突破

    // 如果阻力被突破并且价格回测阻力
    if resistanceBroken and not resistanceRetested and close <= candidateResistance and math.abs(high - candidateResistance) <= candidateResistance * tolerance
        resistanceRetested := true  // 标记阻力被回测
        label.new(bar_index, candidateResistance, "阻力回测", 
                  style=label.style_label_down, color=color.red, textcolor=color.white, size=size.tiny)  // 在图表上标记阻力回测
        // 示例交易逻辑:在阻力回测时开空单
        strategy.entry("Short_Resistance", strategy.short)  // 执行空头开仓

// ===== 绘制支撑和阻力 =====
plot(pLow, title="支撑点", style=plot.style_circles, color=color.green, linewidth=2)  // 绘制支撑点,绿色
plot(pHigh, title="阻力点", style=plot.style_circles, color=color.red, linewidth=2)  // 绘制阻力点,红色
更多内容