总结
描述
生成一个表的总结,val的指标。表的每一行是一个计算指标,每一列表示一个策略。你必须运行总结函数只有在运行summaryTable
=总结(val
)runBacktest
函数。
例子
检查,val结果
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)
查看详细结果
在您运行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]);
职位
的职位
财产持有时间表的结构,每一个策略。
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”厘米(我:));结束
营业额
的营业额
时间表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 (的营业额(%));
BuyCost和SellCost
的BuyCost
和SellCost
时间表的per-time-step交易费用为每个类型的事务,采购和销售。
totalCost =总和(backtester.BuyCost{:,:}) +总和(backtester.SellCost {:,:});酒吧(totalCost);标题(“总交易成本”);ylabel (“美元”甘氨胆酸)组(,“xticklabel”(strategies.Name))
生成资产曲线
使用equityCurve
情节的股本曲线平等加权和逆方差策略。
equityCurve (val)
平衡功能
本节包含平衡功能的实现策略。更多信息关于创建策略和写作平衡功能,看看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
- - - - - -val引擎
backtestEngine
对象
val引擎,指定为一个backtestEngine
对象。使用backtestEngine
创建val引擎,然后使用runBacktest
val。
数据类型:对象
输出参数
summaryTable
——指标总结val
表
指标总结val,返回一个表,表的每一行是一个计算指标,每一列表示一个策略。报告指标如下:
TotalReturn
——整个val总回报的策略SharpeRatio
——每个策略的夏普比率波动
——每个策略在val的波动AverageTurnover
——平均营业额per-time-step十进制百分比MaxTurnover
——最大的营业额在一个时间步AverageReturn
——平均回报per-time-stepMaxDrawdown
——最大的组合作为一个十进制百分比减少AverageBuyCost
——平均per-time-step购买资产的交易成本AverageSellCost
——平均per-time-step出售资产的交易成本
版本历史
介绍了R2020b
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。