量化投资 课件 第4章 策略回测_第1页
量化投资 课件 第4章 策略回测_第2页
量化投资 课件 第4章 策略回测_第3页
量化投资 课件 第4章 策略回测_第4页
量化投资 课件 第4章 策略回测_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

策略回测思想与目的基本思想通过历史数据,尽可能还原实际交易过程,对策略进行验证和优化目的通过交易模拟找出策略中的缺陷和问题,并依据回测结果进行优化分析并确定策略中的合理假设,以及策略可能的应用场景和适用范围通过分析比较不同(参数)设置下的策略表现,帮助确定策略最优设置策略

回测缺陷&优化假设&应用参数

设置基本假设与流程基本假设:历史会重复使用历史数据进行测试的结果可用来评估策略在未来市场上的应用效果在历史数据上不能盈利的策略在未来一般也很难盈利在历史数据上表现优秀的策略在未来很可能也会带来较好的收益一般流程:策略实现、目标与范围设定、数据收集与处理、策略运行、结果分析、策略调整等环节常用平台与工具回测工具与平台主要功能:提供基础(功能)接口和(历史)数据模拟交易流程,执行交易策略,评估策略性能常用平台与工具:在线平台:聚宽、优矿、掘金、万矿等离线平台:

Backtrader、BigQuant、zipline、vn.py等工具库:TALib、QuantLib、PyQL、quantdsl等聚宽Joinquant服务:

1.选取参数,自动生成策略

2.可以自己编写代码,生成策略(有代码显示)

语言:

Python,R

数据库:

股票、基金、指数、股指、股票财务数据、金融期货数据、行业概念数据、宏观经济数据等

支持的功能:日级、分钟级、tick级的回测与模拟交易

优势:

1.支持回测中访问网络

2.社区活跃,还有销售策略活动

策略基本框架策略基本框架:初始化+迭代执行初始化:策略开始运行前要做的事,如初始化全局变量、资产和数据范围等迭代执行:周期循环:策略开始后,每个周期要做的事,判断是否交易以及如何交易事件驱动:策略开始后,设定的事件发生时执行,判断是否交易以及如何交易回测过程流程:准备好策略,实现handle_data函数初始设置:回测起止日期、初始资金、调仓间隔(如每天)、股票池开始回测(循环迭代)策略引擎根据选择的股票池和日期,取得股票数据,然后定期(如每天)调用handle_data函数在handle_data同时告诉用户现金、持仓情况和股票在上一天的数据.在函数中,用户还可以调用函数获取任何多天的历史数据,然后做出调仓决定当用户下单后,策略引擎会根据实际交易情况处理订单说明:可以在handle_data中调用record()函数记录某些数据,引擎会以图表的方式显示在回测结果页面用户可以在任何时候调用/debug/warn/error函数来打印一些日志回测结束后,引擎会画出用户收益和基准收益的曲线,列出每日持仓,每日交易和一系列风险数据神奇公式选股模型公司排序:将目标公司的投资回报率和收益率全部计算出来然后,按照投资回报率和收益率排序打分:

如果是1000家公司,最好的是1000分,最后一名就是1分每个公司的最终分值就是两个数字相加最后按照最终分数来排序,挑选前n佳公司来投资投资策略与步骤:

1、按投资回报率和收益率合并后排序的前n个公司,买入其股票

2、在第一次投入投资金额的20%到33%

3、每隔两三个月按照步骤一去投资买入

4、持有一种股票满一年后就将其卖出,不管是否盈利

5、用卖股票的钱和新增投资买入神奇公司股票,替换已卖出的公司好

公司股票便宜高性价比股票神奇公式:实现思路预处理选定股票列表范围(原始股票池),去除部分股票如:在沪深成分股中去除长期低PE股票(银行、钢铁、煤炭)和ST股票股票排序选定投资回报率和收益率的评价指标,例如:ROE和1/PE计算股票池中每只股票的ROE和1/PE,排序和挑选分数排在前十的股票分批建仓第一年的每季度重新获取满足条件股票,对新股按照原始仓位的25%建仓定期调仓每个季度检测股票是否已持仓满一年,如果是则卖出这只股票用卖股票的钱和新增投资买入同等资金的神奇公司股票止损策略在检测股票持仓时间时,强制卖出亏损超过10%的股票关键代码神奇公式defget_stock_list(context,today):#获取股票池security_list=st_filter(security_list)year=context.current_dt.yeardf=get_fundamentals(query(valuation.code,indicator.roe,#ROE净资产收益率ROE(%)valuation.pe_ratio,#PE市净率).filter(valuation.code.in_(security_list)),

