Machine Learning: la mia esperienza

@Price Action:
dovresti ottenere un csv (che io ho chiamato ad. es. EURUSD_Ticks.csv) con il seg. formato:

2021.01.06 22:01:13,1.23085,1.23089
2021.01.06 22:01:14,1.23085,1.2309
2021.01.06 22:01:14,1.23086,1.23089
2021.01.06 22:01:15,1.23086,1.23089
2021.01.06 22:01:15,1.23086,1.23089
2021.01.06 22:01:16,1.23087,1.2309
2021.01.06 22:01:16,1.23091,1.23094
2021.01.06 22:01:17,1.2309,1.23093
2021.01.06 22:01:17,1.23087,1.23091

poi in R, semplicemente carichi:
path <- "C:/tua directory/"
XY <- read.csv(paste0(path, 'EURUSD_Ticks.csv'), header = F)
 
@Price Action:
dovresti ottenere un csv (che io ho chiamato ad. es. EURUSD_Ticks.csv) con il seg. formato:

2021.01.06 22:01:13,1.23085,1.23089
2021.01.06 22:01:14,1.23085,1.2309
2021.01.06 22:01:14,1.23086,1.23089
2021.01.06 22:01:15,1.23086,1.23089
2021.01.06 22:01:15,1.23086,1.23089
2021.01.06 22:01:16,1.23087,1.2309
2021.01.06 22:01:16,1.23091,1.23094
2021.01.06 22:01:17,1.2309,1.23093
2021.01.06 22:01:17,1.23087,1.23091

poi in R, semplicemente carichi:
path <- "C:/tua directory/"
XY <- read.csv(paste0(path, 'EURUSD_Ticks.csv'), header = F)

Ti ringrazio, infatti era un problema di tabulazione. Nella fattispecie, se il file è xlsx lo importo con R Studio o pacchetto readxl, se è csv con read.csv2, io sbagliavo usando read.csv a causa del formato dati con tabulazione punto e virgola, mentre read.csv si usa il formato csv classico con virgola, come giustamente si rileva dal tuo post. Detto questo ora mi trovo, da buon novizio, di fronte a un altro problema...

Non riesco a convertire un file a 1 minuto estratto da Sierra Charts in serie storica con <-ts() e poi a disegnare il grafico a candele. Quando vado a convertire, se imposto il parametro frequency all'interno di ts() con un valore di 12 me lo converte, se imposto un valore diverso no, tanto [ vero che is.ts() mi restituisce FALSE, mentre con 12 restituisce TRUE. Per serie storiche a un minuto il parametro frequency dentro <-ts(), se ho ben capito, dovrebbe essere impostato a 0.04, visto che per il 5 minuti va impostato a 0.2, secondo l'help. Tra l-altro anche il grafico a linea mi viene fuori sfasato, diciamo. Il dati arrivano a ieri ma è evidente che R nel momento di plottare il grafico a linea prende una parte di dati diversa dal tutto o comunque la processa in modo diverso da come vorrei io. Probabilmente c'è qualcosa che mi sfugge e alla grande pure...

symbols <- read.csv2("C:/Users/User1/Desktop/Probabilità/EP1mSC.csv")

# Carico i dati

start <- as.Date("2020-09-23")
end <- as.Date("2020-01-06")

getSymbols(Symbols = symbols, from = start, to = end)

# Plottare grafico a linea

plot(symbols[, "Close"], main = "symbols")

#Trasformo i dati in serie storica per candleChart

EP1m_ts <- ts(symbols, start = c(2020,09), end = c(2021,01), frequency = 0.04)

plot(ts(EP1m_ts, start=c(2020,09), end=c(2021,01), frequency=323))

candleChart(EP1m_ts, up.col = "green", dn.col = "red", theme = "black")

Gli errori che ricevo sono:

> EP1m_ts <- ts(symbols, start = c(2020,09), end = c(2021,01), frequency = 0.04)
Error in ts(symbols, start = c(2020, 9), end = c(2021, 1), frequency = 0.04) :
'start' no può essere dopo 'end'

> candleChart(EP1m_ts, up.col = "green", dn.col = "red", theme = "black")
Error in try.xts(x, error = "chartSeries requires an xtsible object") :
chartSeries requires an xtsible object
 
In sostanza è come se R voglia trovare smepre un modo per non leggermi il file...:D

Ho provato così, ma sempre errore e niente grafico. Mi dice risponde: Error in eval(expr, data, expr_env) : oggetto "EP1m.Open" non trovato


> library(plotly)
> library(quantmod)
> library(Quandl)
>
> #EP1m <- read_excel("C:/Users/User1/Desktop/Probabilità/EP1m.xlsx")
> #EP1m <- read.csv2("C:/Users/User1/Documents/R/EP1mSC.csv")
>
> #library(readr)
> #EP1m <- read_delim("R/EP1mSC.csv", ";", escape_double = FALSE,
> # trim_ws = TRUE)
>
> #View(EP1m)
>
> EP1m <- Quandl("CHRIS/CME_ES1", api_key="p773L9D7JVCxbALxubWq")
>
> head(EP1m)
Date Open High Low Last Change Settle Volume Previous Day Open Interest
1 2021-01-06 3717.50 3774.75 3685.50 3749.25 22.25 3740.50 2072388 2548506
2 2021-01-05 3695.00 3730.00 3673.25 3717.50 26.00 3718.25 1356426 2537381
3 2021-01-04 3748.75 3773.25 3652.50 3696.00 -56.50 3692.25 1972017 2531893
4 2020-12-31 3725.00 3753.00 3715.00 3748.75 24.50 3748.75 917212 2506748
5 2020-12-30 3724.50 3738.25 3716.50 3724.75 4.25 3724.25 738427 2494823
6 2020-12-29 3731.00 3747.75 3714.50 3724.25 -7.50 3720.00 972308 2478086
> colnames(EP1m)
[1] "Date" "Open" "High" "Low" "Last"
[6] "Change" "Settle" "Volume" "Previous Day Open Interest"
>
> #getSymbols("EP1m",src='csv')
> df <- data.frame(Date=index(EP1m),coredata(EP1m))
>
> fig <- df %>% plot_ly(x = ~Date, type="candlestick",
+ open = ~EP1m.Open, close = ~EP1m.Close,
+ high = ~EP1m.High, low = ~EP1m.Low)
> fig <- fig %>% layout(title = "Basic Candlestick Chart",
+ xaxis = list(rangeslider = list(visible = F)))
>
> fig
Error in eval(expr, data, expr_env) : oggetto "EP1m.Open" non trovato
 
