backtestEngine

Создайте backtestEngine возразите против backtest стратегий и анализируйте результаты

Описание

Создайте backtestEngine запускать backtest стратегий портфельных инвестиций относительно исторических данных.

Используйте этот рабочий процесс, чтобы разработать и запустить backtest:

  1. Задайте логику стратегии использование backtestStrategy объект задать, как стратегия восстанавливает равновесие портфеля активов.

  2. Используйте backtestEngine создать backtestEngine объект, который задает параметры backtest.

  3. Использование runBacktest запускать backtest против исторических данных цен активов и, опционально, данных о торговом сигнале.

  4. Использование summary обобщать backtest приводит к формату таблицы.

Для более подробной информации об этом рабочем процессе см. Инвестиционные стратегии Backtest.

Создание

Описание

пример

backtester = backtestEngine(strategies) создает backtestEngine объект. Используйте backtestEngine возразите против backtest торговым стратегиям портфеля, заданным в backtestStrategy объекты.

пример

backtester = backtestEngine(___,Name,Value) аргументы пары "имя-значение" использования свойств наборов и любой из аргументов в предыдущем синтаксисе. Можно задать несколько аргументов пары "имя-значение". Например, backtester = backtestEngine(strategies,'RiskFreeRate',0.02/252,'InitialPortfolioValue',1000).

Входные параметры

развернуть все

Стратегии Backtest в виде вектора из backtestStrategy объекты. Каждый backtestStrategy объект задает торговую стратегию портфеля.

Типы данных: object

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: backtester = backtestEngine(strategies,'RiskFreeRate',0.02/252,'InitialPortfolioValue',1000)

Безрисковый уровень в виде разделенной запятой пары, состоящей из 'RiskFreeRate' и числовой скаляр. RiskFreeRate десятичный процент и представляет безрисковый уровень для одного временного шага в backtest. Например, если backtest использует ежедневные данные цен активов, то RiskFreeRate значение должно быть суточной ставкой возврата для наличных денег.

Типы данных: double

Наличный ссудный процент в виде разделенной запятой пары, состоящей из 'CashBorrowRate' и числовой скаляр. CashBorrowRate задает накопление процента на отрицательных остатках наличных средств (поле) во время backtest. CashBorrowRate значение является десятичным процентом и представляет уровень накопления процентов для одного временного шага в backtest. Например, если backtest использует ежедневные данные цен активов, то CashBorrowRate значение должно быть ежедневной процентной ставкой для отрицательных остатков наличных средств.

Типы данных: double

Начальная стоимость портфеля в виде разделенной запятой пары, состоящей из 'InitialPortfolioValue' и числовой скаляр.

Типы данных: double

Свойства

развернуть все

Стратегии Backtest в виде вектора из backtestStrategy объекты.

Типы данных: object

Безрисковый уровень в виде числового скаляра.

Типы данных: double

Наличный ссудный процент в виде числового скаляра.

Типы данных: double

Начальная стоимость портфеля в виде числового скаляра.

Типы данных: double

Это свойство доступно только для чтения.

Количество активов во вселенной портфеля, числовом. NumAssets выведен из расписания настроенных цен, переданных runBacktest. NumAssets пусто, пока вы не запускаете backtest использование runBacktest функция.

Типы данных: double

Это свойство доступно только для чтения.

Стратегия возвращается, NumTimeSteps- NumStrategies расписание стратегии возвращается. Возвраты на временной шаг. Например, если вы используете ежедневные цены с runBacktest, затем Returns ежедневная стратегия, возвращается. Returns пусто, пока вы не запускаете backtest использование runBacktest функция.

Типы данных: timetable

Это свойство доступно только для чтения.

Положения актива для каждой стратегии, структура, содержащая NumTimeSteps- NumAssets расписание положений актива для каждой стратегии. Например, если вы используете ежедневные цены в runBacktest, затем Positions структура содержит расписания, содержащие ежедневные положения актива. Positions пусто, пока вы не запускаете backtest использование runBacktest функция.

Типы данных: struct

Это свойство доступно только для чтения.

Оборот стратегии, NumTimeSteps- NumStrategies расписание. Turnover пусто, пока вы не запускаете backtest использование runBacktest функция.

Типы данных: timetable

Это свойство доступно только для чтения.

Операционные издержки для покупок актива каждой стратегии, NumTimeSteps- NumStrategies расписание. BuyCost пусто, пока вы не запускаете backtest использование runBacktest функция.

Типы данных: timetable

Это свойство доступно только для чтения.

Операционные издержки для продаж актива каждой стратегии, NumTimeSteps- NumStrategies расписание. SellCost пусто, пока вы не запускаете backtest использование runBacktest функция.

Типы данных: timetable

Функции объекта

runBacktestЗапустите backtest на одной или нескольких стратегиях
summaryСгенерируйте сводную таблицу результатов backtest

Примеры

свернуть все

Используйте backtesting механизм в MATLAB®, чтобы запустить backtest на инвестиционной стратегии по временным рядам данных о рынке. Можно задать backtesting механизм при помощи backtestEngine объект. backtestEngine возразите устанавливает свойства backtesting среды, такие как безрисковый уровень, и содержит результаты backtest. В этом примере можно создать backtesting механизм, чтобы запустить простой backtest и исследовать результаты.