statDate=str(year-1))#用前一年的数据计算(统计)指标#以股票名词作为indexdf.index=df['code'].valuesdf['1/pe']=1/df['pe_ratio']#获取综合得分df['point']=df[['roe','1/pe']].rank().T.apply(f_sum)name_list=list(map(lambda

x:get_security_info(x).display_name,df[['code']].values.flatten()))df.insert(0,'name',name_list)#按得分进行排序,取10只股票df=df.sort_index(by=['point'],ascending=False).head(N)['code’]returnstock_list回测结果12开源回测引擎:backtraderbacktrader简介开源的Python量化回测框架(支持实盘交易)品种多:股票、期货、期权、外汇、数字货币周期全:Ticks级、秒级、分钟级、日度、周度、月度、年度速度快:支持pandas矢量运算、多策略并行运算组件多:内置Ta-lib指标库、PyFlio分析、alphalens多因子库等扩展灵活:可集成TensorFlow、PyTorch等机器学习模块安装简单:

在pythonconsole中键入“pipinstallbacktrader”社区活跃、帮助文档齐全回测主体:Cerebro策略类:Strategyinit(

):

数据初始化、指标计算notify(

):监控回测状态,状态变动时被自动调用next(

):单位时间间隔调用,负责逻辑判断,生成买卖信号,发出订单请求回测引擎框架逻辑if__name__==‘__main__’:

#1.创建回测实体

cerebro=bt.Cerebro()

#2.添加策略

cerebro.addstrategy(TestStrategy)

#3.添加数据

filepath='./data/000001.csv'

#本地数据文件

dataframe=pd.read_csv(filepath,index_col=0,parse_dates=True)#读入数据

dataframe['openinterest']=0#添加一列,使传入数据符合框架要求

data=bt.feeds.PandasData(dataname=dataframe,#设置回测起止时间

fromdate=datetime.datetime(2013,1,1),

todate=datetime.datetime(2015,1,1))

cerebro.adddata(data)回测主体:主函数main#4.策略流程配置

cerebro.broker.set_cash(10000)#设置回测金额

cerebro.addsizer(bt.sizers.FixedSize,stake=100)#设置买卖股数或金额比例

cerebro.broker.setcommission(commission=0.001)#设置手续费#5.添加分析器

cerebro.addanalyzer(bt.analyzers.AnnualReturn,_name=‘AnnualReturn’)#年回报率

#6.运行策略

results=cerebro.run()

#7.取出回测指标结果

st0=results[0]

#索引1、2…

Annual_Return=st0.analyzers.AnnualReturn.get_analysis()#8.可视化展示

cerebro.plot()回测主体:主函数main(续)1.数据获取将时间序列称作lines(时间线)由adddata()将数据传入策略若只回测一只股票,则用data=self.data若对一个股票池进行回测:data=self.datas[k]#股票池中第k支股票数据2.技术指标计算写策略时,有时需要一些技术指标,例如MACD/KDJ/ROC等,在初始化函数中计算方法一:利用自身指标backtrader.indicators方法二:利用指标库Ta-lib中的方法classTestStrategy(bt.Strategy):

def__init__(self):

#初始化函数,策略循环前被调用

defnotify_order(self,order):

#订单监视函数

#监视订单变动状态

defnext(self):

#策略核心部分

#编写生成买卖信号的逻辑策略类:初始化函数def__init__(self):

self.close=self.data.close#获取股票的收盘价时间序列

self.macd=bt.ind.MACD(self.data.close)#计算MACD均线

self.order=None

#TokeeptrackofordersclassTestStrategy(bt.Strategy):

def__init__(self):

#初始化函数,策略循环前被调用

defnotify_order(self,order):

#订单监视函数

#监视订单变动状态

defnext(self):

#策略核心部分

#编写生成买卖信号的逻辑next()函数策略类核心组成部分;策略回测开始后,每前进一个时间单位,则next()将被调用一次,直到回测结束;以MACD均线(择时)策略为例:当MACD均线由下上穿零线时视为买入信号;

当MACD均线由上下穿零线时视为卖出信号策略类:next()函数defnext(self

):

position=self.positionor0#持仓数量

#上穿零线

ifself.macd[-1]<0.0andself.macd[0]>0.0:

self.order=self.buy()#生成买入订单

#下穿零线

ifself.macd[-1]>0.0andself.macd[0]<0.0:

ifposition>0:#有持仓

#生成卖出订单

self.order=self.sell(size=position)#5.添加分析器

cerebro.addanalyzer(bt.analyzers.AnnualReturn,_name='AnnualReturn')#年回报率

#6.运行策略

results=cerebro.run()

#7.取出回测指标结果

st0=results[0]

Annual_Return=st0.analyzers.AnnualReturn.get_analysis()Analyzer:分析器分析器:Analyzers回测陷阱

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论