主要内容

概括

生成回测结果汇总表

描述

例子

汇总表=摘要(val生成一个指标表以总结后退。表的每一行是计算的度量标准,每列代表策略。运行后,您必须仅运行摘要函数runbacktest.功能。

例子

全部折叠

Matlab®Storptesting引擎在资产价格数据的时间系列中延迟了投资组合投资策略。您可以使用概括在相同的市场情况下比较多种策略。这个示例展示了如何使用两种策略检查回测的结果。

加载数据

加载一年的股票价格数据。对于可读性,此示例使用Djia股票的子集。

%读取日常调整的接近价格2006年DJIA股票t = readtable(“dowPortfolio.xlsx”);%修剪表只包含日期和所选股票timecolumn =.“日期”;assetsymbols = [“ba”“猫”“说”“ge”“IBM”“力”“msft”];t = t(:,[timecolumn assetsymbols]);%转换为时间表pricestt = table2timetable(t,'rowtimes'“日期”);%查看最终资产价格时间表头(Pricestt)
ans =.8×7时间表DATES BA CAT DIS GE IBM MCD MCD MCD MSFT _________________________ _________________ _____ 03-jan-2006 68.63 55.86 24.18 33.6 80.13 32.72 26.19 04-JAN-2006 69.34 57.29 23.77 33.56 80.03 33.01 26.32 05-JAN-2006 68.53 57.29 24.19 33.47 57.29 24.19 33.47 80.5633.05 26.34 06-JAN-2006 67.57 58.43 24.52 33.7 82.96 33.25 26.26 09-JAN-2006 67.01 59.49 24.78 33.61 81.76 33.88 26.21 10-JAN-2006 67.33 59.25 25.09 33.43 82.1 33.91 26.35 11-JAN-2006 68.3 59.28 25.33 33.66 82.19 32.5 26.632006年1月12日67.9 60.13 25.41 33.25 81.61 33.96 26.48

反向方差策略需要一些价格历史来进行初始化,因此可以分配一部分数据用于设置初始权重。通过这样做,您可以“热启动”回测。

warmuprange = 1:20;testrange = 21:高度(pricestt);

创建策略

通过使用界定投资策略反向rightsgy.功能。此示例构建了两种策略:

  • 相等加权

  • 逆方差

此示例不会提供有关如何构建策略的详细信息。有关创建策略的更多信息,请参阅反向rightsgy..策略再平衡函数在重新平衡职能部分。

%创建策略ewInitialWeights = equalWeightFcn ([], pricesTT (warmupRange:));ewStrategy = backtestStrategy (“EqualWeighted”,@等级福克,...'重新平衡', 20岁,...'交易成本',[0.0025 0.005],...'lookbackwindow',0,...“InitialWeights”,ewinitialwanights);ivinitialweights = Inversevariancefcn([],pricestt(warmuprange,:));IV xtressgy = Backteststy(“inversevariance”@inverseVarianceFcn,...'重新平衡', 20岁,...'交易成本',[0.0025 0.005],...“InitialWeights”,ivinitialwalights);%将策略聚合到数组中策略= [ewstrygy invstrygy];

运行,val

创建一个回溯测试引擎,并对一年的股票数据进行回溯测试。有关创建反向测试引擎的更多信息,请参见倒退生儿.该软件初始化的多个属性倒退生儿对象空。在运行后退后,引擎填充这些只读属性。

%使用默认设置创建后台测试引擎反向临时=逆景气(策略)
backtester = backtestEngine with properties: Strategies: [1x2 backtestStrategy] RiskFreeRate: 0 CashBorrowRate: 0 RatesConvention: "Annualized" Basis: 0 InitialPortfolioValue: 10000 NumAssets: [] Returns: [] Positions: [] Turnover: [] BuyCost: [] SellCost: []

使用runbacktest.

%运行backtestval = runBacktest (val, pricesTT (testRange:));

检查汇总结果

概括函数使用返回的结果并返回来自反馈的高级结果表。

S1 =摘要(反向特)
s1 =9×2表EqualWeighted InverseVariance _____________ _______________ TotalReturn 0.17567 0.17155 SharpeRatio 0.097946 0.10213波动0.0074876 0.0069961平均成交量0.0007014 0.0024246 MaxTurnover 0.021107 0.097472 AverageReturn 0.00073178 0.00071296 maxdown0.097647 0.096299 AverageBuyCost 0.018532 0.061913 AverageSellCost 0.037064 0.12383

表输出的每一行都是测量策略的性能。每个策略都占用一列。这概括以下度量标准的功能报告:

  • 突然return.- 在全面逆端期间,策略的非脉冲总回报率,包括费用。

  • 谢泼- 通过反向最终的每个策略的非analized sharpe比率。有关更多信息,请参阅夏普

  • 挥发性- 返回每次步骤策略的非anniualized标准偏差。

  • AverageTurnover- 平均每时间步骤组合营业额,表示为十进制百分比。

  • MaxTurnover.- 单个重新平衡中的最大投资组合营业额,表示为十进制百分比。

  • AverageReturn- 算术平均值的算术平均值返回。

  • MaxDrawdown- 投资组合的最大级别表示为十进制百分比。有关更多信息,请参阅maxdrawdown

  • 普通布利斯- 平均每次步骤交易成本为资产购买产生的投资组合。

  • AverageSellCost- 平均每次步骤交易成本为资产销售产生的投资组合。

有时候会转换它是有用的概括表绘制不同策略的指标时。

S2 = Rows2Vars(S1);s2.properties.variablenames {1} ='StrategyName'
s2 =表2×10StrategyName TotalReturn SharpeRatio波幅AverageTurnover MaxTurnover AverageReturn最大损失AverageBuyCost AverageSellCost ___________________ ___________ ___________ __________ _______________ ___________ _____________ ___________ ______________ _______________ { 'EqualWeighted'} 0.17567 0.097946 0.0074876 0.0007014 0.021107 0.00073178 0.097647 0.018532 0.037064 { 'InverseVariance'} 0.17155 0.10213 0.0069961 0.0024246 0.097472 0.00071296 0.096299 0.061913 0.12383
标题栏(s2.AverageTurnover) ('平均营业额') ylabel ('平均周转(%)'甘氨胆酸)组(,“xticklabel”,s2.strategyname)

图中包含一个坐标轴。标题为“平均周转”的轴包含一个bar类型的对象。

检查详细结果

跑步后,倒退生儿对象更新具有返回的详细结果的只读字段。这返回职位营业额收盘,SellCost属性每个都包含结果的时间表。由于此示例在后端使用日常价格数据,因此这些时间表按住每日结果。

val
反向临时=逆景期Buycost:[230x2时间表] SELLCOST:[230x2时间表]

返回

返回财产持有战略的时间表(简单)每次步骤返回。这些退货包括所有交易费用。

头(反终端)
ans =.8×2时间表时间相等inversevariance ___________ __________________________ 02-FEB-2006 -0.007553 -03-FEB-2006 -03-FEB-2006 -0.0037771 -0.003327 06-FEB-2006 -0.0010094-2006-0.001312 07-2006 0.0053284 07-2006 0.009755 07-2006 0.0099755 0. 0.0099755 0. 0.0099755 0.009-2007-09-FEB-2006 0.0099755 0. 0.0099755 0.009-FEB-2006-2006 -0.0026871 -0.0014999 10-FEB-2006 0.0048374 0.0059589 13-FEB-2006 -0.0056868 -0.0051232
海水= -0.025:0.0025:0.025;H1 =直方图(反击.Returns.equalwuityed,'鸡水',鸡水);抓住直方图(反击reeturns.Inversevariance,'鸡水',鸡水);抓住标题('每日回报分配')传奇([策略。];

图中包含一个坐标轴。标题为“日收益分布”的坐标轴包含2个直方图类型的对象。这些对象代表EqualWeighted, InverseVariance。

职位

职位属性拥有一个时间表结构,每个策略一个。

val。职位
ans =结构体字段:EqualWeighted: [231x8时间表]InverseVariance: [231x8时间表]

职位每个策略的时间表都适用于每个资产的每次步骤职位以及现金获得无风险利率的资产。这职位时间表包含一个比其他结果时间表更多的行,因为职位时间表包括策略的初始职位作为其第一行。您可以考虑初始职位时间=0.投资组合职位。在这个例子中,职位时间表以2月1日开始,而其他时间表于2月2日开始。

Head(反向柜。留言.Inversevariance)
ans =.8×8时间表时间现金BA CAT DIS GE IBM MCD MCD MSFT _____________________________________________________________________________________21182.8 02-FEB-2006 0 1402.8 673.74 789.74 2170.8 1883.5 1863.6 1145 03-FEB-2006 1.0987E-12 1386.5 671.2 787.2 2167.3 1854.3 1890.5 1139 06-FEB-2006 2.1942E-12 1391.9 676.78 785.62 2161.78 785.62 2161.1843.6 1899.1 1123.8 07-FEB-2006 1.0994E-12 1400 661.66 840.23 2131.9 1851.6 1902.3 1114.5 08-FEB-2006 -2.2198E-12 1409.8 677.9 846.58 2160.4 1878.2 1911 1113.2 09-FEB-2006 0 1414.8 674.35 840.87 2172.35 840.87 2172.35 840.87 2172.35 840.87 2172.21869 1908.3 1102.6 10-FEB-2006 1.1148E-12 1425.1 677.29 839.6 2195.8 1890.6 1909.3 1103.9
%绘制资产分配随时间的变化t = backtester.Positions.InverseVariance.Time;位置= backtester.Positions.InverseVariance.Variables;h =区域(t,职位);标题('逆变异位置');Xlabel('日期');ylabel ('资产职位');datetick (“x”'mm / dd''保持');ylim([012000])xlim([t(1)t(end)])cm = parula(numel(h));为了I = 1:numel(h) set(h(I),“FaceColor”,cm(i,:));结尾

图中包含一个坐标轴。具有标题逆差位置的轴包含8个类型区域的物体。

营业额

营业额时间表包含每个时间步骤的投资组合周转率。

头(反终端)
ans =.8×2时间表时间相等的inversevariance ___________ _____________ _____________ 02-Feb-2006 0 0 0 03-Feb-2006 0 0 07-FEB-2006 0 0 08-FEB-2006 0 0 0 09-FEB-2006 0 0 0 0 0 09-FEB-2006 0 0 0 0 0 09-FEB-2006 0 0 10-Feb-2006 0 0 0 13-Feb-2006 0 0

根据您的重新平衡频率,营业额表可以包含大多数零。在可视化投资组合营业额时删除这些零。

nonZeroIdx = sum(backtester.Turnover.Variables,2) > 0;= backtester.Turnover (nonZeroIdx:);情节(to.Time to.EqualWeighted,“o”,to.time,to.inversevariance,“- x”...'行宽'2,“MarkerSize”5);传说([策略。]);标题(“投资组合交易”);ylabel (的营业额(%));

图中包含一个坐标轴。标题产品转换的轴包含2个类型的物体。这些对象代表EqualWeighted, InverseVariance。

收购和卖出

收盘SellCost时间表适用于每种类型的交易,购买和销售的每次步骤交易费用。

totalcost = sum(反终端_buycost {:,:,:,:})+ sum(反终端.sellcost {:,:,:});酒吧(Totalcost);标题('总交易成本');ylabel ('$'甘氨胆酸)组(,“xticklabel”,[策略])

图中包含一个坐标轴。标题为总交易成本的坐标轴包含一个bar类型的对象。

生成资产曲线

使用杠杆绘制等权逆方差策略的权益曲线。

股权(反向聊天)

图中包含一个坐标轴。标题为权益曲线的轴包含两个类型为line的对象。这些对象代表EqualWeighted, InverseVariance。

重新平衡职能

本节包含策略rebalance函数的实现。有关创建策略和编写rebalance函数的更多信息,请参见反向rightsgy.

函数new_weights =平等福克(Current_weights,pricestt)% #好< INUSL >%等加权投资组合配置尼索特=尺寸(pricestt,2);new_weights = =那些(1,尼索特);New_weights = New_weights / sum(New_weights);结尾
函数new_weights = Inversevariancefcn(Current_weights,pricestt)% #好< INUSL >%逆方差投资组合配置assetReturns = tick2ret (pricesTT);assetCov = x (assetReturns {:,:});new_weights = 1 ./ diag(assetCov);New_weights = New_weights / sum(New_weights);结尾

输入参数

全部折叠

被抛出的引擎,指定为a倒退生儿目的。使用倒退生儿创建回溯引擎然后使用runbacktest.来做个回溯测试。

数据类型:目的

输出参数

全部折叠

总结后退的度量标准,作为表的每一行是计算的度量标准,每列代表策略。报告的指标如下:

  • 突然return.-整个回测策略的总回报

  • 谢泼- 每个策略的夏普比率

  • 挥发性- 通过反向最终的每个策略的波动性

  • AverageTurnover-每时间步的平均营业额以小数表示

  • MaxTurnover.- 单个时间步骤中的最大营业额

  • AverageReturn- 平均返回每次返回

  • MaxDrawdown-投资组合的最大提成百分比

  • 普通布利斯-购买资产的平均每时间步交易成本

  • AverageSellCost- 资产销售平均每次步骤交易费用

介绍了R2020b