Создать backtestEngine объект для обратного тестирования стратегий и анализа результатов
Создать backtestEngine провести бэктест стратегий портфельных инвестиций на основе исторических данных.
Используйте этот рабочий процесс для разработки и выполнения бэктеста:
Определение логики стратегии с помощью backtestStrategy объект, чтобы указать, как стратегия перераспределяет портфель активов.
Использовать backtestEngine для создания backtestEngine объект, определяющий параметры обратного теста.
Использовать runBacktest для выполнения обратного теста по историческим данным о цене актива и, по выбору, по данным торговых сигналов.
Использовать equityCurve для построения графиков капитала каждой стратегии.
Использовать summary для суммирования результатов обратного тестирования в табличном формате.
Для получения дополнительной информации об этом потоке операций см. Бэктест инвестиционных стратегий.
создает backtester = backtestEngine(strategies)backtestEngine объект. Используйте backtestEngine объект для обратного тестирования портфельных торговых стратегий, определенных в backtestStrategy объекты.
задает свойства, используя аргументы пары имя-значение и любой из аргументов предыдущего синтаксиса. Можно указать несколько аргументов пары имя-значение. Например, backtester = backtestEngine(___,Name,Value)backtester = backtestEngine(strategies,'RiskFreeRate',0.02,'InitialPortfolioValue',1000,'RatesConvention',"Annualized",'Basis',2).
strategies - Стратегии обратного тестированияbacktestStrategy объектыСтратегии обратного тестирования, указанные как вектор 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 является десятичным процентом и представляет безрисковую ставку за один шаг в бэктесте. Например, если при тестировании используется ежедневная цена основного средства, то RiskFreeRate значение должно быть суточной нормой прибыли за наличные.
Типы данных: double
'CashBorrowRate' - Ставка заимствования денежных средств0 (по умолчанию) | числовыеСтавка заимствования денежных средств, указанная как пара, разделенная запятыми, состоящая из 'CashBorrowRate' и скалярный числовой. CashBorrowRate определяет ставку начисления процентов по отрицательным остаткам денежных средств (марже) во время бэктеста.
Если RatesConvention является "Annualized", то CashBorrowRate определяет годовую ставку.
Если RatesConvention является "PerStep", то CashBorrowRate значение является десятичным процентом и представляет процентную ставку начисления за один шаг в фоновом тестировании. Например, если при тестировании используется ежедневная цена основного средства, то CashBorrowRate значение должно быть дневной процентной ставкой для отрицательных остатков денежных средств.
Типы данных: double
'InitialPortfolioValue' - Начальная стоимость портфеля10000 (по умолчанию) | числовыеНачальное значение портфеля, указанное как пара, разделенная запятыми, состоящая из 'InitialPortfolioValue' и скалярный числовой.
Типы данных: double
'RatesConvention' - Определяет, как использует механизм обратного тестирования RiskFreeRate и CashBorrowRate для вычисления процентов"Annualized" (по умолчанию) | символьный вектор со значением 'Annualized' или 'PerStep' | строка со значением "Annualized" или "PerStep"Определяет, как использует механизм обратного тестирования 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 объектыСтратегии обратного тестирования, указанные как вектор 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 пуст, пока не будет выполнен обратный тест с помощью runBacktest функция.
Типы данных: double
Returns - Доходность стратегии[ ] (по умолчанию) | расписаниеЭто свойство доступно только для чтения.
Возврат стратегии, a NumTimeStepsоколо-NumStrategies график возврата стратегии. Возврат выполняется за шаг времени. Например, если вы используете дневные цены с runBacktest, то Returns - ежедневная доходность стратегии. Returns пуст, пока не будет выполнен обратный тест с помощью runBacktest функция.
Типы данных: timetable
Positions - Позиции основных средств для каждой стратегии[ ] (по умолчанию) | структураЭто свойство доступно только для чтения.
Позиции основных средств для каждой стратегии, структура, содержащая NumTimeStepsоколо-NumAssets график размещения активов по каждой стратегии. Например, если вы используете дневные цены в runBacktest, то Positions структура содержит графики, содержащие ежедневные позиции активов. Positions пуст, пока не будет выполнен обратный тест с помощью runBacktest функция.
Типы данных: struct
Turnover - Оборот стратегии[ ] (по умолчанию) | расписаниеЭто свойство доступно только для чтения.
Оборот стратегии, a NumTimeStepsоколо-NumStrategies расписание. Turnover пуст, пока не будет выполнен обратный тест с помощью runBacktest функция.
Типы данных: timetable
BuyCost - Операционные затраты на приобретение активов по каждой стратегии[ ] (по умолчанию) | расписаниеЭто свойство доступно только для чтения.
Операционные издержки для покупки активов каждой стратегии, a NumTimeStepsоколо-NumStrategies расписание. BuyCost пуст, пока не будет выполнен обратный тест с помощью runBacktest функция.
Типы данных: timetable
SellCost - Операционные затраты по продаже активов каждой стратегии[ ] (по умолчанию) | расписаниеЭто свойство доступно только для чтения.
Операционные издержки для продажи активов каждой стратегии, a NumTimeStepsоколо-NumStrategies расписание. SellCost пуст, пока не будет выполнен обратный тест с помощью runBacktest функция.
Типы данных: timetable
runBacktest | Выполнить обратный тест для одной или нескольких стратегий |
summary | Создание сводной таблицы результатов обратного тестирования |
equityCurve | Построить кривые собственного капитала стратегий |
backtestEngineИспользуйте механизм обратного тестирования в MATLAB ® для выполнения обратного тестирования инвестиционной стратегии на основе временных рядов рыночных данных. Механизм обратного тестирования можно определить с помощью backtestEngine объект. A backtestEngine объект задает свойства среды обратного тестирования, такие как безрисковая скорость, и сохраняет результаты обратного тестирования. В этом примере можно создать механизм тестирования для выполнения простого теста и анализа результатов.
Создание стратегии
Определение инвестиционной стратегии с помощью backtestStrategy функция. Этот пример создает простую стратегию инвестиций с равным весом, которая одинаково инвестирует по всем активам. Дополнительные сведения о создании стратегий обратного тестирования см. в разделе 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]
Задать свойства модуля обратного тестирования
Модуль обратного тестирования имеет несколько свойств, которые задаются с помощью параметров backtestEngine функция.
Безрисковая ставка
RiskFreeRate имущество удерживает процентную ставку, полученную за неинвестированный капитал (то есть наличные). Когда сумма весов портфеля ниже 1, оставшийся капитал инвестируется в наличные и зарабатывает безрисковую ставку. Безрисковая ставка и ставка заимствования денежных средств могут быть определены в годовом выражении или как явные процентные ставки «за шаг». RatesConvention используется для указания способа backtestEngine интерпретирует две скорости (по умолчанию используется значение «Annualized»). Для этого примера установите безрисковую ставку на 2% в годовом исчислении.
% 2% annualized risk-free rate
riskFreeRate = 0.02;Ставка заимствования денежных средств
CashBorrowRate свойство устанавливает процентную ставку начисления, применяемую к отрицательным остаткам денежных средств. Если в любой момент времени вес портфеля составляет сумму, превышающую 1, то денежная позиция отрицательна на сумму, превышающую 1. Такое поведение весов портфеля аналогично заимствованию капитала на марже для инвестирования с помощью левериджа. Как и RiskFreeRate свойство, CashBorrowRate свойство может быть либо ежегодным, либо на шаг в зависимости от значения RatesConvention собственность.
% 6% annualized margin interest rate
cashBorrowRate = 0.06;Начальная стоимость портфеля
InitialPortfolioValue свойство устанавливает значение портфеля в начале бэктеста для всех стратегий. Значение по умолчанию - 10 000 долларов.
% Start backtest with $1M
initPortfolioValue = 1000000;Создать механизм бэктеста
Используя подготовленные свойства, создайте механизм обратного тестирования с помощью 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 объект с результатами обратного тестирования. Для анализа доступны ежедневные значения доходности портфеля, позиций активов, оборота и операционных затрат.
% Generate a histogram of daily portfolio returns histogram(backtester.Returns{:,1}) title('Daily Portfolio Returns')

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

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