一、均值回归理论

  均值回归:股票价格无论高于或低于价值中枢(或均值)都会以很高的概率向价值中枢回归的趋势。何时会发生均值回归,属于“随机漫步”范畴。

  均值回归的理论基于以下观测:价格的波动一般会以它的均线为中心。即当标的价格由于波动而偏离移动的均线时,它将调整并重新归于均线。

  偏离程度:(MA-P)/MA

1、均值回归原理

  均值回归法则:万物最终都将回归于其长期的均值

  根据这个理论,一种上涨或者下跌的趋势不管其延续的时间多长都不能永远持续下去,最终均值回归的规律一定会出现:涨得太多了,就会向平均值移动下跌;跌得太多了,就会向平均值移动上升。

  与趋势跟踪赌趋势的继续不同,均值回归则是赌趋势的反转。巴菲特的逆向投资策略,索罗斯的反身理论,其本质都是均值回归理论的应用,所不同的是前者是价值低估的投资,后者则是泡沫破灭的投机。

  均值回归理论在一定程度上或一定范围内对股票价格进行预测,对于长线投资者具有重要指导意义。

  到目前为止,均值回归理论仍不能解决的或者说不能预测的是回归的时间间隔,即回归的周期呈 " 随机漫步 "。不同的股票市场,回归的周期会不一样,就是对同一个股票市场来说,每次回归的周期也不一样。

2、均值回归策略(选股)

  每个调仓日进行。

  • 计算股票池中所有股票的N日均线;
  • 计算股票池中所有股票和均线的偏离度;
  • 选取偏离度最高的M只股票并调仓。

二、均值回归实现

# 初始化函数,设定基准等等
def initialize(context):# 设定沪深300作为基准set_benchmark('000300.XSHG')# 开启动态复权模式(真实价格)set_option('use_real_price', True)# 输出内容到日志 log.info()log.info('初始函数开始运行且全局只运行一次')# 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')# 获取指数成份股g.security = get_index_stocks('000300.XSHG')# print(g.security)    # ['000001.XSHE', '000002.XSHE', '000063.XSHE'...'603986.XSHG', '603993.XSHG']g.ma_days = 30       # 30天均值g.stock_num = 10     # 持仓10只股票run_monthly(handle, 1)     # 第一个参数是对应的函数,第二个参数指第几个交易日def handle(context):# pandas的Series对象:能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组# Series参数——index索引:索引值必须是唯一的和散列的,与数据的长度相同sr = pd.Series(index=g.security)     # 索引设置为沪深300股票代码# 遍历股票代码for stock in sr.index:# attribute_history获取历史数据:参数设置股票代码、单位时间长度ma = attribute_history(stock, g.ma_days)['close'].mean()    # 选取close这一列求平均,获取30日均值# 这只股票今天开盘价# get_current_data: 获取当前时间数据p = get_current_data()[stock].day_open# 股票到均线的偏离程度ratio = (ma - p) / masr[stock] = ratio# 选出偏离程度最大的十个# pandas.DataFrame.nlargest:返回按列降序排列的前n行to_hold = sr.nlargest(g.stock_num).index.values# print(to_hold)for stock in context.portfolio.positions:if stock not in to_hold:# 目标股数下单,卖出非标的的股票order_target(stock, 0)# 期待持有且还未持仓的股票to_buy = [stock for stock in to_hold if stock not in context.portfolio.positions]if len(to_buy) > 0:  # 需要调仓# 每只股票预计投入的资金cash_per_stock = context.portfolio.available_cash / len(to_buy)for stock in to_buy:# 按价值下单,买入需买入的股票order_value(stock, cash_per_stock)

  执行显示效果:

  

1、计算出均线、股价、偏离度

def handle(context):# pandas的Series对象:能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组# Series参数——index索引:索引值必须是唯一的和散列的,与数据的长度相同sr = pd.Series(index=g.security)     # 索引设置为沪深300股票代码# 遍历股票代码for stock in sr.index:# attribute_history获取历史数据:参数设置股票代码、单位时间长度ma = attribute_history(stock, g.ma_days)['close'].mean()    # 选取close这一列求平均,获取30日均值# 这只股票今天开盘价# get_current_data: 获取当前时间数据p = get_current_data()[stock].day_open# 股票到均线的偏离程度ratio = (ma - p) / masr[stock] = ratio

  偏离程度计算:(MA-P)/MA

