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