exponenta event banner

Операции с финансовыми временными рядами

Несколько функций MATLAB ® были перегружены для работы с объектами финансовых временных рядов. Перегруженные функции включают в себя основные арифметические функции, такие как сложение, вычитание, умножение и деление, и другие функции, такие как среднее арифметическое, фильтр и разность. Кроме того, были разработаны специальные методы работы с объектом финансовых временных рядов. Для получения списка функций, сгруппированных по типу, введите

help ftseries

в командной строке MATLAB.

Основная арифметика

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

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

Примечание

Совместимые временные ряды не совпадают с равными временными рядами. Два объекта временных рядов равны, если все, кроме полей описания, совпадают.

Ниже приведены некоторые примеры арифметических операций с объектами финансовых временных рядов.

Загрузите MAT-файл, содержащий некоторые примеры объектов финансовых временных рядов:

load dji30short

Один из объектов в dji30short называется myfts1:

myfts1 = 

desc:  DJI30MAR94.dat
freq:  Daily (1)

'dates: (20)'  'Open: (20)' 'High: (20)' 'Low: (20)' 'Close: (20)'
'04-Mar-1994'  [ 3830.90]   [ 3868.04]  [ 3800.50]   [ 3832.30]
'07-Mar-1994'  [ 3851.72]   [ 3882.40]  [ 3824.71]   [ 3856.22]
'08-Mar-1994'  [ 3858.48]   [ 3881.55]  [ 3822.45]   [ 3851.72]
'09-Mar-1994'  [ 3853.97]   [ 3874.52]  [ 3817.95]   [ 3853.41]
'10-Mar-1994'  [ 3852.57]   [ 3865.51]  [ 3801.63]   [ 3830.62]...

Создать другой объект финансового временного ряда, идентичный myfts1:

newfts = fints(myfts1.dates, fts2mat(myfts1)/100,... 
{'Open','High','Low', 'Close'}, 1, 'New FTS')
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/fts2mat (line 29) 
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) 

newfts = 

desc:  New FTS
freq:  Daily (1)

'dates: (20)' 'Open: (20)' 'High: (20)' 'Low: (20)' 'Close:(20)'
'04-Mar-1994'  [ 38.31]     [ 38.68]     [ 38.01]    [ 38.32]
'07-Mar-1994'  [ 38.52]     [ 38.82]     [ 38.25]    [ 38.56]
'08-Mar-1994'  [ 38.58]     [ 38.82]     [ 38.22]    [ 38.52]
'09-Mar-1994'  [ 38.54]     [ 38.75]     [ 38.18]    [ 38.53]
'10-Mar-1994'  [ 38.53]     [ 38.66]     [ 38.02]    [ 38.31]...

Выполните операцию сложения для обоих объектов временных рядов:

addup = myfts1 + newfts
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In  +  (line 22) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/display (line 66) 

addup = 

desc:  DJI30MAR94.dat
freq:  Daily (1)

'dates: (20)'  'Open: (20)' 'High: (20)' 'Low: (20)' 'Close: (20)'
'04-Mar-1994'  [ 3869.21]   [ 3906.72]   [ 3838.51]  [ 3870.62]
'07-Mar-1994'  [ 3890.24]   [ 3921.22]   [ 3862.96]  [ 3894.78]
'08-Mar-1994'  [ 3897.06]   [ 3920.37]   [ 3860.67]  [ 3890.24]
'09-Mar-1994'  [ 3892.51]   [ 3913.27]   [ 3856.13]  [ 3891.94]
'10-Mar-1994'  [ 3891.10]   [ 3904.17]   [ 3839.65]  [ 3868.93]...

Теперь выполните операцию вычитания для обоих объектов временных рядов:

subout = myfts1 - newfts
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In  -  (line 23) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/display (line 66) 

subout = 

desc:  DJI30MAR94.dat
freq:  Daily (1)

