Stop Loss e Take Profit con Tradingview

Visualizzare lo Stop Loss e il Take Profit con Tradingview

In questo articolo descriviamo come visualizzare lo stop loss e il take profit nel grafico di Tradingview. Questa tecnica è già stata trattata in un paio di articoli su Tradingview ma non ho mai scritto un articolo dedicato sull’argomento.

Visualizzare lo Stop Loss e il Take Profit

In Pine Script dobbiamo usare i parametri stoplimit delle funzioni strategy.exit()strategy.order() per inviare ordini stop loss e take profit. Anche la funzione strategy.entry() supporta l’invio  degli ordini stoplimit ma in questo caso gli ordini sono considerati un’entrata invece che uno stop loss o un take profit e quindi fuori dallo scopo di questo articolo.

Le tecniche descritte in questo articolo possono essere usate per le entrate e praticamente per qualsiasi linea che desideriamo tracciare/visualizzare.

Invio degli ordini

Visualizzare lo stop loss e il take profit può essere complicato per due motivo:

  1. Stiamo usando i parametri profitloss invece di  stop e limit
  2. Calcoliamo il livello dello stop loss e/o del take profit una volta sola al momento dell’entrata.

I profitloss sono misurati in ticks, quindi i numeri usati per alimentare questi parametri non forniscono un naturale livello di prezzo che possiamo tracciare. Quindi dobbiamo implementare una funzione per visualizzare correttamente il livello. Nota: le varie opzioni di stop loss sono descritte in questo articolo.

Il secondo motivo si verifica quando desideriamo usare calcoli complessi per lo stop loss che possono cambiare da una barra all’altra. Ad esempio, se prevediamo di impostare il valore stop di una entrata long come lowATR (Average True Range ) e non inseriamo la funzione strategy.exit() all’interno di un istruzione if, otteniamo che la linea di stop si modifica ad ogni barra quando il valore ATR è aggiornato.

Esempio

Prima di descrivere una soluzione, descriviamo un semplice esempio su come inserire strategy.exit() all’interno di un’istruzione if nel caso abbiamo problemi a visualizzarla. L’esempio seguente calcola il livello di stop e invia l’ordine solo una volta quando è soddisfatta la longConditionshortCondition.

				
					//@version=3
strategy("My Strategy", overlay=true)

ATR = atr(7)

longCondition = crossover(sma(close, 100), sma(close, 200))
if (longCondition)
    stop_level = low - ATR
    profit_level = close + ATR
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level)

shortCondition = crossunder(sma(close, 100), sma(close, 200))
if (shortCondition)
    stop_level = high + ATR
    profit_level = close - ATR
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
				
			

che si traduce in un grafico simile a questo:

Tradingview visualizzare stoploss ATR

Soluzione per la visualizzazione

La chiave per visualizzare lo stop loss e il take profit in un grafico è creare una series (nuova linea/variabile) che è aggiornata solo quando lo stop loss è aggiornato. Ad esempio, se inviamo un ordine di stop loss solo una volta quando si verifica la longCondition, nello  momento aggiorniamo anche la nuova variabile series. Altrimenti manteniamo lo stesso valore della barra precedente. Possiamo farlo usando tramite un operatore condizionale ternario, come descritto in un precedente articolo più dettagliato. L’esempio seguente  espande il primo esempio in modo da visualizzare le linee e fissare i livelli.

				
					//@version=3
strategy("My Strategy", overlay=true)

ATR = atr(7)

longCondition = crossover(sma(close, 100), sma(close, 200))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)
    

shortCondition = crossunder(sma(close, 100), sma(close, 200))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)
    
long_stop_level = na
long_profit_level = na
long_stop_level := longCondition ? low - ATR : long_stop_level[1]
long_profit_level := longCondition ? close + ATR : long_profit_level[1]

short_stop_level = na
short_profit_level = na
short_stop_level := shortCondition ? high + ATR : short_stop_level[1]
short_profit_level := shortCondition ? close - ATR : short_profit_level[1]

strategy.exit("TP/SL", "My Long Entry Id", stop=long_stop_level, limit=long_profit_level) 
strategy.exit("TP/SL", "My Short Entry Id", stop=short_stop_level, limit=short_profit_level)
    
plot(strategy.position_size <= 0 ? na : long_stop_level, color=red, style=linebr, linewidth=2)
plot(strategy.position_size <= 0 ? na : long_profit_level, color=green, style=linebr, linewidth=2)
plot(strategy.position_size >= 0 ? na : short_stop_level, color=red, style=linebr, linewidth=2)
plot(strategy.position_size >= 0 ? na : short_profit_level, color=green, style=linebr, linewidth=2)
				
			

