Практически все финансовые данные извлекаются из временных рядов, функции финансового Toolbox™ имеют широкие возможности обработки дат. Функции панели инструментов поддерживают форматы даты или даты и времени как векторы символов, массивы даты и времени или серийные номера дат.
Векторы символов даты представляют собой текст, представляющий дату и время, который можно использовать в нескольких форматах. Например, 'dd-mmm-yyyy HH:MM:SS', 'dd-mmm-yyyy', и 'mm/dd/yyyy' все поддерживаемые форматы текста для вектора символов даты. Чаще всего вы работаете с векторами символов даты (например, 14-Sep-1999) при работе с датами.
Массивы datetime, созданные с помощью datetime, являются лучшим типом данных для представления точек времени. datetime значения имеют гибкие форматы отображения и до наносекундной точности, а также могут учитывать часовые пояса, переход на летнее и високосное время. Когда datetime объекты используются в качестве входных данных для других функций Financial Toolbox, формат входных данных datetime объект сохраняется. Например:
originalDate = datetime('now','Format','yyyy-MM-dd HH:mm:ss');
% Find the next business day
b = busdate(originalDate)
b =
datetime
2017-04-20 14:47:39Номера серийных дат представляют календарную дату как количество дней, прошедших с фиксированной базовой даты. В программном обеспечении MATLAB ® серийный номер1 это январь 1 0000 года н.э. Financial Toolbox работает с серийными номерами (например, 730377). MATLAB также использует серийное время для представления долей дней, начинающихся в полночь. Например, 6 вечера равны 0.75 серийные дни, поэтому 18:00 14-Sep-1999, в MATLAB - серийный номер даты 730377.75
Примечание
При указании двузначного года MATLAB предполагает, что этот год находится в пределах 100-летнего периода, в центре которого находится текущий год. См. функцию datenum для получения конкретной информации. Внутренняя обработка даты MATLAB и вычисления не генерируют неоднозначных значений. Однако по возможности используйте серийные номера дат или векторы символов дат, содержащие четырехзначные годы.
Многие функции Financial Toolbox, для которых в качестве входных аргументов требуются даты, принимают векторы символов даты, массивы даты или серийные номера дат. При работе с несколькими датами на уровне командной строки MATLAB более удобны векторы символов даты. При использовании функций Financial Toolbox на большом количестве дат, как при анализе крупных портфелей или денежных потоков, производительность повышается при использовании массивов datetime или серийных номеров дат. Дополнительные сведения см. в разделе Представление дат и времени в MATLAB.
Financial Toolbox предоставляет функции, которые преобразуют векторы символов даты в серийные номера дат или из них. Кроме того, можно преобразовать векторы символов или серийные номера дат в массивы datetime.
Функции, преобразующие форматы дат:
datedisp | Отображает числовую матрицу с записями даты, отформатированными как векторы символов даты. |
datenum | Преобразует вектор символов даты в порядковый номер даты. |
datestr | Преобразует порядковый номер даты в вектор символов даты. |
datetime | Преобразует векторы символов даты или серийные номера дат для создания массива datetime. |
datevec | Преобразует серийный номер даты или вектор символов даты в вектор даты, элементами которого являются [Year Month Day Hour Minute Second]. |
m2xdate | Преобразует серийный номер MATLAB в серийный номер Excel ®. |
x2mdate | Преобразует серийный номер Microsoft ® Excel в серийный номер MATLAB. |
Дополнительные сведения см. в разделе Преобразование между массивами Datetime, числами и текстом.
Датой может быть символьный вектор, состоящий из полей, связанных с определенной датой и временем. Существует несколько способов представления дат и времени в нескольких текстовых форматах. Например, все следующие векторы символов представляют 23 августа 2010 года в 04:35:42:
'23-Aug-2010 04:35:06 PM' 'Wednesday, August 23' '08/23/10 16:35' 'Aug 23 16:35:42.946'
Вектор символов даты содержит символы, разделяющие поля, такие как дефис, пробел и двоеточие:
d = '23-Aug-2010 16:35:42' Преобразование одного или нескольких векторов символов даты в datetime с использованием массива datetime функция. Для достижения оптимальной производительности укажите формат входных векторов символов в качестве входных данных для datetime.
Примечание
Спецификаторы, которые datetime используется для описания форматов даты и времени, отличающихся от спецификаторов, datestr, datevec, и datenum функции принимают.
t = datetime(d,'InputFormat','dd-MMM-yyyy HH:mm:ss')
t = 23-Aug-2010 16:35:42
Хотя строка даты, d, и datetime скаляр, t, похожи, они не равны. Просмотр размера и типа данных каждой переменной.
whos d t
Name Size Bytes Class Attributes d 1x20 40 char t 1x1 121 datetime
Преобразовать a datetime массив к вектору символов, использующему char или cellstr. Например, преобразуйте текущую дату и время в метку времени для добавления к имени файла.
t = datetime('now','Format','yyyy-MM-dd''T''HHmmss')
t = datetime 2016-12-11T125628
S = char(t);
filename = ['myTest_',S]filename =
'myTest_2016-12-11T125628'Серийное время может представлять собой доли дней, начинающихся в полночь. Например, 6 вечера равны 0.75 серийные дни, поэтому символьный вектор '31-Oct-2003, 6:00 PM' в MATLAB - номер даты 731885.75.
Преобразование одного или нескольких номеров серийных дат в datetime с использованием массива datetime функция. Укажите тип преобразуемого номера даты:
t = datetime(731885.75,'ConvertFrom','datenum')
t = datetime 31-Oct-2003 18:00:00
Некоторые функции MATLAB принимают числовые типы данных, но не значения datetime в качестве входных данных. Чтобы применить эти функции к данным даты и времени, сначала преобразуйте значения datetime в значимые числовые значения, а затем вызовите функцию. Например, log функция принимает double входные данные, но не datetime входные данные. Предположим, что у вас есть datetime массив дат, охватывающих курс исследовательского исследования или эксперимента.
t = datetime(2014,6,18) + calmonths(1:4)
t = 1×4 datetime array 18-Jul-2014 18-Aug-2014 18-Sep-2014 18-Oct-2014
Вычитание исходного значения. Например, исходным значением может быть начальный день эксперимента.
dt = t - datetime(2014,7,1)
dt =
1×4 duration array
408:00:00 1152:00:00 1896:00:00 2616:00:00dt является duration массив. Новообращенный dt в double массив значений в единицах лет, дней, часов, минут или секунд с использованием years, days, hours, minutes, или seconds функция, соответственно.
x = hours(dt)
x =
408 1152 1896 2616Пройти double массив в качестве входных данных для log функция.
y = log(x)
y =
6.0113 7.0493 7.5475 7.8694datenum datenum функция важна для эффективного использования программного обеспечения Financial Toolbox. datenum принимает входной вектор символов даты в любом из нескольких форматов, с 'dd-mmm-yyyy', 'mm/dd/yyyy', или 'dd-mmm-yyyy, hh:mm:ss.ss' форматы являются наиболее распространенными. Входной символьный вектор даты может иметь до шести полей, образованных буквами и цифрами, разделенными любыми другими символами, так что:
Поле дня является целым числом от 1 через 31.
Поле месяца является целым числом от 1 через 12 или алфавитный символьный вектор, содержащий не менее трех символов.
Поле года является неотрицательным целым числом. Если указаны только два числа, то предполагается, что год находится в пределах 100-летнего периода, ориентированного на текущий год. Если год опущен, по умолчанию используется текущий год.
Поля часов, минут и секунд являются необязательными. Они целые числа, разделенные двоеточием или 'am' или 'pm'.
Например, если текущим годом является 1999 год, то все эти даты эквивалентны:
'17-May-1999' '17-May-99' '17-may' 'May 17, 1999' '5/17/99' '5/17'
Кроме того, оба этих формата представляют одно и то же время.
'17-May-1999, 18:30' '5/17/99/6:30 pm'
Формат по умолчанию для ввода только чисел соответствует соглашению США. Поэтому 3/6 - это 6 марта, а не 3 июня.
С datenum, можно преобразовать даты в формат серийных дат, сохранить их в матричной переменной, а затем передать переменную в функцию. Кроме того, можно использовать datenum непосредственно в списке входных аргументов функции.
Например, рассмотрим функцию bndprice которая вычисляет цену облигации с учетом доходности до погашения. Сначала настройте переменные для доходности до срока погашения, ставки купона и необходимых дат.
Yield = 0.07; CouponRate = 0.08; Settle = datenum('17-May-2000'); Maturity = datenum('01-Oct-2000');
Затем вызовите функцию с переменными.
bndprice(Yield,CouponRate,Settle,Maturity)
ans = 100.3503
Также можно преобразовать векторы символов даты в серийные номера дат непосредственно в списке аргументов ввода функции.
bndprice(0.07,0.08,datenum('17-May-2000'),... datenum('01-Oct-2000'))
ans = 100.3503
bndprice является примером функции, предназначенной для обнаружения наличия векторов символов даты и автоматического преобразования. Для таких функций, как bndprice, векторы символов даты могут передаваться непосредственно.
bndprice(0.07,0.08,'17-May-2000','01-Oct-2000')
ans = 100.3503
Решение о представлении дат в виде векторов символов даты или серийных номеров дат часто является удобным. Например, при форматировании данных для визуального отображения или для отладки кода обработки даты можно легче просматривать даты как векторы символов даты, поскольку серийные номера дат трудно интерпретировать. Кроме того, порядковые номера даты - это просто другой тип числовых данных, которые можно поместить в матрицу вместе с любыми другими числовыми данными для удобной манипуляции.
Помните, что при создании вектора входных символьных векторов даты используйте вектор столбца и убедитесь, что все символьные векторы имеют одинаковую длину. Для обеспечения одинаковой длины символьных векторов заполните их пробелами или нулями. Дополнительные сведения см. в разделе Ввод вектора символов.
datestr datestr функция преобразует порядковый номер даты в один из 19 различных форматов вывода вектора символов даты, показывающих дату, время или и то, и другое. Выводом по умолчанию для дат является вектор символов «день-месяц-год», например: 24-Aug-2000. datestr полезна для подготовки выходных отчетов.
| Описание |
|---|---|
| день-месяц-год час: минута: секунда |
| день-месяц-год |
| месяц/день/год |
| месяц, три буквы |
| месяц, одна буква |
| номер месяца |
| месяц/день |
| день месяца |
| день недели, три буквы |
| день недели, одно письмо |
| год, четыре числа |
| год, два числа |
| месяц год |
| час: минута: секунда |
| час: минута: вторая половина дня или вторая половина дня |
| час: минута |
| час: минута утра или PM |
| календарный квартал-год |
| календарный квартал |
today и now функции возвращают последовательные числа даты для текущей даты и текущей даты и время, соответственно.
today
ans =
736675now
ans = 7.3668e+05
Функция MATLAB date возвращает вектор символов для текущей даты.
date
ans =
'11-Dec-2016'Financial Toolbox предоставляет множество функций для определения конкретных дат. Например, предположим, что процедура учета запланирована на последнюю пятницу каждого месяца. Используйте lweekdate функция - вернуть эти даты на 2000 год. Входной аргумент 6 указывает пятницу.
Fridates = lweekdate(6,2000,1:12); Fridays = datestr(Fridates)
Fridays =
12×11 char array
'28-Jan-2000'
'25-Feb-2000'
'31-Mar-2000'
'28-Apr-2000'
'26-May-2000'
'30-Jun-2000'
'28-Jul-2000'
'25-Aug-2000'
'29-Sep-2000'
'27-Oct-2000'
'24-Nov-2000'
'29-Dec-2000'
Другим примером необходимости конкретных дат может быть то, что ваша компания закрывается на Мартина Лютера Кинга-младшего. День, который является третьим понедельником января. Вы можете использоватьnweekdate определение конкретных сроков на 2011 - 2014 годы.
MLKDates = nweekdate(3,2,2011:2014,1); MLKDays = datestr(MLKDates)
MLKDays =
4×11 char array
'17-Jan-2011'
'16-Jan-2012'
'21-Jan-2013'
'20-Jan-2014'
Учет праздников и других неторговых дней важен при анализе финансовых дат. Financial Toolbox предоставляет holidays функция, которая содержит праздники и специальные неторговые дни для Нью-Йоркской фондовой биржи с 1950 по 2030 год включительно. Кроме того, можно использовать nyseclosures для оценки всех известных или ожидаемых закрытий Нью-Йоркской фондовой биржи с 1 января 1885 года по 31 декабря 2050 года. nyseclosures возвращает вектор серийных номеров дат, соответствующих закрытию рынка между датами StartDate и EndDate, включительно.
В этом примере используйте holidays определить стандартные праздники в последней половине 2012 года.
LHHDates = holidays('1-Jul-2012','31-Dec-2012'); LHHDays = datestr(LHHDates)
LHHDays =
6×11 char array
'04-Jul-2012'
'03-Sep-2012'
'29-Oct-2012'
'30-Oct-2012'
'22-Nov-2012'
'25-Dec-2012'Затем можно использовать busdate определение следующего рабочего дня в 2012 году после этих праздников.
LHNextDates = busdate(LHHDates); LHNextDays = datestr(LHNextDates)
LHNextDays =
6×11 char array
'05-Jul-2012'
'04-Sep-2012'
'31-Oct-2012'
'31-Oct-2012'
'23-Nov-2012'
'26-Dec-2012'Для определения сроков движения денежных средств по ценным бумагам с периодическими платежами используйте cfdates. Эта функция учитывает купоны в год, базу подсчета дней и правило конца месяца. Например, можно определить даты денежных потоков для ценной бумаги, выплачивающей четыре купона в год в последний день месяца, используя actual/365 на основе количества дней. Для этого введите дату расчета, дату погашения и параметры для Period, Basis, и EndMonthRule.
PayDates = cfdates('14-Mar-2000','30-Nov-2001',4,3,1); PayDays = datestr(PayDates)
PayDays =
7×11 char array
'31-May-2000'
'31-Aug-2000'
'30-Nov-2000'
'28-Feb-2001'
'31-May-2001'
'31-Aug-2001'
'30-Nov-2001'
addBusinessCalendar | busdate | cfdates | date | datedisp | datenum | datestr | datetime | datevec | format | holidays | lweekdate | m2xdate | nweekdate | nyseclosures | x2mdate