【手把手教你】使用qstock进行量化回测

news2025/1/19 20:20:29

01

qstock简介

qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析开源库,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(backtest)四个模块。其中数据模块(data)数据来源于东方财富网、同花顺、新浪财经等网上公开数据。qstock致力于为用户提供更加简洁和规整化的金融市场数据接口。可视化模块基于plotly.express和pyecharts包,为用户提供基于web的交互图形简单操作接口;选股模块提供了同花顺的技术选股和公众号策略选股,包括RPS、MM趋势、财务指标、资金流模型等,回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。

qstock目前在pypi官网上发布,开源第一版本为1.1.0,目前更新至1.3.3。读者第一次安装,可以直接在cmd上输入“pip install qstock ”进行安装,如已安装旧版本,需要通过’pip install –upgrade qstock’进行更新。

GitHub地址:https://github.com/tkfy920/qstock。

目前部分策略选股和策略回测功能仅供知识星球会员使用,会员可在知识星球置顶帖子上上获取qstock-vip-1.3.3.tar.gz (强化版)安装包,将安装包放在工作路径下输入’pip install qstock-vip-1.3.3.tar.gz’进行离线安装。

所有接口函数(包括可视化plot、选股stock)均可通过qstock调用,即先导入import qstock as qs,然后使用qs.xxx,xxx为对应接口函数,如qs.kline(df)画K线图,qs.get_data(‘代码’)获取数据。

文末赠送100张知识星球优惠券

关于qstock的数据、可视化、选股等详细教程请参阅以下推文:

【qstock开源了】数据篇之行情交易数据

【qstock数据篇】行业概念板块与资金流

【qstock量化】数据篇之股票基本面数据

【qstock量化】数据篇之宏观指标和财经新闻文本

【qstock量化】动态交互数据可视化

【qstock量化】技术形态与概念热点选股池

【手把手教你】使用qstock实现量化策略选股

#导入qstock包
import qstock as qs

02

买入持有策略

qstock 开源版backtest模块内置了数据获取函数data_feed,交易指标计算trade_indicators、交易评价 trade_performance和执行回测start_backtest函数,星球会员版额外增加了均值回归模型、北向资金择时、海龟交易法则等策略,后续会不断添加新的交易策略进行回测。

data_feed(code,index='hs300',start='20000101',end='',fqt=2)

参数:code标的代码或简称,如'中国平安'

index:为回测基准指数,start和end分别为起始和结束日期,fqt复权类型,1表示前复权,2表示后复权,默认后复权。

trade_indicators(df)

参数df为使用交易策略后的收益率序列

trade_performance(df,plot=True)

参数df为使用交易策略后的收益率序列

start_backtest(code,index='hs300',start='20000101',end='20220930',fqt=2,strategy=None)

参数:code标的代码或简称,如'中国平安'

index:为回测基准指数,start和end分别为起始和结束日期,fqt复权类型,1表示前复权,2表示后复权,默认后复权。

下面以个股中国平安为例,通过data_feed获取个股和基准指数数据,使用start_backtest默认参数,可以得到买入持有策略的回测结果。

df=qs.data_feed('中国平安',index='hs300')
qs.start_backtest(df)

567d8fdd8eb3ea1de22cddaf61e5b86c.jpeg

814e5ad926d65c9a563ad1cd64091d8b.jpeg

结果显示,中国平安于20000101至'20220930采用买入持有策略,总收益率为159%,年化收益率6.5%,最大回撤高达84.94%,夏普比率1.04,优于沪深300指数。

再看看创业板个股情况,以神州泰岳为例,该个股收益率总体表现较差,持有10年累计收益率-31.47%,对该股使用买入持有策略远落后于创业板指数。

#基准指数选择创业板('cyb')
df=qs.data_feed('神州泰岳',index='cyb')
qs.start_backtest(df)

86b27aea1397cdc623788a848b30cc76.jpeg

be1b475adbef34a974d55dbe8f7c6ec0.jpeg

最后再以上证50指数成分股中信证券为例,对比回测该股的买入持有策略。2004-2022年历史回测总收益率高达1500%,年化15%, 夏普比率为2.1,可以算得上A股价值投资里的优秀标的,但其历史最大回撤仍高达72%。

#基准指数选择上证50('sz50')
df=qs.data_feed('中信证券',index='sz50')
qs.start_backtest(df)

7d75ff8ba7620b3ab05aaa502a7f79a1.jpeg

8c67e79ee7ccaa88759a0f39974fd13a.jpeg

03

均值回归策略

均值回归策略的思想及策略构建在推文《手把手教你用Python搭建自己的量化回测框架【均值回归策略】》已有详细介绍, 此处不再赘述。其实,大家熟知的巴菲特价值投资策略和索罗斯的“反身”交易策略,从本质上来看都是均值回归理论的应用,所不同的是前者是基于价值低点向高点回归做多获得收益,后者则是通过泡沫破灭价值从高点向低点回归时做空进行投机获利。

