前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R-Breaker策略

R-Breaker策略

作者头像
用Python的交易员
发布2018-07-26 11:59:20
1.2K0
发布2018-07-26 11:59:20
举报
文章被收录于专栏:维恩的派VNPIE维恩的派VNPIE

本文提供了一个用vn.py来编写R-breaker交易策略的示例。只提供一个参考模板,并不能直接进入市场进行交易。感谢‘爱谁谁’在维恩的派论坛里的分享!

策略介绍

R-breaker策略是一种短线交易策略,结合了趋势和反转两种交易方式。

策略逻辑

周期:1min、5min

1. 根据前一个交易日的收盘价、最高价、最低价计算出如下6个价格,以此来形成当前交易日盘中交易的触发条件。

  • 突破买入价(buy_break)
  • 观察卖出价(sell_setup)
  • 反转卖出价 (sell_enter)
  • 反转买入价(buy_enter)
  • 观察买入价(buy_setup)
  • 突破卖出价(sell_break)

2. 交易规则:

反转:

  • 持多单,当日内最高价超过观察卖出价后,盘中价格出现回落,且进一步跌破反转卖出价构成的支撑线时,采取反转策略,即在该点位反手做空;
  • 持空单,当日内最低价低于观察买入价后,盘中价格出现反弹,且进一步超过反转买入价构成的阻力线时,采取反转策略,即在该点位反手做多;

突破:

  • 空仓,如果盘中价格超过突破买入价,则采取趋势策略,即在该点位开仓做多;
  • 空仓,如果盘中价格跌破突破卖出价,则采取趋势策略,即在该点位开仓做空;

是否隔夜留仓?

  • R-Breaker 是日内交易策略,若某个交易日已开仓且收盘前仍未触发平仓信号,则在收盘时强行平仓,不隔夜留仓以避免跳空的风险。

策略代码

信号生成部分:

if bar.close > self.Bbreak: self.judge_signal_current = 3 #反转趋势回落

elif bar.close > self.Ssetup: self.judge_signal_current = 2 elif bar.close < self.Senter and self.judge_signal_current == 2: self.judge_signal_current = 1 elif bar.close < self.Bsetup : self.judge_signal_current = -2 elif bar.close > self.Benter and self.judge_signal_current == -2: self.judge_signal_current = -1 #突破了底线 elif bar.close < self.Sbreak: self.judge_signal_current = -3

处理交易信号:

if self.pos ==0 : #处理信号为3的情况 if self.judge_signal_current == 3 or self.judge_signal_current == -1 : vtOrderID = self.buy(bar.close+2, self.fixedSize, stop=True) self.orderList.append(vtOrderID) self.judge_signal_current = 0 #处理 信号为-3的情况 elif self.judge_signal_current == -3 or self.judge_signal_current == 1 : vtOrderID = self.short(bar.close-2, self.fixedSize, stop=True) self.orderList.append(vtOrderID)

self.judge_signal_current = 0

#处理持仓大于零 elif self.pos > 0 : #先平仓(后反向开仓) : if self.judge_signal_current == 1 : vtOrderID = self.sell(bar.close * 0.99, abs(self.pos)) self.orderList.append(vtOrderID) vtOrderID = self.short(bar.close-2, self.fixedSize, stop=True) self.orderList.append(vtOrderID) self.judge_signal_current = 0

#处理持仓小于零 elif self.pos < 0 : #先平仓后开仓:cover+buy if self.judge_signal_current == -1 : vtOrderID = self.cover(bar.close * 1.01, abs(self.pos)) self.orderList.append(vtOrderID) vtOrderID = self.buy(bar.close+2, self.fixedSize, stop=True) self.orderList.append(vtOrderID) self.judge_signal_current = 0

收盘前平仓

if self.pos > 0: vtOrderID = self.sell(bar.close * 0.99, abs(self.pos)) self.orderList.append(vtOrderID) self.judge_signal_current = 0 elif self.pos < 0: vtOrderID = self.cover(bar.close * 1.01, abs(self.pos)) self.orderList.append(vtOrderID) self.judge_signal_current = 0

主要展示了onBar那一部分代码,完整代码请点击‘阅读原文’跳转到维恩的派论坛下载附件。

注:

  1. 里面的记录订单编号是基于vn.py1.7之前的版本写的,主要用于按照订单编号来撤单;
  2. 只是一个示例策略,不做任何实盘建议。用前请三思,不承担任何责任。

参考文献:

R-Breaker 策略优化表现

http://www.sohu.com/a/120307567_505915

点击“阅读原文”查看原贴!欢迎大家把使用过程中遇到的问题或者摸索的经验分享到「维恩的派」论坛!

基于python的开源交易平台开发框架。截止目前,vn.py项目在Github上的Star已经达到5787,量化交易类开源项目第1,量化类项目第3(1、2依旧分别是Zipline和TuShare)。

项目官网:http://www.vnpy.org

论坛地址:www.vnpie.com

知乎专栏:https://zhuanlan.zhihu.com/vn-py

Developed by Traders,

for Traders

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 维恩的派VNPIE 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档