主要内容

总结

生成的汇总表,val的结果

自从R2020b

描述

例子

summaryTable=总结(val)生成一个表的总结,val的指标。表的每一行是一个计算指标,每一列表示一个策略。你必须运行总结函数只有在运行runBacktest函数。

例子

全部折叠

MATLAB®val引擎运行backtests组合投资策略在资产价格数据的时间序列。您可以使用总结比较多种策略在同一市场的情况。这个例子展示了如何检查结果,val的两种策略。

加载数据

一年的股票价格数据加载。为了可读性,这个示例使用道琼斯工业指数的股票的一个子集。

%的读表每日近2006吗股票价格调整T = readtable (“dowPortfolio.xlsx”);%删除表只包括日期和选择股票timeColumn =“日期”;assetSymbols = [“BA”,“猫”,“说”,“通用电气”,“IBM”,“力”,“微软”];T = T (:, (timeColumn assetSymbols]);%转换为时间表pricesTT = table2timetable (T)“RowTimes”,“日期”);%的观点最终资产价格时间表头(pricesTT)
日期英航猫说通用电气IBM MCD microsoft ___________ _____ _____ _____ _____ _____ _____ _____ 03 - 1月- 2006 68.63 55.86 24.18 33.6 80.13 32.72 26.19 04 -简- 2006 69.34 57.29 23.77 33.56 80.03 33.01 26.32 05 - 1月- 2006 68.53 57.29 24.19 33.47 80.56 33.05 26.34 06 - 1月- 2006 67.57 58.43 24.52 33.7 82.96 33.25 26.26 09 - 1月- 2006 67.01 59.49 24.78 33.61 81.76 33.88 26.21 10 - 1月- 2006 67.33 59.25 25.09 33.43 82.1 33.91 26.35 11 - 1月- 2006 68.3 59.28 25.33 33.66 82.19 34.5 26.63 12 - 1月- 2006 67.9 60.13 25.41 33.25 81.61 33.96 26.48

逆方差策略需要一些价格历史来初始化,所以你可以分配一个部分的数据用于设置初始权重。通过这样做,您可以”,val温暖的开始”。

warmupRange = 1:20;testRange = 21:高度(pricesTT);

创建策略

定义一个投资策略使用backtestStrategy函数。这个例子构建两种策略:

  • 平等的加权

  • 逆方差

本例中没有提供细节如何构建策略。创建策略的更多信息,请参阅backtestStrategy。战略平衡功能的实现平衡功能部分。

%创建策略ewInitialWeights = equalWeightFcn ([], pricesTT (warmupRange:));ewStrategy = backtestStrategy (“EqualWeighted”@equalWeightFcn,“RebalanceFrequency”,20岁,“TransactionCosts”(0.0025 - 0.005),“LookbackWindow”0,“InitialWeights”ewInitialWeights)
ewStrategy = backtestStrategy属性:名称:“EqualWeighted”RebalanceFcn: @equalWeightFcn RebalanceFrequency: 20 TransactionCosts: [0.0025 - 0.0050] LookbackWindow: 0 InitialWeights: [0.1429 0.1429 0.1429 0.1429 0.1429 0.1429 0.1429] ManagementFee: 0 ManagementFeeSchedule: 1 y PerformanceFee: 0 PerformanceFeeSchedule: 1 y PerformanceHurdle: 0用户数据:[0 x0 struct] EngineDataList: [0 x0字符串)
ivInitialWeights = inverseVarianceFcn ([], pricesTT (warmupRange:));ivStrategy = backtestStrategy (“InverseVariance”@inverseVarianceFcn,“RebalanceFrequency”,20岁,“TransactionCosts”(0.0025 - 0.005),“InitialWeights”ivInitialWeights)
ivStrategy = backtestStrategy属性:名称:“InverseVariance”RebalanceFcn: @inverseVarianceFcn RebalanceFrequency: 20 TransactionCosts: [0.0025 - 0.0050] LookbackWindow:[0正]InitialWeights: [0.1401 0.0682 0.0795 0.2187 0.1900 0.1875 0.1160] ManagementFee: 0 ManagementFeeSchedule: 1 y PerformanceFee: 0 PerformanceFeeSchedule: 1 y PerformanceHurdle: 0用户数据:[0 x0 struct] EngineDataList: [0 x0字符串)
%的总策略到一个数组中策略= [ewStrategy ivStrategy];

运行,val

创建一个val引擎和运行一年多,val的股票数据。在创建val引擎的更多信息,见backtestEngine。软件初始化的几个属性backtestEngine对象为空。这些只读属性填充的发动机运行,val之后。

