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".

Заметьте, что функция агрегации для простых возвратов действует вдоль первой (строки) размерности и опускает отсутствующие данные (NaNс). Для получения дополнительной информации о пользовательских функциях агрегации смотрите 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