R - questions
Dividendi 2020 da record: ben 8 titoli del Ftse Mib con rendimenti oltre il 5%, banche al top
L’assaggio di dividendi arrivato a inizio settimana, con i ricchi acconti cedola staccati da Enel e Snam, ha acceso i riflettori sulle interessanti opportunità di rendimento offerte dai titoli di …
I tre scenari per lo spread dopo test Emilia. Ing: elezioni anticipate un bene per i Btp (nel lungo periodo)
Il conto alla rovescia in vista delle elezioni regionali in Emilia Romagna è ormai prossimo alla fine e lunedì mattina, risultati alla mano, i mercati daranno il loro giudizio. Una …
Piazza Affari raddrizza la settimana: +1,1% con chiusura sui massimi di sempre per Enel, Terna ed Hera
Colpo di reni a fine ottava per Piazza Affari che ritrova il sorriso dopo che le precedenti 4 sedute erano state avare di soddisfazioni complici principalmente i timori legati al …
Tutti gli articoli
Tutti gli articoli Tutte le notizie

  1. #1
    L'avatar di Paolo1956
    Data Registrazione
    Jun 2010
    Messaggi
    5,273
    Mentioned
    1 Post(s)
    Quoted
    1178 Post(s)
    Potenza rep
    42949682

    R - questions

    Visto che molti di noi usano R,

    possiamo porre qui domande su problemi incontrati.

    Inizio io col prossimo post.

  2. #2
    L'avatar di Paolo1956
    Data Registrazione
    Jun 2010
    Messaggi
    5,273
    Mentioned
    1 Post(s)
    Quoted
    1178 Post(s)
    Potenza rep
    42949682

    Nomi brevi dei mesi

    - Carico un dataset che contiene una colonna di date con i nomi brevi dei mesi: Jan, Feb, .....

    - Il problema è che le funzioni per convertire in data non mi riconoscono i nomi in inglese. Es

    as.Date("15-Jan-17", format = "%d-%b-%y")
    [1] NA

    mentre:

    as.Date("15-Gen-17", format = "%d-%b-%y")
    [1] "2017-01-15"

    - Provvisoriamente ho risolto via blocco note cambiando i nomi dei mesi, ma è chiaramente una soluzione del cavolo.

    - Mi pare di ricordare che questo dipende dai settaggi di Windows.

    - Vorrei una soluzione versatile che mi permetta di accedere a dataset di varia provenienza, in varie lingue senza doverne fare una copia modificata.

  3. #3
    L'avatar di Quovadis
    Data Registrazione
    Jul 2006
    Messaggi
    1,412
    Mentioned
    1 Post(s)
    Quoted
    134 Post(s)
    Potenza rep
    42949686
    Citazione Originariamente Scritto da Paolo1956 Visualizza Messaggio
    - Carico un dataset che contiene una colonna di date con i nomi brevi dei mesi: Jan, Feb, .....

    - Il problema è che le funzioni per convertire in data non mi riconoscono i nomi in inglese. Es

    as.Date("15-Jan-17", format = "%d-%b-%y")
    [1] NA

    mentre:

    as.Date("15-Gen-17", format = "%d-%b-%y")
    [1] "2017-01-15"

    - Provvisoriamente ho risolto via blocco note cambiando i nomi dei mesi, ma è chiaramente una soluzione del cavolo.

    - Mi pare di ricordare che questo dipende dai settaggi di Windows.

    - Vorrei una soluzione versatile che mi permetta di accedere a dataset di varia provenienza, in varie lingue senza doverne fare una copia modificata.
    Immagino siano i nav/dati di etf di vari emittenti. Provato a giocare col comando gsub() e far sostituire a R anziche' farlo a mano ??O creare una funzione cosi' a partire da:
    stock$V2=ifelse(stock$V2=="jan",1,stock$ V2)
    stock$V2=ifelse(stock$V2=="feb",2,stock$ V2)
    stock$V2=ifelse(stock$V2=="mar",3,stock$ V2)
    stock$V2=ifelse(stock$V2=="apr",4,stock$ V2)
    stock$V2=ifelse(stock$V2=="may",5,stock$ V2)
    stock$V2=ifelse(stock$V2=="jun",6,stock$ V2)
    stock$V2=ifelse(stock$V2=="jul",7,stock$ V2)
    stock$V2=ifelse(stock$V2=="aug",8,stock$ V2)
    stock$V2=ifelse(stock$V2=="sep",9,stock$ V2)
    stock$V2=ifelse(stock$V2=="oct",10,stock $V2)
    stock$V2=ifelse(stock$V2=="nov",11,stock $V2)
    stock$V2=ifelse(stock$V2=="dec",12,stock $V2)

    E poi passi il tutto a as.Date ..


  4. #4
    L'avatar di Paolo1956
    Data Registrazione
    Jun 2010
    Messaggi
    5,273
    Mentioned
    1 Post(s)
    Quoted
    1178 Post(s)
    Potenza rep
    42949682
    Sì, dunque,
    in realtà si tratta di dati economici, ma la sostanza non cambia.

    Quello che pensavo io, invece di fare la sostituzione, è se era possibile avvertire la funzione di conversione che i nomi sono in inglese, o in francese, o in turco o quello che è, dato che si tratta di nomi standard. Mi ricordo che in VB.Net si poteva fare...

  5. #5
    L'avatar di Paolo1956
    Data Registrazione
    Jun 2010
    Messaggi
    5,273
    Mentioned
    1 Post(s)
    Quoted
    1178 Post(s)
    Potenza rep
    42949682
    Allora, risolto con la libreria <readr>:

    myData_1 <- read_csv("myFile.csv",
    + locale = locale(date_names = "en", date_format = "%d-%b-%y"))

    che riconosce automaticamente la colonna delle date e le importa nel formato YYYY-MM-DD

    per cambiare lingua basta cambiare il campo date_names

  6. #6

    Data Registrazione
    Oct 2009
    Messaggi
    9,538
    Blog Entries
    61
    Mentioned
    9 Post(s)
    Quoted
    590 Post(s)
    Potenza rep
    42949683
    Citazione Originariamente Scritto da Paolo1956 Visualizza Messaggio
    - Vorrei una soluzione versatile che mi permetta di accedere a dataset di varia provenienza, in varie lingue senza doverne fare una copia modificata.
    Codice:
    Sys.setlocale(category = "LC_TIME", locale = "C")

  7. #7

    Data Registrazione
    Nov 2007
    Messaggi
    140
    Blog Entries
    1
    Mentioned
    0 Post(s)
    Quoted
    19 Post(s)
    Potenza rep
    0
    Colgo l'occasione per chiedere aiuto su un problema, temo, più complesso di quello di Paolo.
    Come simulare in backtesting un'operatività At-LIMIT?
    Lo script sottostante carica un paio di mesi di dati SPY da yahoo togliendo Volume e Adjusted e aggiungendo un segnale di buy/sell (nell'esempio, random):
    Codice:
    library(quantmod)
    price <- getSymbols("SPY", from = "2019-01-01", to = "2019-03-1", auto.assign = FALSE)
    spy   <- price[,1:5]
    spy[,5] <- rbinom(length(spy[,1]), 1, 0.5)
    colnames(spy) <- c("Open","High","Low","Close","SIGNAL")
    head(spy)
    
                 Open   High    Low  Close SIGNAL
    # 2019-01-02 245.98 251.21 245.95 250.18      0
    # 2019-01-03 248.23 248.57 243.67 244.21      1
    # 2019-01-04 247.59 253.11 247.17 252.39      1
    # 2019-01-07 252.69 255.95 251.69 254.38      1
    # 2019-01-08 256.82 257.31 254.00 256.77      0
    # 2019-01-09 257.56 258.91 256.19 257.97      1
    Ora come simulare un'operatività di questo tipo?

    Se SIGNAL ieri = 0 e SIGNAL oggi = 1 compera DOMANI X titoli con prezzo AT-LIMIT pari al CLOSE di oggi

    Se SIGNAL ieri = 1 e SIGNAL oggi = 0 vendi DOMANI X titoli con prezzo AT-LIMIT pari al CLOSE di oggi

    Ho trascurato per ora i costi di transazione perché possono essere di tipo diverso (%, fissi, un tanto a titolo etc.)
    Ovviamente l'output della funzione dovrebbe essere un vettore (sempre xts, per comodità) con i rendimenti aritmetici generati dalla strategia.
    Grazie in anticipo

  8. #8
    L'avatar di Paolo1956
    Data Registrazione
    Jun 2010
    Messaggi
    5,273
    Mentioned
    1 Post(s)
    Quoted
    1178 Post(s)
    Potenza rep
    42949682
    Citazione Originariamente Scritto da Cren Visualizza Messaggio
    Codice:
    Sys.setlocale(category = "LC_TIME", locale = "C")


    (Caffè pagato se passi da queste parti)

    Ovviamente penso sia il caso di fare qualcosa del genere:
    Codice:
    oldLoc <- Sys.getLocale("LC_TIME")
    Sys.setlocale(category = "LC_TIME", locale = "C")
    mio codice
    ......
    Sys.setlocale(category = "LC_TIME", locale = oldLoc)
    per non avere casini poi durante la sessione

  9. #9
    L'avatar di Paolo1956
    Data Registrazione
    Jun 2010
    Messaggi
    5,273
    Mentioned
    1 Post(s)
    Quoted
    1178 Post(s)
    Potenza rep
    42949682
    Citazione Originariamente Scritto da fuffologo Visualizza Messaggio
    Colgo l'occasione per chiedere aiuto su un problema, temo, più complesso di quello di Paolo.
    Come simulare in backtesting un'operatività At-LIMIT?
    Lo script sottostante carica un paio di mesi di dati SPY da yahoo togliendo Volume e Adjusted e aggiungendo un segnale di buy/sell (nell'esempio, random):
    Codice:
    library(quantmod)
    price <- getSymbols("SPY", from = "2019-01-01", to = "2019-03-1", auto.assign = FALSE)
    spy   <- price[,1:5]
    spy[,5] <- rbinom(length(spy[,1]), 1, 0.5)
    colnames(spy) <- c("Open","High","Low","Close","SIGNAL")
    head(spy)
    
                 Open   High    Low  Close SIGNAL
    # 2019-01-02 245.98 251.21 245.95 250.18      0
    # 2019-01-03 248.23 248.57 243.67 244.21      1
    # 2019-01-04 247.59 253.11 247.17 252.39      1
    # 2019-01-07 252.69 255.95 251.69 254.38      1
    # 2019-01-08 256.82 257.31 254.00 256.77      0
    # 2019-01-09 257.56 258.91 256.19 257.97      1
    Ora come simulare un'operatività di questo tipo?

    Se SIGNAL ieri = 0 e SIGNAL oggi = 1 compera DOMANI X titoli con prezzo AT-LIMIT pari al CLOSE di oggi

    Se SIGNAL ieri = 1 e SIGNAL oggi = 0 vendi DOMANI X titoli con prezzo AT-LIMIT pari al CLOSE di oggi

    Ho trascurato per ora i costi di transazione perché possono essere di tipo diverso (%, fissi, un tanto a titolo etc.)
    Ovviamente l'output della funzione dovrebbe essere un vettore (sempre xts, per comodità) con i rendimenti aritmetici generati dalla strategia.
    Grazie in anticipo
    la tua strategia mi pare sotto - specificata.
    che cosa succede se per es. oggi arriva un segnale di vendita e domani i prezzi sono costantemente sotto la chiusura di oggi? A quello che capisco non vendi mai...

  10. #10

    Data Registrazione
    Nov 2007
    Messaggi
    140
    Blog Entries
    1
    Mentioned
    0 Post(s)
    Quoted
    19 Post(s)
    Potenza rep
    0
    Citazione Originariamente Scritto da Paolo1956 Visualizza Messaggio
    la tua strategia mi pare sotto - specificata.
    Paolo, non è una strategia è solo un esempio.
    Chiaramente l'operatività at-limit (comunissima nei mercati azionari e molto diffusa nella borsa Italiana) sarà inserita in una strategia che dovrà tener conto di altre mille cose...
    Nell'esempio ho scelto, per comodità, il Close precedente come prezzo Limit, ma potrebbe essere qualsiasi altro prezzo.

    Il mio interesse è solo sullo script: è abbastanza facile simulare un'operatività at-limit chiudendo la posizione al Close della medesima giornata, ma ho difficoltà nel considerare il caso 'reale' dove uno può restare sul titolo per parecchi giorni.

Accedi