exponenta event banner

convert2monthly

Сводные данные о графике на ежемесячную периодичность

Описание

пример

TT2 = convert2monthly(TT1) агрегирует данные (например, данные, записанные ежедневно или еженедельно) до ежемесячной периодичности.

пример

TT2 = convert2monthly(___,Name,Value) указывает параметры, использующие один или несколько необязательных аргументов пары имя-значение в дополнение к входному аргументу в предыдущем синтаксисе.

Примеры

свернуть все

Применение отдельных методов агрегации к связанным переменным в timetable при сохранении согласованности между агрегированными результатами при преобразовании в ежемесячную периодичность. Вы можете использовать convert2monthly для агрегирования как внутрисуточных, так и агрегированных ежедневных данных. Эти методы приводят к эквивалентным ежемесячным агрегатам. Наконец, можно агрегировать результаты в определенный день каждого месяца (например, 15-й), а не в конец месяца по умолчанию.

Загрузить расписание (TT) смоделированных данных цены акций и соответствующих логарифмических доходностей. Данные, хранящиеся в TT фиксируется в разное время в течение всего дня на Нью-Йоркской фондовой бирже (NYSE) рабочих дней с 1 января 2018 года по 31 декабря 2020 года. Расписание TT также включает осведомленность о бизнес-календаре NYSE. Если ваше расписание не учитывает нерабочие дни (выходные, праздничные дни и закрытие рынка), добавьте информацию о бизнес-календаре с помощью addBusinessCalendar во-первых.

load('SimulatedStock.mat','TT');
head(TT)
ans=8×2 timetable
            Time            Price     Log_Return
    ____________________    ______    __________

    02-Jan-2018 11:52:11    100.71     0.0070749
    02-Jan-2018 13:23:09    103.11      0.023551
    02-Jan-2018 14:45:30    100.24     -0.028229
    02-Jan-2018 15:30:48    101.37       0.01121
    03-Jan-2018 10:02:21    101.81     0.0043311
    03-Jan-2018 11:22:37    100.17      -0.01624
    03-Jan-2018 14:45:20     99.66    -0.0051043
    03-Jan-2018 14:55:39    100.12     0.0046051

Сначала агрегируются внутрисуточные цены и возвращается к суточной периодичности. Для поддержания согласованности между ценами и доходностью, для любого данного торгового дня совокупные цены, сообщая последнюю зарегистрированную цену с помощью "lastvalue" и суммировать результаты суммированием всех логарифмических результатов с использованием "sum".

TT1 = convert2daily(TT,'Aggregation',["lastvalue" "sum"]);
head(TT1)
ans=8×2 timetable
       Time        Price     Log_Return
    ___________    ______    __________

    02-Jan-2018    101.37     0.013607 
    03-Jan-2018    100.12    -0.012408 
    04-Jan-2018    106.76     0.064214 
    05-Jan-2018    112.78     0.054856 
    08-Jan-2018    119.07     0.054273 
    09-Jan-2018    119.46      0.00327 
    10-Jan-2018    124.44     0.040842 
    11-Jan-2018    125.63    0.0095174 

Использовать convert2monthly агрегировать данные до ежемесячной периодичности и сравнивать результаты двух различных подходов. Первый подход вычисляет ежемесячные результаты путем агрегирования ежедневных агрегатов, а второй подход вычисляет ежемесячные результаты путем прямого агрегирования исходных данных внутри дня. Обратите внимание, что, хотя convert2monthly сообщает о результатах в последний рабочий день каждого месяца по умолчанию, вы можете сообщать о ежемесячных результатах 15 числа каждого месяца с помощью необязательного аргумента пара имя-значение 'EndOfMonthDay'.

tt1 = convert2monthly(TT1,'Aggregation',["lastvalue" "sum"],'EndOfMonthDay',15); % Daily to monthly
tt2 = convert2monthly(TT ,'Aggregation',["lastvalue" "sum"],'EndOfMonthDay',15); % Intra-daily to monthly

head(tt1)
ans=8×2 timetable
       Time        Price     Log_Return
    ___________    ______    __________

    12-Jan-2018    125.93      0.23056 
    15-Feb-2018    120.55    -0.043662 
    15-Mar-2018    113.49     -0.06035 
    13-Apr-2018    112.07    -0.012591 
    15-May-2018    110.47     -0.01438 
    15-Jun-2018     99.06     -0.10902 
    13-Jul-2018     95.74     -0.03409 
    15-Aug-2018     99.94     0.042934 

head(tt2)
ans=8×2 timetable
       Time        Price     Log_Return
    ___________    ______    __________

    12-Jan-2018    125.93      0.23056 
    15-Feb-2018    120.55    -0.043662 
    15-Mar-2018    113.49     -0.06035 
    13-Apr-2018    112.07    -0.012591 
    15-May-2018    110.47     -0.01438 
    15-Jun-2018     99.06     -0.10902 
    13-Jul-2018     95.74     -0.03409 
    15-Aug-2018     99.94     0.042934 

Обратите внимание, что результаты двух подходов одинаковы. Для месяцев, в которых 15-й день не является торговым днем NYSE, функция сообщает результаты за предыдущий рабочий день.

