Практически все финансовые данные получают из временных рядов, функции в Financial Toolbox™ имеют обширные возможности обработки дат. Функции тулбокса поддерживают форматы даты или даты и времени как векторы символов, массивы datetime или серийные номера дат.
character vectors дат являются текстом, который представляет дату и время, которые можно использовать в нескольких форматах. Для примера, 'dd-mmm-yyyy HH:MM:SS'
, 'dd-mmm-yyyy'
, и 'mm/dd/yyyy'
все являются поддерживаемыми форматами текста для вектора символов даты. Чаще всего вы работаете с векторами символов даты (такими как 14-Sep-1999
) при работе с датами.
Datetime arrays, созданный с использованием 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
Serial date numbers представляют календарную дату как количество дней, прошедших с фиксированной базовой даты. В MATLAB® программное обеспечение, серийный номер даты 1
- январь 10000 года н.э. Financial Toolbox работает внутренне с серийными номерами дат (такими как, 730377
). MATLAB также использует последовательное время, чтобы представлять доли дней, начинающихся в полночь. Для примера 18:00 равен 0.75
последовательные дни, так что 18:00 на 14-Sep-1999
, в MATLAB - серийный номер даты 730377.75
Примечание
Если вы задаете двухзначный год, MATLAB принимает, что год находится в пределах 100-летнего периода, центрированного на текущем году. Смотрите функцию datenum
для получения конкретной информации. Внутренняя обработка дат и вычисления MATLAB не генерируют неоднозначных значений. Однако по возможности используйте серийные номера дат или векторы символов дат, содержащие четырехзначные годы.
Многие функции Financial Toolbox, которые требуют дат в качестве входных параметров, принимают векторы символов даты, массивы datetime или серийные номера дат. Если вы имеете дело с несколькими датами на уровне командной строки MATLAB, векторы символов даты более удобны. Если вы используете функции Financial Toolbox на большом количестве дат, как при анализе больших портфелей или денежных потоков, эффективность улучшается, если вы используете массивы данных или серийные номера дат. Для получения дополнительной информации смотрите Представление дат и времени в 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
Преобразуйте 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'
Последовательное время может представлять доли дней, начинающихся в полночь. Для примера 18:00 равен 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:00
dt
является 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.8694
datenum
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
функция используется для подготовки выходных отчетов.
| Описание |
---|---|
| дневной-месячный час: минута: секунда |
| день-месяц-год |
| месяц/день/год |
| месяц, три буквы |
| месяц, одна буква |
| номер месяца |
| месяц/день |
| день месяца |
| день недели, три буквы |
| день недели, одна буква |
| год, четыре числа |
| год, два числа |
| месяц год |
| час: минута: секунда |
| час: минута: второй AM или PM |
| час: минута |
| час: минута AM или PM |
| календарный квартал-год |
| календарный квартал |
today
и now
функции возвращают последовательные числа даты для текущей даты и текущей даты и время, соответственно.
today
ans = 736675
now
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