Несколько функций 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
)и многое другое.
ascii2fts
| boxcox
| convertto
| datestr
| diff
| fillts
| filter
| fints
| fts2mat
| ftsbound
| lagts
| leadts
| peravg
| resamplets
| smoothts
| toannual
| todaily
| tomonthly
| toquarterly
| tosemi
| toweekly
| tsmovavg