Quello sopra era un file scaricato da Quandl, daily. Se lo sostituisco col mio file estratto da Sierra in csv non cambia nulla e lo stesso se uso l'xlsx: Error in eval(expr, data, expr_env) : oggetto "EP1m.Open" non trovato

Questi sono estratti dai file dati, intraday e daily.

> head(EP1m)
Date.Time Open High Low Last Volume
1 07/01/2021 18:51 3790.50 3792.00 3790.25 3791.75 1698
2 07/01/2021 18:50 3790.50 3790.50 3789.75 3790.50 524
3 07/01/2021 18:49 3790.00 3790.50 3789.75 3790.50 562
4 07/01/2021 18:48 3789.75 3790.50 3789.50 3790.00 374
5 07/01/2021 18:47 3790.25 3790.50 3789.50 3789.75 761
6 07/01/2021 18:46 3790.25 3790.25 3790.00 3790.00 510


> head(EP1m)
Date Open High Low Last Change Settle Volume Previous Day Open Interest
1 2021-01-06 3717.50 3774.75 3685.50 3749.25 22.25 3740.50 2072388 2548506
2 2021-01-05 3695.00 3730.00 3673.25 3717.50 26.00 3718.25 1356426 2537381
3 2021-01-04 3748.75 3773.25 3652.50 3696.00 -56.50 3692.25 1972017 2531893
4 2020-12-31 3725.00 3753.00 3715.00 3748.75 24.50 3748.75 917212 2506748
5 2020-12-30 3724.50 3738.25 3716.50 3724.75 4.25 3724.25 738427 2494823
6 2020-12-29 3731.00 3747.75 3714.50 3724.25 -7.50 3720.00 972308 2478086



> library(plotly)
> library(quantmod)
> library(Quandl)
>
> #EP1m <- read_excel("C:/Users/Umberto/Desktop/Probabilità/EP1m.xlsx")
> EP1m <- read.csv2("C:/Users/Umberto/Documents/R/EP1mSC.csv")
>
> #library(readr)
> #EP1m <- read_delim("R/EP1mSC.csv", ";", escape_double = FALSE,
> # trim_ws = TRUE)
>
> #View(EP1m)
>
> #EP1m <- Quandl("CHRIS/CME_ES1", api_key="p773L9D7JVCxbALxubWq")
>
> head(EP1m)
Date.Time Open High Low Last Volume
1 07/01/2021 18:51 3790.50 3792.00 3790.25 3791.75 1698
2 07/01/2021 18:50 3790.50 3790.50 3789.75 3790.50 524
3 07/01/2021 18:49 3790.00 3790.50 3789.75 3790.50 562
4 07/01/2021 18:48 3789.75 3790.50 3789.50 3790.00 374
5 07/01/2021 18:47 3790.25 3790.50 3789.50 3789.75 761
6 07/01/2021 18:46 3790.25 3790.25 3790.00 3790.00 510
> colnames(EP1m)
[1] "Date.Time" "Open" "High" "Low" "Last" "Volume"
>
> #getSymbols("EP1m",src='csv')
> df <- data.frame(Date=index(EP1m),coredata(EP1m))
>
> fig <- df %>% plot_ly(x = ~Date, type="candlestick",
+ open = ~EP1m.Open, close = ~EP1m.Close,
+ high = ~EP1m.High, low = ~EP1m.Low)
> fig <- fig %>% layout(title = "Basic Candlestick Chart",
+ xaxis = list(rangeslider = list(visible = F)))
>
> fig

Error in eval(expr, data, expr_env) : oggetto "EP1m.Open" non trovato
 
Chiedo comprensione a tutti per l'intrusione, comunque, mi rendo conto che parlavate d'altro...
 
Chiedo comprensione a tutti per l'intrusione, comunque, mi rendo conto che parlavate d'altro...

Mi spiace, non uso quantmod perchè preferisco accentrarmi i dati in database MySQL e poi leggere tutto da li con una unica funzione, liberandomi così da pacchetti inutili.

A occhio non mi pare che hai specificato cosa hai messo nella variabile symbols presente in "getSymbols(Symbols = symbols, from = start, to = end)"
per cui non posso neppure replicare l'errore.

proporrei di spostarci in altro 3D dove parliamo esclusivamente di problematiche R.
 
Sarebbe ottimo, magari ci sono anche altri che come me hanno scoperto R e che vogliono imparare, ma ti riferisci a un thread già aperto o da aprire?
 
............................ eppure i livelli di parametri che la mia mente stimava risultavano in una qualsiasi proiezione Forward migliori di qualsiasi altro set di parametri stimati dalla macchina dopo poderosi training set nel back testing. Era incredibile osservare che sebbene i set elaborati dalla macchina fossero almeno di un ordine di grandezza migliori dei miei nella specificazione dei dati passati quando si passava all'analisi forward, cioè nell'out sample quindi stiamo parlando di predizione, i miei parametri risultavano mediamente migliori del 30-35% rispetto a quelli della macchina.

Quando ho aperto questo thread, cioè poco più di due anni fa, quello che avevo in mano, i risultati, le sensazioni erano quelle che descrivevo sopra. Risultati scadenti e delusioni.

E ciò anche perchè negli approcci anche solo poco più deterministici dell'evoluzione dei prezzi i risultati invece da me ottenuti erano outstanding. Eppure il Machine Learning non funzionava o quanto meno no mi funzionava allora. E' anche vero che potevo benissimo fare a meno del Machine Learning per migliorare i returns e sopratutto il return aggiustato al rischio (e questa e la parte più importante su cui tornerò alla fine)

Dicevamo del Machine Learning, ecco, alla fine mi ero trovato una quantità di algoritmi infinita, spesso algoritmi grezzi usati per esplorare ora quello ora questo. Insomma avevo una enorme libreria di "giocattoli" che risultava spesso non collegata. Insomma avevo un set di oggetti e poi ne avevo altri, avevo limiti negli inputs definiti scalarmente così che spesso dovevo intervenire nel codice per "divertirmi" con altre esplorazioni.

Avendo le macchine che già lavoravano per me e quindi disponendo di tempo libero, decisi che mi sarei fatto un ultimo regalo. Cioè avrei riorganizzato quella serie infinita di algoritmi.