Создайте стратегию

Задайте инвестиционную стратегию при помощи backtestStrategy функция. Этот пример создает простую равно взвешенную инвестиционную стратегию, которая вкладывает капитал одинаково через все активы. Для получения дополнительной информации о создании backtest стратегии, смотрите backtestStrategy.

% The rebalance function is simple enough that you can use an anonymous function
equalWeightRebalanceFcn = @(current_weights,~) ones(size(current_weights)) / numel(current_weights);

% Create the strategy
strategy = backtestStrategy("EqualWeighted",equalWeightRebalanceFcn,...
    'RebalanceFrequency',20,...
    'TransactionCosts',[0.0025 0.005],...
    'LookbackWindow',0)
strategy = 
  backtestStrategy with properties:

                  Name: "EqualWeighted"
          RebalanceFcn: [function_handle]
    RebalanceFrequency: 20
      TransactionCosts: [0.0025 0.0050]
        LookbackWindow: 0
        InitialWeights: [1x0 double]

Установите свойства Engine Backtesting

backtesting механизм имеет несколько свойств, которые вы устанавливаете при помощи параметров на backtestEngine функция.

Безрисковый уровень

RiskFreeRate свойство содержит процентную ставку, заработанную для неинвестированного капитала (то есть, наличные деньги). Когда сумма весов портфеля ниже 1, остающийся капитал инвестирован в наличные деньги и зарабатывает безрисковый уровень. Безрисковый уровень задан как уровень "на временной шаг", означая, что это - процентная ставка, которую наличные деньги зарабатывают для каждого шага backtest, не годового показателя. В данном примере вы запускаете backtest, использующий ежедневные данные, и безрисковая процентная ставка составляет пересчитанные на год 2%, таким образом, устанавливает RiskFreeRate свойство к 0.02/ 252 аппроксимировать ежедневную процентную ставку.

% Approximate a 2% annualized risk-free rate for daily backtest data
riskFreeRate = 0.02 / 252;

Наличные деньги одалживают уровень

CashBorrowRate наборы свойств уровень накопления процентов применились к отрицательным остаткам наличных средств. Если в любое время сумма весов портфеля к значению, больше, чем 1, то денежная позиция отрицательна суммой сверх 1. Это поведение весов портфеля походит на капитал заимствования на поле, чтобы наделить рычагами. Как RiskFreeRate свойство, CashBorrowRate свойство задано как уровень на временной шаг, необходимо предоставить годовой показатель, разделенный на количество временных шагов в год.

% Approximate a 6% annualized margin interest rate for daily backtest data
cashBorrowRate = 0.06 / 252;

Начальная стоимость портфеля

InitialPortfolioValue наборы свойств значение портфеля в начале backtest для всех стратегий. Значение по умолчанию составляет 10 000$.

% Start backtest with $1M
initPortfolioValue = 1000000;

Создайте Engine Backtest

Используя подготовленные свойства, создайте backtesting механизм с помощью backtestEngine функция.

% The backtesting engine takes an array of backtestStrategy objects as the first argument
backtester = backtestEngine(strategy,...
    'RiskFreeRate',riskFreeRate,...
    'CashBorrowRate',cashBorrowRate,...
    'InitialPortfolioValue',initPortfolioValue)
backtester = 
  backtestEngine with properties:

               Strategies: [1x1 backtestStrategy]
             RiskFreeRate: 7.9365e-05
           CashBorrowRate: 2.3810e-04
    InitialPortfolioValue: 1000000
                NumAssets: []
                  Returns: []
                Positions: []
                 Turnover: []
                  BuyCost: []
                 SellCost: []

Несколько дополнительных свойств backtesting механизма инициализируются, чтобы опустеть. backtesting механизм заполняет эти свойства, которые содержат результаты backtest после завершения backtest.

Загрузите данные и запущенный Backtest

Запустите backtest по ежедневным ценовым данным из 30 запасов компонента DJIA.

% Read table of daily adjusted close prices for 2006 DJIA stocks
T = readtable('dowPortfolio.xlsx');

% Remove the DJI index column and convert to timetable
pricesTT = table2timetable(T(:,[1 3:end]),'RowTimes','Dates');

Запустите backtest использование runBacktest функция.

backtester = runBacktest(backtester,pricesTT)
backtester = 
  backtestEngine with properties:

               Strategies: [1x1 backtestStrategy]
             RiskFreeRate: 7.9365e-05
           CashBorrowRate: 2.3810e-04
    InitialPortfolioValue: 1000000
                NumAssets: 30
                  Returns: [250x1 timetable]
                Positions: [1x1 struct]
                 Turnover: [250x1 timetable]
                  BuyCost: [250x1 timetable]
                 SellCost: [250x1 timetable]

Исследуйте результаты

backtesting механизм заполняет свойства только для чтения backtestEngine объект результатами backtest. Дневные значения для портфеля возвращаются, положения актива, оборот, и операционные издержки доступны, чтобы исследовать.

% Generate a histogram of daily portfolio returns
histogram(backtester.Returns{:,1})
title('Daily Portfolio Returns')

Введенный в R2020b
Для просмотра документации необходимо авторизоваться на сайте