R coding: problemi, chiarimenti, sviluppo, apprendimento.

Scalpo

Nuovo Utente
Registrato
14/12/00
Messaggi
2.302
Punti reazioni
99
Accentriamo qua i vari aspetti unicamente inerenti il codice, tutto ciò che attiene la modellistica apriremo 3D specifici.

introduco alcuni link (fin tanto che ciò rimane possibile: in italiano) inerenti i corsi base in modo che non si facciano domande inutili:

se qualcuno è a conoscenza di altri video-corsi in italiano li segnali pure

Marco Casario: tutte le lezioni da 1 a 18:
Caricare Dati Finanziari Usando gli Oggetti - Corso Programmare Trading System Automatici -Lezione 4 - YouTube

Domenico Di Carlo: tutti i tutorial da 1 a 50
Introduzione a R - Tutorial 1 - Introduzione - YouTube
 

Price Action

Nuovo Utente
Registrato
23/1/12
Messaggi
707
Punti reazioni
75
Ottimo, quello di Casario lo conoscevo e devo dire che me lo ha fatto anche rivalutare come formatore "di massa", perché comunque apre una porta su un mondo di cui il trader retail generalmente, almeno nella stragrande maggior parte dei casi, disconosce l'esistenza. Il secondo corso è una bellissima scoperta, grazie.
 

fuffologo

Nuovo Utente
Registrato
30/11/07
Messaggi
152
Punti reazioni
2
@Price Action:
prova questo per i dati EOD da Quandl

Codice:
[b]
library(quantmod)
library(Quandl)

EP1m <- Quandl("CHRIS/CME_ES1", type="xts", api_key="p773L9D7JVCxbALxubWq")
chartSeries(EP1m, TA=c(addVo()))

[/b]

Per i dati intraday, dovresti allegare un sample di un file che vuoi leggere con R, poi vedremo di convertirlo in xts
 

Price Action

Nuovo Utente
Registrato
23/1/12
Messaggi
707
Punti reazioni
75
Potrebbe anche essere un problema mio ma le altre pagine non mi danno problemi.
 

Price Action

Nuovo Utente
Registrato
23/1/12
Messaggi
707
Punti reazioni
75
Grazie, per completezza ti allego vari esempi. Le differenze stanno sia nei software di provenienza dei dati (Sierra Charts e MT5) e quindi nel modo di organizzarli che nel formato, perché per ognuno dei software di provenienza allego un xlsx e un csv. Allego anche il codice ma lo posto qua comunqueVedi l'allegato 2739125Vedi l'allegato 2739128.
 

Allegati

  • File esempio.zip
    15,6 KB · Visite: 13

Scalpo

Nuovo Utente
Registrato
14/12/00
Messaggi
2.302
Punti reazioni
99
Grazie, per completezza ti allego vari esempi. Le differenze stanno sia nei software di provenienza dei dati (Sierra Charts e MT5) e quindi nel modo di organizzarli che nel formato, perché per ognuno dei software di provenienza allego un xlsx e un csv. Allego anche il codice ma lo posto qua comunqueVedi l'allegato 2739125Vedi l'allegato 2739128.

basta interrogare il warning() ed esce fuori da subito un primo tipo di errore:

