-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathGetExpiryDates.R
57 lines (41 loc) · 1.72 KB
/
GetExpiryDates.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#
# Загрузка доступных дат экспирации (базовый актив как текст):
#
GetExpiryDates = function(symbol, ...){
if(!require('quantmod')) install.packages('quantmod')
if(is.null(symbol) || symbol==""){
message("Error: no symbol!")
return(0)
}
# Указываем неверную дату экспирации, чтобы получить соотв. ошибку
err = tryCatch({
getOptionChain(symbol, Exp = "1900-01-01")
},
error = function(e)e
)
# Действительно ли вернулась ошибка при загрузки доски?
if( length(which(class(err) %in% "error")) ){
# Разделяем строку по двоеточию
message_split = unlist(strsplit(err$message, ":"))
# Если первая часть сообщения ошибки соответствует неверной дате экспирации
if(message_split[1]=="Provided expiry date(s) not found. Available dates are"){
# Превращаем строку в массив и конвертируем в даты
dates_from_message = unlist(strsplit(message_split[2], ","))
# Пробуем преобразовать сообщение в даты
dates_from_message = try({as.Date(dates_from_message)}, silent=T)
if(class(dates_from_message)=="try-error"){
warning("Can't convert dates to date format")
return(0)
} else
return(dates_from_message)
} else {
warning( paste0("Can't load chain for ", symbol) )
return(0)
}
} else {
warning("Chain loaded! :)")
return(0)
}
return(0)
}
#