Создайте backtestEngine возразите против backtest стратегий и анализируйте результаты
Создайте backtestEngine запускать backtest стратегий портфельных инвестиций относительно исторических данных.
Используйте этот рабочий процесс, чтобы разработать и запустить backtest:
Задайте логику стратегии использование backtestStrategy объект задать, как стратегия восстанавливает равновесие портфеля активов.
Используйте backtestEngine создать backtestEngine объект, который задает параметры backtest.
Использование runBacktest запускать backtest против исторических данных цен активов и, опционально, данных о торговом сигнале.
Использование equityCurve построить кривые акции каждой стратегии.
Использование summary обобщать backtest приводит к формату таблицы.
Для более подробной информации об этом рабочем процессе см. Инвестиционные стратегии Backtest.
создает backtester = backtestEngine(strategies)backtestEngine объект. Используйте backtestEngine возразите против backtest торговым стратегиям портфеля, заданным в backtestStrategy объекты.
аргументы пары "имя-значение" использования свойств наборов и любой из аргументов в предыдущем синтаксисе. Можно задать несколько аргументов пары "имя-значение". Например, backtester = backtestEngine(___,Name,Value)backtester = backtestEngine(strategies,'RiskFreeRate',0.02,'InitialPortfolioValue',1000,'RatesConvention',"Annualized",'Basis',2).
strategies — Стратегии BacktestbacktestStrategy объектыСтратегии 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' — Безрисковый уровень (значение по умолчанию) | числовойБезрисковый уровень в виде разделенной запятой пары, состоящей из 'RiskFreeRate' и числовой скаляр.
Если RatesConvention "Annualized", затем RiskFreeRate задает годовой показатель.
Если RatesConvention "PerStep", затем RiskFreeRate десятичный процент и представляет безрисковый уровень для одного временного шага в backtest. Например, если backtest использует ежедневные данные цен активов, то RiskFreeRate значение должно быть суточной ставкой возврата для наличных денег.
Типы данных: double
'CashBorrowRate' — Наличный ссудный процент (значение по умолчанию) | числовойНаличный ссудный процент в виде разделенной запятой пары, состоящей из 'CashBorrowRate' и числовой скаляр. CashBorrowRate задает накопление процента на отрицательных остатках наличных средств (поле) во время backtest.
Если RatesConvention "Annualized", затем CashBorrowRate задает годовой показатель.
Если RatesConvention "PerStep", затем CashBorrowRate значение является десятичным процентом и представляет уровень накопления процентов для одного временного шага в backtest. Например, если backtest использует ежедневные данные цен активов, то CashBorrowRate значение должно быть ежедневной процентной ставкой для отрицательных остатков наличных средств.
Типы данных: double
'InitialPortfolioValue' — Начальная стоимость портфеля (значение по умолчанию) | числовойНачальная стоимость портфеля в виде разделенной запятой пары, состоящей из 'InitialPortfolioValue' и числовой скаляр.
Типы данных: double
'RatesConvention' — Задает, как backtest механизм использует RiskFreeRate и CashBorrowRate вычислить интерес"Annualized" (значение по умолчанию) | вектор символов со значением 'Annualized' или 'PerStep' | представьте в виде строки со значением "Annualized" или "PerStep"Задает, как backtest механизм использует RiskFreeRate и CashBorrowRate вычислить интерес в виде разделенной запятой пары, состоящей из 'RatesConvention' и вектор символов или строка.
'Annualized' — Уровни обработаны как годовые показатели, и backtest механизм вычисляет инкрементный интерес на основе базы ежедневного расчета процентов, заданной в Basis свойство. Это значение по умолчанию.
'PerStep' — Уровни обработаны уровни, согласно шагу и backtest механизм вычисляют интерес на предоставленных уровнях на каждом шаге backtest.
Типы данных: char | string
'Basis' — Задает базу ежедневного расчета процентов при вычислении интереса в RiskFreeRate или CashBorrowRate (значение по умолчанию) | числовые значения: 0,1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13Задает базу ежедневного расчета процентов при вычислении интереса в RiskFreeRate или CashBorrowRateВ виде разделенной запятой пары, состоящей из 'Basis' и скалярное целое число с помощью поддерживаемого значения:
0 = фактический/фактический
1 = 30/360 (СИА)
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 = ШИНА/252
Для получения дополнительной информации смотрите Базис.
Примечание
Basis только используется когда RatesConvention свойство установлено в "Annualized". Если RatesConvention "PerStep", и Basis установлен, backtestEngine игнорирует Basis значение.
Типы данных: double
Strategies — Стратегии BacktestbacktestStrategy объектыСтратегии Backtest в виде вектора из backtestStrategy объекты.
Типы данных: object
RiskFreeRate — Безрисковый уровень (значение по умолчанию) | числовойБезрисковый уровень в виде числового скаляра.
Типы данных: double
CashBorrowRate — Наличный ссудный процент (значение по умолчанию) | числовойНаличный ссудный процент в виде числового скаляра.
Типы данных: double
InitialPortfolioValue — Начальная стоимость портфеля (значение по умолчанию) | числовойНачальная стоимость портфеля в виде числового скаляра.
Типы данных: double
AnnualizedRates — Используйте годовые показатели для RiskFreeRate и CashBorrowRatetrue (значение по умолчанию) | логический со значением true или falseИспользуйте годовые показатели для RiskFreeRate и CashBorrowRateВ виде логического скаляра.
Типы данных: логический
Basis — Базис дневного количества годовых показателей для RiskFreeRate и CashBorrowRate (значение по умолчанию) | числовые значения: 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- NumStrategies расписание стратегии возвращается. Возвраты на временной шаг. Например, если вы используете ежедневные цены с runBacktest, затем Returns ежедневная стратегия, возвращается. Returns пусто, пока вы не запускаете backtest использование runBacktest функция.
Типы данных: timetable
Positions — Положения актива для каждой стратегии[ ] (значение по умолчанию) | структураЭто свойство доступно только для чтения.
Положения актива для каждой стратегии, структура, содержащая NumTimeSteps- NumAssets расписание положений актива для каждой стратегии. Например, если вы используете ежедневные цены в runBacktest, затем Positions структура содержит расписания, содержащие ежедневные положения актива. Positions пусто, пока вы не запускаете backtest использование runBacktest функция.
Типы данных: struct
Turnover — Оборот стратегии[ ] (значение по умолчанию) | расписаниеЭто свойство доступно только для чтения.
Оборот стратегии, NumTimeSteps- NumStrategies расписание. Turnover пусто, пока вы не запускаете backtest использование runBacktest функция.
Типы данных: timetable
BuyCost — Операционные издержки для покупок актива каждой стратегии[ ] (значение по умолчанию) | расписаниеЭто свойство доступно только для чтения.
Операционные издержки для покупок актива каждой стратегии, NumTimeSteps- NumStrategies расписание. BuyCost пусто, пока вы не запускаете backtest использование runBacktest функция.
Типы данных: timetable
SellCost — Операционные издержки для продаж актива каждой стратегии[ ] (значение по умолчанию) | расписаниеЭто свойство доступно только для чтения.
Операционные издержки для продаж актива каждой стратегии, NumTimeSteps- NumStrategies расписание. SellCost пусто, пока вы не запускаете backtest использование runBacktest функция.
Типы данных: timetable
runBacktest | Запустите backtest на одной или нескольких стратегиях |
summary | Сгенерируйте сводную таблицу результатов backtest |
equityCurve | Постройте кривые акции стратегий |
backtestEngineИспользуйте 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, остающийся капитал инвестирован в наличные деньги и зарабатывает безрисковый уровень. Безрисковый уровень и наличные деньги - одалживают уровень, может быть задан в пересчитанных на год терминах или как явные процентные ставки "на временной шаг". RatesConvention свойство используется, чтобы задать как backtestEngine интерпретирует эти два уровня (интерпретация по умолчанию "Пересчитана на год"). В данном примере установите безрисковый уровень на пересчитанные на год 2%.
% 2% annualized risk-free rate
riskFreeRate = 0.02;Наличные деньги одалживают уровень
CashBorrowRate наборы свойств уровень накопления процентов применились к отрицательным остаткам наличных средств. Если в любое время сумма весов портфеля к значению, больше, чем 1, то денежная позиция отрицательна суммой сверх 1. Это поведение весов портфеля походит на капитал заимствования на поле, чтобы наделить рычагами. Как RiskFreeRate свойство, CashBorrowRate свойство может или быть пересчитано на год или на временной шаг в зависимости от значения RatesConvention свойство.
% 6% annualized margin interest rate
cashBorrowRate = 0.06;Начальная стоимость портфеля
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: 0.0200
CashBorrowRate: 0.0600
RatesConvention: "Annualized"
Basis: 0
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: 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]
Исследуйте результаты
backtesting механизм заполняет свойства только для чтения 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.