对于技术指标的选股和择时的探讨
本文旨在提供一个使用技术指标进行择时,通过行业轮动选股的综合性的量化投资策略。通过它,我们可以推导其它择时指标及选股指标,将它们进一步排列组合,筛选出一个适合自己的量化投资策略。
全篇共有三个策略,基于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)。
掘金量化-集数据、投研、实盘交易的一站式专业量化平台
对于技术指标的选股和择时的探讨相关推荐
- 【新一配】选股+择时策略组合
[新一配]选股+择时策略组合 导语:本文讨论交易中两个非常重要的命题:选股+择时,并将其两者结合起来开发策略. 选股就是要选一只好股票,而择时就是选一个好的买卖时机.如果投资者选了一只很差劲的股票,无 ...
- 【量化投资】基金择时策略浅析(3) -实用择时方法
常见择时方法 本系列第一篇文章中曾介绍过选品和择时的概念,并且提到过这两个其实都是定义比较宽松的概念,任何投资者在任何市场中做的投资决策,无论是依据基本面因素,技术指标,还是量化模型,都可以看作择时. ...
- 搭建系统|别只盯MA、KDJ、MACD这些技术指标,择时策略也能叠加基本面指标!
前言 "搭建系统"专栏系列一直按以下的进程再不断地迭代开发工具: 我一直强调要搭建属于适合自己的股票量化交易系统,而不是照搬着拿别人的来用呢.也就是说我们要掌握搭建的方法,不断去调 ...
- 择时 配置 选股 2016-9-12 图形正确
%% %{only hate road when you miss home Ps 股票占比是第二列 Psf 股指期货占比是第三列 Rs 第四列 股票收益 Ri 第五列 指数收益,三个指数 Rsf 第 ...
- 择时 配置 选股0909
clear;clc tic %% 择时 配置 选股 %{ 选择wind A 为基准因为,包含了全部28个行业 拆分出超额收益, 择时是净暴露仓位,择时是判断 Pn 超额收益 Rs- Rb 择时体现在 ...
- Python量化投资——股票择时到底能否赚钱?TA-Lib 33种技术指标有效性横向大评比
TA-Lib中33种技术指标回测研究 `Python`量化投资--`TA-Lib`中33种股票择时技术指标的有效性研究 为什么要做这个评测 技术指标清单 评测方法 评测工具 测试方法及评价指标 期待你 ...
- Python量化投资——股票择时到底能否赚钱?技术指标大比拼——AROON指标
技术指标大比拼--AROON指标的有效性回测 Python量化投资--`AROON`技术指标的有效性研究 背景介绍 技术指标介绍 指标用法建议 `qteasy`中的AROON内置策略 433支股票五年 ...
- 股票策略 —— 指数择时 + 因子选股1
1.概述 我们希望建立一个择时策略 + 因子选股的复合策略,因为指数择时无法直接落地,而单纯的因子选股策略,回撤太大.本贴观察其效果. 2.策略规则 1.大盘指数择时,有持仓信号时,采用某量价因子筛选 ...
- 股票策略 —— 指数择时 + 因子选股2
1.策略规则 1.采用rsrs指标对沪深300指数择时,有持仓信号时,综合采用pe.pb对全市场股票打分排序,选取排名最靠前的20只股票持仓,持有股票时,不进行定期调仓. 2.大盘指数择时,无持仓信号 ...
最新文章
- java图片序列化_Java中的强大武器——对象的序列化
- 办公电脑选购方案指南
- 爬小说遇到编码问题 笔趣阁
- 流水号结合自定义函数实现申请业务
- Bootstrap学习之二:栅格化布局
- Object类和String类
- 关于C语言static定义函数类型的具体解释
- mq幂等mysql_膜拜!看完这篇你还不懂RocketMQ算我输
- [转]关于WM_NCHITTEST消息
- 中国计算机学会CCF招聘-信息系统项目管理/技术支持
- ssh 连接linux 乱码问题,SSH 连接 Ubuntu 时的中文乱码问题
- QCustomplot 实现鼠标追踪定位线以及坐标
- 姓氏头像制作生成头像组合微信小程序源码
- 从更高到更好 揭开2021阿里双11背后的技术亮点
- 小米手机相机英文翻译
- 台湾大学林轩田机器学习基石课程学习笔记16(完结) -- Three Learning Principles
- 微软因果推理的框架DoWhy github 介绍
- 集合collection
- 发现 3 个已存在的 RPM 数据库问题, 'yum check' 输出如下 解决办法
- 概率论4.5中心矩与原点矩