Создание 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
или CashBorrowRate
0
(по умолчанию) | числовые значения: 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
и CashBorrowRate
true
(по умолчанию) | логическим со значением true
или false
Используйте годовые ставки для RiskFreeRate
и CashBorrowRate
, заданный как скалярная логика.
Типы данных: logical
Basis
- Дневной базис годовых ставок для RiskFreeRate
и CashBorrowRate
0
(по умолчанию) | числовые значения: 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.