warnings()
Messaggi di avvertimento:
1: In read_fun(path = enc2native(normalizePath(path)), sheet_i = sheet, ... :
.
.
50: In read_fun(path = enc2native(normalizePath(path)), sheet_i = sheet, ... :
Coercing text to numeric in C14 / R14C3: '3822.50'

chiaro che hai memorizzato dei numeri come testo. Ma te ne accorgi da subito aprendo il file excel, ancor prima di aprire R.

una volta mutate le celle in numeri, i tuoi comandi funzionano, tranne per il plot dove è meglio:
plot(df$Close, main= "EP1m", type='l')

Per quanto riguarda il 2º problema, ovvero la creazione di oggetti xts, guarda questo esempio (senza librerie, inoltre guarda il formato della data/ora: è un'unica stringa, mentre te nel caso del file "EP 1min Sierra Esempio xlsx.xlsx", hai due colonne: una reltiva al giorno ed una relativa all'ora, e non va bene.)

#ESEMPIO CREAZIONE OGGETTO xts
date <- as.POSIXct(c("2018-10-01 09:01:00", "2018-10-01 09:02:00"))
open <- c(0, 1)
high <- c(0, 4)
low <- c(0, 3)
close <- c(0, 6)

df1 <- data.frame(
date,
open,
high,
low,
close
)


# costruiamo quindi un xts basato sul dataframe df1
xts1 <- xts(df1[-1], order.by=df1[,1])
xts1

Nel tuo caso, sempre per i dati del file di cui sopra, dovrebbe essere:
datet <- as.POSIXct(c(dataOra))
open<- df$Open
high<-df$High
low <-df$Low
close<-df$Close

con dataOra avente il seg. formato in unica colonna: 2021-01-08 22:59:00
df2 <- data.frame(
datet,
open,
high,
low,
close
)
datixts<-xts(df2[-1], order.by=df2[,1])

PS i nomi dei files memorizzati con tutti quegli spazi in mezzo non sono mai ben visti.. io li tolgo sempre, inoltre diciamo che non è proprio da informatici includere nel nome anche l'estensione, si rischia di fare confusione.
 
Ultima modifica:

fuffologo

Nuovo Utente
Registrato
30/11/07
Messaggi
152
Punti reazioni
2
Ottima spiegazione di SCALPO sulla struttura dei dati XTS (concordo pienamente sulla lunghezza dei nome-files).
Tieni conto che per chi fa analisi pescando serie storiche dal mondo esterno, la conversione dei formati è quasi sempre problematica.

Conosco poco le grosse potenzialità grafiche di R, lavorando quasi sempre sui rendimenti mi limito all'armamentario grafico standard(plot, hist) o quello della library PerformanceAnalytics.

Prova questi script (cambiando la directory di partenza e, se vuoi, i nomi delle colonne nell'istruzione colnamses):

Codice:
### Conversione MT5 -> XTS
library(quantmod)
dir  <- "c:/MyDir/"  # usa la tua directory
name <- "EP 1m MT5 Esempio csv.csv"
file <- paste(dir, name, sep="")
dat <- read.table(file, sep=";", header=F, as.is=F, skip=1)
tm <- strptime(paste(dat[,1], sprintf("%04d",dat[,2])),format="%d/%m/%Y %H%M")
EP1m <- xts(x=dat[,3:9],order.by=tm)
colnames(EP1m) <- c("O","H","L","C","TICKVOL","VOL","SPREAD")
EP1m
chartSeries(EP1m)
## end



### Conversione SIERRA -> XTS
library(quantmod)
dir  <- "c:/MyDir/"  # usa la tua directory
name <- "EP 1min Sierra Esempio csv.csv"
file <- paste(dir, name, sep="")
dat <- read.table(file, sep=";", header=F, as.is=F, skip=1)
tm <- strptime(paste(dat[,1], dat[,2]),format="%d/%m/%Y %H:%M")
EP1m <- xts(x=dat[,2:7],order.by=tm)
colnames(EP1m) <- c("O","H","L","C","VOL","NTRADES")
EP1m
chartSeries(EP1m)
## end
 

Price Action

Nuovo Utente
Registrato
23/1/12
Messaggi
707
Punti reazioni
75
Vi ringrazio tantissimo, entrambi, Scalpo e fuffologo. Non solo per le ottime spiegazioni e per i consigli ma anche per la comprensione che dimostrate per le mie lacune da novello "iniziato" di questo fantastico software/linguaggio. E credo che chiunque scoprirà questo thread non potrà che ringraziarvi in quanto ritengo siano problemi, almeno all'inizio, piuttosto comuni.
 

automatic-trading

Nuovo Utente
Registrato
27/12/20
Messaggi
37
Punti reazioni
2
Per quanto riguarda il linguaggio R ci sono decine di corsi alcuni specifici per i nostri scopi, ad esempio:
Introduction to Business Analytics with R Illinois University
Molti altri invece insegnano il linguaggio R per scopi generali (comunque utile)
 

Scalpo

Nuovo Utente
Registrato
14/12/00
Messaggi
2.302
Punti reazioni
99
Per quanto riguarda il linguaggio R ci sono decine di corsi alcuni specifici per i nostri scopi, ad esempio:
Introduction to Business Analytics with R Illinois University
Molti altri invece insegnano il linguaggio R per scopi generali (comunque utile)

ottimo, già ci ero incappato in Coursera, ma penso che impiegherò il poco tempo rimastomi per fare corsi su Pythoon, poichè bisogna conoscere anche questo, l'uno non esclude l'altro (ti spiegherò perchè)

Diciamo che a furia di leggere codice R altrui e di scrivermi funzioni personalizzate sono appena riuscito a scrollarmi l'ansia. Ho script sperimentali funzionanti dal punto di vista software (basati su ARIMA e NNET ed a breve su Keras) in real time richiamati da EA sviluppati sia in MT4 che MT5 a cui ho collegato anche database MySQL, Gli script R leggono i dati dalle piatta Metatrader a cui restituiscono i forecast di R. Il modello basato su NNET in test sembrava promettere non bene, di più.., ma purtroppo in real-time-demo si è squagliato come neve al sole.
Quindi per me ad ora l'unico inconveniente è l'overfitting, non il codice in se, per limitarlo sto cercando di impadronirmi di alcune tecniche al fine di riuscire a combinarle tra loro come ho già visto fare da qualche parte.
 

automatic-trading

Nuovo Utente
Registrato
27/12/20
Messaggi
37
Punti reazioni
2
ottimo, già ci ero incappato in Coursera, ma penso che impiegherò il poco tempo rimastomi per fare corsi su Pythoon, poichè bisogna conoscere anche questo, l'uno non esclude l'altro (ti spiegherò perchè)

Diciamo che a furia di leggere codice R altrui e di scrivermi funzioni personalizzate sono appena riuscito a scrollarmi l'ansia. Ho script sperimentali funzionanti dal punto di vista software (basati su ARIMA e NNET ed a breve su Keras) in real time richiamati da EA sviluppati sia in MT4 che MT5 a cui ho collegato anche database MySQL, Gli script R leggono i dati dalle piatta Metatrader a cui restituiscono i forecast di R. Il modello basato su NNET in test sembrava promettere non bene, di più.., ma purtroppo in real-time-demo si è squagliato come neve al sole.
Quindi per me ad ora l'unico inconveniente è l'overfitting, non il codice in se, per limitarlo sto cercando di impadronirmi di alcune tecniche al fine di riuscire a combinarle tra loro come ho già visto fare da qualche parte.

Per limitare il problema dell'overfitting forse dovresti prendere come training set x anni di bull trend , x anni di bearish trend e x/2 laterale, in modo che il tuo sw funzioni discretamente sia in fase laterale che bullish o bearish. Es io prenderei gli anni dal 1998 al 2002 e poi dal 2007 al 2011 e 2014-2016
Però credo che la scelta degli indicatori sia la cosa più importante.

Per quanto riguarda il linguaggio di programmazione quale sarebbe meglio approfondire le conoscenze inizialmente?
 

Scalpo

Nuovo Utente
Registrato
14/12/00
Messaggi
2.302
Punti reazioni
99
Per limitare il problema dell'overfitting forse dovresti prendere come training set x anni di bull trend , x anni di bearish trend e x/2 laterale, in modo che il tuo sw funzioni discretamente sia in fase laterale che bullish o bearish. Es io prenderei gli anni dal 1998 al 2002 e poi dal 2007 al 2011 e 2014-2016
Però credo che la scelta degli indicatori sia la cosa più importante.

Per quanto riguarda il linguaggio di programmazione quale sarebbe meglio approfondire le conoscenze inizialmente?

Si, la scelta (e la trasformazione) dei dati in ingresso pesa per il 70%.

Se non hai alcuna o poca esperienza di programmazione ti conviene fare un corso gratuito direttamente su Python, la sua struttura è molto più chiara di quanto non lo sia R, il quale soffre di un eccesso di librerie le cui funzionalità spesso si sovrappongono e richiedono modalità di preparazione dei dati differenti, strutture sintattiche e stili diversi, che all'inizio creano disorientamento e molto tempo ed esercizi per apprenderle tutte, coltivare dimestichezza, saper leggere il codice altrui, trovare una proprio stile con funzioni personalizzate, e finalmente diventare produttivo, ha una curva di apprendimento notoriamente molto ripida essendo un linguaggio vettoriale (e datato, è rivolto sopratutto a scienziati e ricercatori di tutti i campi, quindi per un trader è anche molto complesso ritagliarsi un proprio percorso di apprendimento, senza incorrere nel rischio di perdere una eccessiva quantità di tempo).
Python, nato anche in ottica di facilitare l'adozione di tecniche di Machine Learning, è invece ormai un pò la nuova mascotte dei trader di WallStreet perchè un'idea di trading sviluppata in questo ambiente richiede molte meno righe rispetto ad. es. a C# o R, ma sei vuoi (non è obbligatorio) puoi anche sviluppare ad oggetti, questo consente al trader di concentrare i suoi sforzi più sul trading che non sullo sviluppo, mentre in R, almeno da commenti fatti da sviluppatori vari letti sul web, pare che accada il contrario. Python per queste sue caratteristiche: da un lato facile sintassi, dall'altro disponibilità di librerie sapientemente organizzate (avendo fatto tesoro dell'esperienza di R gli sviluppatori di Python da quanto leggo hanno fatto davvero un bel linguaggio completo e allo stesso tempo più facile) è, attualmente, il benchmark di riferimento per tutti i trader. I "ragazzi" di WallStreet sviluppano prima in Python e poi passano l'idea agli sviluppatori professionisti che riscrivono tutto in C++ che rimane il linguaggio in assoluto più perfomante. Questo nell'ottica che il trader deve fare il trader e l'ingegnere informatico deve fare il software operativo più efficiente. Noi, in assenza di un trading-floor completo, ci :wall::specchio::D .


Te l'econometria in che ambiente di sviluppo l'hai appresa/sperimentata/applicata?
 
Ultima modifica:

Price Action

Nuovo Utente
Registrato
23/1/12
Messaggi
707
Punti reazioni
75
Si, la scelta (e la trasformazione) dei dati in ingresso pesa per il 70%.

Se non hai alcuna o poca esperienza di programmazione ti conviene fare un corso gratuito direttamente su Python, la sua struttura è molto più chiara di quanto non lo sia R, il quale soffre di un eccesso di librerie le cui funzionalità spesso si sovrappongono e richiedono modalità di preparazione dei dati differenti, strutture sintattiche e stili diversi, che all'inizio creano disorientamento e molto tempo ed esercizi per apprenderle tutte, coltivare dimestichezza, saper leggere il codice altrui, trovare una proprio stile con funzioni personalizzate, e finalmente diventare produttivo, ha una curva di apprendimento notoriamente molto ripida essendo un linguaggio vettoriale (e datato, è rivolto sopratutto a scienziati e ricercatori di tutti i campi, quindi per un trader è anche molto complesso ritagliarsi un proprio percorso di apprendimento, senza incorrere nel rischio di perdere una eccessiva quantità di tempo).
Python, nato anche in ottica di facilitare l'adozione di tecniche di Machine Learning, è invece ormai un pò la nuova mascotte dei trader di WallStreet perchè un'idea di trading sviluppata in questo ambiente richiede molte meno righe rispetto ad. es. a C# o R, ma sei vuoi (non è obbligatorio) puoi anche sviluppare ad oggetti, questo consente al trader di concentrare i suoi sforzi più sul trading che non sullo sviluppo, mentre in R, almeno da commenti fatti da sviluppatori vari letti sul web, pare che accada il contrario. Python per queste sue caratteristiche: da un lato facile sintassi, dall'altro disponibilità di librerie sapientemente organizzate (avendo fatto tesoro dell'esperienza di R gli sviluppatori di Python da quanto leggo hanno fatto davvero un bel linguaggio completo e allo stesso tempo più facile) è, attualmente, il benchmark di riferimento per tutti i trader. I "ragazzi" di WallStreet sviluppano prima in Python e poi passano l'idea agli sviluppatori professionisti che riscrivono tutto in C++ che rimane il linguaggio in assoluto più perfomante. Questo nell'ottica che il trader deve fare il trader e l'ingegnere informatico deve fare il software operativo più efficiente. Noi, in assenza di un trading-floor completo, ci :wall::specchio::D .


Te l'econometria in che ambiente di sviluppo l'hai appresa/sperimentata/applicata?

Io avevo capito il contrario, e cioè che fosse più immediato R da imparare e che i sistemi necessitassero di un numero di righe inferiore. Però tu ne sai molto più di me, per cui...