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

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

猜你喜欢

转载自blog.csdn.net/ndhtou222/article/details/128295824