Volevo creare una applicazione che fosse indipendente da tutti gli input, dai sottostanti, dalle asset class, dal singolo underlying alla combinazione di infiniti porfolios, dalle strategie, che utilizzasse il calcolo parallelo, che apprendesse da sola le risorse della macchina e le distribuisse, che avesse una super efficiente allocazione della RAM, che mi desse subito i risultati in maniera intellegibile, che li caricasse da sola su fogli di calcolo e sul DB subito per essere implementate live nel mercato, che potesse esplorare qualsiasi combinazione possibile di money management, che da sola facesse l'asseverazione dei risultati etc etc e che alla fine avesse una bella GUI dove potevo divertirmi a cambiare ora quello ora questo senza più intervenire nel codice. Iniziai questo percorso solo per gioco senza porre davvero nessuna speranza che potesse uscirmi qualcosa di davvero migliore rispetto ai risultati fin li ottenuti.

Chiaramente per fare una cosa del genere le linee di codice da scrivere diventavano infinite e con altrettanti infiniti bugs eppure esisteva la possibilità di ridurre quelle linee di codice di un fattore di 10^2 (stiamo parlando cmq di migliaia e migliaia di linee di codice)utilizzando la tecnica dell'array coding. Sostanzialmente ogni singola variabile è definita come array. L'inconveniente è che la complessità anch'essa sale ma ritengo di un fattore leggermente minore.

