社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

灵度智能 • 6 月前 • 193 次点击  

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

策略介绍


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