指数增强策略

目录

指数增强策略

1. 策略原理

2. 策略步骤

3. 策略代码

4. 回测结果和稳健性分析

1. 策略原理

说到指数增强,就不得不说指数。

在进行股票投资时,有一种分类方式是将投资分为主动型投资被动型投资。被动型投资是指完全复制指数,跟随指数的投资方式。与被动型投资相反,主动型投资是根据投资者的知识结合经验进行主动选股,不是被动跟随指数。主动型投资者期望获得超越市场的收益,被动型投资者满足于市场平均收益率水平。

指数增强是指在跟踪指数的基础上,采用一些判断基准,将不看好的股票权重调低或平仓,将看好的股票加大仓位,以提高收益率的方法。

既然如此,我已经判断出来哪只是“好股票”,哪只是“一般”的股票,为什么不直接买入?而是要买入指数呢?

指数增强不同于其他主动投资方式,除了注重获取超越市场的收益,还要兼顾降低组合风险,注重收益的稳定性。如果判断失误,只买入选中股票而非指数会导致投资者承受巨大亏损。

怎样选择股票?

和alpha对冲策略类似,指数增强仅仅是一个思路,怎样选择“好股”还需投资者结合自身经验判断。

本策略利用“动量”这一概念,认为过去5天连续上涨的股票具备继续上涨的潜力,属于强势股;过去5天连续下跌的股票未来会继续下跌,属于弱势股。

2. 策略步骤

第一步:选择跟踪指数,以权重大于0.35%的成分股为股票池。
第二步:根据个股价格动量来判断是否属于优质股,即连续上涨5天则为优势股;间隔连续下跌5天则为劣质股。
第三步:将优质股权重调高0.2,劣质股权重调低0.2。

回测时间:2017-07-01 08:00:00 到 2017-10-01 16:00:00
回测选股股票池:沪深300成分股
回测初始资金:1000万

3. 策略代码

# coding=utf-8
from __future__ import print_function, absolute_import, unicode_literals
import numpy as np
from gm.api import *
from pandas import DataFrame
'''
本策略以0.8为初始权重跟踪指数标的沪深300中权重大于0.35%的成份股.
个股所占的百分比为(0.8*成份股权重)*100%.然后根据个股是否:
1.连续上涨5天 2.连续下跌5天
来判定个股是否为强势股/弱势股,并对其把权重由0.8调至1.0或0.6
回测时间为:2017-07-01 08:50:00到2017-10-01 17:00:00
'''
def init(context):# 资产配置的初始权重,配比为0.6-0.8-1.0context.ratio = 0.8# 获取沪深300当时的成份股和相关数据stock300 = get_history_constituents(index='SHSE.000300', start_date='2017-06-30', end_date='2017-06-30')[0]['constituents']stock300_symbol = []stock300_weight = []for key in stock300:# 保留权重大于0.35%的成份股if (stock300[key] / 100) > 0.0035:stock300_symbol.append(key)stock300_weight.append(stock300[key] / 100)context.stock300 = DataFrame([stock300_weight], columns=stock300_symbol, index=['weight']).Tprint('选择的成分股权重总和为: ', np.sum(stock300_weight))subscribe(symbols=stock300_symbol, frequency='1d', count=5, wait_group=True)
def on_bar(context, bars):# 若没有仓位则按照初始权重开仓for bar in bars:symbol = bar['symbol']position = context.account().position(symbol=symbol, side=PositionSide_Long)if not position:buy_percent = context.stock300['weight'][symbol] * context.ratioorder_target_percent(symbol=symbol, percent=buy_percent, order_type=OrderType_Market,position_side=PositionSide_Long)print(symbol, '以市价单开多仓至仓位:', buy_percent)else:# 获取过去5天的价格数据,若连续上涨则为强势股,权重+0.2;若连续下跌则为弱势股,权重-0.2recent_data = context.data(symbol=symbol, frequency='1d', count=5, fields='close')['close'].tolist()if all(np.diff(recent_data) > 0):buy_percent = context.stock300['weight'][symbol] * (context.ratio + 0.2)order_target_percent(symbol=symbol, percent=buy_percent, order_type=OrderType_Market,position_side=PositionSide_Long)print('强势股', symbol, '以市价单调多仓至仓位:', buy_percent)elif all(np.diff(recent_data) < 0):buy_percent = context.stock300['weight'][symbol] * (context.ratio - 0.2)order_target_percent(symbol=symbol, percent=buy_percent, order_type=OrderType_Market,position_side=PositionSide_Long)print('弱势股', symbol, '以市价单调多仓至仓位:', buy_percent)
if __name__ == '__main__':'''strategy_id策略ID,由系统生成filename文件名,请与本文件名保持一致mode实时模式:MODE_LIVE回测模式:MODE_BACKTESTtoken绑定计算机的ID,可在系统设置-密钥管理中生成backtest_start_time回测开始时间backtest_end_time回测结束时间backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POSTbacktest_initial_cash回测初始资金backtest_commission_ratio回测佣金比例backtest_slippage_ratio回测滑点比例'''run(strategy_id='strategy_id',filename='main.py',mode=MODE_BACKTEST,token='token_id',backtest_start_time='2017-07-01 08:00:00',backtest_end_time='2017-10-01 16:00:00',backtest_adjust=ADJUST_PREV,backtest_initial_cash=10000000,backtest_commission_ratio=0.0001,backtest_slippage_ratio=0.0001)

4. 回测结果和稳健性分析