%使用默认设置创建val引擎val = backtestEngine(策略)
val = backtestEngine属性:策略:[1 x2 backtestStrategy] RiskFreeRate: 0 CashBorrowRate: 0 RatesConvention:“年”的基础上:0 InitialPortfolioValue: 10000 DateAdjustment:“之前”NumAssets:[]的回报:[]职位:[]营业额:[]BuyCost: [] SellCost:[]费用:[]

运行,val使用runBacktest

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

检查汇总结果

总结函数使用val的结果,并返回一个表高层val的结果。

s1 =总结(val)
s1 =9×2表EqualWeighted InverseVariance _________________售予TotalReturn SharpeRatio 0.17155 0.17567 0.097946 - 0.10213 0.021107 - 0.097472 0.0074876 - 0.0069961 0.0007014 - 0.0024246 AverageTurnover MaxTurnover AverageReturn波动0.018532 - 0.061913 0.00073178 - 0.00071296 0.097647 - 0.096299 MaxDrawdown AverageBuyCost AverageSellCost 0.037064 - 0.12383

表的每一行输出的测量性能的策略。每种策略占据了一个列。的总结函数报告以下指标:

  • TotalReturn——nonannulaized总回报的策略,包括费用,全部val段。

  • SharpeRatio——nonannualized每个策略在val的夏普比率。有关更多信息,请参见夏普

  • 波动——nonannualized标准差per-time-step策略的回报。

  • AverageTurnover——per-time-step组合平均营业额,表示为一个十进制百分比。

  • MaxTurnover——最大的组合营业额在一个平衡,表示为一个十进制百分比。

  • AverageReturn——算术平均每次每一步投资组合的回报。

  • MaxDrawdown投资组合的最大压降,表示为一个十进制百分比。有关更多信息,请参见maxdrawdown

  • AverageBuyCost——平均per-time-step交易成本发生的投资组合资产购买计划。

  • AverageSellCost——平均per-time-step交易成本发生的投资组合资产出售。

有时它是有用的转置总结表当策划不同的策略的指标。

s2 = rows2vars (s1);s2.Properties。VariableNames {1} =“StrategyName”
s2 =表2×10StrategyName TotalReturn SharpeRatio波动AverageTurnover MaxTurnover AverageReturn MaxDrawdown 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)

图包含一个坐标轴对象。坐标轴对象标题平均营业额,ylabel平均周转率(%)包含一个对象类型的酒吧。

查看详细结果

在您运行val之后,backtestEngine对象更新只读字段,val的详细结果。的返回,职位,营业额,BuyCost,SellCost,费用每个属性包含一个时间表的结果。因为这个例子使用val每日价格数据,这些时间表每天的结果。

val
val = backtestEngine属性:策略:[1 x2 backtestStrategy] RiskFreeRate: 0 CashBorrowRate: 0 RatesConvention:“年”的基础上:0 InitialPortfolioValue: 10000 DateAdjustment:“之前”NumAssets: 7返回:[230 x2时间表)职位:[1 x1 struct]营业额:[230 x2时间表]BuyCost: [230 x2时间表]SellCost: [230 x2时间表)费用:[1 x1 struct]

返回

返回财产持有策略的时间表为每个时间步(简单)返回。这些回报是包容性的交易费用。

头(backtester.Returns)
时间EqualWeighted InverseVariance ___________ _________________售予02年2月- 2006年2月- -0.007553 - -0.0070957 03 - 2006 -0.0037771 - -0.003327 06 - 07年2月- 2006年-0.0010094 - -0.0014312 - 0.0053284 - 0.0020578 - 2006 08年2月- 2006年2月0.0099755 - 0.0095781 09 - 2006年2月- 2006年10 - 2月-0.0026871 - -0.0014999 - 0.0048374 - 0.0059589 13 - 2月- 2006 -0.0056868 -0.0051232
binedges = -0.025:0.0025:0.025;h1 =直方图(backtester.Returns.EqualWeighted,“BinEdges”,binedges);持有直方图(backtester.Returns.InverseVariance“BinEdges”,binedges);持有标题(“每日回报分布”)传说([strategies.Name]);

图包含一个坐标轴对象。每日的坐标轴对象与标题分布返回包含2直方图类型的对象。这些对象代表EqualWeighted InverseVariance。

职位

职位财产持有时间表的结构,每一个策略。

backtester.Positions
ans =结构体字段:EqualWeighted(231×8时间表):InverseVariance:[231×8时间表)

职位每个策略持有per-time-step时间表为每个资产以及位置现金资产(赚取无风险利率)。的职位时间表包含一个比其他结果时间表,因为更行职位时间表包括初始位置的策略作为他们的第一行。您可以考虑初始位置的时间=0投资组合头寸。在这个例子中,职位时间表从2月1日开始,而其他人则开始2月2日。