Можно применить пользовательские методы агрегации с помощью дескрипторов функций. Укажите дескриптор функции для агрегирования связанных переменных в timetable при сохранении согласованности между агрегированными результатами при преобразовании из ежедневной в ежемесячную периодичность.

Загрузить расписание (TT) смоделированных данных цены акций и соответствующих логарифмических доходностей. Данные, хранящиеся в TT фиксируется в разное время в течение всего дня на Нью-Йоркской фондовой бирже (NYSE) в рабочие дни с 1 января 2018 года по 31 2020 декабря. Расписание TT также включает осведомленность о бизнес-календаре NYSE. Если ваше расписание не учитывает нерабочие дни (выходные, праздничные дни и закрытие рынка), добавьте информацию о бизнес-календаре с помощью addBusinessCalendar во-первых.

load('SimulatedStock.mat','TT')
head(TT)
ans=8×2 timetable
            Time            Price     Log_Return
    ____________________    ______    __________

    02-Jan-2018 11:52:11    100.71     0.0070749
    02-Jan-2018 13:23:09    103.11      0.023551
    02-Jan-2018 14:45:30    100.24     -0.028229
    02-Jan-2018 15:30:48    101.37       0.01121
    03-Jan-2018 10:02:21    101.81     0.0043311
    03-Jan-2018 11:22:37    100.17      -0.01624
    03-Jan-2018 14:45:20     99.66    -0.0051043
    03-Jan-2018 14:55:39    100.12     0.0046051

Сначала добавьте другую переменную в TT который содержит простые (пропорциональные) возвраты, связанные с ценами в TT и изучите первые несколько строк.

TT.Simple_Return = exp(TT.Log_Return) - 1;  % Log returns to simple returns
head(TT)
ans=8×3 timetable
            Time            Price     Log_Return    Simple_Return
    ____________________    ______    __________    _____________

    02-Jan-2018 11:52:11    100.71     0.0070749         0.0071  
    02-Jan-2018 13:23:09    103.11      0.023551       0.023831  
    02-Jan-2018 14:45:30    100.24     -0.028229      -0.027834  
    02-Jan-2018 15:30:48    101.37       0.01121       0.011273  
    03-Jan-2018 10:02:21    101.81     0.0043311      0.0043405  
    03-Jan-2018 11:22:37    100.17      -0.01624      -0.016108  
    03-Jan-2018 14:45:20     99.66    -0.0051043     -0.0050913  
    03-Jan-2018 14:55:39    100.12     0.0046051      0.0046157  

Создайте функцию для агрегирования простых возвратов и вычисления ежемесячных агрегатов. Для поддержания непротиворечивости между ценами и доходностью, для любого месяца, агрегированные цены, сообщая последнюю зарегистрированную цену с помощью "lastvalue" и сообщить логарифмические результаты путем суммирования всех промежуточных логарифмических результатов с помощью "sum".

Обратите внимание, что функция агрегации для простых возвратов работает вдоль первой (строки) размерности и пропускает отсутствующие данные (NaNs). Дополнительные сведения о пользовательских функциях агрегирования см. в разделе timetable и retime. Когда методы агрегирования представляют собой сочетание поддерживаемых методов и пользовательских функций, 'Aggregation' аргумент пары имя-значение должен быть указан как вектор ячейки методов, заключённых в фигурные скобки.

f = @(x)(prod(1 + x,1,'omitnan') - 1);      % Aggregate simple returns
tt = convert2monthly(TT,'Aggregation',{'lastvalue' 'sum' f});
head(tt)
ans=8×3 timetable
       Time        Price     Log_Return    Simple_Return
    ___________    ______    __________    _____________

    31-Jan-2018    122.96      0.20669          0.2296  
    28-Feb-2018    121.92    -0.008494       -0.008458  
    29-Mar-2018     108.9     -0.11294        -0.10679  
    30-Apr-2018    110.38     0.013499         0.01359  
    31-May-2018     99.02     -0.10861        -0.10292  
    29-Jun-2018     96.24    -0.028477       -0.028075  
    31-Jul-2018     97.15    0.0094111       0.0094555  
    31-Aug-2018    101.51     0.043901        0.044879  

Входные аргументы

свернуть все

Данные агрегируются до ежемесячной периодичности, указанной в расписании.

Примечание

NaNs указывает на отсутствие значений. Метки времени должны быть в порядке возрастания или убывания.

По умолчанию все дни являются рабочими днями. Если ваше расписание не учитывает нерабочие дни (выходные, праздничные дни и закрытие рынка), добавьте информацию о бизнес-календаре с помощью addBusinessCalendar во-первых. Например, следующая команда добавляет логику бизнес-календаря для включения только рабочих дней NYSE.

TT = addBusinessCalendar(TT);

Типы данных: timetable

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: TT2 = convert2monthly(TT1,'Aggregation',["lastvalue" "sum"])

Метод агрегирования для TT1 данные для внутримесячной или междневной агрегации, указанные как пара, разделенная запятыми, состоящая из 'Aggregation' и символьный вектор, строка или дескриптор функции, примененный ко всем временным рядам в TT1, или вектор ячейки символьных векторов, строковый вектор или вектор ячейки функции обрабатывает ту же длину, что и число переменных в TT1.