Insomma alla fine dopo un pò di mesi, anzi un bel pò di mesi, avevo una versione beta del mio "giocattolo", adesso potevo iniziare a divertirmi (presupposto minimo per fare machine learning è avere hardware adeguato e scrivere il codice nel senso di sfruttare l'hardware vedi calcolo parallelo, linguaggio CUDA da girare su gpu NVIDIA etc etc).

Come da tradizione vuole è per puro caso che, una sera esplorando una delle ennesime strategie dopo altrettanti ennesimi fallimenti, trovo qualcosa di interessante. Avete presente quando ad ARECIBO del progetto SETI captarono il segnale "WOW"? Ecco più o meno quello fu il mio approccio (ripeto non stavo cercando qualcosa per il trading le macchine già facevano un lavoro eccellente, semplicemente non capivo come fosse così difficile trovare un segnale stabile nell'infinito rumore di fondo che sono i mercati finanziari e quindi semplicemente volevo appurare che da parte mia tutto ciò che potevo fare e probabilmente di più fosse stato fatto).
Ma come ad ARECIBO e più in generale il metodo scientifico impone era necessario che quella cosa fosse ripetibile, che fosse indipendente dagli input, che fosse indipendente dal tempo etc etc. Così lanciai di nuovo la macchina e boom si apprendeva. E quando dico apprendeva mi riferisco al fatto che finalmente la macchina MI BATTEVA. Per ogni diversa combinazione di input e di tempo vi erano 99.9999....% di probabilità che la macchina batteva (FINALMENTE) l'intuizione umana. Dove le probabilità crescevano al numero di trainings set.

Qua dentro moltissimi hanno posto l'accento a cosa dare in pasto la macchina chi i prezzi, chi i volumi, chi le vendite di auto, il meteo, i tranding topics, i parcheggi vuoti o pieni degli stabilimenti di automobili, un mix di tutte queste cose ma nessuno e quando dico nessuno intendo nessuno, neanche io, ha posto mai l'accento sul come analizzo i dati.

Così è capitata l'assurda cosa che utilizzando gli stessi input, facendoli variare all'interno degli stessi range, lo stesso money management, facendo variare le stesse variabili, della stessa strategia ma in due modi diversi ottenevo risultati completamenti diversi.
Nel modo chiamiamolo 1 ottenevo un specificazione della macchina ai dati nell'in sample semplicemente outstanding ma quando si trattava di andare a fare previsioni nell'out of sample queste erano mediocri e quasi sempre inferiori a quello che aveva trovato il mio intuito umano.
Nel modo chiamiamolo 2 ottenevo una specificazione della macchina ai dati dell'in sample molto buona ma non così esagerata ma quello che più era importante è che nel forecast la macchina batteva il mio set definito ad intuito. E cosa ancora più importante i valori trovati erano tali che ai max (min) nell'in sample corrispondevano i max(min) nell'out of sample.

Finalmente la macchina apprendeva dal passato eliminando il rumore di fondo trovava il segnale portante.

Ad essere sinceri non ho ancora implementato i risultati del ML nel trading in quanto il modello matematico che sta lavorando lavora già molto bene di suo e prima di affidarmi ai risultati delle macchine preferisco stressarli. E qui veniamo ad un altro problema il metodo 1 aveva un costo computazionale elevatissimo ma il metodo 2 è davvero fuori portata dell'infrastruttura che ho a disposizione adesso e su cui sto lavorando per ampliarla. E ciò nonostante le tecniche di programmazione fatte in modo da abbassare enormemente i costi computazionali già implementate. Tecniche che utilizzano anche concetti matematico-statistici ad esempio il fatto che ogni estrazione casuale della macchina è considerata i.i.d. e quindi è possibile creare punti fissi per ogni training set e ripartire da quelli per non saturare la RAM (Siamo nell'ordine di Terabyte e di workstation multiprocessori del tipo ThreadRipper con 32 cpu e 64 core per ogni unità di calcolo, con gpu NVIDIA su cui implementare il CUDA che possono costare anche migliaia di $).

In conclusione quello che posso quindi dire dalla mia esperienza è che si il ML può funzionare e per farlo funzionare servono approcci matematici non convenzionali, risorse software e hardware sofisticatissime le prime e estremamente potenti le altre, ma che comunque anche se il ML funziona questo può rappresentare non più del 5% del contributo alla performance netta. E' la classica ciliegina sulla torta nulla di più nulla di meno.

Di seguito i grafici del primo modo e poi del secondo. (ovviamente i valori sono puramente indicativi e sono estrapolazioni di test fatti su porzioni molto limitate di tutti i fattori). Nelle ascisse sono indicati i training set, ogni training set può contenere svariati runs. Training set e runs dei rispettivi due metodi non sono comparabili tra di loro ma ciò è ininfluente ai fini di quanto ho scritto. (Ergo non è perchè un metodo ha fatto più runs e/o training set rispetto all'altro risulta migliore)

Ovviamente il threshold da battere è la linea viola.

At the beginning.png

Now.png
 
Ultima modifica:
Quest anno non è andata bene per i fondi che operano mediante AI, anche se poi Eureka Hedge dice poi così male non sono andati, anzi.

Qui un articolo dell FT

Subscribe to read | Financial Times

Certamente sono andati benissimo molti fondi tradizionali.

Rimane costante L anomalia ultra umana del Medallion che avrebbe fatto intorno al 60% con 10 billion di AUM, cioè 6 miliardi di net profit.

Ora il punto è che passi per la performance che mi sto accorgendo è si stellare ma ancora nell ipotesi del probabile, quello che davvero non riesco a capire è come lo fanno su 10 billions ed anche quali sono i costi di transazione.

Gli ultimi due punti sono quelli che sono da parte mia under investigation.
 
Quando ho aperto questo thread, cioè poco più di due anni fa, quello che avevo in mano, i risultati, le sensazioni erano quelle che descrivevo sopra. Risultati scadenti e delusioni.

E ciò anche perchè negli approcci anche solo poco più deterministici dell'evoluzione dei prezzi i risultati invece da me ottenuti erano outstanding. Eppure il Machine Learning non funzionava o quanto meno no mi funzionava allora. E' anche vero che potevo benissimo fare a meno del Machine Learning per migliorare i returns e sopratutto il return aggiustato al rischio (e questa e la parte più importante su cui tornerò alla fine)

Dicevamo del Machine Learning, ecco, alla fine mi ero trovato una quantità di algoritmi infinita, spesso algoritmi grezzi usati per esplorare ora quello ora questo. Insomma avevo una enorme libreria di "giocattoli" che risultava spesso non collegata. Insomma avevo un set di oggetti e poi ne avevo altri, avevo limiti negli inputs definiti scalarmente così che spesso dovevo intervenire nel codice per "divertirmi" con altre esplorazioni.

Avendo le macchine che già lavoravano per me e quindi disponendo di tempo libero, decisi che mi sarei fatto un ultimo regalo. Cioè avrei riorganizzato quella serie infinita di algoritmi.

Volevo creare una applicazione che fosse indipendente da tutti gli input, dai sottostanti, dalle asset class, dal singolo underlying alla combinazione di infiniti porfolios, dalle strategie, che utilizzasse il calcolo parallelo, che apprendesse da sola le risorse della macchina e le distribuisse, che avesse una super efficiente allocazione della RAM, che mi desse subito i risultati in maniera intellegibile, che li caricasse da sola su fogli di calcolo e sul DB subito per essere implementate live nel mercato, che potesse esplorare qualsiasi combinazione possibile di money management, che da sola facesse l'asseverazione dei risultati etc etc e che alla fine avesse una bella GUI dove potevo divertirmi a cambiare ora quello ora questo senza più intervenire nel codice. Iniziai questo percorso solo per gioco senza porre davvero nessuna speranza che potesse uscirmi qualcosa di davvero migliore rispetto ai risultati fin li ottenuti.

Chiaramente per fare una cosa del genere le linee di codice da scrivere diventavano infinite e con altrettanti infiniti bugs eppure esisteva la possibilità di ridurre quelle linee di codice di un fattore di 10^2 (stiamo parlando cmq di migliaia e migliaia di linee di codice)utilizzando la tecnica dell'array coding. Sostanzialmente ogni singola variabile è definita come array. L'inconveniente è che la complessità anch'essa sale ma ritengo di un fattore leggermente minore.

Insomma alla fine dopo un pò di mesi, anzi un bel pò di mesi, avevo una versione beta del mio "giocattolo", adesso potevo iniziare a divertirmi (presupposto minimo per fare machine learning è avere hardware adeguato e scrivere il codice nel senso di sfruttare l'hardware vedi calcolo parallelo, linguaggio CUDA da girare su gpu NVIDIA etc etc).

Come da tradizione vuole è per puro caso che, una sera esplorando una delle ennesime strategie dopo altrettanti ennesimi fallimenti, trovo qualcosa di interessante. Avete presente quando ad ARECIBO del progetto SETI captarono il segnale "WOW"? Ecco più o meno quello fu il mio approccio (ripeto non stavo cercando qualcosa per il trading le macchine già facevano un lavoro eccellente, semplicemente non capivo come fosse così difficile trovare un segnale stabile nell'infinito rumore di fondo che sono i mercati finanziari e quindi semplicemente volevo appurare che da parte mia tutto ciò che potevo fare e probabilmente di più fosse stato fatto).
Ma come ad ARECIBO e più in generale il metodo scientifico impone era necessario che quella cosa fosse ripetibile, che fosse indipendente dagli input, che fosse indipendente dal tempo etc etc. Così lanciai di nuovo la macchina e boom si apprendeva. E quando dico apprendeva mi riferisco al fatto che finalmente la macchina MI BATTEVA. Per ogni diversa combinazione di input e di tempo vi erano 99.9999....% di probabilità che la macchina batteva (FINALMENTE) l'intuizione umana. Dove le probabilità crescevano al numero di trainings set.

Qua dentro moltissimi hanno posto l'accento a cosa dare in pasto la macchina chi i prezzi, chi i volumi, chi le vendite di auto, il meteo, i tranding topics, i parcheggi vuoti o pieni degli stabilimenti di automobili, un mix di tutte queste cose ma nessuno e quando dico nessuno intendo nessuno, neanche io, ha posto mai l'accento sul come analizzo i dati.

Così è capitata l'assurda cosa che utilizzando gli stessi input, facendoli variare all'interno degli stessi range, lo stesso money management, facendo variare le stesse variabili, della stessa strategia ma in due modi diversi ottenevo risultati completamenti diversi.
Nel modo chiamiamolo 1 ottenevo un specificazione della macchina ai dati nell'in sample semplicemente outstanding ma quando si trattava di andare a fare previsioni nell'out of sample queste erano mediocri e quasi sempre inferiori a quello che aveva trovato il mio intuito umano.
Nel modo chiamiamolo 2 ottenevo una specificazione della macchina ai dati dell'in sample molto buona ma non così esagerata ma quello che più era importante è che nel forecast la macchina batteva il mio set definito ad intuito. E cosa ancora più importante i valori trovati erano tali che ai max (min) nell'in sample corrispondevano i max(min) nell'out of sample.

Finalmente la macchina apprendeva dal passato eliminando il rumore di fondo trovava il segnale portante.

Ad essere sinceri non ho ancora implementato i risultati del ML nel trading in quanto il modello matematico che sta lavorando lavora già molto bene di suo e prima di affidarmi ai risultati delle macchine preferisco stressarli. E qui veniamo ad un altro problema il metodo 1 aveva un costo computazionale elevatissimo ma il metodo 2 è davvero fuori portata dell'infrastruttura che ho a disposizione adesso e su cui sto lavorando per ampliarla. E ciò nonostante le tecniche di programmazione fatte in modo da abbassare enormemente i costi computazionali già implementate. Tecniche che utilizzano anche concetti matematico-statistici ad esempio il fatto che ogni estrazione casuale della macchina è considerata i.i.d. e quindi è possibile creare punti fissi per ogni training set e ripartire da quelli per non saturare la RAM (Siamo nell'ordine di Terabyte e di workstation multiprocessori del tipo ThreadRipper con 32 cpu e 64 core per ogni unità di calcolo, con gpu NVIDIA su cui implementare il CUDA che possono costare anche migliaia di $).

In conclusione quello che posso quindi dire dalla mia esperienza è che si il ML può funzionare e per farlo funzionare servono approcci matematici non convenzionali, risorse software e hardware sofisticatissime le prime e estremamente potenti le altre, ma che comunque anche se il ML funziona questo può rappresentare non più del 5% del contributo alla performance netta. E' la classica ciliegina sulla torta nulla di più nulla di meno.

Di seguito i grafici del primo modo e poi del secondo. (ovviamente i valori sono puramente indicativi e sono estrapolazioni di test fatti su porzioni molto limitate di tutti i fattori). Nelle ascisse sono indicati i training set, ogni training set può contenere svariati runs. Training set e runs dei rispettivi due metodi non sono comparabili tra di loro ma ciò è ininfluente ai fini di quanto ho scritto. (Ergo non è perchè un metodo ha fatto più runs e/o training set rispetto all'altro risulta migliore)

Ovviamente il threshold da battere è la linea viola.

Vedi l'allegato 2740748

Vedi l'allegato 2740749
Ciao, forse nel caso in cui avevi ottenuto ottimi risultati in-sample ma non out of sample la rete era andata in overfitting?

Non ho letto tutta la discussione fin dal principio, ma ho qualche domanda:
1) Che tipo di reti usi? Multilevel perceptron?
2) Indipendentemente dal tipo di rete, quanti input e quanti output? Quanti layers?
3) Quale funzione di attivazione utilizzi per la rete?
Giusto per inquadrare meglio il lavoro che stai facendo.
Poi concordo con te che e' equalmente importante come presentare i dati alla rete.
 
Qua dentro moltissimi hanno posto l'accento a cosa dare in pasto la macchina chi i prezzi, chi i volumi, chi le vendite di auto, il meteo, i tranding topics, i parcheggi vuoti o pieni degli stabilimenti di automobili, un mix di tutte queste cose ma nessuno e quando dico nessuno intendo nessuno, neanche io, ha posto mai l'accento sul come analizzo i dati.

Popolarmente: raccogliamo informazioni dalle ultime “candele” di prezzi, le diamo in pasto ad una rete neurale in apprendimento profondo, e le usiamo per prevedere le candele successive. Oppure, sempre popolarmente: cerchiamo di prevedere il segno del rendimento della barra successiva.
Ancor più popolarmente siamo spesso interessati a prevedere direttamente il prezzo, 1 candela avanti.
Ma a prevedere una differenza di prezzo rispetto a un orizzonte di previsione più lungo, (ad. es 3 barre) , e magari per lo stesso giorno della prossima settimana no?...
Così come -credo- siano ben pochi a pensare di poter prevedere qualcosa come la prossima gamba di un indicatore Zigzag. Più ragionevole ancora i forecast sugli indicatori macro (cosa per la quale l’econometria è stata tra l’altro concepita e vi trova la sua naturale ragion d’essere) uno su tutti i famigerati Non Farm Payrol ed il suo impatto sui prezzi n periodi avanti. O ancora: la probabilità di un crollo del mercato domani. La conseguente strategia d’utilizzo in questi ultimi casi non per forza di cose deve essere attuata con trading automatico, anzi, meglio una strategia con opzioni .
Se si scandaglia a fondo il web, mi sembra che tra gli specialisti, si sia formata l’opinione che la previsione diretta dei prezzi (o suoi immediati derivati matematicamente e opportunamente “schiacciati” in funzione dell’architettura di ML che stiamo adoperando), inerenti attività mobiliari quotate in continua, sia la peste nera della modellistica in generale. Spesso è più facile da prevedere qualcosa di completamente diverso dai prezzi, meglio ciò che li influenza, credo sia questo il tuo riferimento al come analizzare i dati , o sbaglio ?
 
Ultima modifica:
Osservate i grafici.

Abbiamo gli stessi input, lo stesso tutto, tanto è vero che in steady state cioè con i miei valori delle variabili ottengo gli stessi risultate per due time frame (in sample and out of sample) che poi in steady state si ha che in sample = out of sample.

Detto questo adesso accade la singolarità. Chiedo alla macchina di trovare valori migliori delle singole variabili del modello matematico tali da massimizzare il risultato dell equazione. Attenzione l equazione è la stessa come dicevo. Così come le variabili etc etc. Nel metodo 1 già al primo training set la macchina trova valori ottimi tali da portatore il valore dell equazione ben sopra 40 mentre il mio intuito si era fermato sotto 10. Dovrei aspettarmi un forecast molto migliore del mio ed invece nessun miglioramento, neanche in corrispondenza del max risultato dei vari training set il forecast migliora. La regressione lineare da come risultato una linda con una slope pari a zero. I risultati dicono che non c’è niente nel passato che possa darci una lettura del futuro siamo in presenza di una random walk.
Nel metodo 2 accade quello che ci si aspetterebbe dal ML, la macchina apprende e migliora i risultati ed a quei risultati corrisponde un miglioramento del forecast. Bingo.

Stavolta la tendenza non ha slope uguale a zero ma è positiva.

Cosa ho in mano, in mano ho un modello matematico con n variabili semplicemente cerco di trovare i valori del modello che massimizzano il risultati dell equazione
 
Buonasera a tutti, se mi è consentito vorrei fare un piccolo appello agli esperti del forum e del topic in particolare, ovviamente dopo essermi presentato.
Sono Federico, un ragazzo di 35 anni appassionato di finanza da almeno 10 e questo post è frutto solo ed esclusivamente di disperazione. Lo faccio qua perchè questo topic è un faro assoluto e mi ci sto aggrappando.
Ciclicamente mi dedico allo studio della materia, tempo permettendo, ma non ho mai completato il percorso. Ho iniziato come tutti: manuali di analisi tecnica, paper trading, soldi persi, soldi vinti, guide, corsi, certificazioni. Logicamente sono arrivato al punti di credere che l'analisi tecnica serva a poco e solo due approcci funzionino: investimenti a lungo termine (non me lo posso permettere) e sistemi automatici su base statistica o di machine learning. L'HFT manco lo calcolo, per i retail è fuori portata.
Da almeno un anno studio il machine learning con applicazione finanziaria con lo scopo di creare un sistema automatico profittevole. Per farlo, avendola presa come missione, ho rischiato di far finire una relazione di 10 anni e di buttare via il mio lavoro. Nessuno, a parte mia madre, crede che ce la faccia. A dire il vero nemmeno io.
Ho studiato decine di manuali in inglese, seguito centinaia di corsi online, da Youtube al MIT. Mi sono, con molto sforzo avendo una formazione umanistica ed essendo rimasto alle tabelline per quanto concerne la matematica, creato una basilare formazione scientifica. Dall'analisi all'algebra lineare passando per la statistica bayesiana e non.
Tolta la parte sul deep learning che francamente ora mi fonderebbe il cervello, ho studiato ogni forma possibile di tecnica di machine learning.
Ho imparato a programmare con Python e a collegarmi via API con i broker. Tutto sempre in demo, non ho nessuna intenzione di andare live fino ad un backtest decente.
Trado solo su Forex, CFD, cripto sporadicamente, azionario raramente. Per questioni meramente di budget.
Arrivo al punto scusandomi per la prolissità: ho un sistema di trading che seleziona dati storici, fa data wrangling, feature selection, feature engineering e poi allena un modello di XGBoost Classification. Il target label è ovviamente binario. L'obiettivo è quello più banale, predire il return della prossima barra (5 minuti, 1 ora, 4 ore o giornaliera). Se mi da 1 vai long, -1 short. La parte di risk management e position sizing non la menziono, al momento mi interessa un modello profittevole con buone accuracy e recall.
Come il 99% dei casi ottimo in train, discreto in test, sostanzialmente random e da buttare in live.
Sono stato mesi a studiarmi la selezione delle features, altri mesi a trovare un target sensato e valido. Niente.
Ho provato tutti i sistemi di cross validation, gridsearch per fare il tuning dei parametri, diversi split dei dati, correzione del bilanciamento delle classi, niente.
Mi sono studiato il testo, a detta di molti rivoluzionario, di Lopez de Prado. Ho cercato di implementare alcune sue tecniche sulle time bars, visto che lui parte dai tick data (insostenibili per costi e capacità computazionale). Dal suo libro ho provato ad usare la fractional differentiation, il CUSUM filter per selezionare samples validi e la purged cross validation.
Ora il mio processo è questo: dati storici (tra i 2 anni sui 5 minuti e i 10 anni per le giornaliere), aggiustamento del time index. Applico all'intero dataset la fractional differentiation (tra 0.3 e 0.5), applico il cusum filter all'intero dataset. Poi aggiungo un centinaio di features tipo: dollar value, vari ratio, indicatori tecnici, return, lagged return, ratio dei return, ratio sul volume, linear regression, low pass filters, volatilità, rolling means ecc. Poi calcolo il target label che è la chiusura della barra dopo. Però uso la chiusura con applicato il frac diff. Essendo sempre positivo uso questa logica: se la prossima chiusura è maggiore di quella attuale è classe 1, altrimenti -1.
Poi faccio train e test split con sklearn e infine applico il modello di XGBoost. Già così il test gira sui 65/70% di accuratezza. Ottimizzo i parametri con gridsearch e salvo il modello.
Il modello salvato lo sbatto in una funzione che carica le barre storiche da un noto broker e che ad ogni nuova barra chiama una funzione che ricrea tutti i feature del modello sui dati live. Quindi se il train/test ha 105 features li ricostruisco sulle barre aggiornate ad ogni avvio funzione, frac diff compreso. Il cusum invece no, perchè eliminando la continuità della serie storica e selezionando solo eventi non saprei come gestire una predizione su barre non recenti. Ovviamente estrapolo l'ultima barra e ci applico la predizione di classe e di probabilità di appartenenza (quella che servirà anche per settare l'expected return e quindi la percentuale di rischio). Altra funzione applica il risk management ecc. andando poi lungo o corto. Non funziona, ovviamente.
Sto uscendo letteralmente di testa. Le mie domande sono queste, se avete avuto la pazienza di leggere e se siete mossi da compassione :D:
- che voi sappiate è corretto applicare la fractional differentiation a tutto il dataset prima dello split o rischio look-ahead bias e overfitting?
- stessa domanda però sul CUSUM filter. Anche perchè de Prado lo usa in un sistema del tutto diverso e non saprei come gestirlo. Io lo sto applicando a tutto il dataset prima dello split, ma ho la certezza sia errato. Non a caso se lo applico separatamente a train data e test data l'accuratezza crolla.
- ha senso usare il prezzo di chiusura con applicata la fractional differentiation invece del classico return, come target label?
- ha senso calcolare il return e applicarci sopra la frac diff e usarlo come target label? Non ho idea di che golem abbia creato ma funziona.
- altra cosa che ho notato è la scarsa sensibilità ai cambi di direzione. Esempio: 10 barre da 1 ora, real time 6 long e 4 short, le probabilità predette mi danno 10 long. Eppure
le classi sono bilanciate. Ci sono sistemi per aumentare la sensibilità?

