Финансовые операции временных рядов

Несколько функций 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-by-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)и многое другое.

Смотрите также

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

Похожие темы