本文旨在提供一个使用技术指标进行择时,通过行业轮动选股的综合性的量化投资策略。通过它,我们可以推导其它择时指标及选股指标,将它们进一步排列组合,筛选出一个适合自己的量化投资策略。

全篇共有三个策略,基于CCI指标进行策略研究、开发。

第一个策略是使用CCI指标进行择时买卖。但发现其收益率惨淡。于是,选择在此基础上加入行业轮动选股策略,产生第二个策略。

第二个策略的收益率虽然高了,但夏普比率低。所以在第三个策略中对第二个策略进行参数寻优

以下为笔者做出的尝试,如对这一块有见解的宽友,欢迎留言探讨。

 实战交易策略一 

 CCI指标应用于沪深300指数 

1.说明

顺势指标CCI由唐纳德拉姆伯特所创,是通过测量股价的波动是否已超出其正常范围,来预测股价变化趋势的技术分析指标。

2.计算

以日 CCI 计算为例,一般采用的计算方法如下:

已知到今天为止连续n天的每天的最高价Hi最低价Li、收盘价Ci

其中i=1,2,3...n ,今天为第n天

代码如下:

##CCI
def cci(data,alpha=0.015,n=20):tp_i=(data.close+data.low+data.high)/3matp_i=tp_i.rolling(n).mean()meanDev=tp_i.rolling(n).apply(lambda x:abs(x-x.mean()).mean(),raw=False)cci=(tp_i-matp_i)/(alpha*meanDev)return cci

3.回测设置

  • 标的:沪深 300 指数

  • 择时规则:当 CCI 上穿 100,买入 ;当 CCI 下穿-100,卖出

  • 回测时间:2020.7.1---2021.10.1

4.策略代码

# coding=utf-8
from __future__ import print_function, absolute_import
from gm.api import *
import pandas as pd ##定义CCI计算
def cci(data,alpha=0.015,n=20):tp_i=(data.close+data.low+data.high)/3matp_i=tp_i.rolling(n).mean()meanDev=tp_i.rolling(n).apply(lambda x:abs(x-x.mean()).mean(),raw=False)cci=(tp_i-matp_i)/(alpha*meanDev)return cci.iloc[-1]# 策略中必须有init方法
def init(context):#设置标的context.symbol='SHSE.000300'#订阅标的的分钟数据subscribe(symbols='SHSE.000300', frequency='1d', count=21, wait_group=True, wait_group_timeout='6s', unsubscribe_previous=True)
def on_bar(context,bars):#接取数据data = context.data(symbol='SHSE.000300', frequency='1d', count=21)#计算cci的值CCI = cci(data,alpha=0.015,n=20)完整代码请至掘金社区查看!文章地址:https://bbs.myquant.cn/topic/2447

5.回测结果:

该策略累计收益率仅仅为1.69%,并不理想。但这是因为该策略中仅抓住一个标的进行交易,而且交易较频繁,所以产生的手续费特别高。基于此,即使该策略的收益率特别低,也并不能说明这个技术指标已经失效。下面我们加入选股策略,解救这一惨淡的收益率。

(该报告由掘金量化提供)

 CCI实战交易策略二 

 加入行业轮动选股策略 

1.说明

在交易策略一中采用了CCI指标进行择时买卖,但效果并不好,而且现实中只交易一个标的并不现实,所以基于上面的策略,考虑加入行业轮动选股策略,行业轮动策略大家可以参考掘金官网给出的实例。

2.加入行业轮动策略回测设置

  • 标的:300工业.300材料.300可选.300消费.300医药.300金融 这六个行业指数的成分股

  • 轮动选股频率:每月第一个交易日

  • 选股规则:计算上述六个行业指数过去20个交易日的收益率并选取了收益率最高的指数的成分股

  • 择时买入:在每天的09:40:00,使用CCI指标择时

  • 调仓规则:如果CCI值大于100且该成分股不在持仓中,则按照比率调仓买入,如果CCI值小于-100且该成分股在持仓中,则平仓

  • 回测时间:2020.7.1---2021.10.1

3.策略代码