Detto tutto ciò, e chiedo davvero scusa a moderatori e partecipanti, vi chiedo con il cuore in mano di darmi una mano. Non voglio segreti, non voglio le vostre tecniche, non voglio rivelazioni. Conosco il "codice cavalleresco" del trading per cui il proprio lavoro e i sistemi funzionanti non si svelano a nessuno, figuriamoci gli sconosciuti.
Vi chiedo solo di aiutare una ragazzo che ci ha buttato tempo, famiglia e passione a prendere la strada giusta (qualora esista) e a risolvere tanti dubbi.
Oltre alle domande tecniche precedenti vorrei solo sapere: ci sono target labels efficaci così frullo gli altri? Cioè cosa predico, che segnali voglio ottenere?
Ci sono features veramente valide da dare in pasto al modello senza che perda tempo con 200 indicatori inutili?
Il machine learning funziona o posso buttare nel cestino via anni di lacrime e sangue? Per saperlo, almeno mi rilasso e chiudo una fase.
Grazie davvero a tutti, è un post davvero interessante con dibattiti di spessore tra esperti serissimi. Spero di non essere stato fuori luogo e spero di non essere sembrato saccente nell'utilizzo di tanti inglesismi, è solo perchè avendo studiato tutto in inglese mi risultano più immediati.