Методы агрегирования определяют способ агрегирования данных в течение рабочих дней с периодичностью внутри месяца или между днями. Доступные методы агрегирования:

  • 'sum' - суммировать значения в каждом месяце или дне.

  • 'mean' - Вычислить среднее значение значений в каждом месяце или дне.

  • 'prod' - вычислять произведение значений в каждом месяце или дне.

  • 'min' - Вычислите минимум значений в каждом месяце или дне.

  • 'max' - рассчитать максимум значений в каждом месяце или дне.

  • 'firstvalue' - использовать первое значение в каждом месяце или дне.

  • 'lastvalue' - использовать последнее значение в каждом месяце или дне.

Все перечисленные выше методы пропускают отсутствующие данные (NaNs) в расчетах прямой агрегации. Однако в ситуациях, когда отсутствующие значения появляются в первой строке TT1, отсутствующие значения также могут отображаться в агрегированных результатах TT2.

Кроме того, в качестве дескрипторов функций можно указать методы агрегации. Чтобы включить отсутствующие данные, укажите функции в качестве дескрипторов функций, которые включают отсутствующие данные при агрегировании данных. Функции агрегации должны принимать базовые данные, сохраненные в TT1 и возвращает выходной сигнал, который является скалярным вектором или вектором строки и должен принимать пустые входные данные. Каждая функция агрегации применяется к соответствующей переменной и вызывается по одной. Каждая переменная должна содержать либо один числовой вектор, либо числовую матрицу. Например, рассмотрим ежедневное расписание, представляющее TT1 с тремя переменными.

         Time         AAA       BBB            CCC       
      ___________    ______    ______    ________________
      01-Jan-2018    100.00    200.00    300.00    400.00
      02-Jan-2018    100.03    200.06    300.09    400.12
      03-Jan-2018    100.07    200.14    300.21    400.28
          .             .         .         .         .
          .             .         .         .         .
          .             .         .         .         .
      31-Jan-2018    114.65     229.3    343.95    458.60
          .             .         .         .         .
          .             .         .         .         .
          .             .         .         .         .
      28-Feb-2018    129.19    258.38    387.57    516.76
          .             .         .         .         .
          .             .         .         .         .
          .             .         .         .         .
      31-Mar-2018    162.93    325.86    488.79    651.72
          .             .         .         .         .
          .             .         .         .         .
          .             .         .         .         .
      30-Apr-2018    171.72    343.44    515.16    686.88
          .             .         .         .         .
          .             .         .         .         .
          .             .         .         .         .
      31-May-2018    201.24    402.48    603.72    804.96
          .             .         .         .         .
          .             .         .         .         .
          .             .         .         .         .
      30-Jun-2018    223.22    446.44    669.66    892.88

Соответствующие ежемесячные результаты по умолчанию, представляющие TT2 (в котором все дни являются рабочими днями и 'lastvalue' сообщается в последний рабочий день каждого месяца) являются следующими.

         Time         AAA       BBB            CCC       
      ___________    ______    ______    ________________
      31-Jan-2018    114.65    229.30    343.95    458.60
      28-Feb-2018    129.19    258.38    387.57    516.76
      31-Mar-2018    162.93    325.86    488.79    651.72
      30-Apr-2018    171.72    343.44    515.16    686.88
      31-May-2018    201.24    402.48    603.72    804.96
      30-Jun-2018    223.22    446.44    669.66    892.88

Типы данных: char | string | cell | function_handle

Метод внутрисуточной агрегации данных в TT1, указанная как пара, разделенная запятыми, состоящая из 'Daily' и вектор скалярных символов, строка или дескриптор функции, применяемые ко всем временным рядам в TT1, или вектор ячейки символьных векторов, строковый массив или вектор ячейки функции, обрабатывающий то же самое число переменных в TT1.

Типы данных: char | string | cell | function_handle

День месяца, который заканчивается месяцами, указанный как пара, разделенная запятыми, состоящая из 'EndOfMonthDay' и скалярное целое число. Для месяцев с меньшим количеством дней, чем EndOfMonthDayрезультаты агрегирования отображаются в последний рабочий день месяца.

Типы данных: double

Выходные аргументы

свернуть все

Ежемесячные данные, возвращаемые в виде расписания. Функция возвращает NaNs для переменных в TT2 для месяцев, когда данные не записываются ни в какие рабочие дни для этих переменных в TT1. Если TT1 находится в порядке возрастания, так же TT2, и если TT1 находится в порядке убывания, так же TT2.

Первая дата в TT2 - последняя рабочая дата месяца, в котором первая дата в TT1 происходит, при условии TT1 имеет рабочие даты в этом месяце, в противном случае первая дата в TT2 является следующей рабочей датой на конец месяца.

Последняя дата в TT2 - последняя рабочая дата месяца, в котором последняя дата в TT1 происходит, при условии TT1 имеет рабочие даты в этом месяце, в противном случае последняя дата в TT2 - это предыдущая дата окончания месяца.

Представлен в R2021a