《量化投资方法报告(完).docx》由会员分享,可在线阅读,更多相关《量化投资方法报告(完).docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、量化投资方法期末作业backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POSTbacktest_initial_cash 回测初始资金backtest_comm i ss i on rat i o 回测佣金比例backtest_s I ippage_rat io 回测滑点比例run (strategy_i d=4eaefOf1-e722-11ec-b8b3-dc7196f64e07, f i I ename=ma i n.py, mode二MODE_BACKTEST, token=8cd50e8320a710843b33
2、05048e176efa5fa1f1d3, backtest_start_time=2021-08-01 08:00:001, backtest_end_t ime=2022-02-10 16:00:00, backtest_adj ust=ADJUSTPREV, backtest_i n i t i al_cash=1000000, backtest_comm i ss i on_rat i o=0. 0001, backtest_sI i ppage_rat i o=0. 0001)历史数据回测交易记录.收益概述图O 仿 ISASB100(X0000.00100(X0000.00”要支QO
3、1%oom50.91%女员.也建3必*MB3b元1MMM811.63 元WM94.8IL63元771365.7玩50.49%16.80%28.0S%。600.51358328100j%-6000000tE-9 ooo own-200000000 150 000000 toooooooon 500000006PS)ocn 66.37%-sooooooos-10000007U-150000000-200.000 OOOn124120211 .回测结果第一局部:回测初始数据backtestId: n7db207bd-e724-11ec-b8b3-dc7196f64e07,request: strat
4、egyId: H4eaefOf1-e722-11ec-b8b3-dc7196f64e07,initialCash: 100000000,transact i onRat io: 1,commi ssionRat io”: 0.0001,sI ippageRatio: 0.0001, startTime: 2018-12-31T01:00:00Z, endTime: 2021-12-31T01:00:00Z, mode: 1, initial Posit ions:, adjust: 0, orders*:)注:相关指标说明指标含义initialCash初始资金startTime回测开始时间en
5、dTime回测结束时间commissionRatio手续费用率第二局部:回测数据统计指标cash: accountId: n4eaef0f1-e722-11ec-b8b3-dc7196f64e07, nav: 150494811.63226068, pnl: 50494811.63226068, fpnl: 4253448. 260158542, frozen1: 116989298. 39177704, “available”: 29252064. 980325103, cumlnout: 100000000,cumTrade: 7713657182.978847, cumPnI: 4701
6、2729. 09040003, cumCommission: 771365. 7182978849, “lastTrade”: 11718956. 052719422,lastCommission: 1171.8956052719423, createdAt: 2018-12-31T01:00:00Z, nupdatedAtH: 2021-12-01T01:40:00Z, iti In it iiaccountName :,currency: 0, orderFrozen: 0, lastPnl: 0, IastInout: 0, changeReason: 0 ), indicator: a
7、ccountIdn: 4eaef0f1-e722-11ec-b8b3-dc7196f64e07,pnlRatio: : 0. 28084002034698513, riskRatio: 0. 7983898315914056, openCount: 358, closeCount: ncaImarRatio: 0. 5982380021827174, createdAt: 2022-06-11T06:13:21.291Z, updatedAt: K2022-06-11T06:13:21.291Z ), progress: progress: 1, updatedAtH: 2021-12-31T
8、01:00:00Z ), createdAt“: “2022-06-08Tl2:14:05.530105300Z, updatedAt: 2022-06-08T12:35:55.371950200Z, If1 IV II VIcomment : ) 注:相关指标说明指标含义pnlRatio累计收益率pnlRatioAnnual年化收益率sharpRatio夏普比率maxDrawdown最大回测openCount开仓次数closeCount平仓次数winCount盈利次数loseCount万损次数策略评价指标账户起始资金100000000账户总收益50494811.63账户总收益率50.49%账
9、户年均收益率16.83%截止时间账户现金29252064.98账户持仓121242748账户资产总价值116989298.39最大回撤率28.08%总共交易次数328盈利次数167平均盈利302364.1415亏损次数161夏普比率0.51策略思路.回测策略多因子选股策略.回测时段2018年12月31日2021年12月31日.回测初始资金100000000 元.策略构建原理多因子选股策略包括三因子和五因子模型。在三因子模型中,一般认为股 票的超额收益可以由市场因子以及市值因子和账面价值比三个因子共同决定。 随着市场的快速开展,三因子模型的使用性在不断的下降,出现了许多三因子 模型难以解释的现象
10、。因此,Fama提出了五因子模型,在三因子模型的基础加入了盈利水平、投 资水平因子,随着市场影响因素的增加,陆续出现了六因子模型、八因子模型 等,目前多少个因子是合适的尚无定论。现阶段的因子选股策略的种类丰富,不同的因子策略选取的指标不同,使 用情况也有所差异,市场上常用的多因子策略共有6种,具体情况如表1所 不O表1因子策略种类Fama-French 三因子一市场、规模、价值Carhart四因子X市场、规模、价值、动量ZFama-French五因子X市场、规模、价值、盈利、投资一./Hou-Xue-Zhang 四因子 市场、规模、盈利、投资Stambaugh-Yuan 四因子市场、规模、管理
11、、表现Daniel-Hirshleifer-Sun三因子一市场、长周期行为、短周期行为在本次策略中主要考率市场、规模、价值这三个市场因素即三因子选股模在多因子策略提出之前市场上通常是悬着CAPM模型来定价,多因子策略 是在CAPM模型的基础上引入了 HML和SMB两个因子,三因子策略模型(1) 式所示。- Rf = Rf) +在式中用4代表投资股票的预期收益率,静表示无风险收益率, 研即表示市场组合预期收益率,采用ER(smb)和矶Rhml分别表示规模因子 收益率和价值因子预期收益率。在三个因子中,价值因子和规模因子通常采用BM和市值两个指标,按 照Fama对市场因子和规模因子的排序原那么,可
12、以对BM和市值两个指标进行 双重排序,首先将股票分为大市值组合和小市值组合分别采用B和S来表 式。根据账面市值比将股票分为三个不同等级的组别即为BM高于70%分位数 的H组,BM低于30%分位数的L组,BM处于70%分位数和30%分位数之间的 数据记为M组。表2市场因子和规模因子的分组原那么BM分组HML市值分组5sss 石加工BBBBHMT通过对市值以及BM两个指标按照70%以及30%的分配比例展开分配后,将使得市值指标被分为两组从表2中可以看到市值被分为了小市值S和大市值B 两组,在这基础上利用小市值组合的加权平均数与大市值组合的加权平均数的 差额来计量规模因子。基于同样的原理,BM因子共
13、分成的H,M,L三个组别,但是在衡量价值因 子时通常通过两个高BM组合的加权平均数与两个低BM组合的加权平均数的 差值来衡量。基于上述原理可以建立规模因子和价值因子的计量模型。L.4.构建思路(1)假设条件:三因子模型对市场具有完全有效性(2)在构建三因子策略先通过模型对股票的预期收益率进行拟合估计,通过 估计结果可以看到绝大都数的股票满足三因子策略模型,但是存在局部股票 的预期收益率满足三因子模型,大局部股票都会存在一个alpha截距项,因 此建立策略时将alpha截距项作为衡量标准来判断股价与均衡价格的关系。(3)当存在alpha截距项时,说明股票当前价格偏离均衡价格,根据这一问 题设计套
14、利策略,在策略中alpha值得运用原理如下:alpha 0时,说明股票收益率高于均衡水平,股票价格被高估,应该 卖出。所以通过判断alpha的大小来判断买入开仓的股票具体实施方案为获取 alpha最小并且小于0的10只的股票买入开仓。构建策略规那么.策略步骤第一步:获取股票市值以及账面市值比等分析数据。第二步:将股票按照各个因子进行排序分组为后续计算规模因子、价值因子做 准备,分组原理采用Fama的分组方法即表2所示。第三步:依据规模因子和价值因子的计量模型(公式2)计算SMB、HML因子。 第四步:进行因子回归,计算alpha值,获取alpha最小并且小于0的10只的 股票买入开仓。1 .程
15、序编写思路(1)假设每月第一个交易日的09:40定时执行algo任务;股票基准为沪深300指数,设置最大开仓量为20。(2)账面市值分组标准为:大账面市值为3.0,中账面市值为2.0;小账面市 值为1.0;市值分组大市值为2. 0,小市值为1. 0。(3)根据理Fama的分组原理(表2)计算规模因子和价值因子,然后根据因 子结果分别计算股票的预期收益率。(4)在计算的预期收益率的基础上计算有效股票的alpha值,然后通过最小 二乘OLS估计收益模型系数,更具结果获取alpha最小并且小于0的10只的 股票进行操作买入和卖出的操作。(5)然后通过程序语言获取股票的权重,通过权重比例建立目标仓位,
16、在本 策略中买卖方向为1代表买入,2代表卖出;开平仓类型中1为开仓,2为平 仓,在委托类型中1代表限价委托,2代表市价委托。(6)通过判断平仓和开仓来确定买入和卖出操作,结合仓位、收益率等因素 的限制可以得到买入与选股的策略。策略代码cod i ng=utf-8from _future_ import pr i nt_funct i on, absoIute_import, un i code_l i teraIs import numpy as np import pandas as pdfrom gm. ap i i mport *f f I本策略基于Fama-French三因子模型。假设
17、三因子模型可以完全解释市场,以三因子模型对每股股票进行回归计算其Alpha 值,当alpha为负说明市场低估该股,因此应该买入。策略思路:计算市场收益率、个股的账面市值比和市值,并对后两个进行了分类, 根据分类得到的组合分别计算其市值加权收益率、SMB和HML.对各个股票进行回归(假设无风险收益率等于0)得到Alpha值.选取Alpha值小于0并为最小的10只股票进入标的池,每月初移仓换股 ! ! fdef i n i t (context):# 成分股指数context. index_symbol =SHSE.000300,# 每月第一个交易日的09:40定时执行a I go任务(仿真和实盘
18、时不支持该频率) scheduIe (scheduIe_func=aI go, date_ruIe=,1m, t ime_ruIe=09:40:00,)数据滑窗context, date 二 20设置开仓的最大资金量context. rat i o = 0. 8账面市值比的大/中/小分类context. BM_HIGH = 3. 0context. BM MIDDLE = 2.0context. BM_LOW =1.0市值大/小分类context. MV_B IG = 2.0context. MV SMALL = 1.0def market_vaIue_we i ghted(df, MV, B
19、M): n n n计算市值加权下的收益率:param MV: MV为市值的分类对应的组别:param BM: BM账目市值比的分类对应的组别VI VI Ifselect = df (df TOTMKTCAP = MV) & (dftBM1 = BM) # 选出市值为 MV,账目 市值比为BM的所有股票数据mv_we i ghted = se I ect mv1 /np. sum (se I ect 1 mv ) # 市值加权的权重 return_we i ghted = se I ect return *mv_we i ghted# 市值加权下的收益率 return np. sum(retur
20、n_weighted) def a I go (context):#当前时间 now = context.now获取上一个交易日的日期Iast_day = get_prev i ous_trad i ng_date (exchange=SHSE*, date=context.now)获取沪深300成份股stock300 = get_h i story_const i tuents (i ndex=context. i ndex_symboI, start_date=Iast_day, end_date=last_day)0const i tuents. keys () #过滤停牌的股票h i
21、story_i nstruments = get_h i story_i nstruments (symboIs=stock300, start_date=now, enddate=now)stock300 =itemsymboI for item i n h i story_i nstruments if notitem is_suspended and itemsymbol!二SHSE. 601313 # 601313 为退市股票 #过滤退市及未上市的股票i nstrument i nfos = get_i nstrument i nfos(symboIs=stock300, df=Tru
22、e) stock300 = I i st (i nstrument i nfos (i nstrument i nfosI isted_datenow)* symbol)获取P/B和市值数据fin = get_fundamentaIs(tab Ie=trad i ng_der i vat i ve_i nd i cator, symboIs=stock300,start_date=Iast_day, end_date=Iast_day,f i eI ds二PB, TOTMKTCAP, df=True)# 计算账面市值比,为P/B的倒数 fin. Ioc:, PB = (finPB * -1)计
23、算市值的30%和70%的分位点,用于后面的分类s i ze_gate = f inf TOTMKTCAP 1 quant i le(0. 30),fin TOTMKTCAP. quant i le(0. 70)计算账面市值比的50%分位点,用于后面的分类bm_gate = finPB. quant i Ie (0. 50) f i n. i ndex = f i n. symbo I设置存放股票收益率的变量data_df = pd. DataFrame ()对未停牌的股票进行处理for symboI i n stock300:# 计算收益率cIose = h i story_n (symboI
24、=symboI, frequency=1d, count二context.date + 1, end_t ime=Iast_day, f i eI ds=cIose,ski p_suspended=True, fi Il_mi ss i ng=Last, adjust=ADJUST_PREV, df=True) close.vaIuesstock_return = cIose -1 / cIose 0 - 1pb = finPBsymbolmarket_vaIue = finTOTMKTCAPsymbol# 获取股票代码,股票收益率,账面市值比的分类,市值的分类,市值(1)(1)# 其中账面市
25、值比的分类为:高(3)、中(2)、低市值的分类:大(2)、小(1)i f pb bm_gate0:i f market_vaIue size_gate: market_vaIue# 大市值/高 BMIabeI = symbol, stock_return, market_vaIue# 小市值/低 BM else:IabeI =symbol, stock_return, market_va I ue# 大市值/低 BM eI i f pb bm_gate 1:i f market_vaIue s i ze_gate:IabeI =symbol, stock_return, market_valu
26、e# 小市值/中 BMIabeI = symbol, stock_return, market_vaIue# 小市值/低 BM else:IabeI =symbol, stock_return, market_va I ue# 大市值/低 BM eI i f pb bm_gate 1:i f market_vaIue s i ze_gate:IabeI =symbol, stock_return, market_value# 小市值/中 BMcontext. BM_L0W,context. BM_L0W,context. MV_SMALL,context. MV_BIG,context. BM
27、_MIDDLE, context. MV_SMALL,else:I abe IsymboI, stock_return,context. BM_MIDDLE, context. MV_BIG,market_va I ue# 大市值/中 BMeI i f market_vaIue s i ze_gate: IabeI =symbol, stock_return, market_va I ue# 小市值/高 BMmarket_va I ue# 大市值/中 BMeI i f market_vaIue s i ze_gate: IabeI =symbol, stock_return, market_v
28、a I ue# 小市值/高 BMcontext. BM_HIGH, context.MV_SMALL,else:I abe Ielse:I abe IsymboI, stock_return,context. BM_HIGH, context. MV_BIG,data_df = pd.concat (data_df,pd. DataFrame (IabeI, i ndex=symboI, return , BM, TOTMKTCAP, mv).T)data_df. set_i ndex (symboI, i npIace=True)调整数据类型for co Iumn i n data_df.c
29、o Iumns:data_dfco Iumn = data_dfco Iumn. astype (np. fIoat64)计算小市值组合的收益率(组内以市值加权计算收益率,组间以等权计算收益率) smb_s = (market_vaIue_we i ghted(data_df, context. MV_SMALL, context. BM_L0W) + market_vaIue we i ghted (data df, context. MV_SMALL, context. BM_MIDDLE) + market vaIue we i ghted (data df, context. MV S
30、MALL, context. BM HIGH) / 3# 计算大市值组合的收益率(组内以市值加权计算收益率,组间以等权计算收益率) smb b = (market_vaIue_we i ghted(data_df, context. MV_BIG, context.BM LOW) + market_vaIue_we i ghted (data_df, context. MV_BIG, context. BM_MIDDLE) + market_vaIue_we i ghted (data_df, context. MV_BIG, context. BM_HIGH) / 3计算规模因子的收益率(小
31、市值组收益率-大市值组收益率) smb = smb_s - smb_b# 计算高BM组合的收益率(组内以市值加权计算收益率,组间以等权计算收益率) hml_b 二(market_vaIue_we i ghted(data_df, context. MV_SMALL, context. BM_HIGH) + market_vaIue_we i ghted (data_df, context. MV_BIG, context. BM_HIGH) / 2计算低BM组合的收益率(组内以市值加权计算收益率,组间以等权计算收益率) hml_s 二(market_vaIue_we i ghted(data_
32、df, context. MV_SMALL, context. BM_L0W) + market_vaIue_we i ghted (data_df, context. MV_BIG, context. BM_L0W)/2# 计算价值因子的收益率(高BM组收益率-低BM市值组收益率) hml = hml_b - hml_s获取市场收益率cIose = history(symbol=context. index_symbol, frequency二1d, count=context. date + 1,end_t ime=Iast_day, f i eIds=cIose*, sk i p_sus
33、pended=True,fi Il_mi ssing=Last, adjust=ADJUST_PREV, df=True)close.vaIues market_return = close-1 / close0 - 1 coff_pooI = 口对每只股票进行回归获取其alpha值 for stock i n data_df. i ndex: x_vaIue = np. ar ray (market_return, smb, hmI, 1.0) y_vaIue = np.array(data_dfreturnstock)# OLS估计系数coff = np. I i naIg. Istsq
34、(x_vaIue. T, y_vaIue, rcond=None) 0 3 coff_pooI. append (coff)# 获取alpha最小并且小于0的10只的股票进行操作(假设少于10只那么全部买入) data_df. Ioc:,alpha= coff_pooIsymboIs_pooI = data_dfdata_df. alpha 0. sort_va I ues (by=a I pha). head (10). i ndex. to I i st () pos i t i ons = context, account (). pos i t i ons ()平不在标的池的股票for
35、 pos i t i on i n pos i t i ons: symboI = pos i t i onsymboI i f symboI not i n symbols_pooI: order_i nfo = order_target_percent (symboI=symboI, percent=0, order_type=OrderType_Market, pos i t i on_s i de=Pos i t i onS i de_Long) #获取股票的权重percent = context, rat i o / Ien (symboIs_pooI)# 买在标的池中的股票for
36、symboI i n symboIs pooI:order_i nfo = order_target_percent (symboI=symboI, percent=percent, order_type=OrderType_Market, pos i t i on_s i de=Pos i t i onS i de Long) def on_order_status (context, order):# 标的代码symboI = ordersymboI# 委托价格pr i ce = orderprice# 委托数量voIume = ordervolume# 目标仓位target_percen
37、t = orderrtarget_percent1# 查看下单后的委托状态,等于3代表委托全部成交status = order status# 买卖方向,1为买入,2为卖出side = orderside# 开平仓类型,1为开仓,2为平仓effect = orderpos i t i on_effect1# 委托类型,1为限价委托,2为市价委托order_type = orderorder_typeif status 二二 3:i f effect=1 and s i de1 :s i de_effect =,开多仓,eI i f effect二二1 and s i de=2:s i de_e
38、ffect 二,开空仓,e I i f effect-2 and s i de-1 :s i deeffect =平空仓,eIi f effect二二2 and s i de=2:s i de_effect 二,平多仓,order_type_word =限价,i f order_type-1 e I se ,市价, print, :标的:,操作:以,委托价格:,目标仓位::. 2%,. format (context, now, symboI, order_type_word, s i de_effect, pr i ce, target_p ercent)def on_backtest_f i n i shed(context, i nd i cator):pr i nt (*50)print。回测已完成,请通过右上角“回测历史”功能查询详情。)i f _name_ 二二_ma i n_: ! ! Vstrategy_id策略ID,由系统生成f i I ename文件名,请与本文件名保持一致mode 实时模式:M0DEJJVE 回测模式:MODE_BACKTESTtoken绑定计算机的ID,可在系统设置-密钥管理中生成backtest_start_t ime 回测开始时间backtest end t ime回测结束时间