P.S. amartya78 mi ha ispirato a chiedere un sostegno, mi ha ridato una piccola speranza dopo settimane di sconforto. Ho letto anche i consigli di un altro utente che faceva riferimento a dei blog che già seguo. Molto interessanti, solo che usano R e C che sono meno intuitivi di Python.
 
Buonasera a tutti, se mi è consentito vorrei fare un piccolo appello agli esperti del forum e del topic in particolare, ovviamente dopo essermi presentato.
Sono Federico, un ragazzo di 35 anni appassionato di finanza da almeno 10 e questo post è frutto solo ed esclusivamente di disperazione. Lo faccio qua perchè questo topic è un faro assoluto e mi ci sto aggrappando.
Ciclicamente mi dedico allo studio della materia, tempo permettendo, ma non ho mai completato il percorso. Ho iniziato come tutti: manuali di analisi tecnica, paper trading, soldi persi, soldi vinti, guide, corsi, certificazioni. Logicamente sono arrivato al punti di credere che l'analisi tecnica serva a poco e solo due approcci funzionino: investimenti a lungo termine (non me lo posso permettere) e sistemi automatici su base statistica o di machine learning. L'HFT manco lo calcolo, per i retail è fuori portata.
Da almeno un anno studio il machine learning con applicazione finanziaria con lo scopo di creare un sistema automatico profittevole. Per farlo, avendola presa come missione, ho rischiato di far finire una relazione di 10 anni e di buttare via il mio lavoro. Nessuno, a parte mia madre, crede che ce la faccia. A dire il vero nemmeno io.
Ho studiato decine di manuali in inglese, seguito centinaia di corsi online, da Youtube al MIT. Mi sono, con molto sforzo avendo una formazione umanistica ed essendo rimasto alle tabelline per quanto concerne la matematica, creato una basilare formazione scientifica. Dall'analisi all'algebra lineare passando per la statistica bayesiana e non.
Tolta la parte sul deep learning che francamente ora mi fonderebbe il cervello, ho studiato ogni forma possibile di tecnica di machine learning.
Ho imparato a programmare con Python e a collegarmi via API con i broker. Tutto sempre in demo, non ho nessuna intenzione di andare live fino ad un backtest decente.
Trado solo su Forex, CFD, cripto sporadicamente, azionario raramente. Per questioni meramente di budget.
Arrivo al punto scusandomi per la prolissità: ho un sistema di trading che seleziona dati storici, fa data wrangling, feature selection, feature engineering e poi allena un modello di XGBoost Classification. Il target label è ovviamente binario. L'obiettivo è quello più banale, predire il return della prossima barra (5 minuti, 1 ora, 4 ore o giornaliera). Se mi da 1 vai long, -1 short. La parte di risk management e position sizing non la menziono, al momento mi interessa un modello profittevole con buone accuracy e recall.
Come il 99% dei casi ottimo in train, discreto in test, sostanzialmente random e da buttare in live.
Sono stato mesi a studiarmi la selezione delle features, altri mesi a trovare un target sensato e valido. Niente.
Ho provato tutti i sistemi di cross validation, gridsearch per fare il tuning dei parametri, diversi split dei dati, correzione del bilanciamento delle classi, niente.
Mi sono studiato il testo, a detta di molti rivoluzionario, di Lopez de Prado. Ho cercato di implementare alcune sue tecniche sulle time bars, visto che lui parte dai tick data (insostenibili per costi e capacità computazionale). Dal suo libro ho provato ad usare la fractional differentiation, il CUSUM filter per selezionare samples validi e la purged cross validation.
Ora il mio processo è questo: dati storici (tra i 2 anni sui 5 minuti e i 10 anni per le giornaliere), aggiustamento del time index. Applico all'intero dataset la fractional differentiation (tra 0.3 e 0.5), applico il cusum filter all'intero dataset. Poi aggiungo un centinaio di features tipo: dollar value, vari ratio, indicatori tecnici, return, lagged return, ratio dei return, ratio sul volume, linear regression, low pass filters, volatilità, rolling means ecc. Poi calcolo il target label che è la chiusura della barra dopo. Però uso la chiusura con applicato il frac diff. Essendo sempre positivo uso questa logica: se la prossima chiusura è maggiore di quella attuale è classe 1, altrimenti -1.
Poi faccio train e test split con sklearn e infine applico il modello di XGBoost. Già così il test gira sui 65/70% di accuratezza. Ottimizzo i parametri con gridsearch e salvo il modello.
Il modello salvato lo sbatto in una funzione che carica le barre storiche da un noto broker e che ad ogni nuova barra chiama una funzione che ricrea tutti i feature del modello sui dati live. Quindi se il train/test ha 105 features li ricostruisco sulle barre aggiornate ad ogni avvio funzione, frac diff compreso. Il cusum invece no, perchè eliminando la continuità della serie storica e selezionando solo eventi non saprei come gestire una predizione su barre non recenti. Ovviamente estrapolo l'ultima barra e ci applico la predizione di classe e di probabilità di appartenenza (quella che servirà anche per settare l'expected return e quindi la percentuale di rischio). Altra funzione applica il risk management ecc. andando poi lungo o corto. Non funziona, ovviamente.
Sto uscendo letteralmente di testa. Le mie domande sono queste, se avete avuto la pazienza di leggere e se siete mossi da compassione :D:
- che voi sappiate è corretto applicare la fractional differentiation a tutto il dataset prima dello split o rischio look-ahead bias e overfitting?
- stessa domanda però sul CUSUM filter. Anche perchè de Prado lo usa in un sistema del tutto diverso e non saprei come gestirlo. Io lo sto applicando a tutto il dataset prima dello split, ma ho la certezza sia errato. Non a caso se lo applico separatamente a train data e test data l'accuratezza crolla.
- ha senso usare il prezzo di chiusura con applicata la fractional differentiation invece del classico return, come target label?
- ha senso calcolare il return e applicarci sopra la frac diff e usarlo come target label? Non ho idea di che golem abbia creato ma funziona.
- altra cosa che ho notato è la scarsa sensibilità ai cambi di direzione. Esempio: 10 barre da 1 ora, real time 6 long e 4 short, le probabilità predette mi danno 10 long. Eppure
le classi sono bilanciate. Ci sono sistemi per aumentare la sensibilità?

