Utilizzare la statistica con Pine Script Ciao a tutti !
Oggi vogliamo offrire un contenuto di alto valore alla comunità italiana di Trading View motivandola nell' utilizzare Pine Script, un potente linguaggio di programmazione proprietario progettato per essere il migliore in termini di elaborazione dati finanziari e trading.
Andremo a commentare il codice rilasciato nella nostra sezione script 'Reinforced RSI':
La strategia proposta è una strategia long che utilizza l'indicatore RSI con un rinforzo matematico statistico, rilevabile integrando il nostro modulo 'Probabilities'.
Il modulo Probabilities, calcola le probabilità passate di ciascuna operazione e permette di estrapolare le probabilità di operazioni profittevoli in termini quantitativi.
Logica della strategia: si acquista long, utilizzando l'indicatore RSI, su un determinato valore di iper venduto chiudendo l'operazione su un determinato livello di iper comprato. Ogni operazione è regolata da stop loss e take profit, offrendo maggiore dinamicità alla strategia. Infine viene integrato il modulo 'Probabilities' che filtra le operazioni, evitando di scambiare in periodi poco profittevoli. Utilizzando questo modulo infatti, le operazioni vengono aperte e eseguite a mercato solo ed esclusivamente se le probabilità passate di scambiare in profitto sono maggiori al 51%.
Commentiamo quindi il codice sorgente di Reinforced RSI, rendendolo il più fruibile e chiaro possibile.
//@version=5
strategy("RSI with reinforcement",
overlay = true,
default_qty_type = strategy.percent_of_equity,
default_qty_value = 100,
pyramiding = 1,
currency = currency.EUR,
initial_capital = 1000,
commission_type = strategy.commission.percent,
commission_value = 0.07)
Questo primo blocco di codice descrive la tipologia di script, popolando la strategia con tutte le informazioni necessarie al suo corretto funzionamento.
lenght_rsi = input.int(defval = 14, minval = 1, title = "RSI lenght: ")
rsi = ta.rsi(close, length = lenght_rsi)
Si crea una variabile integrata e modificabile dall' interfaccia utente per regolare la lunghezza di calcolo dell'indicatore RSI.
Si chiama l' indicatore RSI, calcolando la formula sul prezzo 'close' che verrà calcolata sulla lunghezza impostata.
rsi_value_check_entry = input.int(defval = 35, minval = 1, title = "Oversold: ")
rsi_value_check_exit = input.int(defval = 75, minval = 1, title = "Overbought: ")
Si creano due variabili integrate e modificabili dall' interfaccia utente per regolare i valori di iper venduto e iper comprato.
trigger = ta.crossunder(rsi, rsi_value_check_entry)
exit = ta.crossover(rsi, rsi_value_check_exit)
Si definiscono le condizioni di ingresso e uscita. Si aprirà una operazione long se il prezzo è sul livello di iper venduto e si chiuderà la posizione al livello di iper comprato.
entry_condition = trigger
TPcondition_exit = exit
look = input.int(defval = 30, minval = 0, maxval = 500, title = "Lookback period: ")
Probabilities(lookback) =>
isActiveLong = false
isActiveLong := nz(isActiveLong , false)
isSellLong = false
isSellLong := nz(isSellLong , false)
int positive_results = 0
int negative_results = 0
float positive_percentage_probabilities = 0
float negative_percentage_probabilities = 0
LONG = not isActiveLong and entry_condition == true
CLOSE_LONG_TP = not isSellLong and TPcondition_exit == true
p = ta.valuewhen(LONG, close, 0)
p2 = ta.valuewhen(CLOSE_LONG_TP, close, 0)
for i = 1 to lookback
if (LONG )
isActiveLong := true
isSellLong := false
if (CLOSE_LONG_TP )
isActiveLong := false
isSellLong := true
if p > p2
positive_results += 1
else
negative_results -= 1
positive_relative_probabilities = positive_results / lookback
negative_relative_probabilities = negative_results / lookback
positive_percentage_probabilities := positive_relative_probabilities * 100
negative_percentage_probabilities := negative_relative_probabilities * 100
positive_percentage_probabilities
probabilities = Probabilities(look)
Si integra il modulo delle probabilità, aggiustando il codice sorgente al nostro use case.
In particolare assegnamo le condizioni di ingresso e uscita con:
entry_condition = trigger
TPcondition_exit = exit
Assegnamo poi al contenitore di trade positivi +1 se il prezzo di chiusura dell'operazione è maggiore rispetto a quello di chiusura.
Facciamo lo stesso per le operazioni negative in cui il prezzo di chiusura è inferiore a quello di apertura.
Automaticamente il modulo calcolerà le probabilità passate della strategia.
if p > p2
positive_results += 1
else
negative_results += 1
Concluso l'aggiustamento del modulo al nostro use case, passiamo a concludere la strategia.
lots = strategy.equity/close
var float e = 0
var float c = 0
Calcoliamo la quantità da scambiare per ogni singola posizione (100% dell'equity depositato sulla strategia).
tp = input.float(defval = 1.00, minval = 0, title = "Take profit: ")
sl = input.float(defval = 1.00, minval = 0, title = "Stop loss: ")
Creiamo due variabili integrate all' interno dell'interfaccia utente. Una per regolare il take profit, l'altra per regolare lo stop loss.
if trigger==true and strategy.opentrades==0 and probabilities >= 51
e := close
strategy.entry(id = "e", direction = strategy.long, qty = lots, limit = e)
takeprofit = e + ((e * tp)/100)
stoploss = e - ((e * sl)/100)
if exit==true
c := close
strategy.exit(id = "c", from_entry = "e", limit = c)
if takeprofit and stoploss
strategy.exit(id = "c", from_entry = "e", stop = stoploss, limit = takeprofit)
Infine si descrive la logica di trading, specificando che ogni trade viene effettuato solo ed esclusivamente se le probabilità sono uguali o maggiori a 51%.
Puoi trovare il codice completo qui sotto, oppure nella nostra sezione script :
// This source code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © thequantscience
//@version=5
strategy("RSI with reinforcement",
overlay = true,
default_qty_type = strategy.percent_of_equity,
default_qty_value = 100,
pyramiding = 1,
currency = currency.EUR,
initial_capital = 1000,
commission_type = strategy.commission.percent,
commission_value = 0.07)
lenght_rsi = input.int(defval = 14, minval = 1, title = "RSI lenght: ")
rsi = ta.rsi(close, length = lenght_rsi)
rsi_value_check_entry = input.int(defval = 35, minval = 1, title = "RSI value check entry: ")
rsi_value_check_exit = input.int(defval = 75, minval = 1, title = "RSI value check exit: ")
trigger = ta.crossunder(rsi, rsi_value_check_entry)
exit = ta.crossover(rsi, rsi_value_check_exit)
entry_condition = trigger
TPcondition_exit = exit
look = input.int(defval = 30, minval = 0, maxval = 500, title = "Lookback period: ")
Probabilities(lookback) =>
isActiveLong = false
isActiveLong := nz(isActiveLong , false)
isSellLong = false
isSellLong := nz(isSellLong , false)
int positive_results = 0
int negative_results = 0
float positive_percentage_probabilities = 0
float negative_percentage_probabilities = 0
LONG = not isActiveLong and entry_condition == true
CLOSE_LONG_TP = not isSellLong and TPcondition_exit == true
p = ta.valuewhen(LONG, close, 0)
p2 = ta.valuewhen(CLOSE_LONG_TP, close, 0)
for i = 1 to lookback
if (LONG )
isActiveLong := true
isSellLong := false
if (CLOSE_LONG_TP )
isActiveLong := false
isSellLong := true
if p > p2
positive_results += 1
else
negative_results += 1
positive_relative_probabilities = positive_results / lookback
negative_relative_probabilities = negative_results / lookback
positive_percentage_probabilities := positive_relative_probabilities * 100
negative_percentage_probabilities := negative_relative_probabilities * 100
positive_percentage_probabilities
probabilities = Probabilities(look)
lots = strategy.equity/close
var float e = 0
var float c = 0
tp = input.float(defval = 1.00, minval = 0, title = "Take profit: ")
sl = input.float(defval = 1.00, minval = 0, title = "Stop loss: ")
if trigger==true and strategy.opentrades==0 and probabilities >= 51
e := close
strategy.entry(id = "e", direction = strategy.long, qty = lots, limit = e)
takeprofit = e + ((e * tp)/100)
stoploss = e - ((e * sl)/100)
if exit==true
c := close
strategy.exit(id = "c", from_entry = "e", limit = c)
if takeprofit and stoploss
strategy.exit(id = "c", from_entry = "e", stop = stoploss, limit = takeprofit)
Il backtesting dell'esempio è effettuato su NASDAQ:TSLA , timeframe 15 minuti.
I parametri impostati dall'interfaccia utente sono:
1. Lenght: 13
2. Oversold: 40
3. Overbought: 70
4. Lookback: 50
5. Take profit: 3%
6. Stop loss: 3%
Il nostro modulo 'Probabilites':
Per noi è importante il tuo feedback, facci sapere se questo contenuto ti è stato di aiuto !
Statisticalprobability
Vantaggio statistico su TF 4H con il SupertrendSul grafico 4H con l'aiuto di due Supertrend opportunamente tarati, andiamo alla ricerca di quella che è la gestione di un vantaggio statistico presente sul mercato. Il tutto monitorando i livelli di supporto/resistenza ed il Volume Profile del timeframe Daily.
Gold a copertura SP500? – Analisi statisticaLa precedente analisi faceva riferimento all’investitore che compra un Etf sull’SP500 quando l’indice storna.
Simulando vari scenari dal 2004 ad oggi era evidente che avrebbe fatto un ottimo investimento dopo 5 e 10 anni; rimaneva però:
-il problema che temporaneamente l’etf avrebbe potuto scendere ancora del 38% prima di portare all’eccezionale performance
- il fatto che riuscire ad investire quando l’indice è a sconto del 23% non capita frequentemente.
Ho provato così a simulare di utilizzare l’ETF sullo Oro con simbolo GLD (SPDR Gold Shares) come copertura per l’ETF SPY (SPDR S&P 500).
Anche in questo caso ho considerato effetto cambio e non ho considerato invece i dividendi.
il risparmiatore è quindi più tecnico e non guarda quindi il momento migliore ma compone il portafoglio in questo modo: il corrispettivo di € 10.000 su SPY ed il corrispettivo di € 10.000 su GLD
A questo punto entrano in gioco le simulazioni degli scenari.
Partendo dal 2004 ho effettuato 589 simulazioni in cui ipotizzo di investire e mantenere l’investimento 5 anni e 327 simulazioni in cui ipotizzo di investire e mantenere l’investimento 10 anni.
I risultati sono questi
dopo 5 anni:
capitale investito € 20.000,00
capitale minimo dopo 5 anni con 589 simulazioni € 23.349,11
capitale massimo dopo 5 anni con 589 simulazioni € 37.290,22
minimo di periodo € 16.652,20
minimo di periodo % -16,74%
numero simulazioni 589
numero simulazioni positive 589
percentuale simulazioni positive: 100%
dopo 10 anni:
capitale investito € 20.000,00
capitale minimo dopo 10 anni con 327 simulazioni € 40.142,76
capitale massimo dopo 10 anni con 327 simulazioni € 59.364,45
minimo di periodo € 16.652,20
minimo di periodo % -16,74%
numero simulazioni 327
numero simulazioni positive 327
percentuale simulazioni positive: 100%
i risultati sono molto buoni: sia dopo 5 anni che dopo 10 anni, in passato non ho avuto nessun scenario in perdita.
Confrontiamoli con chi ha comprato ai minimi senza copertura:
capitali minimo 5 anni: con copertura € 23.349.11 - senza copertura € 25.769,87
capitali minimo 10 anni con copertura: € 40.142,76 - senza copertura € 48.029,90
capitali massimo 5 anni: con copertura € 37.290,22 - senza copertura € 49.674,18
capitali massimo 10 anni con copertura: € € 59.364,45 - senza copertura € 90.273,50
minimo di periodo % : con copertura -16,74%, senza copertura -38,48%
La copertura direi che ha funzionato egregiamente e lo notiamo soprattutto nel confronto del minimo di periodo molto più basso rispetto a chi abbia comunque investito quando SP500 era a sconto; in più nel caso della copertura il timing non è importante come invece lo è nel caso dell’investimento azionario puro.
Il minor rischio in ogni caso implica anche minor performance…
A voi le conclusioni……
Ognuno di noi sa che tipo d’investitore è … e quindi con la consapevolezza di quello che potrebbe succedere farà la scelta giusta in modo da non perdere soldi!!!!
Ovviamente l’analisi fa riferimento a simulazioni effettuate dal 2004 ad oggi; non vi quindi certezza di avere gli stessi risultati in futuro.
Mi raccomando, commentatela, like se vi piace e confrontatela con quella precedente allegata!!!
SP500 – Cosa succede se compro ai minimi? – Analisi statisticaCome ogni fine settimana dedico un po’ di tempo alle analisi statistiche sugli indici, simulando acquisti a lungo termine (buy and hold).
Oggi è il momento del super indice SP500; ma diversamente dalle analisi precedenti in cui simulavo l’acquisto dell’indice (che nella realtà non è possibile), ora la statistica la faccio utilizzando l’ETF con codice SPY (SPDR S&P 500) considerando l’effetto cambio, ma non lo stacco dei dividendi.
Il nostro risparmiatore modello è colui che, leggendo i quotidiani e ascoltando in notiziari, investe quando sente e legge notizie poco rassicuranti del tipo: “i mercati stanno crollando”, ”nuovo calo dell’SP500” ecc ,
il risparmiatore agisce in modo coraggioso, riflette e pensa che la borsa americana sia la prima borsa mondiale e che il calo delle quotazioni sia un’ottima occasione per acquistare a sconto
il risparmiatore investe il corrispettivo di € 20.000 su SPY
A questo punto entrano in gioco le simulazioni degli scenari.
Partendo dal 2004 ho effettuato 144 simulazioni in cui ipotizzo di investire quando le quotazioni hanno subito storni di oltre il 23% e mantenere l’investimento 5 anni e 131 simulazioni in cui ipotizzo di investire quando le quotazioni hanno subito storni di oltre il 23% e mantenere l’investimento 10 anni.
I risultati sono questi
dopo 5 anni:
capitale investito € 20.000,00
capitale minimo dopo 5 anni con 144 simulazioni € 25.769,87
capitale massimo dopo 5 anni con 144 simulazioni € 49.674,18
minimo di periodo € 12.304,30
minimo di periodo % -38,48%
numero simulazioni 144
numero simulazioni positive 144
percentuale simulazioni positive: 100%
dopo 10 anni:
capitale investito € 20.000,00
capitale minimo dopo 10 anni con 131 simulazioni € 48.029,90
capitale massimo dopo 10 anni con 131 simulazioni € 90.273,50
minimo di periodo € 12.304,30
minimo di periodo % -38,48%
numero simulazioni 131
numero simulazioni positive 131
percentuale simulazioni positive: 100%
i risultati sono ottimi: sia dopo 5 anni che dopo 10 anni, in passato non ho avuto nessun scenario in perdita
Un aspetto che però è sicuramente da non sottovalutare è che: nel periodo di 5 e 10 anni il mio investimento avrebbe temporaneamente potuto scendere anche in modo importante, nel caso peggiore il mio investimento inziale si è deprezzato del 38%; la domanda diventa questa: “sarei stato disposto a sopportare anche temporaneamente una perdita del 38%??”
Altra considerazione: ribassi di oltre il 23% accadono raramente, probabilmente dovrei quindi aspettare molto tempo prima di poter fare questo tipo d’investimento, considerato il fatto che uno storno di quell’entità è già avvenuto lo scorso anno.
Per cercare di risolvere questi problemi, nell’analisi successiva ho simulato la possibilità di utilizzare a copertura l’Oro, da sempre considerato bene rifugio, attraverso un Etf… funzionerà?
Ovviamente l’analisi fa riferimento a simulazioni effettuate dal 2004 ad oggi; non vi quindi certezza di avere gli stessi risultati in futuro.
Mi raccomando, commentatela, like se vi piace e seguite l’analisi successiva è molto interessante!!!
Dax – Cosa succede se compro ai massimi? – Analisi statisticaMolto spesso sento o leggo questa frase: “Non importa a che prezzo compro perché i mercati azionari nel lungo periodo salgono sempre”.
Ho quindi deciso di fare un’analisi statistica per verificare se in passato è sempre stato così.
Ho già fatto precedentemente le simulazioni su Nasdaq e Ftse Mib; ora passiamo al Dax e cerchiamo di capire se supera l’esame della “Crescita nel lungo periodo”.
Il risparmiatore che prendiamo come modello è quello che, leggendo, i quotidiani e ascoltando in notiziari, investe quando sente e legge notizie molto confortanti del tipo: “i mercati stanno continuando la loro crescita”, ”nuovo massimo storico del Dax” ecc,
All’inizio un po' titubante, ma poi sempre più convinto, il risparmiatore decide di investire nel Dax
Non entro nel merito dello strumento utilizzato per l’investimento ma ipotizzo solo che investa € 20.000 sul Dax utilizzando un prodotto finanziario che replichi perfettamente l’indice.
A questo punto entrano in gioco le simulazioni degli scenari.
Partendo dal 2002 ho effettuato 251 simulazioni in cui ipotizzo di investire sui massimi e mantenere l’investimento 5 anni e 128 simulazioni in cui ipotizzo di investire sul massimi e mantenere l’investimento 10 anni.
I risultati sono questi:
capitale investito: € 20.000,00
capitale minimo dopo 5 anni con 251 simulazioni: € 16.400,85
capitale massimo dopo 5 anni con 251 simulazioni: € 35.993,17
minimo di periodo: € 9.109,72
minimo di periodo % :-54,45%
numero simulazioni 251
numero simulazioni positive: 185
percentuale simulazioni positive: 73,70%
dopo 10 anni il tutto migliora:
capitale investito: € 20.000,00
capitale minimo dopo 10 anni con 128 simulazioni: € 30.634,31
capitale massimo dopo 10 anni con 128 simulazioni: € 52.651,41
minimo di periodo: € 9.109,72
minimo di periodo %: -54,45%
numero simulazioni: 128
numero simulazioni positive: 128
percentuale simulazioni positive: 100%
Quindi ricapitolando se dopo 5 anni avrei potuto essere in perdita, nel caso peggiore di quasi il 20%, dopo 10 anni invece, anche nella peggiore delle ipotesi avrei fatto un buon investimento.
Il punto importante è anche un altro: nel periodo di 5 e 10 anni il mio investimento avrebbe temporaneamente potuto scendere anche in modo importante, nel caso peggiore il mio investimento inziale si è deprezzato del 54,45%; la domanda diventa questa: “sarei stato disposto a sopportare anche temporaneamente una perdita di oltre il 50%??”
Ovviamente l’analisi fa riferimento a simulazioni effettuate dal 2002 ad oggi; non vi quindi certezza di avere gli stessi risultati in futuro
A voi le conclusioni…. È stato un buon investimento?
Ognuno di noi sa che tipo d’investitore è; avere un’idea di quello che potrebbe succedere è importante e ci aiuta a non perdere soldi!!!
GBPNZD >>> idea long Buongiorno traders , propongo quest'idea long su GBPNZD , trade di medio-breve termine...infatti nonostante il trend di fondo sia ribassista, mi aspetto un ritracciamento , visto anche l'importante supporto sul quale sono giunti i prezzi.
#nostresstakeprofit 📈😎💪
Fatemi sapere nei commenti cosa ne pensate, un like per seguire gli aggiornamenti.
USD.JPY - Short in arrivo secondo la tecnica e la fondamentale?ANALISI TECNICA
-Weekly-
possiamo vedere il prezzo muoversi all'interno di un triangolo di compressione, ha rispettato la zona di supporto e ora sta testando la trendline ribassista che coincide con una zona di resistenza giornaliera, potrebbe avere bisogno di raccoglie maggiore liquidità per continuare il long, andando a rimestare la zona di supporto settimanale.
-Daily-
Nel grafico giornaliero troviamo un canale rialzista, il prezzo sta trovando indecisione nei pressi della zona giornaliera, l'allungo della settimana appena trascorsa offre statisticamente uno spunto operativo short, sulla base delle informazioni del prezzo e dei dati fondamentali.
ANALISI FONDAMENTALE:
Il coronavi rimane uno dei protagonisti principali, il suo reale pericolo rimane ancora un mistero per i mercati, ogni settimana potremmo quindi avere uno storno dei mercati sulla base delle notizie appunto correlate con il virus. L''annuncio di un ulteriore possibile taglio dei tassi, invece, potrebbe portare incertezza sul biglietto verde nel breve periodo, e l'ottimismo di una possibile cura per il virus potrebbe avvantaggiare lo yen, respingendo il cambio USD/JPY verso la zona settimanale sulla quale ha rimbalzato questa settimana. Da tenere sempre in considerazione comunque il blocco commerciale che da un paio di settimane avvolge la Cina.