Форматы числовых данных • Задается с помощью команды или функции format • Имеются следующие аргументы: – short - четыре знака после запятой. – long – 15 знаков для double и семь знаков для single • Другие аргументы – shortG, longG – наиболее удобочитаемый формат числа Результат выполнения разных форматов Пакет Financial Toolbox • Основной экономический пакет MatLab. • В этом разделе рассматриваются приемы использования средств Financial Toolbox для решения модельных задач предметной области. Вопросы, связанные с адекватностью моделей, условий их применимости или справедливости гипотез относительно состояния финансовых рынков и аналогичные вопросы выходят за рамки данного раздела. Более того, применение средств пакета в некоторых случаях может приводить к неверным результатам с точки зрения бизнес-приложений. Проблема анализа полученных данных и их дальнейшего применения лежит на пользователе пакета и требует дополнительного экономического образования. • Дополнительные пакеты: Financial Derivative Toolbox, FixedIncome Toolbox Работа с датами • MatLab представляет даты в своем внутреннем представлении. • Для получения данного представления следует воспользоваться командой now. • Результат вывода такой команды: десятичное число: – Целая часть – номер дня после 01 января 0000 г. (от р. Х.) – Дробная часть – время, отсчитанное от полуночи текущего дня. Обращение к now >> format longG >> now ans = 734804.871996979 Таким образом в момент создания слайда был 734804 день и 0.871996979 часть 24 часов. Человеческое представление дат Текстовый формат • Представление даты в виде строчки. Строчка может иметь различные представления: – год-месяц-число – год-месяц-число часы-минуты-секунды – квартал-год – и другие • Функция для получения текстового предствления datestr(inner_format, type) – inner_format – внутреннее представление – type – тип представления >> n=now; >> datestr(n, 0) ans = 28-Oct-2011 21:25:52 >> datestr(n, 1) ans = 28-Oct-2011 >> datestr(n, 8) ans = Fri >> datestr(n, 2) ans = 10/28/11 >> datestr(n, 9) ans = F >> datestr(n, 10) ans = 2011 >> datestr(n, 17) ans = Q4-11 >> datestr(n, 11) ans = 11 >> datestr(n, 18) ans = Q4 >> datestr(n, 12) ans = Oct11 >> datestr(n, 5) ans = 10 >> datestr(n, 13) ans = 21:25:52 >> datestr(n, 6) ans = 10/28 >> datestr(n, 14) ans = 9:25:52 PM >> datestr(n, 7) ans = 28 Человеческое представление дат Числовой формат • Для получения числовой (или векторной) записи даты используется функция datavec: – Vector_format=datavec(inner_format {/ text_format}) – [yyyy, mmm, dd, hh, mm, ss]=datavec(……) • В первом случае результат будет записан в массив Vector_format размерности 6 • Во втором случае результат будет записан в указанные переменные. • Не все текстовые форматы можно привести к числовому. >> n=now; >> str=datestr(n, 0) 10 >> vec=datevec(str) ??? Error using ==> datevec at 280 Cannot parse date 10. str = 28-Oct-2011 21:42:40 >> str=datestr(n, 2) >> vec=datevec(n) str = vec = 10/28/11 Columns 1 through 3 >> vec=datevec(str) 2011 10 28 vec = Columns 4 through 6 2011 21 42 10 28 0 40.9400024414063 >> str=datestr(n, 17) >> vec=datevec(str) str = vec = Q4-11 2011 10 >> str=datestr(n, 5) str = 28 21 42 40 >> vec=datevec(str) ??? Error using ==> datevec at 216 Failed to lookup month of year. 0 0 >> n=now; >> [year, month, day, hour, minute, second]=datevec(n) >> [year, month, day, hour, minute, second]=datevec(str) year = year = 2011 2011 month = month = 10 10 day = day = 28 28 hour = hour = 21 0 minute = minute = 47 0 second = second = 12.0139999389648 0 >> str=datestr(n, 1) str = 28-Oct-2011 Вычисление интервалов между датами • В MatLab интервалы между датами вычисляются с помощью функции number_of_days=daysdif(start, final, basis) • start – начальная дата • final – конечная дата • basis – базовый период Базовый период расчета интервала между датами • Количество дней, попадающих между двумя датами зависит от календаря. Базовый период и представляет такие календари. • basis=0 – дней в году фактическое (365 или 366), дней в месяце фактическое (28, 29, 30 или 31) • basis=1 – дней в году 360, дней в месяце 30 • basis=2 – дней в году 360, дней в месяце фактическое • basis=3 – дней в году 365, дней в месяце фактическое • Всего имеется 13 различных вариантов >> str1=datestr(n, 1) str1 = >> str2='01-Jan-2010'; >> str1='01-Jan-2011'; >> number=daysdif(str2, str1, 2) 28-Oct-2011 number = >> str2='28-Apr-2011'; >> datenum(str2) 365 >> number=daysdif(str2, str1, 3) ans = number = 734621 365 >> number=daysdif(str1, str2, 0) number = -183 >> number=daysdif(str2, str1, 0) number = 183 >> number=daysdif(str2, str1, 1) number = 180 Выходные дни В файл-функции holidays.m определены нерабочие дни с 01 января 1885 года до 31 декабря 2030 года для Нью-Йоркской фондовой биржи. Элемент листинга holidays.m 734520 ; ... % 17-Jan-2011 Martin Luther King, Jr. Day (Mon) 734555 ; ... % 21-Feb-2011 Washington's Birthday (Mon) 734615 ; ... % 22-Apr-2011 Good Friday (Fri) 734653 ; ... % 30-May-2011 Memorial Day (Mon) 734688 ; ... % 04-Jul-2011 Independence Day (Mon) 734751 ; ... % 05-Sep-2011 Labor Day (Mon) 734831 ; ... % 24-Nov-2011 Thanksgiving (Thu) 734863 ; ... % 26-Dec-2011 Monday after Christmas (Mon) 734870 ; ... % 02-Jan-2012 Monday after New Year's Day (Mon) 734884 ; ... % 16-Jan-2012 Martin Luther King, Jr. Day (Mon) Вычисление рабочих дней • Вычислив праздники, можно посчитать их количество. • После этого можно воспользоваться функцией wrkdydif(start, final, holiday) для вычисления рабочих дней между двумя датами start и final. • • • • • • • >> str1='28-Oct-2011'; >> str2='20-Jan-2012'; >> number=daysdif(str1, str2) • 11 • >> wd=wrkdydif(str1, str2, n) • wd = • 50 number = 84 >> hd=holidays(str1, str2) • >> hd=holidays(str1, str2) • hd = hd = • • • • • • 734831 734863 734870 734884 • • • • 734831 734863 734870 734884 >> hd=datestr(holidays(str1, str2)) • >> n=length(hd) • n= hd = • • • • 24-Nov-2011 26-Dec-2011 02-Jan-2012 16-Jan-2012 • • • 4 • >> wd=wrkdydif(str1, str2, n) >> n=length(hd) • wd = n= • 57 Последний день в месяце • MatLab позволяет вычислить дату последнего в месяце дня недели. • Для этого используется команда lweekdate(weekday, year, month) • weekday – день, который ищется. Задается целым числом от 1 до 7, начиная с воскресенья и заканчивая субботой. • year – четырех-значное целое число • month – целое число от 1 до 12 >> year=2011; >> month=10; >> day=4; >> date=lweekdate(day, year, month) date = 734802 >> datestr(date) ans = 26-Oct-2011 >> year=[2011, 2012, 2013]; >> date=lweekdate(day, year, month) date = 734802 735173 >> datestr(date) ans = 26-Oct-2011 31-Oct-2012 30-Oct-2013 735537