主要内容

反向rightsgy.

创建反向rightsgy.对象定义投资组合分配策略

描述

创建一个反向rightsgy.定义投资组合分配策略的对象。

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

  1. 使用a定义策略逻辑反向rightsgy.对象指定策略如何重新平衡资产组合。

  2. 采用倒退生儿创建一个倒退生儿对象指定逆端的参数。

  3. 采用runbacktest.以历史资产价格数据运行返回,可选地,交易信号数据。

  4. 采用杠杆绘制每个策略的股权曲线。

  5. 采用概括总结返回结果以表格格式。

有关此工作流程的更多详细信息,请参阅反向最新的投资策略

创建

描述

例子

战略= BacktestStaregy(名称重新平衡创造一个反向rightsgy.目的。

例子

战略= BacktestStaregy(___名称,价值特性使用名称值对参数和上一个语法中的任何参数。您可以指定多个名称值对参数。例如,Strat = Backteststygy('mystrygy',@ myrebalfcn,'transactionscost',0.005,'lookbackwindow',20)

输入参数

展开全部

策略名称,指定为字符串。

数据类型:细绳

重新平衡函数,指定为函数句柄。函数处理在返回时计算新的产品组合权重。RepAlanceFCN参数实现交易策略的核心逻辑,必须具有以下签名之一:

  • New_weights = Rebalancefcn(权重,资产支付)

  • new_weights = Rebalancefcn(权重,assetprices,signaldata)

重新平衡函数被调用倒退生儿每次必须重新平衡策略时,对象。这倒退生儿对象通过以下参数调用重新平衡函数:

  • 重量- 重新平衡之前的当前产品组合权重,指定为十进制百分比。

  • assetprices.- 一种时间表包含调整后资产价格的滚动窗口。

  • signalData.- 一种时间表包含信号数据的滚动窗口。如果您提供信号数据是倒退生儿对象,然后使用三个输入参数语法将引擎对象传递给策略重新平衡函数。如果不提供信号数据倒退生儿对象,然后将引擎对象调用具有两个输入参数语法的重新平衡函数。

    重新平衡函数必须返回一个输出参数新_重量这是作为十进制百分比指定的资产重量的向量。

    • 如果是新_重量总和1然后,投资组合已全面投入。

    • 如果是新_重量总和少于1然后,投资组合将拥有剩余的现金,赚取风险指定在倒退生儿目的。

    • 如果是新_重量总和超过1然后,存在负现金职位(保证金),现金借入现金借款率的现金借款率CashBolrerrate.财产的财产倒退生儿目的。

    有关开发A的更多信息重新平衡功能手柄,见反向最新的投资策略

数据类型:function_handle.

名称值对参数

指定可选的逗号分离对名称,价值论点。名称是参数名称和价值是相应的价值。名称必须出现在引号内。您可以以任何顺序指定多个名称和值对参数name1,value1,...,namen,valuen

例子:Strat = Backteststygy('mystrygy',@ myrebalfcn,'transactionscost',0.005,'lookbackwindow',20)

在后退期间重新平衡频率,指定为逗号分隔的配对'重新平衡'和一个标量整数,期间目的,日历对象,或矢量约会时间对象。

如果使用整数,则整数表示重新平衡之间的时间次数。例如,如果您提供倒退生儿每天价格数据的对象,那么重新平衡指定重新平衡之间的天数。默认为1,这意味着每次步骤都有战略重新平衡。

如果使用A.期间对象或者日历,后退发动机创建了在后退开始时间开始的次数的重新平衡表,在指定持续时间的每个步骤后发生重新平衡时间。

如果使用矢量约会时间对象,呢重新平衡定义明确的重新平衡时间计划。后退发动机将在规定的时间表中对每个日期时间重新平衡。

笔记

对于持续时间和日期语法,如果在反向数据集中找不到重新平衡时间,则发动机将在预定时间之前的最近时间重新平衡。例如,如果重新平衡表包含一个周末,则重新平衡将在星期五之前发生。

数据类型:双倍的|目的

交易的交易成本,指定为逗号分隔对组成'交易成本'和标量数字,矢量或功能句柄。您可以以三种方式指定交易成本:

  • 速度- 购买和销售资产的标量十进制百分比费用。例如,如果您设置交易成本0.001,然后每次交易(购买和销售)将在交易费用中支付0.1%。

  • [廉价,sellrate]- 一种1-经过-2等数百分比的传染媒介规定了购买和销售资产的单独率。

  • computetransactioncostsfcn.- 以计算自定义交易费用的函数句柄。如果指定函数句柄,则倒退生儿object致电交易成本函数来计算每次重新平衡的费用。用户定义的函数句柄必须具有以下签名:

    [Buycosts,Sellcosts] = Computecostsfcn(Deltapositions)

    用户定义的函数句柄采用单个输入参数Deltapositions.,这是由于重新平衡而对所有资产的资产职位(货币单位)的资产职位变化的传染媒介。积极的元素Deltapositions.矢量表示否定条目代表销售时购买。用户定义的函数句柄必须返回两个输出参数买货卖出,其中包含每种交易的整个重新平衡的总成本(以货币)。

数据类型:双倍的|function_handle.

Lookback窗口,指定为逗号分隔对组成'lookbackwindow'A.1-经过-2整数矢量,一个期间对象,或者日历目的。

使用时1-经过-2矢量与整数定义了您提供的数据(资产价格和信号数据)的滚动窗口的最小和最大大小重新平衡争论。您可以根据时间步骤指定这些限制。指定为整数时,Lookback窗口是根据来自资产的数据行定义的(Pricestt.)和信号(signaltt.)在后端使用的时间表。Lookbace MimumE设置在可能发生策略重新平衡之前必须可用的资产价格数据的最小行数。LiseBack最大值设置了传递给重新平衡函数的价格数据的滚动窗口的最大大小。

例如,如果倒退生儿对象提供每日价格数据,然后提供寻找窗德指定滚动窗口的大小界限在几天内。默认为[0款],这意味着所有可用的过去数据都会给予重新平衡函数。如果您将非零最小值指定,则软件不会调用重新平衡直到足够的时间步骤过程以满足最小尺寸。

如果您指定寻找窗德作为单个标量值,那么该值均为最小和最大值寻找窗德(即固定大小的窗口)。

如果使用A.期间对象或者日历,Leadback窗口最小和最大值是以速率相对于重新平衡的时间来定义的。例如,如果lookbaces最小设置为五天(即,天(5)),只有在重新平衡时间前至少五天至少五天,才会发生重新平衡。同样地,如果Lookbaces最大值设置为六个月(即,Calmonths(6)),Lookback窗口仅包含在重新平衡时间或之后六个月发生的数据。

笔记

或者,寻找窗德可以设置为单个标量值,指示滚动窗口应该正好尺寸(在行或持续时间方面)。最小和最大大小都将设置为提供的值。

数据类型:双倍的|目的

初始投资组合权重,指定为逗号分隔对组成'初始重量'和矢量。这初始重量向量设定了投资组合重量倒退生儿对象开始返回。初始权重向量的大小必须与反馈中使用的资产数量匹配。

或者,您可以设置初始重量名称 - 值对参数为空([])表明该战略将从没有投资和100%的现金职位开始。默认为初始重量是空的 ([])。

数据类型:双倍的

特性

展开全部

策略名称,指定为字符串。

数据类型:细绳

重新平衡函数,指定为函数句柄。

数据类型:function_handle.

反斜频率在后退期间指定为标量数字。

数据类型:双倍的

交易成本,指定为标量数字,向量或函数句柄。

数据类型:双倍的|function_handle.

Lookback窗口,指定为标量数字或向量。

数据类型:双倍的

初始权重,指定为向量。

数据类型:双倍的

例子

全部收缩

使用a定义反向策略反向rightsgy.目的。反向rightsgy.对象包含特定于交易策略的属性,例如重新平衡频率,交易成本和重新平衡函数。重新平衡函数实现了策略的核心逻辑,并在后退发动机期间使用的循环逻辑用于允许策略改变其资产分配并进行交易。在此示例中,为了说明如何在MATLAB®中创建和使用反向策略,请准备两种简单的反向策略:

  1. 平等的加权策略

  2. 试图“追逐回报”的策略

这两种策略的战略逻辑被定义为重新平衡职能

设置策略属性

一种反向rightsgy.对象有几个属性,即使用参数设置反向rightsgy.功能。

初始重量

初始重量属性包含返回时启动时的资产分配权重。默认值初始重量是空的 ([]),这表明该策略开始了最令人反感,这意味着100%的资本是现金赚取无风险率。

设定初始重量到特定的资产分配。初始权重向量的大小必须与后退中的资产数量匹配。

%初始化30重量的策略,自反馈以来%数据来自30次大亚股的一年。numasset = 30;%给出两个策略相等加权的初始权重。重量%必须总结为1才能完全投资。初始重量= =(1,numasset);初始重量=初始重量/和(初始重量);

交易成本

交易成本Property允许您设置策略支付交易资产的费用。交易成本作为每个资产的总职位变更的百分比支付。以十进制百分比指定成本。例如,如果交易成本设置为1%(0.01)策略购买了100美元的股票,那么发生的交易成本为1美元。

交易成本使用a设置1-经过-2传染媒介为购买和销售提供单独的费率。在此示例中,两项策略支付相同的交易成本 - 资产购买的25个基点和50个销售基点。

%将交易成本定义为[BuyCosts Sellcost]并指定成本%作为十进制百分比。Tradingcosts = [0.0025 0.005];

如果需要在任意复杂的事务成本结构中实现任意复杂的事务成本结构,也可以将TransactionScosts属性设置为函数句柄。有关创建事务成本函数的更多信息,请参阅反向rightsgy.

重新平衡频率

重新平衡属性确定后退发动机重新通货膨胀和使用重新平衡函数重新分配策略的投资组合的频率。设定重新平衡在后退的时间步骤中。例如,如果回波引擎正在测试具有一组每日价格数据的策略,则在几天内设置重新平衡功能。本质上,重新平衡表示对策略重新平衡函数的每个调用之间处理的价格数据的数量。

每4周(20天)策略重新平衡。rebalfreq = 20;

回顾窗口

每次回波引擎都会调用策略重新平衡函数时,资产价格数据(以及可能信号数据)的窗口将传递给重新平衡函数。然后,重新平衡功能可以基于市场数据的滚动窗口进行交易和分配决策。这寻找窗德属性设置这些滚动窗口的大小。在时间步骤中设置窗口。窗口确定从资产价格时间到重新平衡函数的数据行数。

寻找窗德属性可以以两种方式设置。对于数据的固定大小的数据滚动窗口(例如,“价格历史50天”),寻找窗德属性设置为单个标量值(N=50.)。然后,软件调用重新平衡函数,以完全包含价格时间表N滚动价格数据的行。

或者,您可以使用a定义LookbackWindow属性1-经过-2向量[min max]这指定了扩展数据窗口的最小和最大大小。通过这种方式,您可以设置灵活的窗口大小。例如:

  • [10款]- 至少10行数据

  • [0 50]- 不超过50行数据

  • [0款]- 所有可用的数据(即,没有最低,没有最大值);这是默认值

  • [20 20]- 恰好20行数据;这相当于设置寻找窗德到标量值20.

如果数据不足以创建有效的滚动窗口,则该软件不会调用重新平衡函数,无论值如何重新平衡财产。

如果策略不需要任何价格或信号数据历史记录,则可以指示重新平衡函数不需要设置数据寻找窗德财产0.

%相同的重量策略不需要任何价格历史数据。ewlokback = 0;%“Chase Returns”策略基于尾随的决定%10天的资产回报。当计算10天,Lookback窗口设置为11返回的百分比需要第0天的关闭价格。ChaseLookback = 11;

重新平衡功能

重新平衡功能(重新平衡)是包含策略逻辑的用户撰写的功能。回溯引擎通过固定的一组参数调用策略重新平衡函数,并期望它返回代表重新平衡后的新的所需产品组合分配的资产权重的向量。有关更多信息,请参阅重新平衡职能

创造策略

使用准备好的策略属性,您可以创建两个策略对象。

%创建相等的加权策略。重新平衡函数@equalweights%在此示例结束时的重新平衡函数部分中定义。相等的术语= backteststygy(“平等”,@相等,......'重新平衡',rebalfreq,......'交易成本',贸易信息,......'lookbackwindow',ewlockback,......'初始重量',初始重量)
平衡术语= backteststgy与属性:名称:“相等级别”重新平衡:@equalweight重新平衡频率:20 TransactionCosts:[0.0025 0.0050] LookbackWindow:0初始重量:[1x30双]
%创建“Chase Returns”策略。重新平衡功能%@chasereturns在此示例结束时的重新平衡函数部分中定义。chasereturnsstrategy = backteststygy(“chasereturns”,@ chasereturns,......'重新平衡',rebalfreq,......'交易成本',贸易信息,......'lookbackwindow',chaselookback,......'初始重量',初始重量)
Chasereturnsstrategy = Hyperations = Hypersticalgy:名称:“Chasereturns”RebalanceFCN:@ChaSereturns RepAlance频率:20 TransactionCosts:[0.0025 0.0050] LookbackWindow:11初始重量:[1x30双]

设置回电引擎

要反对两种策略,请使用倒退生儿目的。Backtresting Engine设置适用于所有策略的逆端的参数,例如无风险速率和初始产品组合价值。有关更多信息,请参阅倒退生儿

%为重新开始创建一系列策略。策略= [相等的Quildrity Chasereturnsstretgy];%创建反垄断引擎以测试这两个策略。反向临时=逆景气(策略);

重新平衡职能

使用该战略重新平衡函数使用重新平衡争论反向rightsgy.必须遵循一个固定的API,即在与每个策略交互时,后退引擎期望的固定API。重新平衡函数必须实现以下两种语法之一:

功能new_weights = examplerebalancefcn(Current_weights,AssetPriceTimetable)功能new_weights = examplerebalancefcn(Current_weights,AssetPriceTimetable,SignalDatataTimetable)

所有重新平衡函数都以其第一个输入参数提出,投资组合的当前分配权重。Current_weights.代表在重新平衡之前的资产拨款。在重新平衡期间,您可以使用Current_weights.以各种方式。例如,您可以使用Current_weights.确定在重新平衡期间,投资组合分配从目标分配或大小交易中漂移到限制营业额。

重新平衡函数语法的第二个和第三个论点是资产价格的滚动窗口和可选信号数据。这两个表包含尾随N资产的行和传递到的信号时间表runbacktest.功能,在哪里N设置使用寻找窗德每个策略的财产。

如果提供了可选的信号数据runbacktest.功能,后退发动机将信号数据的滚动窗口传递给支持它的每个策略。万博1manbetx

平等战略只投资所有资产。

功能new_weights =平等(current_weights,assetprices)%#OK %在所有资产上平均投资。num_assets = numel(current_wineights);new_weights = sone(1,num_assets)/ num_asset;结尾

Chasereturns.策略只投资于顶部X基于他们的滚动窗口中的股票。这种天真的策略只是作为说明性的例子。

功能new_weights = chasereturns(current_weights,assetprices)%设定投资的股票数量。numstocks = 15;%Compute Rolling从Lookback窗口返回返回。rollingreturns = assetprices {end ,:} ./ assetprices {1 ,:};%在Lookback窗口中选择最佳表现股票[〜,idx] = sort(rollingreturns,“下降”);BeststocksIndex = IDX(1:Numstocks);%将新权重初始化为所有零。new_weights = zeros(大小(current_weights));%投资平等跨越表演股票。new_weights(beststocksindex)= 1;new_weights = new_weights / sum(new_weights);结尾
在R2020B中介绍