量化投资 课件 第3、4章 经典策略与系统、策略回测_第1页
量化投资 课件 第3、4章 经典策略与系统、策略回测_第2页
量化投资 课件 第3、4章 经典策略与系统、策略回测_第3页
量化投资 课件 第3、4章 经典策略与系统、策略回测_第4页
量化投资 课件 第3、4章 经典策略与系统、策略回测_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

经典策略与系统刘宏志教授

神奇公式神奇公式选股模型基本思想:用便宜的价格购买好公司的股票通过综合考虑“便宜程度”和“好坏程度”对股票进行排序和筛选便宜程度:通常用价格(容易获取)和价值(难以获取)比值进行度量可用其盈利能力(例如每股收益)来间接度量其价值,例如市盈率PE企业好坏:能否产生价值并创造较高的投资回报常用指标:资本回报率(ROIC)、净资产收益率ROE、资产净利率ROA等好

公司股票便宜高性价比股票神奇公式选股模型公司排序:将目标公司的“便宜程度”和“好坏程度”全部计算出来然后,按照便宜程度和好坏程度进行排序打分:

如果是1000家公司,最好的是1000分,最后一名就是1分每个公司的最终分值就是两个数字相加最后按照最终分数来排序,挑选前n佳公司来投资投资策略与步骤:1、确定股票池。进行初步筛选,去除部分明显不良的股票(例如ST股票)2、精选标的。按神奇公式进行打分排序,并选出前n只股票(神奇公式

股票)3、分批建仓。第一次投入总资金20%~33%,每隔两三个月再投入20%~33%4、定期调仓。每只股票在持有一年后都将被卖出,买入新的神奇公式股票欧奈尔选股法则欧奈尔选股法则:CANSLIMCANSLIM是一个结合基本面和技术面的选股模型,一种多因子模型欧奈尔研究1953至1993年500家年度涨幅最大股票,得出“七步选股法”美国个人投资者协会用5年时间(1998~2002),对各种选股系统的业绩进行比较分析:无论是在牛市还是熊市,CANSLIM都是最稳定、表现最好的系统之一。欧奈尔选股法则:CANSLIMCANSLIM是一个结合基本面和技术面的选股模型,一种多因子模型欧奈尔研究1953至1993年500家年度涨幅最大股票,得出“七步选股法”C(Currentearnings):上市公司近一季的每股收益率超过20%A(Annualearning):上市公司年净利润持续增长三年以上N

(Newproduct):上市公司有重大创新或突破,如新业务、新产品、新技术等S

(SupplyandDemand):公司流通股一般不多于2500万股L

(Leader):上市公司为行业领导者,该股能引领市场走势I(Institutionalsponsorship):机构投资者对股票热捧M(Marketdirection):股市为牛市或震荡市,但绝非熊市“Buystocksinprofitablecompanies,withgreatproducts,ingrowingmarketsattherighttime.”配对交易策略配对交易基本思想:找出历史走势相近(相关性高)的股票或其他投资标的进行配对当价差明显偏离历史均值时,做空相对高估股票同时买入相对低估的股票等待他们回归到长期均衡状态,由此赚取价格收敛的报酬本质:利用配对间的短期错误定价,通过买入相对低估,卖空相对高估一种动量反转投资策略,利用股票价格均值回归配对交易:配对形成期目标:选股寻找历史走势相近(相关性高)的股票或其他证券进行配对步骤:行业划分:为保证股票对在主营业务上相近,在同一行业内筛选收益率相关性检验:配对股票历史收益率相关系数大于一定的阈值序列协整性检验:价差(或价格比)具备围绕均值上下波动的平稳性价差形态过滤:要求价差回复到均值的速度足够快,最好交替相对走强配对交易:配对交易期

配对交易:建仓与平仓