Commento

Prima di iniziare, sottolineiamo che l’esempio precedente può essere implementato usando il metodo valuewhen(), come descritto nell’articolo relativo alla gestione delle variabili con Tradingview. Tuttavia, è una buona idea acquisire familiarità con gli operatori condizionali ternari perchè ci permettono di creare alcuni trailing stop loss complessi e unici. Sebbene il codice sembra più lungo, in realtà ci sono solo poche modifiche tra il primo esempio e quest’ultimo. La prima differenza è che il metodo strategy.exit() non è inserito all’interno di una dichiarazione if, quindi l’ordine è aggiornato ad ogni nuova barra. In questo caso non abbiamo impatti perchè il valore non cambia. Successivamente, calcoliamo i livelli tramite la dichiarazione di ciascuno series con long_stop_level = na. Dato che il codice è scritto nella versione 3 di pinescript e vogliamo fare riferimento a un valore precedente della stessa series(es long_stop_level[1]), riceviamo un errore se non lo dichiariamo prima. Gli operatori condizionali ternari possono inizialmente sembrare  complicati, ma essenzialmente significano (nel caso long):

  • Se la longCondition è soddisfatta, impostiamo la linea low– ATR.
  • In caso contrario, manteniamo il valore precedente.

Infine, facciamo solo un piccolo grafico creativo per assicurarci di non tracciare le linee quando non vogliamo visualizzarle. Questo aiuta solamente ad avere un grafico semplice e ordinato. Anche in questo caso usiamo un operatore condizionale ternario a tale scopo.

I grafici

Dopo aver eseguito il codice otteniamo un grafico simile al seguente:

Tradingview-visualizzare-stoploss-takeprofi

Percentuale fissa di stop/profitti 

Se vogliamo semplicemente impostare uno stop loss o  take profit ad una x% di distanza dal livello di ingresso e NON stiamo piramidando (entrando nella stessa direzione più volte), possiamo semplicemente usare la variabile strategy.position_avg_price per calcolare i valori. (Questo esempio è descritto nell’articolo relativo allo stop loss per Tradingview )

				
					//@version=3
strategy("Stop Loss Example: Simple Stoploss", overlay=true)

sma_per = input(200, title='SMA Lookback Period', minval=1)
sl_inp = input(2.0, title='Stop Loss %', type=float)/100
tp_inp = input(4.0, title='Take Profit %', type=float)/100

sma = sma(close, sma_per)

stop_level = strategy.position_avg_price * (1 - sl_inp)
take_level = strategy.position_avg_price * (1 + tp_inp)

strategy.entry("Simple SMA Entry", strategy.long, when=crossover(close, sma))

strategy.exit("Stop Loss/TP","Simple SMA Entry", stop=stop_level, limit=take_level)

plot(sma, color=orange, linewidth=2)
plot(stop_level, color=red, style=linebr, linewidth=2)
plot(take_level, color=green, style=linebr, linewidth=2)
				
			
Commento

Quando non abbiamo una posizione a mercato il  valore strategy.position_avg_price è pari a na. Questo è utile nel grafico perché  possiamo visualizzare la linea di stop loss solo quando siamo in una posizione. Il valore na non è mai tracciato e quindi non è necessario aggiungere un operatore condizionale ternario come nell’esempio precedente. Nota: per garantire che le linee siano visualizzate in modo ordinato, dobbiamo usare lo stile linebr. In questo modo non abbiamo lunghe linee che uniscono i gap quando il valore è na. Vediamo la differenza se usiamo uno stile di linea normale.

Tradingview-visualizzare-stoploss-takeprofit-percentuale

Codice completo

In questo articolo abbiamo descritto come visualizzare lo stop loss e il take profit nel grafico di Tradingview. Per il codice completo riportato in questo articolo, si può consultare il seguente repository di github:
https://github.com/datatrading-info/TradingView

Gli altri articoli di questa serie

Benvenuto su DataTrading!

Sono Gianluca, ingegnere software e data scientist. Sono appassionato di coding, finanza e trading. Leggi la mia storia.

Ho creato DataTrading per aiutare le altre persone ad utilizzare nuovi approcci e nuovi strumenti, ed applicarli correttamente al mondo del trading.

DataTrading vuole essere un punto di ritrovo per scambiare esperienze, opinioni ed idee.

SCRIVIMI SU TELEGRAM

Per informazioni, suggerimenti, collaborazioni...

Torna in alto
Scroll to Top