头(backtester.Positions.InverseVariance)
时间现金英航猫说通用电气IBM MCD microsoft看上去…………长得一样交交1 - 2月- 2006 0 1401.2 682.17 795.14 2186.8 1900.1 1874.9 1159.8 02 - 2月- 2006 0 1402.8 673.74 789.74 2170.8 1883.5 1863.6 1145 03 - 2月- 2006 0 1386.5 671.2 787.2 2167.3 1854.3 1890.5 1139 e-12 06 - 2月- 2006 1.0971 1391.9 676.78 785.62 2161.1 1843.6 1899.1 1123.8 07 - 1400年2月- 2006 0 661.66 840.23 2131.9 1851.6 1902.3 1114.5 08 - 2006年2月- -2.2198 e-12 1409.8 677.9 846.58 2160.4 1878.2 1911 1113.2 09 - 1869年2月- 2006年-2.2165 e-12 1414.8 674.35 840.87 2172.2 1908.3 1102.6 10 - 2月- 2006 0 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,职位);标题(“逆方差的立场”);包含(“日期”);ylabel (“资产头寸”);datetick (“x”,“mm / dd”,“keepticks”);ylim (12000 [0]) xlim ([t (1) t(结束)])厘米= parula(元素个数(h));i = 1:元素个数(h)组(h(我),“FaceColor”厘米(我:));结束

图包含一个坐标轴对象。坐标轴对象与标题方差倒数位置,包含日期、ylabel资产位置包含8个区域类型的对象。

营业额

营业额时间表per-time-step组合营业额。

头(backtester.Turnover)
时间EqualWeighted InverseVariance ___________ _________________售予02 - 2月- 2006 0 0 03 - 2月- 2006 0 0 2月06 - 07年2月- 2006 0 0 - 2006 0 0 08年2月- 2006 0 0 09年2月- 2006 0 0 10 - 2月- 2006 0 0 13 - 2月- 2006 0 0

根据您的调整频率,营业额表可以包含0。删除这些零当你想象组合营业额是有用的。

nonZeroIdx =和(backtester.Turnover.Variables, 2) > 0;= backtester.Turnover (nonZeroIdx:);情节(to.Time to.EqualWeighted,“o”to.Time to.InverseVariance,“- x”,“线宽”2,“MarkerSize”5);传奇([strategies.Name]);标题(“投资组合交易”);ylabel (的营业额(%));

图包含一个坐标轴对象。坐标轴对象与标题组合营业额,ylabel营业额(%)包含2线类型的对象。这些对象代表EqualWeighted InverseVariance。

BuyCost和SellCost

BuyCostSellCost时间表的per-time-step交易费用为每个类型的事务,采购和销售。

totalCost =总和(backtester.BuyCost{:,:}) +总和(backtester.SellCost {:,:});酒吧(totalCost);标题(“总交易成本”);ylabel (“美元”甘氨胆酸)组(,“xticklabel”(strategies.Name))

图包含一个坐标轴对象。坐标轴对象与标题总交易成本,ylabel美元包含一个对象类型的酒吧。

生成资产曲线

使用equityCurve情节的股本曲线平等加权和逆方差策略。

equityCurve (val)

图包含一个坐标轴对象。坐标轴对象与标题股本曲线,包含时间,ylabel投资组合价值包含2线类型的对象。这些对象代表EqualWeighted InverseVariance。

平衡功能

本节包含平衡功能的实现策略。更多信息关于创建策略和写作平衡功能,看看backtestStrategy

函数new_weights = equalWeightFcn (current_weights pricesTT)% #好< INUSL >% =加权组合分配nAssets =大小(pricesTT, 2);nAssets new_weights = 1 (1);new_weights = new_weights /笔(new_weights);结束
函数new_weights = inverseVarianceFcn (current_weights pricesTT)% #好< INUSL >%反变量组合配置assetReturns = tick2ret (pricesTT);assetCov = x (assetReturns {:,:});new_weights = 1。/诊断接头(assetCov);new_weights = new_weights /笔(new_weights);结束

输入参数

全部折叠

val引擎,指定为一个backtestEngine对象。使用backtestEngine创建val引擎,然后使用runBacktestval。

数据类型:对象

输出参数

全部折叠

指标总结val,返回一个表,表的每一行是一个计算指标,每一列表示一个策略。报告指标如下:

  • TotalReturn——整个val总回报的策略

  • SharpeRatio——每个策略的夏普比率

  • 波动——每个策略在val的波动

  • AverageTurnover——平均营业额per-time-step十进制百分比

  • MaxTurnover——最大的营业额在一个时间步

  • AverageReturn——平均回报per-time-step

  • MaxDrawdown——最大的组合作为一个十进制百分比减少

  • AverageBuyCost——平均per-time-step购买资产的交易成本

  • AverageSellCost——平均per-time-step出售资产的交易成本

版本历史

介绍了R2020b