ORARI SESSIONI FOREX ( FUSO ORARIO ITALIANO)Ciao traders, gli orari delle sessioni porteranno la tua operatività nei mercati al next level, il cambiamento significativo lo noterai nella gestione del tempo, se sei un aspirante trader non sarai più costretto a stare H24 davanti ai grafici.. (mito sfatato) ;)
Scherzi a parte, hai capito bene sarai Tu a scegliere come, dove e quando tradare, andiamo subito al fuso orario GMT:
FX (GMT)
-Sidney —> 22:00 - 6:00
-Tokyo —> 00:00 - 8:00
-London —> 8:00 - 16:00
-NewYork —> 13:00 - 21:00
Coppie per:
Sidney-Tokyo = 00:00 - 6:00
Tokyo-London = 8:00
London-NewYork = 13:00 - 16:00
Esempio per Tokyo-London: GBP/JPY
FX (ORA INVERNALE ITA)
-Sidney —> 23:00 - 7:00
-Tokyo —> 1:00 - 9:00
-London —> 9:00 - 17:00
-NewYork —> 14:00 - 22:00
Coppie per:
Sidney-Tokyo = 1:00 - 7:00
Tokyo-London = 9:00
London-NewYork = 14:00 - 17:00
Fx (ORA ESTIVA ITA)
-Sidney —> 00:00 - 8:00
-Tokyo —> 2:00 - 10:00
-London —> 10:00 - 18:00
-NewYork —> 15:00 - 23:00
Coppie per:
Sidney-Tokyo = 2:00 - 8:00
Tokyo-London = 10:00
London-NewYork = 15:00 - 18:00
Tips per Individuare attraverso un indicatore gratuito la sessione:
-Indicatori:
Cerca per: Kill Zones (oscarvs)
Rosso: Tokyo session
(Durante questa sessione solo nelle ore di coincidenza tra le coppie trado CAD/JPY)
Giallo: London session
(Durante questa sessione solo nelle ore di coincidenza tra le coppie trado GBP/JPY)
Grigio: New York session
(Durante questa sessione trado XAUUSD - USDWTI - NAS100)
Buon Trading!
Strategy
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 !
Programmare una strategia long e disegnare un indicatore (Pt. 2)Benvenuto a questo secondo tutorial che vuole aiutare trader e investitori a comprendere al meglio il potente linguaggio di programmazione Pine Script.
Nel tutorial di oggi continueremo a programmare il nostro semplice algoritmo di tipo strategy , descrivendone attentamente la sintassi.
Nel primo tutorial abbiamo analizzato la dichiarazione di una strategia e le sue funzioni base, oggi implementeremo il codice per una strategia long only basata sull' indicatore RSI. Il nostro algoritmo acquisterà long ogni volta che il l'indicatore entra in ipervenduto-oversold (livello 30) vendendo la posizione quando l'indicatore entra in ipercomprato-overbought (livello 70). Successivamente disegneremo un indicatore molto semplice di tipo visual che terrà traccia dei livelli di prezzo di entrate e uscite per ogni singolo trade. I prezzi delle entrate saranno disegnati con una linea verde, i prezzi delle uscite saranno disegnati con una linea rossa.
Una cosa molto importante prima di iniziare: non utilizzare questo script per prendere decisioni di investimento. Utilizza questo codice esclusivamente per esercitarti, testare e comprendere il linguaggio Pine Script.
Qui sotto trovi il codice sorgente, puoi copiarlo e incollarlo all' interno della tua console di Trading View. Salva il codice e aggiungilo allo schermo.
//@version=5
strategy(title = " Strategy Tutorial - The Quant Science™ ",
overlay = false,
initial_capital = 1000,
currency = currency.EUR,
commission_type = strategy.commission.percent,
commission_value = 0.03,
slippage = 10,
default_qty_value = 100,
default_qty_type = strategy.percent_of_equity,
process_orders_on_close = true)
//------------------------------------------------------------ Pt. 2
rsi = ta.rsi(close, 14)
buyLong = ta.crossunder(rsi, 30)
closingLong = ta.crossover(rsi, 70)
priceEntry = ta.valuewhen(buyLong, close, 0)
priceExit = ta.valuewhen(closingLong, close, 0)
if buyLong and strategy.opentrades == 0
strategy.order(id = "Open Long Trade",
direction = strategy.long,
limit = priceEntry)
strategy.entry(id = "Open Long Trade",
direction = strategy.long)
if closingLong
strategy.exit(id = "Close Long Trade",
from_entry = "Open Long Trade",
stop = priceExit)
plot(priceEntry,
style = plot.style_line,
color = color.green)
plot(priceExit,
style = plot.style_line,
color = color.red)
Come puoi notare abbiamo separato la prima parte del codice svolta nel primo tutorial con la seconda parte.
Iniziamo quindi ad analizzare il nostro codice sorgente descrivendone la sintassi stringa dopo stringa.
rsi = ta.rsi(close, 14) : creiamo una variabile a cui assegnamo la funzione built-in ta.rsi() , questa funzione ci permette di accedere velocemente all' indicatore RSI. All' interno della funzione passiamo il source e il periodo . Impostiamo quindi close e il periodo di 14 , in questo modo l' indicatore sarà calcolato sulla chiusura di ogni barra prendendo le ultime 14 barre passate.
buyLong = ta.crossunder(rsi, 30) : successivamente andiamo a dichiarare una seconda variabile che chiameremo "buyLong". Servirà per definire quando il nostro algoritmo dovrà aprire la posizione long. Tramite ta.crossunder() accediamo alla funzione built-in che ci permette di passare due elementi e definire la condizione di ingresso. Come pattuito in precedenza acquistiamo sul livello di oversold pari a 30. Passeremo all' interno di questa funzione quindi rsi (la variabile che ingloba il nostro indicatore) e 30 (il livello di ipervenduto).
closingLong = ta.crossover(rsi, 70) : ora andiamo a dichiarare la variabile che chiameremo "closingLong". Servirà per definire quando il nostro algoritmo dovrà chiudere la posizione long. Tramite ta.crossover() accediamo alla funzione built-in che ci permette di passare due elementi e definire la condizione di uscita. Come pattuito in precedenza vendiamo la posizione long sul livello di overbought pari a 70. Passeremo all' interno di questa funzione quindi rsi (la variabile che ingloba il nostro indicatore) e 70 (il livello di ipercomprato).
priceEntry = ta.valuewhen(buyLong, close, 0) : isoliamo il prezzo di ingresso dichiarando una variabile "priceEntry". Servirà per definire il prezzo esatto dell' ingresso long. Tramite ta.valuewhen() accediamo alla funzione built-in che ci permette di passare tre elementi, il primo elemento è la condizione , il secondo è un elemento di tipo source e il terzo elemento è un elemento di tipo int chiamato occurrence. Passiamo all' interno di questa funzione la condizione buyLong , come source close e come occurrence 0 .
priceExit = ta.valuewhen(closingLong, close, 0) : isoliamo il prezzo di uscita dichiarando una variabile "priceExit". Servirà per definire il prezzo esatto dell' uscita long. Tramite ta.valuewhen() accediamo alla funzione built-in che ci permette di passare tre elementi, il primo elemento è la condizione , il secondo è un elemento di tipo source e il terzo elemento è un elemento di tipo int chiamato occurrence. Passiamo all' interno di questa funzione la condizione closingLong , come source close e come occurrence 0 .
if buyLong and strategy.opentrades == 0 : ora che abbiamo definito le condizioni del nostro algoritmo andiamo a implementare la parte che farà interagire le nostre condizioni creando una vera e propria strategia. Questa stringa è divisa in quattro differenti parti:
1. if : la condizione 'if' definisce quali azioni vanno eseguite se le condizioni sono soddisfatte
2. buyLong : la nostra condizione di ingresso
3. and : letteralmente 'e' offre la possibilità di combinare una seconda condizione
4. strategy.opentrades == 0 : indica i numeri di ordini a mercato aperti che in questo caso dovranno essere uguali a 0.
In definitiva se la condizione di ingresso è soddisfatta e nessun altro ordine è a mercato, allora si eseguirà l' inserimento dell' ordine long, che analizzeremo di seguito.
strategy.order(id = "Open Long Trade", direction = strategy.long, limit = priceEntry) : attraverso la funzione strategy.order() definiremo l'invio dell' ordine a mercato. All' interno di questa funzione passiamo un id (nome dell'ordine "Open Long Trade"), direction = strategy.long (la direzione dell'ordine, che in questo caso è di tipo long) e limit = priceEntry (prezzo a cui dovrà essere eseguito l'ordine, in questo caso uguale a "priceEntry").
strategy.entry(id = "Open Long Trade", direction = strategy.long) : attraverso la funzione strategy.entry() dichiareremo l'esecuzione dell' ordine a mercato. All' interno di questa funzione passiamo un id (nome dell'ordine "Open Long Trade") e direction = strategy.long (la direzione dell'ordine, che in questo caso è di tipo long).
Ora tutte le volte che le condizioni sono soddisfatte e il capitale è libero il nostro algoritmo acquisterà long al prezzo definito dalla nostra condizione.
Continuiamo comunicando al nostro script quando vogliamo chiudere la posizione.
if closingLong : implementiamo la condizione che dovrà essere soddisfatta per l'uscita del trade, ovvero quando l' indicatore rsi si trova a livello 70, il livello di overbought o ipercomprato.
strategy.exit(id = "Close Long Trade", from_entry = "Open Long Trade", stop = priceExit) : attraverso la funzione strategy.exit() definiremo la chiusura del trade long. All' interno di questa funzione passiamo un id (nome dell'ordine "Close Long Trade"), from_entry = "Open Long Trade"
(indichiamo l'id dell' ordine che deve essere chiuso) e il prezzo di esecuzione stop = priceExit (prezzo a cui dovrà essere eseguita la chiusura, in questo caso uguale a "priceExit").
Molto bene, ora abbiamo concluso la programmazione operativa del nostro script è il momento di aggiungere un indicatore che ci permetterà di visualizzare i prezzi di entrata e uscita.
In Pine Script la funzione che si utilizza per disegnare dei valori si chiama plot .
plot(priceEntry, style = plot.style_line, color = color.green) : definiamo dei valori da disegnare tramite plot(), all'interno di questa funzione passeremo il valore della serie da disegnare ovvero il prezzo di entrata, priceEntry . Successivamente definiamo lo stile dell' indicatore con style = plot.style_line e il colore verde con color = color.green .
plot(priceExit, style = plot.style_line, color = color.red) : definiamo dei valori da disegnare tramite plot(), all'interno di questa funzione passeremo il valore della seconda serie da disegnare ovvero il prezzo di uscita, priceExit . Successivamente definiamo lo stile dell' indicatore con style = plot.style_line e il colore rosso con color = color.red .
Puoi trovare tutti gli stili disponibili e i colori con cui puoi configurare il tuo indicatore all' interno del manuale Pine Script.
Ci vediamo al prossimo tutorial dove analizzeremo il codice della strategia per la versione short.
Se riscontri problemi durante il salvataggio dello script, copia e incolla il codice qui sotto, se continui a riscontrare problemi non esitare a contattarci.
//@version=5
strategy(title = " Strategy Tutorial - The Quant Science™ ", overlay = false, initial_capital = 1000, currency = currency.EUR, commission_type = strategy.commission.percent, commission_value = 0.03, slippage = 10, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, process_orders_on_close = true)
//------------------------------------------------------------ Pt. 2
rsi = ta.rsi(close, 14)
buyLong = ta.crossunder(rsi, 30)
closingLong = ta.crossover(rsi, 70)
priceEntry = ta.valuewhen(buyLong, close, 0)
priceExit = ta.valuewhen(closingLong, close, 0)
if buyLong and strategy.opentrades == 0
strategy.order(id = "Open Long Trade", direction = strategy.long, limit = priceEntry)
strategy.entry(id = "Open Long Trade", direction = strategy.long)
if closingLong
strategy.exit(id = "Close Long Trade", from_entry = "Open Long Trade", stop = priceExit)
plot(priceEntry, style = plot.style_line, color = color.green)
plot(priceExit, style = plot.style_line, color = color.red)
Come impostare uno script strategy con Pine Script Benvenuto a questo primo tutorial che vuole aiutare trader e investitori a comprendere al meglio il potente linguaggio di programmazione Pine Script.
Pine Script permette di utilizzare due forme differenti di script; strategy e indicator. Ciascuna ha le proprie caratteristiche tecniche che devono essere comprese prima di iniziare a sviluppare il proprio progetto.
Che cos'è uno script ?
In generale nel mondo della programmazione uno script è un insieme di stringhe di codice che permette di compiere determinate funzioni nella vita reale, possiamo quindi considerare uno script come un piccolo software che compie determinate azioni. In questo caso gli script programmabili su Trading View permettono di compiere funzioni e azioni inerenti al mondo del trading e della finanza.
In Pine Script esistono due tipologie di script:
1) Strategy: con funzioni e variabili dedicate permettono di generare un backtesting per una determinata strategia.
2) Indicator: permettono di creare visual tool e vengono spesso utilizzati per creare mini applicazioni, tabelle e indicatori personalizzabili.
Nel tutorial di oggi analizzeremo gli script strategy .
Qui di seguito trovi un esempio di codice introduttivo, il codice si riferisce solo alla parte iniziale di uno script di tipo strategy e ti aiuterà a comprendere al meglio come impostare e configurare la parte iniziale del tuo script.
//@version=5
strategy(title = " Strategy Tutorial - The Quant Science ™ ",
overlay = false,
initial_capital = 1000,
currency = currency.EUR,
commission_type = strategy.commission.percent,
commission_value = 0.03,
slippage = 10,
default_qty_value = 100,
default_qty_type = strategy.percent_of_equity,
process_orders_on_close = true)
Come avrai notato, la parte iniziale di uno script inizia sempre con la dichiarazione della versione di Pine Script che stiamo utilizzando.
Nel nostro esempio utilizziamo l'ultima versione rilasciata da Trading View, la versione 5.
Quindi dichiareremo la versione con: //@version=5
In seguito alla dichiarazione della versione utilizzata, andremo a dichiarare la tipologia di script che vogliamo utilizzare, in questo caso inseriremo: strategy() .
All' interno delle parentesi doppie possiamo definire e aggiungere caratteristiche di base al nostro script. In questo esempio non abbiamo riportato tutte le variabili disponibili da includere all' interno di una strategia ma solo alcune. Per visualizzare tutte le variabili puoi consultare la guida Pine Script V5 oppure semplicemente fare doppio click su "strategy" dalla tua console di Trading View.
Iniziamo ad arricchire le funzionalità base del nostro script strategy:
title : si riferisce al nome che vogliamo assegnare al nostro script e tramite il quale gli utenti potranno ricercarlo all' interno della libreria di Trading View.
overlay : permette di proiettare il nostro indicatore, impostato su true l' indicatore sarà applicato sul grafico, impostato su false l' indicatore sarà proiettato sotto al grafico.
initial_capital : si riferisce all'ammontare di capitale iniziale che utilizzerai per la tua strategia. In questo esempio impostiamo 1000.
currency : si riferisce alla valuta base con cui desideri calcolare le performance della tua strategia, in questo caso scegliamo come moneta EUR (Euro). Trading View offre la possibilità di scegliere una vasta gamma di valute base, puoi trovare maggiori informazioni al riguardo all' interno della guida.
Per impostare la valuta Euro quindi inseriremo: currency.EUR.
commission_type : si riferisce al modo in cui vogliamo calcolare le commissioni,
Possiamo scegliere tre differenti tipologie di calcolo: strategy.commission.percent , strategy.commission.cash_per_contract , strategy.commission.cash_per_order . Di default lo script strategy calcola le commissioni in maniera percentuale, se non viene dichiarato un altro metodo.
commission_value : si riferisce al valore della commissione che il tuo broker applica a ciascun trade, in questo esempio utilizziamo Kucoin Exchange che applica una commissione dello 0.03% per l' apertura e 0.03% per la chiusura di ogni singolo trade.
slippage : è espresso in tick, questo valore viene aggiunto o sottratto al prezzo degli ordini market/stop per rendere il prezzo meno favorevole per la strategia, creando così un backtesting più reale. Nel nostro esempio impostiamo a 10 tick il nostro slippage.
default_qty_value : si riferisce alla quantità da investire ad ogni singolo trade, in questo caso investiamo il 100% del capitale per ogni singolo trade.
default_qty_type : si riferisce al tipo di calcolo con cui misurare il capitale investito per ogni singolo trade, nel nostro esempio dichiariamo
strategy.percent_of_equity che si riferisce al calcolo percentuale (avendo inserito 100 precedentemente).
process_orders_on_close : se impostato su true , genera un ulteriore tentativo di esecuzione degli ordini dopo la chiusura di una barra. Se gli ordini sono a mercato, lo script li esegue prima dell'apertura della barra successiva. Se gli ordini dipendono dal prezzo, saranno eseguiti solo se le condizioni di prezzo sono soddisfatte. Questa opzione è utile se si desidera chiudere le posizioni nella barra corrente. L'opzione predefinita è false . Per il nostro esempio scegliamo true .
Abbiamo concluso il nostro breve tutorial sulla dichiarazione di uno script di tipo strategy . In questo esempio abbiamo mostrato in maniera molto veloce alcune delle funzioni base con cui impostare il tuo algoritmo. Puoi trovare maggiori informazioni e tutte le funzioni disponibili consultando il manuale per il linguaggio Pine Script.
La Forza delle Medie Mobili in un Trend Rialzista - Esempio PSXUno degli indicatori che un trader deve monitorare durante le proprie Analisi Tecniche è il grafico delle Medie Mobili.
Una Media Mobile rappresenta l'analisi delle serie storiche di un dato insieme di valori calcolata su un determinato periodo.
Ne esistono di diversi tipi: semplice, ponderata, esponenziale.
Quella che notoriamente è la più usata per la sua semplicità è la cosiddetta "semplice", ovvero l'analisi delle serie storiche di valori ai quali viene dato il medesimo peso (unitario) nel tempo.
SI riporta nel grafico un esempio di strategia applicata all'indice S$P 500 (SPX), col solo uso della media mobile a 50 periodi, nell'intorno dei suoi valori di deviazione standard. In questo caso la strategia ha funzionato nell'89% dei casi, da inizio 2021 ad oggi, portando un rendimento complessivo del 22%.
Pregi della strategia:
- semplicità
- controllo del prezzo
- facile monitoraggio
Difetti della strategia:
- analisi dei dati del passato
- adattabilità in funzione del trend
- bassa precisione del punto di supporto
Tu usi la Media Mobile durante le tue analisi?
Scrivicelo tra i commenti!
TriVer : Cos'è e Come FunzionaTriVer è una strategia completamente automatizzabile grazie all’emissione di tre alert basata sulla coppia BTCUSD in grado di aprire posizioni sia Short che Long a differenza dei molteplici indicatori e segnali con cui è stata plasmata.
TriVer è in grado di analizzare il prezzo e il suo sviluppo all’interno del mercato, identificando i trend e detectando quando questi ultimi sono in condizioni idonee per poter aprire una posizione, lasciando così lavorare il prezzo e traendone profitto non appena vi siano i relativi segnali di inversione.
TriVer è in grado di identificare quando il trend diviene laterale, aprendo possibili posizioni sfruttando le piccole oscillazioni di tale fase del mercato e chiudendo queste ultime a determinati take profit preimpostati.
TriVer è in grado di identificare quando il mercato nella sua complessità è più propenso a movimenti repentini, sfruttando tali movimenti per trarne profitto.
TriVer sfrutta inoltre, ove sussistano le condizioni necessarie, le eventuali posizioni aperte nella direzione sbagliata di prezzo intrapresa poi dal mercato, invertendole e recuperando l’eventuale perdita con un profitto.
Gli indicatori usati, i valori impostati, i take profit e gli stop loss in percentuale applicati nonché le singole condizioni settate per l’attuazione e l’attivazione delle differenti posizioni di mercato, sono stati decisi a seguito di un lungo periodo di studio accompagnato da molteplici svariati backtests e realtest, selezionandone i più profittevoli per il pair BYBIT:BTCUSD a timeframe 4h come da grafico allegato.
Nella tabella allegata è possibile analizzare l'intera performance e statistica della strategia: è stato ipotizzato come cifra iniziale di partenza per il backtesting un capitale pari a 0.1BTC, una tassa media per singola posizione pari allo 0.15% ed un reinvestimento totale del capitale posseduto (si sfrutta l’interesse composto). Periodo analizzato: periodo totale del grafico di ByBit:BTCUSD su TradingView.
TriVer continuerà a venire studiata, migliorata, approfondita ed applicata, per poter ottenere sempre migliori e più efficienti risultati.
Vi ringraziamo per l’attenzione, per l’interessamento ed il tempo dedicatoci.
Qualora foste interessati alla strategia o al suo sviluppo vi suggeriamo di rimanere sintonizzati e in contatto: il team sviluppatore rimane e rimarrà sempre a disposizione per qualsiasi chiarimento, richiesta o curiosità in merito.
In coda inserito il collegamento all'idea correlata/script di riferimento.
Il team sviluppatore,
Andrea e Loris
Backtesting, basta per costruire una strategia?Buongiorno e buon sabato a tutti!
Oggi rispondiamo alla fatidica domanda: basta fare un test nel passato per costruire una strategia?
Sulla carta non ci sarebbe nulla di male, eppure i dati dimostrano che la teoria è sempre ben diversa dalla pratica.
Buona visione!
BACKTEST: La mia Strategia Intraday con MomentumOscillatorSTATISTICHE:
Periodo: 03/10/2019 - 12/03/2020
TradeTotali: 90
TradeVinti: 45
TradePersi: 45
Win%: 50%
SeriePositiva: 9
SerieNegativa: 9
Regole Applicate:
1. StopLoss: ATR Sopra/Sotto il Segnale di Ingresso;
2. TakeProfit: Doppio Rispetto allo SL;
3. Lo StopLoss non deve essere mai all'interno della banda dinamica;
4. Se c'è un'operazione in corso e si ricevono altri segnali di ingresso, questi segnali saranno ignorati, fino alla fine dell'operazione in atto.
Logica del Sistema:
Lo scopo del sistema è operare sempre a favore di trend, approfittando di segnali e parametri operativi meccanici per evitare di incorrere in errori emotivi, tali parametri sono inoltre fondamentali per un backtesting oggettivo.
L'indicatore serve allo scopo individuare segnali di ingresso ad alta probabilità che possano essere seguiti da un movimento direzionale duraturo o comunque esteso.
Lo StopLoss anche se meccanico, scatta sempre sotto una fascia dinamica di supporto/resistenza, rispettando la logica richiesta da uno stop loss.
Il Take Profit è regolato in maniera conseguente, in base alla stessa logica.
Pro e Contro:
P) Si annullano problemi relativi all'emotività, alla discrezionalità, si opera con segnali precisi calcolati su parametri oggettivi che hanno dimostrato una buona profittabilità su un discreto numero di trades. Tale approccio rimuove gli svantaggi del TF m15, il quale potrebbe far incorerre in errori di analisi dati da fretta ed inesperienza.
C) La strategia necessita di ulteriore backtesting, il timeframe applicato è molto caotico. Le size potrebbero risultare in alcuni casi molto consistenti, per questi motivi si potrebbe valutare una sua applicazione su TF più ampi, come l'H1.
Lasciate un like se volete altre idee di approfondimento su questa strategia ed un commento per farmi sapere che cosa ne pensate.
Grazie e buon trading a tutti!
Rischio/rendimento è così importante ?Buongiorno a tutti Traders,oggi voglio parlarvi di un argomento che ritengo molto importante,più delle strategie che vengono utilizzate,ovvero il rischio rendimento !
Chiaramente il Rischio-rendimento,va calcolato in base al backtesting delle proprie strategie e non messo a "caso".
Cos'è il rischio rendimento di un'operazione :
In maniera molto semplice è la percentuale di rischio (possibile perdita) a cui ci esponiamo in confronto alla percentuale di possibile rendimento (profitto) della stessa posizione.
Ovviamente il RISCHIO-RENDIMENTO va SEMPRE associato ad un ottimo sistema di money-management,altrimenti sarà tutto inutile !
Ora analizziamo i due esempi !
P.S. non sono consigli finanziari e nessuno,ripeto nessuno dovrà applicare questi sistemi al proprio trading,a meno che non li testi nel tempo con le proprie strategie !! E soprattutto mancano molti dati che un sistema di Trading dovrebbe avere,sono sintetizzati al massimo ed hanno il solo scopo di far capire quanto sia importante il Rischio-rendimento !!
Incominciamo dall'esempio 1 :
In questa strategia sappiamo che in media apriamo 150 trade all'anno,con un risk-management del 2% ed un Win-loss (rapporto tra trade in profitto ed in perdita) del 50%.
Con un RISCHIO-RENDIMENTO di 1:2
A fine anno sappiamo che all'incirca che questo sistema ci farà portare a casa un più 150% lordo.
Ecco il calcolo:
75 (trade in profitto) * 4 (%di profitto da ogni trade) - 75(trade in perdita) * 2 (% di perdita da ogni trade)
Come sistema non funziona male,ma mettiamo a rischio i nostri soldi per 150 volte e questo per molti Traders potrebbe essere un problema dal punto di vista emotivo e probabilmente molte volte si finirà in Over-trading solo per rispettare il numero di Trade da aprire.
SBAGLIATISSIMO !
Allora decidiamo di optare per la qualità dei nostri Trade ed ora entra in gioco l'esempio 2:
All'incirca con questo sistema sappiamo che apriremo in media 80 trade annuali,rischiando sempre il 2% per posizione ed un Win-Loss del 50%.
Questa volta però il RISCHIO-RENDIMENTO sarà di 1:3.
Questo sistema sappiamo che all'incirca a fine anno ci porterà ad avere un più 160%
Calcolo:
40*6 - 40*2
Ora confrontando i due esempi notiamo come nel secondo esempio nonostante apriamo quasi la META' DEI TRADE dell'esempio 1,con un rapporto R-R maggiore,a fine anno riusciamo ad ottenere una performance maggiore !
Questo fa capire che non servono centinaia di trade all'anno (decine di trade al mese) per essere profittevoli,ma ne servono pochi mirati e di qualità !!
Ed uno dei modi per aumentare la loro qualità è quella di scegliere di tradare solo Trade dal Rischio-rendimento alti.
Optando per la qualità avremo molti vantaggi:
-si passa meno tempo davanti ai grafici
-Non si rischia di finire in Over-trading
-Riusciremo a gestire meglio le nostre emozioni visto che rischieremo meno volte i nostri soldi nel mercato
-Riusciremo ad avere molto più tempo libero che possiamo impiegare come meglio crediamo
Insomma per quanto mi riguarda penso che per quanto sia difficile da credere,concentrarsi sulla qualità e lavorando intelligentemente avremo solo benefici..
Soprattutto per chi è agli inizi ed è abituato a scambiare il suo tempo per denaro avrà difficoltà a far entrare questo concetto nella sua mente proprio perchè è abituato al fatto che se vuole guadagnare di più deve lavorare di più(straordinari),ed è fondamentale cambiare questa mentalità,ci sono passato anche io e vi assicuro che se metterete in pratica questo concetto,vivrete meglio il vostro lavoro da TRADER !!
E tu che Rischio-rendimento utilizzi ?
è stato utile l'articolo ?
Fammi sapere nei commenti !
POSSIBILE COMPLETAMENTO BAT PATTERN SU AUDCADAttendiamo se si verifica o no il completamento del Bar Pattern; nel frattempo diamo un occhiata alle medie mobili (50 arancione e 200 nera), se effettivamente avremo un break and retest di quella struttura sempre a d1 potremmo avere una conferma riguardo il prolungamento dell'uptrend e di conseguenza la probabile formazione in completamento del pattern sulla sua solita zona del 88,6 Fibonacci(minimo).
Buon trading!