Индексация объекта финансовых временных рядов

Вы также можете индексировать в объект, как с любым другим MATLAB® переменная или структура. Объект финансовых временных рядов позволяет использовать вектор символов даты, массив ячеек векторов символов даты, область значений векторов символов даты или нормальную целочисленную индексацию. Однако вы не можете индексировать объект с помощью последовательных дат. Если у вас есть серийные даты, необходимо сначала использовать MATLAB datestr команда для преобразования их в векторы символов даты.

При индексации по векторам символов даты обратите внимание, что

  • Каждый вектор символов даты должен содержать день, месяц и год. Допустимые форматы

    • 'ddmmmyy hh:mm' или 'ddmmmyyyy hh:mm'

    • 'mm/dd/yy hh:mm' или 'mm/dd/yyyy hh:mm'

    • 'dd-mmm-yy hh:mm' или 'dd-mmm-yyyy hh:mm'

    • 'mmm.dd,yy hh:mm' или 'mmm.dd,yyyy hh:mm'

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

Индексация векторами символов даты

С индексацией векторов дат вы получаете значения в объекте финансовых временных рядов для определенной даты, используя вектор символов дат в качестве индекса в объект. Точно так же, если вам нужны значения для нескольких дат в объекте, можно поместить эти векторы символов даты в массив ячеек из символьных векторов и использовать массив ячеек в качестве индекса к объекту. Вот некоторые примеры.

Этот пример извлекает все значения за 11 мая 1999 года из myfts:

format short
myfts1('05/11/99')
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/subsref (line 106) 

ans = 

    desc:  (none)
    freq:  Unknown (0)

    'dates:  (1)'    'series1:  (1)'    'series2:  (1)'
    '11-May-1999'    [       2.8108]    [       0.9323]

Следующий пример извлекает только series2 значения за 11 мая 1999 года из myfts:

myfts1.series2('05/11/99')
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/subsref (line 106) 

ans = 

    desc:  (none)
    freq:  Unknown (0)

    'dates:  (1)'    'series2:  (1)'
    '11-May-1999'    [       0.9323]

В третьем примере извлекаются все значения для трех различных дат:

myfts1({'05/11/99', '05/21/99', '05/31/99'})
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/subsref (line 106) 

ans = 

    desc:  (none)
    freq:  Unknown (0)

    'dates:  (3)'    'series1:  (3)'    'series2:  (3)'
    '11-May-1999'    [       2.8108]    [       0.9323]
    '21-May-1999'    [       0.9050]    [       1.2445]
    '31-May-1999'    [       1.4266]    [       0.6470]

Следующий пример извлекает только series2 значения для тех же трех дат:

myfts1.series2({'05/11/99', '05/21/99', '05/31/99'})
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/subsref (line 106) 

ans = 

    desc:  (none)
    freq:  Unknown (0)

    'dates:  (3)'    'series2:  (3)'
    '11-May-1999'    [       0.9323]
    '21-May-1999'    [       1.2445]
    '31-May-1999'    [       0.6470]

Индексация с вектором символов даты Области значений

Финансовый временной ряд уникален, потому что он позволяет вам индексировать в объект с помощью векторного диапазона символов даты. Дата вектора символов области значений состоит из двух векторов символов даты, разделенных двумя двоеточиями (::). В MATLAB эта диафрагма называется оператором с двумя двоеточиями. Примером даты MATLAB вектора символов области значений является '05/11/99::05/31/99'. Оператор предоставляет вам все точки данных, доступные между этими датами, включая даты начала и конца.

Вот некоторые примеры области значений векторов символов даты:

myfts1 ('05/11/99::05/15/99')
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/subsref (line 106) 

ans = 

    desc:  (none)
    freq:  Unknown (0)

    'dates:  (5)'    'series1:  (5)'    'series2:  (5)'
    '11-May-1999'    [       2.8108]    [       0.9323]
    '12-May-1999'    [       0.2454]    [       0.5608]
    '13-May-1999'    [       0.3568]    [       1.5989]
    '14-May-1999'    [       0.5255]    [       3.6682]
    '15-May-1999'    [       1.1862]    [       5.1284]
myfts1.series2('05/11/99::05/15/99')
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/subsref (line 106) 

ans = 

    desc:  (none)
    freq:  Unknown (0)

    'dates:  (5)'    'series2:  (5)'
    '11-May-1999'    [       0.9323]
    '12-May-1999'    [       0.5608]
    '13-May-1999'    [       1.5989]
    '14-May-1999'    [       3.6682]
    '15-May-1999'    [       5.1284]

Как и в любом другом Переменном MATLAB или структуре, можно назначить выход другой переменной объекта:

nfts = myfts1.series2('05/11/99::05/20/99');
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/subsref (line 106) 

nfts то же, что и ans во втором примере.

Если одна из дат не существует в объекте, сообщение об ошибке указывает, что один или оба индекса дат находятся вне области значений допустимых дат объекта. Можно либо отобразить содержимое объекта, либо использовать команду ftsbound для определения первой и последней дат в объекте.

Индексация с целыми числами

Целочисленная индексация является нормальной формой индексации в MATLAB. Индексация начинается с 1 (не 0); индекс = 1 соответствует первому элементу, индекс = 2 ко второму элементу, индекс = 3 к третьему элементу и так далее. Вот некоторые примеры со ссылкой на ряды данных и без нее.

Получите первый элемент в series2:

myfts1.series2(1)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/subsref (line 106) 

ans = 

    desc:  (none)
    freq:  Unknown (0)

    'dates:  (1)'    'series2:  (1)'
    '11-May-1999'    [       0.9323]

Получите первый, третий и пятый элементы в series2:

