生成回测结果汇总表
生成一个指标表以总结后退。表的每一行是计算的度量标准,每列代表策略。运行后,您必须仅运行摘要函数汇总表
=摘要(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)
检查详细结果
跑步后,倒退生儿
对象更新具有返回的详细结果的只读字段。这返回
那职位
那营业额
那收盘
,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,'鸡水',鸡水);抓住从标题('每日回报分配')传奇([策略。];
职位
这职位
属性拥有一个时间表结构,每个策略一个。
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,:));结尾
营业额
这营业额
时间表包含每个时间步骤的投资组合周转率。
头(反终端)
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 (的营业额(%));
收购和卖出
这收盘
和SellCost
时间表适用于每种类型的交易,购买和销售的每次步骤交易费用。
totalcost = sum(反终端_buycost {:,:,:,:})+ sum(反终端.sellcost {:,:,:});酒吧(Totalcost);标题('总交易成本');ylabel ('$'甘氨胆酸)组(,“xticklabel”,[策略])
生成资产曲线
使用杠杆
绘制等权逆方差策略的权益曲线。
股权(反向聊天)
重新平衡职能
本节包含策略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);结尾
val
-val引擎倒退生儿
目的被抛出的引擎,指定为a倒退生儿
目的。使用倒退生儿
创建回溯引擎然后使用runbacktest.
来做个回溯测试。
数据类型:目的
汇总表
—度量汇总回溯测试总结后退的度量标准,作为表的每一行是计算的度量标准,每列代表策略。报告的指标如下:
突然return.
-整个回测策略的总回报
谢泼
- 每个策略的夏普比率
挥发性
- 通过反向最终的每个策略的波动性
AverageTurnover
-每时间步的平均营业额以小数表示
MaxTurnover.
- 单个时间步骤中的最大营业额
AverageReturn
- 平均返回每次返回
MaxDrawdown
-投资组合的最大提成百分比
普通布利斯
-购买资产的平均每时间步交易成本
AverageSellCost
- 资产销售平均每次步骤交易费用
您单击了与此MATLAB命令对应的链接:
在MATLAB命令窗口中输入它来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。