Прокрутка периода за период возвращается или различия от цен
задает опции с помощью одного или нескольких дополнительных аргументов пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе.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 мая 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);
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 — Введите расписание ценВведите расписание цен в виде a 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 isnan, затем Period требуется.
Типы данных: double
'EndOfMonth' — Флаг конца месяца указывает, сравниваются ли цены в текущей дате с последней датой месяца для предыдущего Period
false (значение по умолчанию) | значение true или falseФлаг конца месяца указывает, сравниваются ли цены в текущей дате с последней датой месяца для предыдущего PeriodВ виде разделенной запятой пары, состоящей из 'EndOfMonth' и скалярное логическое значение true или false.
Если вы устанавливаете EndOfMonth к true (логический 1), означая, что текущие цены сравниваются с ценами конца месяца предыдущего Period.
Если вы устанавливаете EndOfMonth к false (логический 0), означая, что текущие цены сравниваются с ценами, зарегистрированными в фактическую дату предыдущего Period.
Примечание
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.
Типы данных: логический
'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 th дата в TT и представляйте возврат или различие t th цена P (t) относительно цены в предыдущий период P (t - период). Если дата в предыдущий период не найдена в TT, затем результатом является NaN указать на отсутствующее значение.
Имена переменных в выходе append _Return или _Difference к именам переменных в TT для возвратов и различий, соответственно, сопровождаемый периодом используется в результатах периода за период. Например, если TT имеет переменную под названием ABC и возвраты недели по неделе вычисляются для Period из calweeks(1), соответствующую выходную переменную называют ABC_Returns_1w.
rollingreturns функция агрегации, в которой частота, в который зарегистрированы цены, должен равняться или превысить в который returns или различия вычисляются. Например, ежедневные цены могут ежедневно использоваться для расчета, еженедельно, или ежемесячный returns, но вычисление ежедневного returns от еженедельных или ежемесячных цен обычно не имеет никакого смысла.
Результаты периода за период вычисляются для каждой даты в TT можно следующим образом:
Для каждой даты t в TT, дата t - период вычисляется.
Если дата t - период является бизнес-датой, то эта дата является датой "один период назад"
Если дата t - период не является бизнес-датой, то каждый календарный день, предшествуя t - период неоднократно исследуется, пока бизнес-дата не найдена, в которой точке эта дата является датой "один период назад", или предыдущая дата происходит до первого свидания в TT, в которой точке никакая предыдущая бизнес-дата не существует в TT.
Если дата "один период назад" найдена в TT, затем соответствующая цена, P (t - период) зарегистрирован и возврат R (t), вычисляется. Однако, если дата "один период назад" не найдена в TT, затем предыдущая цена P (t - период) принята, отсутствуя (то есть, неявный NaN), и возврат R (t) = NaN.
Предыдущие шаги повторяются до даты t - период предшествует первому свиданию, найденному в TT, в которой точке алгоритм останавливается.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.