myfts1.series2([1, 3, 5])
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/subsref (line 106) 

ans = 

    desc:  (none)
    freq:  Unknown (0)

    'dates:  (3)'    'series2:  (3)'
    '11-May-1999'    [       0.9323]
    '13-May-1999'    [       1.5989]
    '15-May-1999'    [       5.1284]

Получите элементы с 16 по 20 в series2:

myfts1.series2(16:20)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/subsref (line 106) 

ans = 

    desc:  (none)
    freq:  Unknown (0)

    'dates:  (5)'    'series2:  (5)'
    '26-May-1999'    [       0.2105]
    '27-May-1999'    [       1.8916]
    '28-May-1999'    [       0.6673]
    '29-May-1999'    [       0.6681]
    '30-May-1999'    [       1.0877] 

Получите элементы с 16 по 20 в объекте финансовых временных рядов myfts:

myfts1(16:20)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/subsref (line 106) 

ans = 

    desc:  (none)
    freq:  Unknown (0)

    'dates:  (5)'    'series1:  (5)'    'series2:  (5)'
    '26-May-1999'    [       0.7571]    [       0.2105]
    '27-May-1999'    [       1.2425]    [       1.8916]
    '28-May-1999'    [       1.8790]    [       0.6673]
    '29-May-1999'    [       0.5778]    [       0.6681]
    '30-May-1999'    [       1.2581]    [       1.0877] 

Получить последний элемент в myfts1:

myfts1(end)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/end (line 57) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/subsref (line 106) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/display (line 66) 

ans = 

    desc:  (none)
    freq:  Unknown (0)

    'dates:  (1)'    'series1:  (1)'    'series2:  (1)'
    '19-Aug-1999'    [       1.4692]    [       3.4238]

В этом примере используется специальная переменная MATLAB end, который указывает на последний элемент объекта при использовании в качестве индекса. Пример возвращает объект, содержимое которого является значениями в объекте myfts на последней дате ввода.

Индексация при наличии данных времени суток

И целое число, и индексация вектора символов даты разрешены, когда информация о времени суток присутствует в объекте финансовых временных рядов. Вы можете индексировать в объект как дату, так и спецификации времени, но не только со временем дня. Чтобы показать, как индексация работает с существующими данными времени суток, создайте объект финансовых временных рядов с именем timeday содержащее спецификацию времени:

dates = ['01-Jan-2001';'01-Jan-2001'; '02-Jan-2001'; ...
         '02-Jan-2001'; '03-Jan-2001';'03-Jan-2001'];
times = ['11:00';'12:00';'11:00';'12:00';'11:00';'12:00'];
dates_times = cellstr([dates, repmat(' ',size(dates,1),1),... 
                       times]);
timeday = fints(dates_times,(1:6)',{'Data1'},1,'My first FINTS')
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints (line 165) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/display (line 66) 

timeday = 
 
    desc:  My first FINTS
    freq:  Daily (1)

    'dates:  (6)'    'times:  (6)'    'Data1:  (6)'
    '01-Jan-2001'    '11:00'          [          1]
    '     "     '    '12:00'          [          2]
    '02-Jan-2001'    '11:00'          [          3]
    '     "     '    '12:00'          [          4]
    '03-Jan-2001'    '11:00'          [          5]
    '     "     '    '12:00'          [          6]

Используйте целочисленную индексацию, чтобы извлечь второй и третий элементы данных из timeday:

timeday(2:3)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints (line 165) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/display (line 66) 

ans = 
 
    desc:  My first FINTS
    freq:  Daily (1)

    'dates:  (2)'    'times:  (2)'    'Data1:  (2)'
    '01-Jan-2001'    '12:00'          [          2]
    '02-Jan-2001'    '11:00'          [          3]

Для индексации вектора символов даты заключайте дату и время, векторы символов в одну пару кавычек. Если существует одна дата с несколькими временами, индексация только с датой возвращает данные за все время для этой конкретной даты. Для примера, команда timeday('01-Jan-2001') возвращает данные за все время на 1 января 2001 года:

Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints (line 165) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/display (line 66) 

ans = 
 
    desc:  My first FINTS
    freq:  Daily (1)

    'dates:  (2)'    'times:  (2)'    'Data1:  (2)'
    '01-Jan-2001'    '11:00'          [          1]
    '     "     '    '12:00'          [          2]

Можно также указать определенную дату и время:

timeday('01-Jan-2001 12:00')
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints (line 165) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/display (line 66) 

ans = 
 
    desc:  My first FINTS
    freq:  Daily (1)

    'dates:  (1)'    'times:  (1)'    'Data1:  (1)'
    '01-Jan-2001'    '12:00'          [          2]

Используйте оператор с двойным двоеточием :: для определения области значений дат и времени:

timeday('01-Jan-2001 12:00::03-Jan-2001 11:00')
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints (line 165) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/display (line 66) 

ans = 
 
    desc:  My first FINTS
    freq:  Daily (1)

    'dates:  (4)'    'times:  (4)'    'Data1:  (4)'
    '01-Jan-2001'    '12:00'          [          2]
    '02-Jan-2001'    '11:00'          [          3]
    '     "     '    '12:00'          [          4]
    '03-Jan-2001'    '11:00'          [          5]

Лечите timeday как структура MATLAB, если необходимо получить содержимое определенного поля. Для примера, чтобы найти время дня, включенное в этот объект, введите

datestr(timeday.times)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/subsref (line 106) 

ans =

11:00 AM
12:00 PM
11:00 AM
12:00 PM
11:00 AM
12:00 PM

См. также

| | | | | | | | | | | | | | | | | | | | |

Похожие темы