配对交易:建仓与平仓动量策略vs.反转策略经济学解释行为金融:羊群效应:羊群建立(动量)、羊群解散(反转)信息反应:反应不足(动量)、反应过度(反转)企业成长和发展:马太效应,强者愈强、弱者愈弱(动量)周期性变化,日中则昃,月满则亏(反转)动量vs.反转动量效应:前一段时间强势的股票,在未来一段时间继续保持强势反转效应:前一段时间弱势的股票,在未来一段时间会变强动量策略:寻找前期强势的股票,判断它将继续强势后买入持有反转策略:寻找前期弱势的股票,判断它将出现逆转后买入持有典型应用:择时动量和反转策略的思路可应用于很多量化投资场景中择时:高抛低吸(反转)和横盘突破(动量)配对交易标准建仓是以动量反转策略为基础延后建仓则是以动量策略为基础行业轮动美林投资时钟模型宏观经济周期波动是行业轮动背后核心驱动力行业配置的标准思路美林投资时钟模型美林证券基于对美国历史数据的研究,将经济周期与资产轮动及行业策略联系起来,提出“美林投资时钟”阶段时间产出缺口超势通胀趋势阶段定性阶段时间产出缺口超势通胀趋势阶段定性197001-197012下降下降衰退199612-199902上升下降复苏197012-197206上升下降复苏199902-199911上升上升过热197206-197306上升上升过热199911-200105下降上升滞胀197306-197412下降上升滞胀200105-200206下降下降衰退197412-197503下降下降衰退200206-200303下降上升滞胀197503-197612上升下降复苏200303-200403上升下降复苏197612-197811上升上升过热200403-200509上升上升过热197811-198003下降上升滞胀200509-200708上升下降复苏198003-198212下降下降衰退200708-200807下降上升滞胀198212-198307上升下降复苏200807-200906下降下降衰退198307-198403上升上升过热200906-201011上升下降复苏198403-198612上升下降复苏201011-201109上升上升过热198612-198901上升上升过热201109-201504上升下降复苏198901-199011下降上升滞胀201504-201603下降上升滞胀199011-199112下降下降衰退201603-201912上升下降复苏199112-199405上升下降复苏201912-202006下降下降衰退199405-199612上升上升过热202006-202009上升上升过热其他投资时钟模型库兹涅茨周期:美国经济学家西蒙·库兹涅兹在1930年提出反映经济基本面的长期趋势对应于20年左右的长周期朱格拉周期:法国经济学家克里门特·朱格拉在1862年提出反映市场的整体估值水平对应于10年左右的中周期基钦周期:美国经济学家约瑟夫·基钦于1923年提出反映市场的牛熊趋势对应于40个月左右的短周期,是把握短期市场涨跌的重要依据多周期嵌套多因子模型策略模型建立过程候选因子因子有效性检验冗余因子

剔除综合评分

模型构建选股模型验证原则:有效利用可得信息避免忽略一些重要信息避免引入一些无用信息避免重复利用冗余信息候选因子选取基本面因子:股票自身可观察的特征,可通过财务报表(或简单计算)获得例如:净利润、每股收益EPS、市盈率PE、市净率PB等技术因子:以市场行为为研究对象,例如:动量、换手率、波动等经济因子:影响企业营销活动的一个国家或地区的宏观经济状况例如:GDP、CPI、通货膨胀率、失业率、利率等其他指标:预期收益增长、分析师一致预期变化等各种已知的和潜在的市场异象因子因子有效性检验零投资组合检验法:(针对打分法)根据因子打分排序,将股票平均分为n个组构建零投资组合:等金额买入第1组股票并卖空第n组股票计算零投资组合的超额收益率,评估因子的有效性统计相关检验法:(针对回归法)计算因子与超额收益率之间的相关度相关度(相关系数的绝对值)越大,因子越有效

大市值股票期望收益率(1/3)

中市值股票期望收益率(1/3)

小市值股票期望收益率(1/3)冗余因子剔除动机:由于内在驱动因素相同等原因,一些因子具有较高一致性基本思想:剔除冗余因子,只保留同类因子中收益最好、区分度最高的一个冗余度(共线性)计算:相关分析法:相关系数打分法:分组收益率分析分组收益率相关分析:针对每个因子,按因子值大小对股票进行排序,并将股票分为n个组根据收益率对各组合进行打分(n,n-1,…,1),收益越大,分值越高按给定周期(例如:月)计算个股的不同因子得分间的相关性矩阵综合评分模型建立和选股打分法:(例:神奇公式)先单独根据每个因子进行打分,再进行加权求和得到总分根据总分排序选股,例如得分前10%或最高的50~100只股票回归法:用历史数据学习回归方程,再用其对未来收益率进行预测根据收益率预测值排序(选TopN)或是阈值截断进行选股模型评价及持续改进动机:随着使用者不断增加,有效因子将逐渐失效随着环境变化,有效因子变得无效,另一些变得有效改进(再平衡)方法:定期(例如:每月)vs

事件驱动对因子进行评价,对模型进行改进根据新结果调仓,以适应市场变化候选因子因子有效性检验冗余因子

剔除综合评分

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

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

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

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回测结果41开源回测引擎: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()#生成买入订单

#下穿零线

ifse

温馨提示

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

最新文档

评论

0/150

提交评论