# coding=utf-8
from __future__ import print_function, absolute_import, unicode_literals
from gm.enum import OrderType_Limit
import numpy as np
import pandas as pd
from gm.api import *'''
本策略每隔1个月定时触发计算SHSE.000910.SHSE.000909.SHSE.000911.SHSE.000912.SHSE.000913.SHSE.000914
(300工业.300材料.300可选.300消费.300医药.300金融)这几个行业指数过去20个交易日的收益率并选取了收益率最高的指数
每一天都去计算选出来的指数成分股的CCI值,随后进行调仓,
如果CCI值大于100且该成分股不在持仓中,则按照比率调仓买入,如果CCI值小于-100且该成分股在持仓中,则平仓
回测数据为:SHSE.000910.SHSE.000909.SHSE.000911.SHSE.000912.SHSE.000913.SHSE.000914和他们的成份股
回测时间为:2020-07-01 08:00:00到2021-10-01 16:00:00
'''def init(context):# 每月第一个交易日的09:40 定时执行algo任务(仿真和实盘时不支持该频率)schedule(schedule_func=algo, date_rule='1m', time_rule='09:40:00')# 每日的09:40 定时执行algo_day任务schedule(schedule_func=algo_day, date_rule='1d', time_rule='09:40:00')# 用于筛选的行业指数context.index = ['SHSE.000910', 'SHSE.000909', 'SHSE.000911', 'SHSE.000912', 'SHSE.000913', 'SHSE.000914']# 用于统计数据的天数context.date = 20# 最大下单资金比例context.ratio = 0.8#获取到的最好的行业指数、context.sector = None完整代码请至掘金社区查看!文章地址:https://bbs.myquant.cn/topic/2447

4.回测结果

在加入行业轮动选股之后,策略的累计收益率达到102.08%,要较高的优于沪深300的基准收益率,但伴随着高收益率的同时,其最大回撤高达12.34%,夏普比率为2,胜率为54.62%,结果还是不够理想,下面将考虑对该策略进一步参数寻优,提高回测的夏普比率。

(该报告由掘金量化提供)

 CCI实战交易策略三 

 对上述策略进行参数寻优 

1.CCI指标参数寻优设置:

alpha = 0.010,0.015,0.020

n = 10,15,20

2.策略代码:

# coding=utf-8
# 行业轮动选股+CCI指标择时+参数寻优
from __future__ import print_function, absolute_import, unicode_literals
from gm.enum import OrderType_Limit
import numpy as np
import pandas as pd
from gm.api import *
import multiprocessing
'''
本策略每隔1个月定时触发计算SHSE.000910.SHSE.000909.SHSE.000911.SHSE.000912.SHSE.000913.SHSE.000914
(300工业.300材料.300可选.300消费.300医药.300金融)这几个行业指数过去20个交易日的收益率并选取了收益率最高的指数
每一天都去计算选出来的指数成分股的CCI值,随后进行调仓,
如果CCI值大于100且该成分股不在持仓中,则按照比率调仓买入,如果CCI值小于-100且该成分股在持仓中,则平仓
回测数据为:SHSE.000910.SHSE.000909.SHSE.000911.SHSE.000912.SHSE.000913.SHSE.000914和他们的成份股
回测时间为:2020-07-01 08:00:00到2021-10-01 16:00:00
'''
def init(context):# 每月第一个交易日的09:40 定时执行algo任务(仿真和实盘时不支持该频率)schedule(schedule_func=algo, date_rule='1m', time_rule='09:40:00')# 每日的09:40 定时执行algo_day任务schedule(schedule_func=algo_day, date_rule='1d', time_rule='09:40:00')# 用于筛选的行业指数context.index = ['SHSE.000910', 'SHSE.000909', 'SHSE.000911', 'SHSE.000912', 'SHSE.000913', 'SHSE.000914']# 用于统计数据的天数context.date = 20# 最大下单资金比例context.ratio = 0.8#获取到的最好的行业指数、context.sector = None完整代码请至掘金社区查看!文章地址:https://bbs.myquant.cn/topic/2447

3.参数寻优结果:

下图中,回测结果最好的收益率为252.45%,最大回撤为11.01%,夏普比率为2.68。

通过查询可知最优的参数为alpha=0.01, n=10。回测结果如下:

(该报告由掘金量化提供)

全篇完整内容,请至掘金社区查看:对于技术指标的选股和择时的探讨 - 掘金量化社区 - 量化交易者的交流社区掘金量化社区是量化投资者策略研讨、答疑解惑、资源共享的互动交流论坛。https://bbs.myquant.cn/topic/2447/2

声明:本内容首发至掘金量化公众号与掘金量化社区,仅供学习、交流、演示之用,不构成任何投资建议!如需转载原创文章请联系掘金小Q(myquant2018)。

​​​​​​掘金量化-集数据、投研、实盘交易的一站式专业量化平台

