找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1363

积分

0

好友

185

主题
发表于 3 天前 | 查看: 7| 回复: 0

R-Breaker是一种结合趋势跟踪与反转交易的经典日内量化交易策略。自1994年由Richard Saidenberg提出后,它曾连续多年在《Futures Truth》杂志的评选中位列前十大盈利策略。

策略核心:六个关键价位

策略的核心逻辑依赖于根据前一交易日的价格数据(最高价、最低价、收盘价),计算出六个关键价位,作为当日交易的决策锚点。这六个价位自上而下分别是:

  • 突破买入价突破卖出价:用于在空仓状态下识别并追随趋势。
  • 观察卖出价观察买入价:用于监控价格,预警潜在的反转机会。
  • 反转卖出价反转买入价:用于在持仓状态下确认反转信号,执行反手操作。

一套广泛使用的经典计算公式如下:

  • 中心价 = (昨日最高价 + 昨日收盘价 + 昨日最低价) / 3
  • 突破买入价 = 昨日最高价 + 2 × (中心价 - 昨日最低价)
  • 突破卖出价 = 昨日最低价 - 2 × (昨日最高价 - 中心价)
  • ... (其他价位计算类似,依据不同变体有所差异)

独特的双模式交易逻辑

R-Breaker的交易逻辑根据账户的持仓状态清晰分为两部分:

  1. 趋势跟踪模式(空仓时):当盘中价格向上突破“突破买入价”时,开仓做多;当价格向下跌破“突破卖出价”时,开仓做空。这是对强势趋势的顺势追击。
  2. 反转交易模式(持仓时):这是策略设计的精妙之处。例如,当你持有多单时,如果当日价格曾冲高触及“观察卖出价”,但随后回落并跌破了“反转卖出价”,策略便会平掉多单并立即反手做空。空单的反转逻辑与之对称。这种机制旨在趋势可能衰竭时,及时锁定利润并捕捉反向波动的机会。

应用场景与策略局限

R-Breaker主要设计用于期货市场的日内短线交易,通常在收盘前了结所有头寸,避免隔夜风险。它在市场波动率较高的环境中通常表现更为出色。

然而,作为一个经典策略,R-Breaker也存在一些固有的局限性,在应用Python进行实现和回测时需特别注意:

  • 依赖市场波动:在趋势不明、整日震荡的“牛皮市”中,策略可能频繁触发信号导致连续小额亏损。
  • 存在过时风险:随着市场参与者认知的普及,其简单规则的盈利空间可能被逐渐压缩。
  • 参数敏感性:策略表现对计算公式中的系数(如上述公式中的倍数2)较为敏感,不当的参数优化容易导致过拟合。

因此,在实际应用中,交易者常对其进行改进,例如引入动态止损止盈、增加波动率过滤器以避免在震荡市中交易,或将其作为信号源之一与其他策略结合使用。

Python策略代码实现

以下是一个基于Python的R-Breaker策略简化代码框架,展示了核心的交易逻辑。请注意,实际部署需要完整的交易接口和大数据环境支持。

'''backtest
start: 2019-01-01 00:00:00
end: 2021-01-01 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''

def onTick():
    # 获取历史K线数据
    exchange.SetContractType('rb000')
    bars_arr = exchange.GetRecords(PERIOD_D1)
    if len(bars_arr) < 2:
        return

    # 获取昨日价格
    yesterday_high = bars_arr[-2]['High']
    yesterday_low = bars_arr[-2]['Low']
    yesterday_close = bars_arr[-2]['Close']

    # 计算关键价位 (此处为一种变体计算示例)
    pivot = (yesterday_high + yesterday_close + yesterday_low) / 3
    r3 = yesterday_high + 2 * (pivot - yesterday_low)  # 突破买入价
    r2 = pivot + (yesterday_high - yesterday_low)      # 观察卖出价
    r1 = 2 * pivot - yesterday_low                     # 反转卖出价
    s1 = 2 * pivot - yesterday_high                    # 反转买入价
    s2 = pivot - (yesterday_high - yesterday_low)      # 观察买入价
    s3 = yesterday_low - 2 * (yesterday_high - pivot)  # 突破卖出价

    # 获取今日价格及当前价
    today_high = bars_arr[-1]['High']
    today_low = bars_arr[-1]['Low']
    current_price = _C(exchange.GetTicker).Last

    # 获取当前持仓状态
    position_arr = _C(exchange.GetPosition)
    if len(position_arr) > 0:
        # ... 解析持仓方向与数量 ...
        position = 1  # 示例:假设持有多单
    else:
        position = 0

    # 核心交易逻辑
    if position == 0:  # 空仓,执行趋势跟踪
        if current_price > r3:
            exchange.SetDirection("buy")
            exchange.Buy(current_price + 1, 1)  # 开多单
        if current_price < s3:
            exchange.SetDirection("sell")
            exchange.Sell(current_price - 1, 1)  # 开空单

    elif position > 0:  # 持有多单,监控反转
        if (today_high > r2 and current_price < r1) or current_price < s3:
            # 平多反手开空
            exchange.SetDirection("closebuy")
            exchange.Sell(current_price - 1, 1)
            exchange.SetDirection("sell")
            exchange.Sell(current_price - 1, 1)

    elif position < 0:  # 持有空单,监控反转
        if (today_low < s2 and current_price > s1) or current_price > r3:
            # 平空反手开多
            exchange.SetDirection("closesell")
            exchange.Buy(current_price + 1, 1)
            exchange.SetDirection("buy")
            exchange.Buy(current_price + 1, 1)

def main():
    while True:
        onTick()
        Sleep(1000)

策略参数与绩效

对策略进行回测时,调整关键价位的计算公式参数会直接影响策略的进攻性和防守性,从而改变最终的收益曲线和风险指标。一个稳健的算法需要在历史回测与样本外测试中寻找平衡。

R-Breaker策略参数设置示例
策略参数设置界面示意




上一篇:AWS CEO解读AI编程对初级程序员的职业影响与现实挑战
下一篇:Windows 11标题栏自定义教程:使用DWMBlurGlass实现毛玻璃与Aero效果
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 18:57 , Processed in 0.313783 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表