设定初始资金1000万,手续费率为0.01%,滑点比率为0.01%。回测结果如下图所示。回测期结果如下图所示:

回测期累计收益率为2.76%,年化收益率为11.34%,沪深300指数收益率为5.09%,整体跑输指数。最大回撤为1.88%,胜率为74.62%。

为了探究策略的稳健性,改变回测期,策略表现如下表所示。

由上表可知,改变策略回测周期长度,策略收益率均为正,但都处于较低水平(除了2017年7月1日至2018年7月1日收益率达到29.06%)。随着策略回测期拉长,最大回撤不断增大。

注:来自掘金量化

指数增强(股票)——Python量化相关推荐

  1. 支持向量机(股票)——Python量化

    机器学习 目录 机器学习 1. 原理 什么是机器学习? 什么是支持向量机? 利用支持向量机预测股票涨跌 参数优化 2. 策略思路 3. 策略代码 4. 回测结果与稳健性分析 1. 原理 什么是机器学习 ...

  2. 日内回转交易(股票)——Python量化

    目录 1. 原理 1.1 日内回转交易 1.2 股票的日内回转交易 1.3 MACD指标简介 2. 策略思路 3. 策略代码 4. 回测结果与稳健性分析 1. 原理 1.1 日内回转交易 日内回转交易 ...

  3. 小市值(股票)——Python量化

    小市值策略(股票) (以下部分内容参考<因子投资:方法与实践>一书) 目录 小市值策略(股票) 1. 原理 1.1 因子投资 1.2 规模因子 2. 策略逻辑 3. 策略代码 4. 回测结 ...

  4. 行业轮动(股票)——Python量化

    行业轮动策略 目录 行业轮动策略 1. 原理 行业轮动现象 行业轮动的原因 行业轮动下资产配置 1. 美林时钟:大类资产配置 2. 策略设计 2. 策略思路 3. 策略代码 4. 回测结果分析与稳健性 ...

  5. 股票python量化交易002-常见量化指标(技术面)

    量化指标入口 认识东方财富平台 东方财富网:财经门户,提供专业的财经.股票.行情.证券.基金.理财.银行.保险.信托.期货.黄金.股吧.博客等各类财经资讯及数据 进入东方财富官网,从下图可以看出: 1 ...

  6. 股票python量化交易008-JoinQuant中JQData的使用

    查阅JoinQuant中JQData的使用文档 python代码实现 导入JQData,并认证用户身份.认证完毕显示"auth success"后即可使用 from jqdatas ...

  7. 布林线均值回归(股票)——Python量化

    布林线均值回归策略 目录 布林线均值回归策略 1. 原理 2. 策略思路 3. 策略代码 4. 回测结果与稳健性分析 1. 原理 提起布林线均值回归策略,就不得不提布林带这个概念.布林带是利用统计学中 ...

  8. 股票python量化交易002-常见量化指标(基本面)

    基本面指标有哪些? 除了boll/kdj/macd等技术指标,还有基本面指标.基本面指标主要有股票价格,成交量,财务等宏观指标. 财务指标很重要 对应巴菲特说的价值投资. 在炒股软件中按F10就会出现 ...

  9. 股票python量化交易010-JQData财务指标

    认识财务报表 财务指标数据 这里说的财务指标数据是我们平时看到的股票市值,负债数据,现金数据,利润数据等一系统财务相关的值通过运算生成的一份财务指标数据,如EPS,ROE等 eps 每股收益EPS(元 ...

最新文章

  1. USB_HID C#测试例程
  2. linux 操作系统安装配置vnc
  3. 【AI视野·今日Robot 机器人论文速览 第三十一期】Fri, 15 Apr 2022
  4. php 模拟客户端访问,PHP通过伪造和模拟客户端COOKIE登陆来采集抓取远程网址
  5. vba判断是否为数字的方法小集
  6. SpringMVC→拦截器、SpringMVC拦截器实现、多个拦截器工作原理、拦截器使用场景、拦截器Interceptor与过滤器Filter区别
  7. java中的抽象工厂模式
  8. 【分享贴】PCB设计思路
  9. 从后端到前端的转变:如何选择框架?
  10. 苹果删除照片不释放内存_别再胡乱清理垃圾了,只要删除这6个文件夹,瞬间释放20GB内存...
  11. BF(暴力)算法详解
  12. CSS-flex弹性布局补充
  13. 一张图搞清楚矩阵 (性质解法归纳)
  14. 【NLP】第11章 让你的数据说话:故事、问题和答案
  15. 记录 vue-admin-template 中 npm install 错误解决办法
  16. 读《杨振宁传》---谈taste
  17. setTimeout/setInterval与requestAnimationFrame的区别?
  18. MATLAB学习实例
  19. 分页-如何实现分页-实用有简单的分页代码及步骤分享
  20. 阿里云上Hadoop的安装

热门文章

  1. JavaScript-二进制与二进制数组
  2. 可爱粉红色情人节表白浪漫婚礼相册我们结婚啦PPT模板
  3. 音箱IP65测试办理方法及要求
  4. 神奇!一行代码将Python程序转换为图形界面应用
  5. C语言 求pow()函数,x的y次方
  6. 巴菲特致股东的一封信:1986年
  7. C语言实现LOL人机挂机辅助程序
  8. pacemaker的HA集群无法启动listener监听故障的处理
  9. PDF转PPT怎样不出现乱码
  10. 如何用视频剪辑软件Vegas剪视频