Determinación de días festivos en el NASDAQ.

Inicio Foro Programación en R Utilidades Determinación de días festivos en el NASDAQ.

Etiquetado: 

  • Este debate tiene 3 respuestas, 3 mensajes y ha sido actualizado por última vez el hace 2 meses por Leon.
Viendo 4 entradas - de la 1 a la 4 (de un total de 4)
  • Autor
    Entradas
  • #24496

    Hola,

    He programado el siguiente código que determina si el dia es festivo o no en el mercado NASDAQ, obteniendo la información de un archivo .csv.

    # Este script lee la lista de dias festivos en el Nasdaq de un archivo .csv y le asigna el valor TRUE o FALSE a la variable Festivo en función del día que es en NYC.
    
    # Carga las bibliotecas necesarias
    library(lubridate)
    
    # Lee el archivo Festivos.csv
    Dias_Festivos <- read.csv(file = "Festivos.csv", header=F)
    
    #Transforma los datos de tipo caracter a fecha y los guarda como vector
    Dias_Festivos <- as.Date(strptime(as.character(Dias_Festivos$V1), "%d/%m/%Y"))
    
    # Determina el dia que es en NYC
    hoy <- today("America/New_York")
    #hoy <- as.Date("2021-12-24") #valor para probar el codigo
    
    # Busca en el vector que contiene los dias festivos y si encuentra el dia de hoy
    # le asigna a Festivo el valor TRUE y sino FALSE.
    Festivo <- any(Dias_Festivos %in% hoy)
    
    Festivo

    La próxima versión será hacer web scraping para obtener los datos de los dias festivos de internet, en vez de leer el .csv

    Un saludo.

    PD: El archivo txt adjunto es en realidad un csv, solo que no se permite subir archivos csv. Cambiarle el nombre de Festivos.txt a Festivos.csv y debería funcionar.

     

    #24531

    Gracias por el aporte, aprovecho para habilitar subir ficheros .csv y .xlsx

    #24556

    Lo prometido es deuda, así que os dejo la versión del programa que obtiene los datos de los días festivos haciendo web scraping de internet en vez de leerlos de un archivo csv.

    # Este script lee la lista de dias festivos en el Nasdaq de internet y le asigna el valor TRUE o FALSE a la variable Festivo en función del día que es en NYC.
    
    #Cargamos las bibliotecas necesarias
    library(rvest)
    library(lubridate)
    
    #URL de la web donde descargaremos la información
    URL_Festivos_NASDAQ2 <- "https://www.bsmarkets.com/cs/Satellite?c=Page&cid=1191411509498&pagename=BSMarkets2%2FPage%2FPage_Interna_WFG_Template&WEB=0&seccion=festivos&idioma=es&portal=&plaza=67"
    
    #Leemos solo la tabla que nos interesa, para ello debemos inspeccionar la página y colocar el xpath al elemento que queremos descargar.
    tmp3 <- read_html(URL_Festivos_NASDAQ2) %>%
      html_nodes(xpath = '//*[@id="centerWFG"]/div/div[2]/div[1]/div[2]/div[3]/table') %>%
      html_table(fill = TRUE)
    
    #Asignamos los valores a la variable Fecha
    Fechas <- tmp3[[1]]$Fecha
    
    #Convertimos los datos en formato caracter a formato fecha
    Dias_Festivos <- as.Date(Fechas, format = "%d/%m/%y")
    
    # Determina el dia que es en NYC
    hoy <- today("America/New_York")
    #hoy <- as.Date("2021-12-24") #valor para probar el codigo
    
    # Busca en el vector que contiene los dias festivos y si encuentra el dia de hoy
    # le asigna a Festivo el valor TRUE y sino FALSE.
    Festivo <- any(Dias_Festivos %in% hoy)
    
    Festivo
    

     

     

    #24922

    Muchas gracias Hector. Me he tomado la libertad de unir este código junto al de fecha «qué comprar»:

    Quedarían del siguiente modo:

    # Cargamos las bibliotecas necesarias
    library(rvest)
    library(lubridate)
    
    #---------------------------------------------------------------------
    #Este código hace uso de la biclioteca Lubridate
    # Qué comprar: ------------------------------------------------------------
    # Si lo ejecutamos en Lunes antes de que el mdo abra: fecha <- Sys.Date() -3
    # Si lo ejecutaos cualquier dia (que no sea lunes) de forma previa a la apertura del mercado (de 0:00-14:30/15:30): Sys.Date()-1
    # Si lo ejecutamos en Sabado: fecha <- Sys.Date() -1
    # Si lo ejecutamos en Domingo: fecha <- Sys.Date() -2
    
    ## OJO que esto puede dar error en función del dia:
    
    # Determinacion de la fecha -----------------------------------------------
    # Establecemos el valor de ciertas variables
    Mercado_Abierto <- FALSE
    nyc <- now("America/New_York")    # Hora actual en Nueva York
    Hora_Apertura_Mercado <- 0930   # 9:30Hs de Nueva York 
    Hora_Cierre_Mercado <- 1600   # 16:00HS de Nueva York
    
    #Obtenemos el numero del dia de la semana 1 = Domingo .... 7 = Sábado
    Numero_Dia_Semana <- wday(nyc)
    Dia_Semana <- wday(nyc, label = TRUE, abbr = FALSE)
    Hora <- hour(nyc)
    Minutos <- minute(nyc)
    Tiempo <- as.numeric(paste(Hora, Minutos, sep = ""))
    
    
    # Nos interesa saber si es un dia de semana (L a V) despues de la hora de apertura del mercado. No se tienen en cuentan festivos.
    Dia_Laborable_Despues_Apertura <- if(Numero_Dia_Semana > 1 &
                                          Numero_Dia_Semana < 7 &
                                          Tiempo >= Hora_Apertura_Mercado){
      TRUE
      } else {
      FALSE
      }
    
    
    # Determinamos si el mercado está abierto o cerrado.
    Mercado_Abierto <- if(Dia_Laborable_Despues_Apertura &
                          Tiempo <= Hora_Cierre_Mercado){
      TRUE
    } else {
      FALSE
    }
    
    # Dias a restar del dia actual para el cálculo del algoritmo.
    Dias_Restar <- if(Dia_Laborable_Despues_Apertura){
      0
    } else if(Dia_Semana == "domingo") {
      2
    } else if(Dia_Semana == "lunes" &
             Tiempo < Hora_Apertura_Mercado) {
      3  
    } else {
      1
    }
    
    # Probamos si hay dias festivos:
    # Suponemos que los días festivos son no consecutivos:
    # Este script lee la lista de dias festivos en el Nasdaq de internet y le asigna el valor TRUE o FALSE a la variable Festivo en función del día que es en NYC.
    
    #URL de la web donde descargaremos la información
    URL_Festivos_NASDAQ2 <- "https://www.bsmarkets.com/cs/Satellite?c=Page&cid=1191411509498&pagename=BSMarkets2%2FPage%2FPage_Interna_WFG_Template&WEB=0&seccion=festivos&idioma=es&portal=&plaza=67"
    
    #Leemos solo la tabla que nos interesa, para ello debemos inspeccionar la página y colocar el xpath al elemento que queremos descargar.
    tmp3 <- read_html(URL_Festivos_NASDAQ2) %>%
      html_nodes(xpath = '//*[@id="centerWFG"]/div/div[2]/div[1]/div[2]/div[3]/table') %>%
      html_table(fill = TRUE)
    
    #Asignamos los valores a la variable Fecha
    Fechas <- tmp3[[1]]$Fecha
    
    #Convertimos los datos en formato caracter a formato fecha
    Dias_Festivos <- as.Date(Fechas, format = "%d/%m/%y")
    
    # Determina el dia que es en NYC
    hoy <- today("America/New_York")
    #hoy <- as.Date("2021-12-24") #valor para probar el codigo
    
    # Busca en el vector que contiene los dias festivos y si encuentra el dia de hoy
    # le asigna a Festivo el valor TRUE y sino FALSE.
    Festivo <- any(Dias_Festivos %in% hoy)
    
    Festivo
    
    # Unimos el dia de la semana, con el día festivo:
    ifelse(Festivo == T, Dias_Restar <- Dias_Restar + 1, Dias_Restar <- Dias_Restar + 0)
    
    # fecha que utilizará el algoritmo para determinar la compra.
    fecha <- as.Date(paste0(year(nyc), "-", month(nyc), "-", (day(nyc) - Dias_Restar)))
    

    Lo añado al código del temario y te cito como autor.

     

    Gracias!

    • Esta respuesta fue modificada hace 1 mes, 4 semanas por Leon.
Viendo 4 entradas - de la 1 a la 4 (de un total de 4)
  • Debes estar registrado para responder a este debate.
{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}