'dates: (20)'  'Open: (20)' 'High: (20)' 'Low: (20)' 'Close: (20)'
'04-Mar-1994'  [ 3792.59]   [ 3829.36]   [ 3762.49]  [ 3793.98]
'07-Mar-1994'  [ 3813.20]   [ 3843.58]   [ 3786.46]  [ 3817.66]
'08-Mar-1994'  [ 3819.90]   [ 3842.73]   [ 3784.23]  [ 3813.20]
'09-Mar-1994'  [ 3815.43]   [ 3835.77]   [ 3779.77]  [ 3814.88]
'10-Mar-1994'  [ 3814.04]   [ 3826.85]   [ 3763.61]  [ 3792.31]...

Операции с объектами и матрицами

Можно также выполнять операции, включающие объект финансового временного ряда и матрицу или скаляр:

addscalar = myfts1 + 10000
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In  +  (line 22) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/display (line 66) 

addscalar = 

desc:  DJI30MAR94.dat
freq:  Daily (1)

'dates: (20)'  'Open: (20)' 'High: (20)' 'Low: (20)' 'Close: (20)'
'04-Mar-1994'  [ 13830.90]  [ 13868.04]  [ 13800.50] [ 13832.30]
'07-Mar-1994'  [ 13851.72]  [ 13882.40]  [ 13824.71] [ 13856.22]
'08-Mar-1994'  [ 13858.48]  [ 13881.55]  [ 13822.45] [ 13851.72]
'09-Mar-1994'  [ 13853.97]  [ 13874.52]  [ 13817.95] [ 13853.41]
'10-Mar-1994'  [ 13852.57]  [ 13865.51]  [ 13801.63] [ 13862.70]...

Для операций с объектом и матрицей размер матрицы должен соответствовать размеру объекта. Например, матрица для вычитания myfts1 должно быть 20около-4, так как myfts1 имеет 20 дат и 4 серии данных:

submtx = myfts1 - randn(20, 4)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In  -  (line 23) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/display (line 66) 

submtx = 

desc:  DJI30MAR94.dat
freq:  Daily (1)

'dates: (20)'  'Open: (20)' 'High: (20)' 'Low: (20)' 'Close: (20)'
'04-Mar-1994'  [ 3831.33]   [ 3867.75]   [ 3802.10]  [ 3832.63]
'07-Mar-1994'  [ 3853.39]   [ 3883.74]   [ 3824.45]  [ 3857.06]
'08-Mar-1994'  [ 3858.35]   [ 3880.84]   [ 3823.51]  [ 3851.22]
'09-Mar-1994'  [ 3853.68]   [ 3872.90]   [ 3816.53]  [ 3851.92]
'10-Mar-1994'  [ 3853.72]   [ 3866.20]   [ 3802.44]  [ 3831.17]...

Арифметические операции с различными именами рядов данных

Для арифметических операций с двумя объектами, имеющими одинаковый размер, но содержащими разные имена рядов данных, требуется функция fts2mat. Эта функция извлекает значения в объекте и помещает их в матрицу или вектор в зависимости от того, что является подходящим.

Для просмотра примера создайте другой объект финансового временного ряда того же размера, что и myfts1 но с различными значениями и названиями рядов данных:

newfts2 = fints(myfts1.dates, fts2mat(myfts1/10000),... 
{'Rat1','Rat2', 'Rat3','Rat4'}, 1, 'New FTS')
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  /  (line 25) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/fts2mat (line 29) 
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) 