Detto tutto ciò, e chiedo davvero scusa a moderatori e partecipanti, vi chiedo con il cuore in mano di darmi una mano. Non voglio segreti, non voglio le vostre tecniche, non voglio rivelazioni. Conosco il "codice cavalleresco" del trading per cui il proprio lavoro e i sistemi funzionanti non si svelano a nessuno, figuriamoci gli sconosciuti.
Vi chiedo solo di aiutare una ragazzo che ci ha buttato tempo, famiglia e passione a prendere la strada giusta (qualora esista) e a risolvere tanti dubbi.
Oltre alle domande tecniche precedenti vorrei solo sapere: ci sono target labels efficaci così frullo gli altri? Cioè cosa predico, che segnali voglio ottenere?
Ci sono features veramente valide da dare in pasto al modello senza che perda tempo con 200 indicatori inutili?
Il machine learning funziona o posso buttare nel cestino via anni di lacrime e sangue? Per saperlo, almeno mi rilasso e chiudo una fase.
Grazie davvero a tutti, è un post davvero interessante con dibattiti di spessore tra esperti serissimi. Spero di non essere stato fuori luogo e spero di non essere sembrato saccente nell'utilizzo di tanti inglesismi, è solo perchè avendo studiato tutto in inglese mi risultano più immediati.

