R - questions
Crisi liquidità del Libano mette in ginocchio anche la Siria, svalutazione record della valuta locale
Il collasso finanziario del Libano, che ha chiesto anche aiuti ai paesi amici, si ripercuote anche sulla vicina Siria. I trasferimenti di dollari in Siria sono diminuiti quasi a zero, ha …
Smartphone etici e sostenibili, Fairphone tenta la svolta dopo anni di flop. L’assist arriva da Vodafone
Eva Gouwens fa il conto alla rovescia per l’arrivo tra poche ore sugli store online di Vodafone dei suoi smartphone etici. Parliamo degli smartphone prodotti da Fairphone, azienda olandese che …
Gestire il rischio e generare più rendimenti a lungo termine, la carta ESG
Anche il 2020 sarà probabilmente caratterizzato da una crescita economica globale modesta. Gli analisti sono concordi nel ritenere che la continua incertezza sugli sviluppi monetari e politici genereranno ancora alta …
Tutti gli articoli
Tutti gli articoli Tutte le notizie

  1. #1
    L'avatar di Paolo1956
    Data Registrazione
    Jun 2010
    Messaggi
    5,210
    Mentioned
    1 Post(s)
    Quoted
    1118 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,210
    Mentioned
    1 Post(s)
    Quoted
    1118 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,408
    Mentioned
    1 Post(s)
    Quoted
    133 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,210
    Mentioned
    1 Post(s)
    Quoted
    1118 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,210
    Mentioned
    1 Post(s)
    Quoted
    1118 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,532
    Blog Entries
    61
    Mentioned
    9 Post(s)
    Quoted
    587 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,210
    Mentioned
    1 Post(s)
    Quoted
    1118 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,210
    Mentioned
    1 Post(s)
    Quoted
    1118 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