|
|
||||||||||||||||||
Tutti gli articoli | Tutte le notizie |
-
07-09-19, 10:29 #2
- 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.
-
07-09-19, 10:38 #3
- Data Registrazione
- Jul 2006
- Messaggi
- 1,408
- Mentioned
- 1 Post(s)
- Quoted
- 133 Post(s)
- Potenza rep
- 42949686
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 ..
-
07-09-19, 12:00 #4
- 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...
-
07-09-19, 14:56 #5
- 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
-
07-09-19, 17:28 #6
- Data Registrazione
- Oct 2009
- Messaggi
- 9,532
- Blog Entries
- 61
- Mentioned
- 9 Post(s)
- Quoted
- 587 Post(s)
- Potenza rep
- 42949683
-
07-09-19, 18:01 #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
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
-
07-09-19, 18:38 #8
- Data Registrazione
- Jun 2010
- Messaggi
- 5,210
- Mentioned
- 1 Post(s)
- Quoted
- 1118 Post(s)
- Potenza rep
- 42949682
(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)
-
07-09-19, 18:42 #9
-
07-09-19, 19:09 #10
- Data Registrazione
- Nov 2007
- Messaggi
- 140
- Blog Entries
- 1
- Mentioned
- 0 Post(s)
- Quoted
- 19 Post(s)
- Potenza rep
- 0
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.