exponenta event banner

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

Можно также индексировать объект, как и любую другую переменную или структуру 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); index = 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

См. также

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

Связанные темы