MR_Strategy(df,lookback=20,buy_threshold=-1.5,sell_threshold=1.5,cost=0.0)

  df为数据表: 包含open,close,low,high,vol,标的收益率rets,指数收益率数据hs300

   lookback为均值回归策略参数,设置统计区间长度,默认20天

   buy_threshold:买入参数,均值向下偏离标准差的倍数,默认-1.5

   sell_threshold:卖出参数,均值向上偏离标准差的倍数,默认1.5

   cost为手续费+滑点价差,可以根据需要进行设置,默认为0.0

下面以波动较大的创业板个股神州泰岳为例,回测结果显示,使用均值回归模型优于买入持有策略和基准指数,详细指标见下图所示。

data=qs.data_feed('神州泰岳',index='cyb')
strategy=qs.MR_Strategy(data,lookback=20,buy_threshold=-1.5,sell_threshold=2)
qs.start_backtest(strategy)

9f4962e59d230e224e5d0081572b66f1.jpeg

8321c50652a2ae6578a5c5f7b647d895.jpeg

04

北向资金策略

近年来,北上资金受到市场的关注越来越大,被看作是短期市场风向标,与市场指数存在一定的正向关系。关于北向资金策略思路与构建详细请参阅推文《北向资金能预示大盘涨跌?【附Python源码】》。

North_Strategy(data,window=252,stdev_n=1.5,cost=0.00)

    data:包含北向资金数据

    window:移动窗口

    stdev_n:几倍标准差

    cost:手续费

下面以沪深300指数择时为例,同时以上证指数作为对比基准指数。

df=qs.data_feed('hs300','sh')
df['北向资金']=qs.north_money()
data=df.copy()
strategy=qs.North_Strategy(data)
qs.start_backtest(strategy)

8e74c1da642c2909f64f3eb8c4b0e81b.jpeg

2ca3ef0964e5f3fe8910ea9e185b4d42.jpeg

05

海龟交易法则

海龟交易法则利用唐奇安通道的突破点作为买卖信号指导交易,简单而言唐奇安通道是由一条上轨线、中线和下线组成,上轨线由N1日内最高价构成,下轨线由N2日内最低价计算,当价格冲破上轨是可能的买入信号,反之,冲破下轨时是可能的卖出信号。 利用简化版的海龟交易法则以中国平安个股为例进行简单的历史回测。关于海龟交易法则详细介绍请参阅推文《【手把手教你】用Python量化海龟交易法则》及《【手把手教你】用backtrader量化回测海龟交易策略》。关于海龟交易法则的详细版回测将在后续的版本更新中加入。

df=qs.data_feed('中国平安','sz50')
data=df.copy()
strategy=qs.TT_strategy(data,20,10)
qs.start_backtest(strategy)

e17053088957a3e7979bd238293633df.jpeg

50562b1d7d90e35461926d3f83a4d86b.jpeg

最后为有意加入知识星球的新用户送上100张89元的优惠券,新用户或续费用户在加入前可先添加星主微信 “sky2blue2” 了解更多优惠信息。

9bb08dc25858e270c1b86e2669e6d94c.png

157432c6c601383d0f425f9b15808e50.png

关于Python金融量化

c035cf8b7aa8a292940b12ad30aac9c8.png

专注于分享Python在金融量化领域的应用。加入知识星球,可以免费获取qstock源代码、30多g的量化投资视频资料、量化金融相关PDF资料、公众号文章Python完整源码、与博主直接交流、答疑解惑等。添加个人微信sky2blue2可获取相关优惠。

cea9aaf898fde78828ff83d7426220b7.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAS中用单因素ANOVA研究不同疗法对焦虑症的有效性

本教程将介绍如何使用SAS进行单因素方差分析。 最近我们被客户要求撰写关于单因素ANOVA的研究报告,包括一些图形和统计输出。我们想研究不同疗法对焦虑症的有效性。我们收集了以下类别的75个主题的样本: 无处理(1个n1 27)。生物…

5W3H法与SMART原则的结合使用

5W3H 5W3H分析法,又称“八何分析法”。在实际工作中,人们常常运用5W3H分析法,进行顾客分析、市场需求分析,解决计划编制的结构问题、方向问题、执行力问题。 5W3H是描述问题的手段,其具体指的是:What&…

【图像处理】深入解析LBP算法

问题 LBP是一种常见的特征描述算法,用来提取局部的纹理特征,其原理其实很简单,下面我们就来看看它是怎么一回事吧。 LBP简介 LBP(Local Binary Patterns,局部二值模式)是一种很简单但很高效的局部纹理特…

2025年DMS前装搭载或突破750万辆!多方势力搅局「融合集成」

