主要内容

backtestEngine

创建backtestEngine对象回溯测试策略并分析结果

描述

创建一个backtestEngine利用历史数据对组合投资策略进行回溯测试。

使用此工作流开发并运行回测:

  1. 定义策略逻辑backtestStrategy对象指定策略如何重新平衡资产组合。

  2. 使用backtestEngine要创建backtestEngine对象,该对象指定回测的参数。

  3. 使用runBacktest对历史资产价格数据和(可选的)交易信号数据运行回溯测试。

  4. 使用equityCurve绘制每种策略的权益曲线。

  5. 使用总结以表格形式总结回测结果。

有关此工作流的详细信息,请参见回溯测试投资策略

创建

描述

例子

val= backtestEngine (策略创建一个backtestEngine对象。使用backtestEngine对象中定义的投资组合交易策略进行回溯测试backtestStrategy对象。

例子

val= backtestEngine (___名称,值属性使用名称-值对参数和前面语法中的任何参数。可以指定多个名称-值对参数。例如,backtester = backtestEngine(策略,'RiskFreeRate',0.02,'InitialPortfolioValue',1000,'RatesConvention',"Annualized",'Basis',2)

输入参数

全部展开

回测策略,指定为的向量backtestStrategy对象。每一个backtestStrategy对象定义了一个投资组合交易策略。

数据类型:对象

名称-值对参数

的可选逗号分隔对名称,值参数。名字参数名称和价值对应的值。名字必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:backtester = backtestEngine(策略,'RiskFreeRate',0.02,'InitialPortfolioValue',1000,'RatesConvention',"Annualized",'Basis',2)

无风险利率,指定为由逗号分隔的对组成“RiskFreeRate”一个标量数值。

如果RatesConvention“年”,然后RiskFreeRate指定年化率。

如果RatesConvention“PerStep”,则RiskFreeRate十进制百分比,表示回测中一个时间步骤的无风险率。例如,如果回测使用每日资产价格数据,则RiskFreeRate价值必须是现金的日回报率。

数据类型:

现金借款利率,指定为由逗号分隔的对组成“CashBorrowRate”一个标量数值。的CashBorrowRate指定回溯测试期间负现金余额(保证金)的应计利率。

如果RatesConvention“年”,然后CashBorrowRate指定年化率。

如果RatesConvention“PerStep”,则CashBorrowRateValue为十进制百分比,表示回测中某一时间步的应计利率。例如,如果回测使用的是每日资产价格数据,则CashBorrowRate值必须为负现金余额的日利率。

数据类型:

初始投资组合值,指定为逗号分隔的对,由“InitialPortfolioValue”一个标量数值。

数据类型:

定义回测引擎的使用方式RiskFreeRate而且CashBorrowRate要计算利息,指定为逗号分隔的对,由“RatesConvention”和字符向量或字符串。

  • “年”-利率被视为年化利率和回测引擎计算增量利率的基础上指定的日计数公约基础财产。这是默认值。

  • “PerStep”-利率被视为每步利率,回测引擎在回测的每一步都计算提供的利率。

数据类型:字符|字符串

对象上计算利息时定义日期计数约定RiskFreeRateCashBorrowRate,指定为逗号分隔的对,由“基础”和使用支持值的标量整数:万博1manbetx

  • 0 = actual/实际的

  • 1 = 30/360 (sia)

  • 2 =实际/360

  • 3 =实际/365

  • 4 = 30/360 (psa)

  • 5 = 30/360 (isda)

  • 6 = 30/360(欧洲)

  • 7 =实际/365(日语)

  • 8 =实际/实际(ICMA)

  • 9 =实际/360 (ICMA)

  • 10 =实际/365 (ICMA)

  • 11 = 30/360e (icma)

  • 12 =实际/365 (ISDA)

  • 13 =总线/252

有关更多信息,请参见基础

请注意

基础仅用于RatesConvention属性设置为“年”.如果RatesConvention“PerStep”,基础是集,backtestEngine忽略了基础价值。

数据类型:

属性

全部展开

回测策略,指定为的向量backtestStrategy对象。

数据类型:对象

无风险利率,指定为标量数字。

数据类型:

现金借款利率,指定为标量数字。

数据类型:

初始投资组合值,指定为标量数字。

数据类型:

使用年化利率RiskFreeRate而且CashBorrowRate,指定为标量逻辑。

数据类型:逻辑

年化利率的日计数RiskFreeRate而且CashBorrowRate,指定标量整数。

数据类型:

此属性是只读的。

投资组合中的资产数量,一个数字。NumAssets是从时间表中得出的调整后的价格传递给runBacktestNumAssets为空,直到您使用runBacktest函数。

数据类型:

此属性是只读的。

策略回报NumTimeSteps——- - - - - -NumStrategies战略时间表回归。返回值为每个时间步长。例如,如果您使用每日价格runBacktest,然后返回是每日策略收益。返回为空,直到您使用runBacktest函数。

数据类型:时间表

此属性是只读的。

对于每种策略的资产头寸,都包含一个结构NumTimeSteps——- - - - - -NumAssets每种策略的资产头寸时间表。例如,如果在中使用每日价格runBacktest,则职位结构保存包含每日资产位置的时间表。职位为空,直到您使用runBacktest函数。

数据类型:结构体

此属性是只读的。

战略周转,aNumTimeSteps——- - - - - -NumStrategies时间表。营业额为空,直到您使用runBacktest函数。

数据类型:时间表

此属性是只读的。

每种策略的资产购买交易成本,aNumTimeSteps——- - - - - -NumStrategies时间表。BuyCost为空,直到您使用runBacktest函数。

数据类型:时间表

此属性是只读的。

对于每种策略的资产出售交易成本,一NumTimeSteps——- - - - - -NumStrategies时间表。SellCost为空,直到您使用runBacktest函数。

数据类型:时间表

对象的功能

runBacktest 对一个或多个策略运行回测
总结 生成回测结果汇总表
equityCurve 绘制策略的权益曲线

例子

全部折叠

使用MATLAB®中的回溯测试引擎在市场数据的时间序列上对投资策略进行回溯测试。可以通过使用定义回测引擎backtestEngine对象。一个backtestEngine对象设置回测环境的属性,例如无风险率,并保存回测的结果。在本例中,您可以创建一个回测引擎来运行一个简单的回测并检查结果。

创建策略

定义投资策略backtestStrategy函数。本例构建了一个简单的等权重投资策略,对所有资产进行平等投资。有关创建回测策略的详细信息,请参见backtestStrategy

rebalance函数非常简单,您可以使用匿名函数。equalWeightRebalanceFcn = @(current_weights,~) ones(size(current_weights)) / nummel (current_weights);%创建策略策略= backtestStrategy(“EqualWeighted”equalWeightRebalanceFcn,...“RebalanceFrequency”, 20岁,...“TransactionCosts”(0.0025 - 0.005),...“LookbackWindow”, 0)
名称:"EqualWeighted" RebalanceFcn: [function_handle] rebalancfrequency: 20 TransactionCosts: [0.0025 0.0050] LookbackWindow: 0 InitialWeights: [1x0 double]

设置回测引擎属性

属性的参数设置了回测引擎的几个属性backtestEngine函数。

无风险利率

RiskFreeRate房产持有未投资资本(即现金)的利率。当投资组合权重之和小于1时,剩余资金以现金形式投资,获得无风险利率。无风险利率和现金借款利率可以定义为年化利率或明确的“每时间步”利率。的RatesConvention属性用于指定backtestEngine解释两种利率(默认解释为“Annualized”)。在本例中,将无风险利率设置为年化2%。

2%年化无风险利率riskFreeRate = 0.02;

现金借款利率

CashBorrowRate属性设置应用于负现金余额的应计利率。如果在任何时候,投资组合的权重之和大于1,那么现金头寸为负,多于1的部分为负。这种投资组合权重的行为类似于通过保证金借款进行杠杆投资。就像RiskFreeRate财产,CashBorrowRate财产的值可以是年化的,也可以是每时间步的RatesConvention财产。

年化保证金利率6%cashBorrowRate = 0.06;

初始投资组合价值

InitialPortfolioValue属性在所有策略的回测开始时设置投资组合的值。默认值是10,000美元。

以100万美元开始回测initPortfolioValue = 1000000;

创建回测引擎

属性创建回测引擎backtestEngine函数。

回测引擎将一个backtestStrategy对象数组作为第一个参数backtester = backtestEngine(策略,...“RiskFreeRate”riskFreeRate,...“CashBorrowRate”cashBorrowRate,...“InitialPortfolioValue”initPortfolioValue)
backtester = backtestEngine with properties: Strategies: [1x1 backtestStrategy] RiskFreeRate: 0.0200 CashBorrowRate: 0.0600 RatesConvention:“年化”基础:0 InitialPortfolioValue: 1000000 NumAssets:[]收益:[]头寸:[]周转率:[]BuyCost: [] SellCost: []

回测引擎的几个附加属性被初始化为空。回测引擎在完成回测后填充这些属性,这些属性包含回测的结果。

加载数据并运行回测

对道指30只成分股的每日价格数据进行回测。

阅读2006年道琼斯指数股票每日调整收盘价表T =可读的(“dowPortfolio.xlsx”);删除DJI索引列并转换为时间表pricesTT = table2schedule (T(:,[1 3:end]),“RowTimes”“日期”);

方法运行回测runBacktest函数。

backtester = runBacktest(backtester,pricesTT)
backtester = backtestEngine with properties: Strategies: [1x1 backtestStrategy] RiskFreeRate: 0.0200 CashBorrowRate: 0.0600 RatesConvention:“年化”基础:0 InitialPortfolioValue: 1000000 NumAssets: 30 Returns: [250x1时间表]头寸:[1x1 struct]周转率:[250x1时间表]BuyCost: [250x1时间表]SellCost: [250x1时间表]

检查结果

属性的只读属性backtestEngine对象的回测结果。投资组合回报、资产头寸、周转率和交易成本的每日价值都可用于检查。

生成每日投资组合收益的直方图。直方图(backtester.Returns{: 1})标题(“每日投资组合回报”

图中包含一个轴对象。标题为Daily Portfolio Returns的axes对象包含一个直方图类型的对象。

使用equityCurve为简单的等加权投资策略绘制股票曲线。

equityCurve (val)

图中包含一个轴对象。标题为Equity Curve的axis对象包含一个类型为line的对象。该对象表示EqualWeighted。

R2020b中介绍