Создание backtestEngine возражает против стратегий backtest и анализирует результаты
Создайте backtestEngine проведение теста портфельных инвестиционных стратегий на основе исторических данных.
Используйте этот рабочий процесс для разработки и запуска бэктеста:
Определите логику стратегии с помощью backtestStrategy объект, чтобы определить, как стратегия восстанавливает баланс портфеля активов.
Использование backtestEngine для создания backtestEngine объект, который задает параметры бэктеста.
Использовать runBacktest для запуска бэктеста по данным о исторических ценах активов и, опционально, по данным о торговом сигнале.
Использовать equityCurve для построения кривых собственного капитала каждой стратегии.
Использовать summary результирующие результаты в формате таблицы.
Для получения дополнительной информации об этом рабочем процессе смотрите Backtest Investment Strategies.
создает backtester = backtestEngine(strategies)backtestEngine объект. Используйте backtestEngine объект для обратной проверки стратегий торговли портфелем, определенных в backtestStrategy объекты.
устанавливает свойства с помощью аргументов пары "имя-значение" и любого из аргументов в предыдущем синтаксисе. Можно задать несколько аргументы пары "имя-значение". Для примера, backtester = backtestEngine(___,Name,Value)backtester = backtestEngine(strategies,'RiskFreeRate',0.02,'InitialPortfolioValue',1000,'RatesConvention',"Annualized",'Basis',2).
strategies - Стратегии бэктестаbacktestStrategy объектыСтратегии Backtest, заданные как вектор backtestStrategy объекты. Каждый backtestStrategy объект определяет стратегию торговли портфелем.
Типы данных: object
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.
backtester = backtestEngine(strategies,'RiskFreeRate',0.02,'InitialPortfolioValue',1000,'RatesConvention',"Annualized",'Basis',2)'RiskFreeRate' - Безрисковая ставка0 (по умолчанию) | числоБезрисковая ставка, заданная как разделенная разделенными запятой парами, состоящая из 'RiskFreeRate' и скалярным числом.
Если RatesConvention является "Annualized", затем RiskFreeRate задает годовую ставку.
Если RatesConvention является "PerStep", затем RiskFreeRate является десятичным процентом и представляет скорость свободного риска для одного временного шага в обратном тесте. Например, если backtest использует ежедневные данные цены основного средства, то RiskFreeRate значение должно быть дневной нормой возврата за наличные.
Типы данных: double
'CashBorrowRate' - Ставка заимствования денежных средств0 (по умолчанию) | числоСтавка заимствования денежных средств, заданная как разделенная разделенными запятой парами, состоящая из 'CashBorrowRate' и скалярным числом. The CashBorrowRate определяет ставку начисления процентов по отрицательным остаткам денежных средств (марже) во время бэктеста.
Если RatesConvention является "Annualized", затем CashBorrowRate задает годовую ставку.
Если RatesConvention является "PerStep", затем CashBorrowRate значение является десятичным процентом и представляет собой ставку начисления процентов для одного временного шага в бэктесте. Например, если backtest использует ежедневные данные цены основного средства, то CashBorrowRate значение должно быть суточной процентной ставкой для отрицательных остатков денежных средств.
Типы данных: double
'InitialPortfolioValue' - Начальное значение портфеля10000 (по умолчанию) | числоНачальное значение портфеля, заданное как разделенная разделенными запятой парами, состоящая из 'InitialPortfolioValue' и скалярным числом.
Типы данных: double
'RatesConvention' - Определяет, как backtest engine использует RiskFreeRate и CashBorrowRate для вычисления интереса"Annualized" (по умолчанию) | вектор символов со значением 'Annualized' или 'PerStep' | строку со значением "Annualized" или "PerStep"Определяет, как backtest engine использует RiskFreeRate и CashBorrowRate для вычисления интереса, заданного как разделенная разделенными запятой парами, состоящая из 'RatesConvention' и вектор символов или строка.
'Annualized' - Ставки рассматриваются как годовые ставки, и самый обратный механизм вычисляет дополнительные проценты на основе соглашения о отсчете дней, указанного в Basis свойство. Это значение по умолчанию.
'PerStep' - Ставки обрабатываются по шаговым ставкам, и самый задний тест вычисляет проценты по предоставленным ставкам на каждом шаге обратного теста.
Типы данных: char | string
'Basis' - Определяет соглашение о отсчете дней при вычислении интереса в RiskFreeRate или CashBorrowRate0 (по умолчанию) | числовые значения: 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13Определяет соглашение о отсчете дней при вычислении интереса в RiskFreeRate или CashBorrowRate, заданная как разделенная разделенными запятой парами, состоящая из 'Basis' и скаляр целое число с использованием поддерживаемого значения:
0 = факт/факт
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 = BUS/252
Для получения дополнительной информации см. раздел Базиса.
Примечание
Basis используется только тогда, когда RatesConvention для свойства задано значение "Annualized". Если на RatesConvention является "PerStep", и Basis задан, backtestEngine игнорирует Basis значение.
Типы данных: double
Strategies - Стратегии бэктестаbacktestStrategy объектыСтратегии Backtest, заданные как вектор backtestStrategy объекты.
Типы данных: object
RiskFreeRate - Безрисковая ставка0 (по умолчанию) | числоСкорость без риска, заданная в виде скалярного числа.
Типы данных: double
CashBorrowRate - Ставка заимствования денежных средств0 (по умолчанию) | числоСтавка заимствования денежных средств, заданная в виде скалярного числа.
Типы данных: double
InitialPortfolioValue - Начальное значение портфеля10000 (по умолчанию) | числоНачальное значение портфеля, заданное как скалярное число.
Типы данных: double
AnnualizedRates - Использование годовых ставок для RiskFreeRate и CashBorrowRatetrue (по умолчанию) | логическим со значением true или falseИспользуйте годовые ставки для RiskFreeRate и CashBorrowRate, заданный как скалярная логика.
Типы данных: logical
Basis - Дневной базис годовых ставок для RiskFreeRate и CashBorrowRate0 (по умолчанию) | числовые значения: 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13Дневной подсчет годовых ставок для RiskFreeRate и CashBorrowRate, заданное скалярное целое число.
Типы данных: double
NumAssets - Количество активов во вселенной портфеля[ ] (по умолчанию) | числоЭто свойство доступно только для чтения.
Количество активов во вселенной портфеля, число. NumAssets определяется из расписания скорректированных цен, переданных в runBacktest. NumAssets пуст, пока вы не запустите backtest, используя runBacktest функция.
Типы данных: double
Returns - возвраты стратегии[ ] (по умолчанию) | расписаниеЭто свойство доступно только для чтения.
Стратегические возвраты, NumTimeSteps-by- NumStrategies расписание возвратов стратегии. Возвраты указаны для каждого временного шага. Для примера, если вы используете ежедневные цены с runBacktest, затем Returns - ежедневная стратегия возвратов. Returns пуст, пока вы не запустите backtest, используя runBacktest функция.
Типы данных: timetable
Positions - Позиции активов по каждой стратегии[ ] (по умолчанию) | структуруЭто свойство доступно только для чтения.
Позиции основных средств для каждой стратегии, структура, содержащая NumTimeSteps-by- NumAssets расписание должностей активов по каждой стратегии. Например, если вы используете ежедневные цены в runBacktest, затем Positions структура содержит расписания, содержащие ежедневные позиции активов. Positions пуст, пока вы не запустите backtest, используя runBacktest функция.
Типы данных: struct
Turnover - Оборот стратегии[ ] (по умолчанию) | расписаниеЭто свойство доступно только для чтения.
Оборот стратегии, а NumTimeSteps-by- NumStrategies timetable. Turnover пуст, пока вы не запустите backtest, используя runBacktest функция.
Типы данных: timetable
BuyCost - Транзакционные издержки для покупок активов каждой стратегии[ ] (по умолчанию) | расписаниеЭто свойство доступно только для чтения.
Транзакционные затраты для покупок основных средств каждой стратегии a NumTimeSteps-by- NumStrategies timetable. BuyCost пуст, пока вы не запустите backtest, используя runBacktest функция.
Типы данных: timetable
SellCost - Транзакционные затраты на продажу активов каждой стратегии[ ] (по умолчанию) | расписаниеЭто свойство доступно только для чтения.
Транзакционные затраты для продаж основных средств каждой стратегии a NumTimeSteps-by- NumStrategies timetable. SellCost пуст, пока вы не запустите backtest, используя runBacktest функция.
Типы данных: timetable
runBacktest | Запуск backtest на одной или нескольких стратегиях |
summary | Сгенерируйте сводную таблицу результатов бэктеста |
equityCurve | Постройте кривые собственного капитала стратегий |
backtestEngineИспользуйте механизм обратного тестирования в MATLAB ®, чтобы запустить backtest инвестиционной стратегии в течение временных рядов рыночных данных. Можно задать механизм обратного тестирования при помощи backtestEngine объект. A backtestEngine Объект устанавливает свойства обратного тестирования окружения, такие как скорость без риска, и хранит результаты бэктеста. В этом примере можно создать механизм обратного тестирования, чтобы запустить простой бэктест и изучить результаты.
Создайте стратегию
Определите инвестиционную стратегию при помощи 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]
Установите свойства Backtesting Engine
Механизм обратного тестирования имеет несколько свойств, которые вы устанавливаете с помощью параметров к backtestEngine функция.
Безрисковая ставка
The RiskFreeRate свойство содержит процентную ставку, заработанную за неинвестированный капитал (то есть денежные средства). Когда сумма весов портфеля ниже 1, оставшийся капитал инвестируется в наличные и зарабатывает безрисковый тариф. Безрисковая ставка и ставка заимствования денежных средств могут быть определены в годовом исчислении или как явные процентные ставки «за временной шаг». The RatesConvention свойство используется, чтобы задать, как backtestEngine интерпретирует две скорости (интерпретация по умолчанию - «Annualized»). В данном примере установите ставку без риска 2% в годовом выражении.
% 2% annualized risk-free rate
riskFreeRate = 0.02;Ставка заимствования наличными
The CashBorrowRate свойство устанавливает ставку начисления процентов, применяемую к отрицательным остаткам денежных средств. Если в любое время вес портфеля равен значению, превышающей 1, то денежная позиция отрицательна на сумму, превышающую 1. Такое поведение весов портфеля аналогично заимствованию капитала на марже для инвестирования с кредитным плечом. Как и RiskFreeRate свойство, CashBorrowRate свойство может быть либо ежегодно, либо в зависимости от значения RatesConvention свойство.
% 6% annualized margin interest rate
cashBorrowRate = 0.06;Начальное значение портфеля
The InitialPortfolioValue свойство устанавливает значение портфеля в начале бэктеста для всех стратегий. По умолчанию это 10 000 долларов.
% Start backtest with $1M
initPortfolioValue = 1000000;Создайте Backtest Engine
Используя подготовленные свойства, создайте механизм обратного тестирования с помощью 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: 0.0200
CashBorrowRate: 0.0600
RatesConvention: "Annualized"
Basis: 0
InitialPortfolioValue: 1000000
NumAssets: []
Returns: []
Positions: []
Turnover: []
BuyCost: []
SellCost: []
Несколько дополнительных свойств двигателя обратного тестирования инициализируются как пустые. Механизм обратного тестирования заполняет эти свойства, которые содержат результаты бэктеста, после завершения бэктеста.
Загрузка данных и запуск бэктеста
Запустите бэктест по ежедневным ценовым данным из 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');
Запуск бэктеста с помощью runBacktest функция.
backtester = runBacktest(backtester,pricesTT)
backtester =
backtestEngine with properties:
Strategies: [1x1 backtestStrategy]
RiskFreeRate: 0.0200
CashBorrowRate: 0.0600
RatesConvention: "Annualized"
Basis: 0
InitialPortfolioValue: 1000000
NumAssets: 30
Returns: [250x1 timetable]
Positions: [1x1 struct]
Turnover: [250x1 timetable]
BuyCost: [250x1 timetable]
SellCost: [250x1 timetable]
Исследуйте результаты
Механизм обратного тестирования заполняет свойства backtestEngine только для чтения объект с результатами backtest. Для анализа доступны ежедневные значения для возвратов портфеля, позиций активов, оборота и транзакционных издержек.
% Generate a histogram of daily portfolio returns histogram(backtester.Returns{:,1}) title('Daily Portfolio Returns')

Использование equityCurve для построения кривой собственного капитала для простой равновзвешенной инвестиционной стратегии.
equityCurve(backtester)

У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.