在智能驾驶功能和舱内人机交互体验不断融合演进的过程中,基于摄像头的DMS/OMS功能正在进入新的发展周期。而在欧洲等部分国家及地区,DMS的标配(主要涉及驾驶安全的监控,比如,驾驶员疲劳、注意力分散、安全带使用、吸烟…

java工厂策略模式的开发应用

java工厂策略模式的开发应用前言准备工作具体实现测试仰天大笑出门去,我辈岂是蓬蒿人前言 大概内容: 假设我有五个车间,每一个车间生产不同的车子,想要统一管理,不关心哪个车间生产什么车;只需找一个代理…

Ajax(一)

1.客户端与服务器 1.1 服务器 上网过程中,负责存放和对外提供资源的电脑。 1.2 客户端 上网过程中,负责获取和消费资源的电脑。 2.URL地址 2.1 URL地址的概念 2.2 URL地址的组成部分 3. 分析网页的打开过程 3.1 图解客户端与服务器的通信过程 三个…

NLP学习笔记(一) RNN基本介绍

大家好,我是半虹,这篇文章来讲循环神经网络 (Recurrent Neural Network, RNN) 文章行文思路如下: 首先通过前馈神经网络引出为啥需要循环神经网络然后介绍循环神经网络的核心思想与运作方式最后拓展两个循环神经网络常见且常用的变体 在讲循…

Windows 7恢复分区丢失了怎么恢复?

问题:Windows 7恢复分区丢失 戴尔、惠普和华硕等电脑制造商现会在他们的计算机上创建一个恢复分区。恢复分区允许用户在系统出现问题时将计算机恢复到出厂默认设置。但是,由于丢失了恢复分区,因此某些用户无法将电脑恢复到出厂设置。这是一个…

析构函数可以为纯虚函数吗?纯虚函数可以有函数体吗?纯虚函数需要函数体吗?

先回答标题中中的几个问题: 析构函数可以为纯虚函数吗? yes。纯虚函数可以有函数体吗? yes。纯虚函数需要函数体吗? 一般来讲,如果析构函数是纯虚函数,那么析构函数必须要有函数体,如果是其它函…

Web前端大作业:基于bootstrap响应式页面,家具装修公司网站

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

最新版本APT漏洞利用工具箱

点击"仙网攻城狮”关注我们哦~不当想研发的渗透人不是好运维让我们每天进步一点点简介1.最近发现一个好用的渗透工具箱,基本包含最新热门漏洞exp,分享一下项目地址:https://github.com/White-hua/Apt_t00ls环境:jdk1.8如果双…

【深度学习】PyTorch深度学习实践 - Lecture_11_Advanced_CNN

文章目录一、GoogLe Net1.1 网络结构1.2 Inception Model1.3 11 Convolution1.4 PyTorch-GPU 实现 GoogLe Net二、Residual Net2.1 梯度消失和梯度爆炸2.2 残差模块2.3 PyTorch-GPU 实现 Simple Residual Net2.3.1 整体结构2.3.2 残差块对象2.3.3 残差网络对象2.3.4 完整代码三…

微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.7 案例实现TCC 模式【分析】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式事务 文章目录微服务框架分布式事务38 动手实践38.7 案例实现TCC 模式【分析】38.7.1 实现TCC 模式38.7.2 TCC 的空回滚 和业务悬挂38…

Redis框架(八):大众点评项目 逻辑过期时间处理缓存击穿

大众点评项目 逻辑过期时间处理缓存击穿需求:逻辑过期时间处理缓存击穿业务实现总结SpringCloud章节复习已经过去,新的章节Redis开始了,这个章节中将会回顾Redis实战项目 大众点评 主要依照以下几个原则 基础实战的Demo和Coding上传到我的代…

七分钟教会你如何编写一个合格的测试用例

目录 1、测试用例的基本要素 2、根据测试用例去测试带来的好处 3、测试用例的设计方法 3.1、等价类 3.2、边界值 3.3、错误猜测法 3.4、场景法 3.5、因果图法 3.6、正交排列 4、怎样判断一个测试用例是好的测试用例 1、测试用例的基本要素 测试用例是为了实施测试而向…

基于LEACH和HEED的WSN路由协议研究与改进(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

Google谷歌浏览器Post请求预见strict-origin-when-cross-origin跨域问题的 解决办法

问题概述 关于这个问题,后端接口开发完成,前端功能界面和函数方法体编写完成后,博主在前后端联调的时候遇到的,接口是调用成功了,但是没有返回任何结果, 错误信息:“ Referrer Policy: strict-…

C++中二叉树的非递归遍历方法2-1

1 二叉树简介 树是一种数学上的抽象,在算法的设计与分析中起到一个中心作用。树是有n个节点的有限集合。二叉树是树的一种特殊形式,这种树的每个节点最多有2个子节点。 2 二叉树的遍历方法 二叉树的遍历分为前序遍历、中序遍历、后序遍历和层序遍历四…

【华为上机真题 2022】寻找身高相近的小朋友

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

力扣(LeetCode)147. 对链表进行插入排序(C++)

排序 ①遍历链表,当前遍历的结点记作 ppp 。 ②从前往后遍历链表,找到最后一个值小于 ppp 的结点 curcurcur 。 ③(关键操作) 插入,如图,将 ppp 插入 curcurcur 的后面。 p->next cur->next; cur->next p; p next;…