Периодичная скользящие возвраты или различия от цен
задает опции с использованием одного или нескольких необязательных аргументов пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе.returns = rollingreturns(___,Name,Value)
Этот пример показывает, как вычислить скользящие возвраты за год для пяти лет моделируемых ежедневных цен, а также включает осведомленность о бизнес-календаре.
Моделируйте пять лет ежедневных цен и храните результат в расписании TT. Затем используйте isbusday сохранение только данных для бизнес-дат Нью-Йоркской фондовой биржи (NYSE).
rng(200,'twister') time = (datetime(2014,1,1):caldays:datetime(2018,12,31))'; price = 100 + 0.1*(0:numel(time) - 1)'.*cumsum(randn(numel(time),1)/100); price = round(price*100)/100; % Round prices to the nearest penny TT = timetable(price,'RowTimes',time,'VariableNames',{'Prices'}); TT = TT(isbusday(TT.Properties.RowTimes),:); % Retain only NYSE business days head(TT,10)
ans=10×1 timetable
Time Prices
___________ ______
02-Jan-2014 100
03-Jan-2014 100
06-Jan-2014 100.01
07-Jan-2014 100.02
08-Jan-2014 100.02
09-Jan-2014 100.04
10-Jan-2014 100.06
13-Jan-2014 100.11
14-Jan-2014 100.12
15-Jan-2014 100.12
Использование addBusinessCalendar чтобы добавить осведомленность о бизнес-календаре NYSE. Логика бизнес-календаря определяет, является ли дата предыдущего периода бизнес-датой, а если нет, то обнаруживается самый последний рабочий день, предшествующий этой дате. Для примера, с 21-May-2016 суббота и 22-May-2016 - воскресные, годовые цены на понедельник 22-May-2017 сравниваются с пятничными 20-May-2016.
TT = addBusinessCalendar(TT); % Add NYSE business calendarРассчитать возвраты и отобразить последние несколько цен и соответствующих возвратов.
returns = rollingreturns(TT, 'Period', calyears);
tail([TT returns])ans=8×2 timetable
Time Prices Prices_Return_1y
___________ ______ ________________
19-Dec-2018 212.68 0.16941
20-Dec-2018 215.54 0.19024
21-Dec-2018 217.66 0.18648
24-Dec-2018 221.42 0.20882
26-Dec-2018 224.81 0.21473
27-Dec-2018 222.17 0.19897
28-Dec-2018 224.63 0.19142
31-Dec-2018 224.37 0.19206
Экономические данные часто сообщаются в последний день каждого месяца или квартала. Таким образом, неоднозначности в конце месяца могут возникнуть при вычислении возвратов за период для периодов, которые превышают периодичность, в которой данные сообщаются.
Моделируйте пять лет ежедневных цен и храните результат в расписании TT.
rng(200,'twister') time = (datetime(2014,1,1):caldays:datetime(2018,12,31))'; price = 100 + 0.1*(0:numel(time) - 1)'.*cumsum(randn(numel(time),1)/100); price = round(price*100)/100; % Round prices to the nearest penny TT = timetable(price,'RowTimes',time,'VariableNames',{'Prices'}); head(TT,10)
ans=10×1 timetable
Time Prices
___________ ______
01-Jan-2014 100
02-Jan-2014 100
03-Jan-2014 100
04-Jan-2014 100
05-Jan-2014 100.01
06-Jan-2014 100.01
07-Jan-2014 100.02
08-Jan-2014 100.02
09-Jan-2014 100.04
10-Jan-2014 100.06
Создайте новое расписание путем дискретизации TT в последний день каждого месяца для имитации ежемесячной отчетности.
monthEndDates = dateshift(TT.Time(1):calmonths:TT.Time(end),'end','month'); TT = TT(monthEndDates,:); % Sample TT at end-of-month dates head(TT,10)
ans=10×1 timetable
Time Prices
___________ ______
31-Jan-2014 100.47
28-Feb-2014 100.93
31-Mar-2014 102
30-Apr-2014 102.28
31-May-2014 103.22
30-Jun-2014 103.92
31-Jul-2014 102.2
31-Aug-2014 104.79
30-Sep-2014 103.11
31-Oct-2014 105.29
Отобразите подмножество дат и сравните прямое вычисление дат в предыдущих месяцах со сдвинутыми на конец месяца, в котором происходит предыдущий период.
dates = timerange(datetime(2016,2,29),datetime(2017,2,28),'month'); [TT.Time(dates) (TT.Time(dates) - calyears) dateshift(TT.Time(dates) - calyears,'end','month')]
ans = 13x3 datetime
29-Feb-2016 28-Feb-2015 28-Feb-2015
31-Mar-2016 31-Mar-2015 31-Mar-2015
30-Apr-2016 30-Apr-2015 30-Apr-2015
31-May-2016 31-May-2015 31-May-2015
30-Jun-2016 30-Jun-2015 30-Jun-2015
31-Jul-2016 31-Jul-2015 31-Jul-2015
31-Aug-2016 31-Aug-2015 31-Aug-2015
30-Sep-2016 30-Sep-2015 30-Sep-2015
31-Oct-2016 31-Oct-2015 31-Oct-2015
30-Nov-2016 30-Nov-2015 30-Nov-2015
31-Dec-2016 31-Dec-2015 31-Dec-2015
31-Jan-2017 31-Jan-2016 31-Jan-2016
28-Feb-2017 28-Feb-2016 29-Feb-2016
Исследуйте эти результаты и заметьте, что даты во втором и третьем столбцах последней строки различаются. В частности, когда текущая дата в первом столбце 28-Feb-2017 даты во втором и третьем столбцах различаются, потому что 2016 год является високосным. В более общем случае даты отличаются каждый раз, когда месяц предыдущего периода имеет больше дней, чем текущий месяц, для которого вычисляются возвраты. В этом примере даты окончания месяцев представляют следующую неоднозначность. Когда текущая дата интереса 28-Feb-2017, должен вычитать один календарный год производить 28-Feb-2016 или 29-Feb-2016?
Правильный ответ зависит от приложения, и оба подхода являются допустимыми сценариями использования. Эта проблема усугубляется, например, при работе с ценовыми данными в конце месяца и при расчете возвратов за месяц. Чтобы устранить неоднозначность в конце месяца, rollingreturns функция поддерживает EndOfMonth флаг.
returns = rollingreturns(TT, 'Period', calyears, 'EndOfMonth', true);
The EndOfMonth флаг гарантирует, что rollingreturns функция использует правильную дату конца месяца для каждого календарного месяца. В этом примере возврат 28-Feb-2017 правильно вычисляется из сообщенной цены 29-Feb-2016 а не 28-Feb-2016.
[TT(dates,:) returns(dates,:)]
ans=13×2 timetable
Time Prices Prices_Return_1y
___________ ______ ________________
29-Feb-2016 135.59 0.21671
31-Mar-2016 138.47 0.25052
30-Apr-2016 131.44 0.11598
31-May-2016 129.34 0.083068
30-Jun-2016 133.86 0.077865
31-Jul-2016 132.78 0.046253
31-Aug-2016 140.32 0.11871
30-Sep-2016 136.52 0.087549
31-Oct-2016 141.27 0.10652
30-Nov-2016 140.76 0.1053
31-Dec-2016 135.96 0.057643
31-Jan-2017 129.52 0.0099025
28-Feb-2017 136.36 0.0056789
TT - График входа ценВходное расписание цен, заданное как timetable. Расписание TT должны удовлетворять следующим условиям:
Все наблюдения в TT должен быть связан с целыми датами, заданными как datetimes без HH:MM:SS компонент времени (без компонента времени суток).
TT даты должны сортироваться в порядке возрастания.
TT не должно иметь повторяющихся дат.
Каждая переменная в TT должен содержать либо один числовой вектор, либо числовую матрицу цен. Например, предположим TT содержит три переменные дневных цен.
Time Price1 Price2 Prices
___________ ______ ______ ________________
24-Dec-2018 221.42 442.84 221.42 442.84
25-Dec-2018 220.62 441.24 220.62 441.24
26-Dec-2018 224.81 449.62 224.81 449.62
27-Dec-2018 222.17 444.34 222.17 444.34
28-Dec-2018 224.63 449.26 224.63 449.26
29-Dec-2018 225.36 450.72 225.36 450.72
30-Dec-2018 226.73 453.46 226.73 453.46
31-Dec-2018 224.37 448.74 224.37 448.74returns форматированы как три возврата для трех ценовых переменных. Time Price1_Return Price2_Return Prices_Return
___________ _____________ _____________ _____________________
24-Dec-2018 NaN NaN NaN NaN
25-Dec-2018 -0.003613 -0.003613 -0.003613 -0.003613
26-Dec-2018 0.018992 0.018992 0.018992 0.018992
27-Dec-2018 -0.011743 -0.011743 -0.011743 -0.011743
28-Dec-2018 0.011073 0.011073 0.011073 0.011073
29-Dec-2018 0.003249 0.003249 0.003249 0.003249
30-Dec-2018 0.006079 0.006079 0.006079 0.006079
31-Dec-2018 -0.010409 -0.010409 -0.010409 -0.010409
Примечание
Для включения информации о бизнес-календаре и учета дней небизнеса (для примера, выходных, праздничных дней, закрытий рынка) необходимо сначала использовать addBusinessCalendar функция для заполнения пользовательского свойства для входа TT. Например, чтобы добавить логику бизнес-календаря для включения только рабочих дней NYSE, можно использовать TT = addBusinessCalendar(TT).
Типы данных: timetable
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.
returns = rollingreturns(TT,'Period',calweeks(1),'EndOfMonth',true,'Method','continuous')'Period' - Период для расчета возвратов за периодTT.Properties.TimeStep
(по умолчанию) | скалярную календарную длительностьПериод для вычисления возвратов за периодом, заданный как разделенная разделенными запятой парами, состоящая из 'EndMonthRule' и скалярную календарную длительность (для примера, caldays, calweeks, или calmonths).
По умолчанию это временной шаг, заданный в TT (TT.Properties.TimeStep), но только когда TT.Properties.TimeStep не NaN. Если TT.Properties.TimeStep является NaN, затем Period обязательно.
Типы данных: double
'EndOfMonth' - Флаг конца месяца указывает, сравниваются ли цены на текущую дату с последней датой месяца для предыдущих Period
false (по умолчанию) | значение true или falseФлаг конца месяца указывает, сравниваются ли цены на текущую дату с последней датой месяца для предыдущего Period, заданная как разделенная разделенными запятой парами, состоящая из 'EndOfMonth' и скаляр логическое значение true или false.
Если вы задаете EndOfMonth на true (логический 1), что означает, что текущие цены сравниваются с ценами на конец месяца предыдущего Period.
Если вы задаете EndOfMonth на false (логический 0), что означает, что текущие цены сравниваются с ценами, зарегистрированными на фактическую дату предыдущего Period.
Примечание
The EndOfMonth флаг предназначен для обработки вычислений дат в конце месяца при вычислении дат предыдущего Period один или несколько месяцев в прошлом.
Например, предположим, что у вас есть ежемесячные цены, сообщаемые в конце каждого месяца, и вы хотите вычислить возвраты за год (то есть Period = calyears(1)). Когда текущая дата интереса 28-Feb-2017, установка EndOfMonth = true (логический 1) обеспечивает, чтобы возвраты был рассчитываемы для 28-Feb-2017 сравнить цены на 28-Feb-2017 тем, кто работает с 29-Feb-2016 а не 28-Feb-2016.
Аналогичным образом предположим, что у вас есть ежемесячные цены, сообщаемые в конце каждого месяца, и вы хотите вычислить возвраты за месяц (то есть Period = calmonths(1)). Когда текущая дата интереса 30-Apr-2020, установка EndOfMonth = true (логический 1) обеспечивает, чтобы возвраты был рассчитываемы для 30-Apr-2020 сравнить цены на 30-Apr-2020 тем, кто работает с 31-Mar-2020 а не 30-Mar-2020.
Типы данных: logical
'Method' - Метод вычисления returns от цен'simple' (по умолчанию) | вектор символов со значением 'simple', 'continuous', или 'difference'Метод вычисления returns из цен, заданных как разделенная разделенными запятой парами, состоящая из 'Method' и скалярный вектор символов.
'simple' - Вычисление простых (пропорциональных) возвратов: R(t) = P(t)/P(t-period) - 1.
'continuous' - Вычисление непрерывных (логарифмических) возвратов: R(t) = log(P(t)/P(t-period)).
'difference' - Вычисление различий (изменения за периоды): R(t) = P(t) - P(t-period)
Типы данных: char
returns - Десятичные возвраты или различия за периодомДесятичные возвраты или различия за периодом, возвращенные как расписание того же размера и формата, что и входной параметр TT. Возвраты или различия в t строк связаны с t датой в TT и представлять возврат или различие t-й ценовой P (t) относительно цены в предыдущем периоде P (t -period). Если дата в предыдущем периоде не найдена в TT, тогда результат будет NaN для указания отсутствующего значения.
Имена переменных в выходе добавляются _Return или _Difference к именам переменных в TT для возвратов и различий, соответственно, за которым следует период, используемый в результатах периода за периодом. Для примера, если TT имеет переменную с именем ABC а возвраты за неделю вычисляются для Period от calweeks(1), соответствующая выходная переменная имеет имя ABC_Returns_1w.
rollingreturns - функция агрегации, в которой частота, с которой регистрируются цены, должна равняться или превышать ту, с которой returns или вычисляются различия. Например, ежедневные цены могут использоваться для расчета ежедневных, еженедельных или ежемесячных returns, но вычисления ежедневно returns от еженедельных или ежемесячных цен, как правило, нет смысла.
Результаты периодов вычисляются для каждой даты в TT следующим образом:
Для каждой даты, t в TT, дата t -period вычисляется .
Если дата t -period является рабочей датой, то эта дата является датой «один период назад»
Если дата t -period не является рабочей датой, то каждый календарный день, предшествующий t -period, исследуется неоднократно до тех пор, пока не будет найдена бизнес-дата, в которую эта дата является датой «один период назад», или предыдущая дата происходит до первой даты в TT, на какую точку предыдущая бизнес-дата не существует в TT.
Если дата «один период назад» найдена в TT, затем регистрируется соответствующий P цены (t -period) и вычисляется обратный R (t). Однако, если дата «один период назад» не найдена в TT, тогда предыдущий ценовой P (t -period) принимается отсутствующим (то есть неявным NaN), и возврат R (t) = NaN.
Предыдущие шаги повторяются до тех пор, пока дата t -period не будет предшествовать первой дате, найденной в TT, в эту точку алгоритм прекращает работу.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.