Py学习  »  Python

Python量化策略:R-Breaker交易策略

灵度智能 • 3 月前 • 109 次点击  

免责声明:本文所有内容‬仅用于交流学习‬,不构成任何投资建议!投资有风险,入市需谨慎!

策略介绍


R-Breaker是一种经典的日内量化交易策略,以结合趋势跟踪与反转交易为特点,自1994年由Richard Saidenberg公布后,曾连续十多年被美国《Futures Truth》杂志评为前十大最赚钱的策略之一。


📊 核心原理:六个关键价位


策略的核心是基于前一交易日的最高价、最低价和收盘价,计算出六个关键价位,作为当日交易的决策依据。这些价位从高到低通常包括:


  • 突破买入价和突破卖出价:用于在空仓时捕捉趋势。

  • 观察卖出价和观察买入价:用于监控价格是否出现潜在反转迹象。

  • 反转卖出价和反转买入价:用于在持仓时确认反转并反手交易。


一套常见的经典计算公式如下:


  • 中心价 = (昨日最高价 + 昨日收盘价 + 昨日最低价) / 3

  • 突破买入价 = 昨日最高价 + 2 × (中心价 - 昨日最低价)

  • 突破卖出价 = 昨日最低价 - 2 × (昨日最高价 - 中心价)


🔄 独特的交易逻辑


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


  • 趋势跟踪(空仓时):当盘中价格向上突破突破买入价时,开仓做多;当价格向下跌破突破卖出价时,开仓做空。

  • 反转交易(持仓时):这是策略的精华。当你持有多单时,如果当日最高价超过了观察卖出价,但随后价格回落并跌破了反转卖出价,则会平掉多单并反手做空。做空时的反转逻辑与之相反。这种设计旨在趋势可能衰竭时,能及时锁定利润并抓住反向波动的机会。


⚙️ 应用与注意事项


R-Breaker主要应用于期货市场的日内短线交易,通常在收盘前平仓,不持有隔夜头寸。其在波动性较大的市场中表现往往更好。


需要注意的是,作为一个经典策略,它也存在一些局限性:


  • 对市场波动依赖大:在趋势不明显、整日震荡的行情中,策略可能频繁交易导致亏损。

  • 存在过时风险:随着市场成熟,其简单逻辑的盈利空间可能被压缩。

  • 参数敏感:策略的表现对计算公式中的参数较为敏感,过度优化存在过拟合风险。


因此,在实际使用中,交易者通常会对其进行改进,例如加入止损机制、设置波动率过滤器以规避震荡市,或与其他策略结合使用。


如果你想深入了解,我可以为你进一步解释R-Breaker策略中六个价位的具体计算方法,或者提供其交易逻辑的流程图。


策略实现


【 扫描文末二维码加入星球获取完整源码 


源码


'''backteststart: 2019-01-01 00:00:00end: 2021-01-01 00:00:00period: 1hbasePeriod: 1hexchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]'''# 策略主函数def onTick():    # 获取数据    exchange.SetContractType('rb000')   					# 订阅期货品种    bars_arr =exchange.GetRecords(PERIOD_D1)  			# 获取日K线数组    if len(bars_arr) 2:  								# 如果K线数量小于2根        return    yesterday_open = bars_arr[-2]['Open']     			# 昨日开盘价    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*num # 枢轴点    r1 = 2 * pivot - yesterday_low 						# 阻力位1    r2 = pivot + (yesterday_high - yesterday_low)		# 阻力位2    r3 = yesterday_high + 2 * (pivot - yesterday_low)	# 阻力位3    s1 = 2 * pivot - yesterday_high  					# 支撑位1    s2 = pivot - (yesterday_high - yesterday_low)  		# 支撑位2    s3 = yesterday_low - 2 * (yesterday_high - pivot)  	# 支撑位3    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:  							# 如果持仓数组大于0        for i in position_arr:            if i['ContractType'][:2] == 'rb':  			# 如果持仓品种等于rb                if i['Type'] % 2 == 0:  					# 如果是多单                    position = i['Amount']  				# 赋值持仓数量为正数                else:                    position = -i['Amount']  				# 赋值持仓数量为负数                profit = i['Profit']  					# 获取持仓盈亏    else:        position = 0  									# 赋值持仓数量为0        profit = 0  										# 赋值持仓盈亏为0    if position == 0:  									# 如果无持仓        if current_price > r3:  							# 如果价格大于阻力位3            exchange.SetDirection("buy")  				# 设置交易方向和类型            exchange.Buy(current_price + 11)  			# 开多单        if current_price < s3:  							# 如果价格小于支撑位3            exchange.SetDirection("sell")  				# 设置交易方向和类型            exchange.Sell(current_price - 11)  		# 开空单    if position > 0:  									# 如果持有多单    # 如果今日最高价大于阻力位2,并且当前价格小于阻力位1        if today_high > r2 and current_price < r1 or current_price < s3:              exchange.SetDirection("closebuy")  			# 设置交易方向和类型            exchange.Sell(current_price - 11)  		# 平多单            exchange.SetDirection("sell")  				# 设置交易方向和类型            exchange.Sell(current_price - 11)  		# 反手开空单    if position 0:  # 如果持有空单        # 如果今日最低价小于支撑位2,并且当前价格大于支撑位1        if today_low < s2 and current_price > s1 or current_price > r3:              exchange.SetDirection("closesell")  			# 设置交易方向和类型            exchange.Buy(current_price + 11)  			# 平空单            exchange.SetDirection("buy")  				# 设置交易方向和类型            exchange.Buy(current_price + 11)  			# 反手开多单
# 程序主函数def main():    while True:     # 循环        onTick()     # 执行策略主函数        Sleep(1000) # 休眠1秒


策略参数




▌关于我们

我们致力于人工智能、量化交易领域前沿研究,分享前沿论文、模型代码、策略实现。如有相关需求,请私信与我们联系。

▌商务合作

请加微信“LingDuTech163”,或公众号后台私信“联系方式”。


关注【灵度智能】公众号,获取更多AI资讯。




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/190786