P.S. amartya78 mi ha ispirato a chiedere un sostegno, mi ha ridato una piccola speranza dopo settimane di sconforto. Ho letto anche i consigli di un altro utente che faceva riferimento a dei blog che già seguo. Molto interessanti, solo che usano R e C che sono meno intuitivi di Python.
Se ti interessa, il mio parere e':
mai mettere in secondo piano famiglia/relazioni per il trading
non lasciare il tuo lavoro
dedica alle tue ricerche il tempo libero, senza sottrarre tempo alla famiglia/compagna
vedilo come un gioco, perche' niente garantisce che un sistema funzionante oggi funzionera' anche domani
non esistono formule segrete di successo.
 
Se posso permettermi di dare un consiglio, ma davvero se posso, visto che la materia è scivolosa anche per i più navigati, è che nella mia esperienza L errore più grave ed anche il più diffuso è il fatto che non si tiene conto dei gradi di libertà.

Una rete neurale consuma tanti gradi di libertà, faccio un esempio se hai una regola allora stai consumando un grado di libertà, se hai una regressione lineare allora ne stai consumando 2, se hai un polinomio ne consumi tanti quanti sono i monomi, se hai una media mobile a 10 ne consumi 10, se ne hai una a 200 ne consumi 200, se hai 100 nodi e una media mobile a 200 ne consumi 300 e via dicendo. Se hai una media a 3 ed una a 10 ne consumi sempre 10.

Ora, credetemi, ho visto modelli implementati live che consumavano più dati di quelli che erano disponibili. Capisci bene che L unico esito può essere solo la rovina.

Ora dico questo perché il concetto di gradi di libertà è intimamente legato a quello dell overfitting, ovvero sono i pochi gradi di libertà che originano (il più delle volte) L overfitting.

Ma il concetto di gradi di libertà lo hai appreso solo se sei stato uno studente perché è uno di quelli argomenti che sei obbligato a studiare e che non ti piace (almeno a me non piaceva). Ritengo che la funzione più importante della scuola sia quella che ti obbliga a studiare un programma intero indipendentemente se l argomento ti piace o meno.

Una delle spiegazioni che mi sono dato per il fatto che il ML ora mi funziona con il metodo 2 è che ritengo (sto facendo una investigazione) che i gradi di libertà consumati siano passati dall essere meno dell 1% ad essere meno dello 0.01%.

Poi ripeto io sto parlando di ML cioè il topic del thread, ma se invece la domanda è il trading quantitativo e sistematico funziona allora la mia più sincera opinione è che il ML in seno a questo settore conti meno del 5%. Per capirci quest anno molto fondi quantitativi basati su AI hanno perso. In sintesi se supponiamo che il Medalliom sia il miglior fondo quantitativo al mondo allora io sono sicuro che il Medallion fa quelle performance solo e soltanto perché dietro vi è definita in algoritmi una costruione quantitativa basata sulla pia ampia letteratura di concetti tradizionali di matematica e statistica. Per me la dentro il ML e’ meno dell 1%. E lo dico proprio perché mi sono accorto che finora ho fatto benissimo a meno del ML migliorando i ritorni ed il rischio semplicemente ampliando L inserimento di concetti matematici e statistici nel modello.

Basarsi solo su ML per andare live dal mio punto di vista è folle.

Io intendo il ML come L Ottimizzazione dell elemento forecast di un modello di gestione che tiene in seno qualsiasi aspetto e di cui il forecast è solo uno degli elementi. È un processo di apprendimento lungo che passa per tentativi ed errori.

La Rentec ha speso oltre 10 anni per vincere, il più grande scommettitore al mondo che ha accumulato una fortuna di oltre 1 billions ed adesso bannato da tutti i casinò del mondo ha speso più di 10 anni per perfezionare i modelli.

Ed è anche per questo che sono qui a parlarne. :D

Semmai adesso sono più interessato all executions degli ordini come minimizzare lo spread, come gestire parecchi parecchi soldi mantenendo efficiente L operatività dei modelli. Ecco queste sono le cose su cui sto lavorando adesso. Il ML dal mio punto di vista è una Ottimizzazione che può aspettare ad essere implementata proprio perché ho capito che il salto è venuto dall implementare tanti altri concetti matematici e statistici più tradizionali ma in definitiva molto molto più robusti.
 
Per Federico,


allora come già ho detto più volte dire se il ML funziona o meno non è la domanda da fare, a mio avviso, perché lo ritengo quasi ininfluente ai fini del return.

La domanda da porsi è posso basare il mio approccio sul trading solo sul ML, solo sul ML allora la mia risposta è un secco NO. Io non lo farei mai.

Ma questa e soltanto la mia opinione.

PS
Non sacrificare mai la tua famiglia ed il lavoro che ti da il pane, e sai perché, beh perché non serve anzi.
Io ho raggiunto i miei risultati migliori proprio quando passavo più tempo con la famiglia o guadagnavo di più facendo altro.
 
Indietro