2、找到偏离度最高的股票

DataFrame.nlargest(self,n,columns,keep ='first' )

  pandas.DataFrame.nlargest():返回按列降序排列的前n行。以降序返回column中具有最大值的前n行。未指定的列也将返回,但不用于排序。

  此方法等效于 如下方法,但性能更高:

df.sort_values(columns, ascending=False).head(n)

  选出偏离度最大的十只股票:

def handle(context):# pandas的Series对象:能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组# Series参数——index索引:索引值必须是唯一的和散列的,与数据的长度相同sr = pd.Series(index=g.security)     # 索引设置为沪深300股票代码# 遍历股票代码for stock in sr.index:# attribute_history获取历史数据:参数设置股票代码、单位时间长度ma = attribute_history(stock, g.ma_days)['close'].mean()    # 选取close这一列求平均,获取30日均值# 这只股票今天开盘价# get_current_data: 获取当前时间数据p = get_current_data()[stock].day_open# 股票到均线的偏离程度ratio = (ma - p) / masr[stock] = ratio# 选出偏离程度最大的十个# pandas.DataFrame.nlargest:返回按列降序排列的前n行to_hold = sr.nlargest(g.stock_num).indexprint(to_hold)

  执行显示效果:

2019-01-02 09:30:00 - INFO  - Index(['002252.XSHE', '600518.XSHG', '300003.XSHE', '600703.XSHG','002450.XSHE', '002555.XSHE', '002310.XSHE', '600157.XSHG', '603986.XSHG', '002456.XSHE'],dtype='object')2019-02-01 09:30:00 - INFO  - Index(['002450.XSHE', '600518.XSHG', '300072.XSHE', '002252.XSHE','300296.XSHE', '600100.XSHG', '600867.XSHG', '002310.XSHE', '600703.XSHG', '002460.XSHE'],dtype='object')

  可以看到返回的是一个Index对象。

3、将得到的对象转为数组

  pandas.Index.values返回Index对象中数据的数组。

def handle(context):# pandas的Series对象:能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组# Series参数——index索引:索引值必须是唯一的和散列的,与数据的长度相同sr = pd.Series(index=g.security)     # 索引设置为沪深300股票代码# 遍历股票代码for stock in sr.index:# attribute_history获取历史数据:参数设置股票代码、单位时间长度ma = attribute_history(stock, g.ma_days)['close'].mean()    # 选取close这一列求平均,获取30日均值# 这只股票今天开盘价# get_current_data: 获取当前时间数据p = get_current_data()[stock].day_open# 股票到均线的偏离程度ratio = (ma - p) / masr[stock] = ratio# 选出偏离程度最大的十个# pandas.DataFrame.nlargest:返回按列降序排列的前n行to_hold = sr.nlargest(g.stock_num).index.valuesprint(to_hold)

  执行显示:

2019-01-02 09:30:00 - INFO  - [002252.XSHE 600518.XSHG 300003.XSHE 600703.XSHG 002450.XSHE 002555.XSHE002310.XSHE 600157.XSHG 603986.XSHG 002456.XSHE]2019-02-01 09:30:00 - INFO  - [002450.XSHE 600518.XSHG 300072.XSHE 002252.XSHE 300296.XSHE 600100.XSHG600867.XSHG 002310.XSHE 600703.XSHG 002460.XSHE]

  均值回归也可以作为一个因子加入多因子选股策略!