newfts2 = 
 
    desc:  New FTS
    freq:  Daily (1)

    'dates:  (20)'    'Rat1:  (20)'    'Rat2:  (20)'    'Rat3:  (20)'    'Rat4:  (20)'
    '04-Mar-1994'     [       0.38]    [       0.39]    [       0.38]    [       0.38]
    '07-Mar-1994'     [       0.39]    [       0.39]    [       0.38]    [       0.39]
    '08-Mar-1994'     [       0.39]    [       0.39]    [       0.38]    [       0.39]
    '09-Mar-1994'     [       0.39]    [       0.39]    [       0.38]    [       0.39]
    '10-Mar-1994'     [       0.39]    [       0.39]    [       0.38]    [       0.38]
    '11-Mar-1994'     [       0.38]    [       0.39]    [       0.38]    [       0.39]
    '14-Mar-1994'     [       0.39]    [       0.39]    [       0.38]    [       0.39]
    '15-Mar-1994'     [       0.39]    [       0.39]    [       0.38]    [       0.38]
    '16-Mar-1994'     [       0.39]    [       0.39]    [       0.38]    [       0.38]
    '17-Mar-1994'     [       0.39]    [       0.39]    [       0.38]    [       0.39]
    '18-Mar-1994'     [       0.39]    [       0.39]    [       0.38]    [       0.39]
    '21-Mar-1994'     [       0.39]    [       0.39]    [       0.38]    [       0.39]
    '22-Mar-1994'     [       0.39]    [       0.39]    [       0.38]    [       0.39]
    '23-Mar-1994'     [       0.39]    [       0.39]    [       0.38]    [       0.39]
    '24-Mar-1994'     [       0.38]    [       0.39]    [       0.38]    [       0.38]...

При попытке добавить (или вычесть) этот новый объект в myfts1, ошибка указывает, что объекты не идентичны. Хотя они содержат одни и те же даты, количество дат, количество рядов данных и частоту, два объекта временных рядов не имеют одинаковых имен рядов данных. Использовать fts2mat чтобы обойти эту проблему:

addother = myfts1 + fts2mat(newfts2)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/fts2mat (line 29) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In  +  (line 22) 
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. 
> In fints/display (line 66) 
 
addother = 
 
    desc:  DJI30MAR94.dat
    freq:  Daily (1)

    'dates:  (20)'    'Open:  (20)'    'High:  (20)'    'Low:  (20)'    'Close:  (20)'
    '04-Mar-1994'     [    3831.28]    [    3868.43]    [   3800.88]    [     3832.68]
    '07-Mar-1994'     [    3852.11]    [    3882.79]    [   3825.09]    [     3856.61]
    '08-Mar-1994'     [    3858.87]    [    3881.94]    [   3822.83]    [     3852.11]
    '09-Mar-1994'     [    3854.36]    [    3874.91]    [   3818.33]    [     3853.80]
    '10-Mar-1994'     [    3852.96]    [    3865.90]    [   3802.01]    [     3831.00]
    '11-Mar-1994'     [    3832.96]    [    3873.22]    [   3807.07]    [     3863.09]
    '14-Mar-1994'     [    3870.68]    [    3894.60]    [   3836.34]    [     3863.37]
    '15-Mar-1994'     [    3863.80]    [    3888.85]    [   3827.23]    [     3849.97]
    '16-Mar-1994'     [    3851.42]    [    3879.92]    [   3820.32]    [     3848.53]
    '17-Mar-1994'     [    3854.01]    [    3891.73]    [   3822.04]    [     3865.53]
    '18-Mar-1994'     [    3865.81]    [    3912.17]    [   3839.03]    [     3896.04]
    '21-Mar-1994'     [    3878.77]    [    3898.64]    [   3839.03]    [     3865.24]
    '22-Mar-1994'     [    3866.10]    [    3896.62]    [   3841.04]    [     3862.94]...

Эта операция добавляет матрицу, содержащую содержимое серии данных в объекте. newfts2 кому myfts1. Прежде чем принимать решение об объединении объектов финансовых временных рядов таким образом, необходимо тщательно проанализировать последствия для данных.

Другие арифметические операции

В дополнение к основным арифметическим операциям, несколько других математических функций работают непосредственно с объектами финансовых временных рядов. К этим функциям относятся экспоненциальные (exp), натуральный логарифм (log), общий логарифм (log10) и многие другие.

См. также

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

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