对于技术指标的选股和择时的探讨相关推荐

  1. 【新一配】选股+择时策略组合

    [新一配]选股+择时策略组合 导语:本文讨论交易中两个非常重要的命题:选股+择时,并将其两者结合起来开发策略. 选股就是要选一只好股票,而择时就是选一个好的买卖时机.如果投资者选了一只很差劲的股票,无 ...

  2. 【量化投资】基金择时策略浅析(3) -实用择时方法

    常见择时方法 本系列第一篇文章中曾介绍过选品和择时的概念,并且提到过这两个其实都是定义比较宽松的概念,任何投资者在任何市场中做的投资决策,无论是依据基本面因素,技术指标,还是量化模型,都可以看作择时. ...

  3. 搭建系统|别只盯MA、KDJ、MACD这些技术指标,择时策略也能叠加基本面指标!

    前言 "搭建系统"专栏系列一直按以下的进程再不断地迭代开发工具: 我一直强调要搭建属于适合自己的股票量化交易系统,而不是照搬着拿别人的来用呢.也就是说我们要掌握搭建的方法,不断去调 ...

  4. 择时 配置 选股 2016-9-12 图形正确

    %% %{only hate road when you miss home Ps 股票占比是第二列 Psf 股指期货占比是第三列 Rs 第四列 股票收益 Ri 第五列 指数收益,三个指数 Rsf 第 ...

  5. 择时 配置 选股0909

    clear;clc tic %% 择时 配置 选股 %{ 选择wind A 为基准因为,包含了全部28个行业 拆分出超额收益, 择时是净暴露仓位,择时是判断 Pn 超额收益  Rs- Rb 择时体现在 ...

  6. Python量化投资——股票择时到底能否赚钱?TA-Lib 33种技术指标有效性横向大评比

    TA-Lib中33种技术指标回测研究 `Python`量化投资--`TA-Lib`中33种股票择时技术指标的有效性研究 为什么要做这个评测 技术指标清单 评测方法 评测工具 测试方法及评价指标 期待你 ...

  7. Python量化投资——股票择时到底能否赚钱?技术指标大比拼——AROON指标

    技术指标大比拼--AROON指标的有效性回测 Python量化投资--`AROON`技术指标的有效性研究 背景介绍 技术指标介绍 指标用法建议 `qteasy`中的AROON内置策略 433支股票五年 ...

  8. 股票策略 —— 指数择时 + 因子选股1

    1.概述 我们希望建立一个择时策略 + 因子选股的复合策略,因为指数择时无法直接落地,而单纯的因子选股策略,回撤太大.本贴观察其效果. 2.策略规则 1.大盘指数择时,有持仓信号时,采用某量价因子筛选 ...

  9. 股票策略 —— 指数择时 + 因子选股2

    1.策略规则 1.采用rsrs指标对沪深300指数择时,有持仓信号时,综合采用pe.pb对全市场股票打分排序,选取排名最靠前的20只股票持仓,持有股票时,不进行定期调仓. 2.大盘指数择时,无持仓信号 ...

最新文章

  1. java图片序列化_Java中的强大武器——对象的序列化
  2. 办公电脑选购方案指南
  3. 爬小说遇到编码问题 笔趣阁
  4. 流水号结合自定义函数实现申请业务
  5. Bootstrap学习之二:栅格化布局
  6. Object类和String类
  7. 关于C语言static定义函数类型的具体解释
  8. mq幂等mysql_膜拜!看完这篇你还不懂RocketMQ算我输
  9. [转]关于WM_NCHITTEST消息
  10. 中国计算机学会CCF招聘-信息系统项目管理/技术支持
  11. ssh 连接linux 乱码问题,SSH 连接 Ubuntu 时的中文乱码问题
  12. QCustomplot 实现鼠标追踪定位线以及坐标
  13. 姓氏头像制作生成头像组合微信小程序源码
  14. 从更高到更好 揭开2021阿里双11背后的技术亮点
  15. 小米手机相机英文翻译
  16. 台湾大学林轩田机器学习基石课程学习笔记16(完结) -- Three Learning Principles
  17. 微软因果推理的框架DoWhy github 介绍
  18. 集合collection
  19. 发现 3 个已存在的 RPM 数据库问题, 'yum check' 输出如下 解决办法
  20. 概率论4.5中心矩与原点矩

热门文章

  1. 健康知识,日常生活健康大全
  2. 日不落帝国下一个统领全球的领域:人工智能的伦理道德? | 附报告
  3. 用树莓派 + aria2 做一个下载机
  4. python imshow cmap,Python matplotlib.pyplot.imshow()用法及代码示例
  5. html 发光字,介绍几种常见发光字的制作步骤方法
  6. 「HTML」什么是 HTML 中的 div 标签
  7. 百亿流量微服务网关的设计与实现
  8. DD-WRT中的各种无线模式
  9. Docker的安全机制
  10. Mastercam 2017 举升/直纹曲面