L2_bach

advertisement
Форматы числовых данных
• Задается с помощью команды или функции
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
Download