量化交易——均值回归策略相关推荐

  1. 金融量化— 简单均值回归策略(Mean Reverting Strategy)

    均值回归理论 均值回归策略应用了股市投资中经典的高抛低吸思想,该类型策略一般在震荡市中表现优异: 但是在单边趋势行情中一般表现糟糕,往往会大幅跑输市场: 均值回归:"跌下去的迟早要涨上来&q ...

  2. 【量化策略系列】股票均值回归策略之一——配对交易策略(Pairs Trading)

    本文持续更新中.最后更新时间:11/11/2019 文章目录 1. 往期文章回顾 2. 均值回归策略简介 3. 配对交易策略简介 4. 配对交易策略构建流程 5. 代码实现与回测结果 Python 代 ...

  3. 量化交易 聚宽 均值回归策略

    量化交易 聚宽 均值回归策略 # 导入函数库 from jqdata import *# 初始化函数,设定基准等等 def initialize(context):# 设定沪深300作为基准set_b ...

  4. 手把手教你用Python搭建自己的量化回测框架【均值回归策略】

    1 引言 大部分量化策略都可以归类为均值回归与动量策略.事实上,只有当股票价格是均值回归或趋势的,交易策略才能盈利.否则,价格是随机游走的,交易将无利可图.均值回归是金融学的一个重要概念,指股票价格无 ...

  5. 量化投资 — 简单均值回归策略(Mean Reverting Strategy)

    均值回归_Mean Reverting Strategy 0. 引库 %matplotlib inline import matplotlib.pyplot as plt import seaborn ...

  6. 【Python】均值回归策略回测(日内高频数据)

    文章采用均值为SMA(close, time_period = 3日),利用(收盘价 - 三日均线)计算偏离程度. 如果大于阈值(首个收盘价的2%)则开仓买入(卖出) 如果收盘价穿过均线说明均值偏离情 ...

  7. 布林线均值回归策略(股票)

    1. 原理 提起布林线均值回归策略,就不得不提布林带这个概念.布林带是利用统计学中的均值和标准差联合计算得出的,分为均线,上轨线和下轨线.布林线均值回归策略认为,标的价格在上轨线和下轨线围成的范围内浮 ...

  8. Python量化交易03——海龟策略

    参考书目:深入浅出Python量化交易实战 海龟策略也是经典中的经典.其核心要点是:在股价超过过去的N天交易日的最高点时是买入信号,跌破过去的N天交易日的最低点时是卖出信号.最高点和最低点的通道被称为 ...

  9. 数据分析--均值回归策略(选股)

    数据分析--均值回归策略(选股) 均值回归理论 均值回归:"跌下去的迟早要涨上来"  ,  选股用, 不适合做择时,因为不知道什么时候是偏离最低 均值回归的理论基于以下观测:价格的 ...

最新文章

  1. 喜大普奔!GitHub官方文档推出中文版啦!
  2. Windows下RabbitMQ安装及注意事项
  3. a byte of python-A Byte of Python PDF 下载
  4. intelliJ idea运行新的test功能时,报错:class not found ..... empty test suite
  5. 组件通信 Provideinject
  6. 深入理解 Java 垃圾回收机制
  7. windows apche php mysql zend_Windows XP上安装配置 Apache+PHP+Mysql+Zend
  8. 大数据开发之Hadoop---初始Hadoop
  9. 2009我的lamp之路
  10. python机器学习之决策树详解
  11. 计算机视觉专业名词中英文对照(转)
  12. 微型计算机原理与接口技术AD实验报告,微机原理与接口技术AD转换综合实验报告.doc...
  13. win7激活一万遍都没解决的同学请看过来
  14. 阅读ResNet论文 心得体会
  15. java让字体闪动_java 字体闪烁
  16. “人活着是为了什么?”“生活的中心是什么?”
  17. EfficientNet理论讲解
  18. 腾讯发布的开发语言安全指南:C/C++安全指南
  19. 无人机项目跟踪记录七十八-----电子罗盘模块详解
  20. oracle 加载数据戽_oracle数据库数据导入导出步骤(入门)

热门文章

  1. 在不禁用iis的情况下停止其对443端口的禁用(由于443端口被占用宝塔nginx服务器添加ssl证书失败,又不能停止iis服务的解决办法)
  2. 基层服务项目服务器一般几年,基层呆几年回来或物是人非,有最低服务年限的公务员值不值得报?...
  3. 结合正则 抓取的iOS 第三方
  4. 【精华】AIGC之文生视频及实践应用
  5. 【Part 1】剑桥雅思口语真题汇总5-17
  6. 图像质量评价指标: PSNR 和 SSIM 和 LPIPS
  7. [附源码]SSM计算机毕业设计体检中心健康管理系统JAVA
  8. ensp路由器起不来解决方法
  9. linux进阶-你不知道的sshd服务器的功能和配置
  10. Dash Bash Zsh功能研究