Tradingview lavorare con i tick

Lavorare con i tick in Tradingview

In questo articolo descriviamo come lavorare con i tick in Tradingview per il trading algoritmico, In particolare, ci concentriamo sui parametri loss e profit della funzione strategy.exit(), introdotti nell’articolo che descrive come gestire gli stop loss in Tradingview. Poiché questi parametri ci impongono di lavorare con i tick anziché con l’unità monetaria, alcuni utenti potrebbero evitare di usarli.

Documentazione ufficiale

Prima di iniziare, introduciamo il concetto di tick in tradingview. Come sempre, è bene dare prima un’occhiata alla documentazione ufficiale. Leggendo il seguente snippet di parametri, vediamo che ci sono 2 diversi metodi per impostare uno stop loss o  un take profit.

profit (float):  Un parametro facoltativo. Obiettivo di profitto (specificato in tick). Se specificato, viene piazzato un ordine limite per uscire dalla posizione a mercato quando si raggiunge l’importo di profitto specificato (in tick). Il valore predefinito è ‘NaN’.
 
limit (float):  Un parametro facoltativo. Obiettivo di profitto (richiede un prezzo specifico). Se specificato, viene piazzato un ordine limite per uscire dalla posizione a mercato al prezzo specificato (o migliore). La priorità del parametro ‘limit’ è maggiore della priorità del parametro ‘profit’ (si usa ‘limit’ invece di ‘profit’ se il suo valore non è ‘NaN’). Il valore predefinito è ‘NaN’.
 
loss (float):  Un parametro facoltativo. Stop loss (specificato in tick). Se specificato, viene inserito un ordine stop per uscire dalla posizione a mercato quando si raggiunge l’importo di perdita  specificato (in tick). Il valore predefinito è ‘NaN’.
 
stop (float):  Un parametro facoltativo. Stop loss (richiede un prezzo specifico). Se specificato, viene piazzato un ordine stop per uscire dalla posizione a mercato al prezzo specificato (o peggiore). La priorità del parametro ‘stop’ è maggiore della priorità del parametro ‘loss’ (si usa ‘stop’ invece di ‘loss’ se il suo valore non è ‘NaN’). Il valore predefinito è ‘NaN’.
La differenza fondamentale tra i parametri è che ognuno si aspetta un input diverso. lossprofit prevedono il numero di tick a distanza dal prezzo di entrata dove desideriamo uscire. I parametri stoplimit prevedo un livello di prezzo. Tra le due tipologie è generalmente più facile lavorare con i livelli di prezzi poiché questi sono facilmente disponibili  tramite i dati OHLC, indicatori e semplici calcoli. Inoltre, la maggior parte degli utenti ha familiarità con i parametri di stop a livelli di prezzo durante il trading manuale e la compilazione di un modulo d’ordine tramite il proprio broker. Tuttavia, questo non significa che gli ordini stop e limit basati su tick debbano essere eliminati dalla nostra cassetta degli attrezzi.
 

Lavorare con i tick in Tradingview

Lavorare con i tick in Tradingview ha un vantaggio chiave. I tick permettono di definire il corretto rapporto rischio / rendimento. Immaginiamo di voler impostare uno stop  loss e un take profit con un rapporto rischio-rendimento pari esattamente a 2:1, se usiamo il parametro stop (ovvero i livelli di prezzo) abbiamo un paio di opzioni:

  • Calcola il valore di stop dal valore close nel momento in cui inviamo l’ordine di entrata. Questo non è corretto perché non entriamo al valore close. In realtà entriamo al valore open della  barra successiva. Se la barra successiva ha un gap verso l’alto o verso il basso, i livelli di stop loss e di take profit sono distorti.
  • Possiamo aspettare che il nostro ordine di ingresso sia completato prima di calcolare il livello di stop. Tuttavia, anche questo non è l’ideale perché l’ordine non è sul mercato fino alla barra successiva, lasciandoci senza protezione per una barra.

Usando i tick con i  parametri profit e loss, gli ordini stop e profit sono immediatamente a mercato e sono calcolati dal prezzo di entrata.

Tick minimi

Prima di poter usare entrambi i parametri, dobbiamo dedicare un po’ di tempo a capire cos’è un tick e il concetto di “tick minimo”. Per chi non conosce i termini, un tick è il minima variazione frazionaria che il prezzo può avere muovendosi verso l’alto o verso il basso. Quindi, ad esempio, se FERRARI sulla Borsa Italiana è quotata a 132,10 e ha un valore di tick minimo di 0,1 euro, allora i prezzi più vicini che  possiamo negoziare sono 132,00 o 132,20. Naturalmente, possiamo superare questi valori ma non potremmo mai avere un prezzo pari a 130,15 in quanto non è un multiplo di 0,1.

Conoscere il livello minimo del tick è utile per capire dove potrebbe arrivare il prezzo successivo e per riconvertire i tick in un importo in euro. 20 tick con un valore minimo di 0,1 euro sono diversi da 20 tick con un valore minimo di 0,05 (2 euro centesimi contro 1 euro).

Quindi, se il valore del tick minimo può variare così tanto, come si può sapere qual è il valore del tick? Fortunatamente, Tradingview ha una variabile integrata syminfo.mintick che fornisce il valore di tick minimo dello strumento/asset che stai negoziando.

Il tick minimo  impatta i parametri stop e limit?

Ora che abbiamo un po’ di conoscenze di base, sembra un buon momento per fare un piccolo approfondimento per lavorare con i tick in Tradingview. Se sappiamo che un asset si muove con incrementi fissi, allora dobbiamo prestare attenzione quando impostiamo i livelli dei prezzi stop e limit.

Continuando con l’esempio precedente, Ferrari è stato quotato a 132,10 euro. Ora immaginiamo di andare long e di volere uno stop loss del 10%. Normalmente calcoliamo 132.10 * 0.9 = 118.89 e inviamo un ordine di stop loss a quel livello. Giustamente notiamo che 118,889 non è un multiplo di 0,01, quindi diamo un’occhiata a cosa succede se lo facciamo…

Verifica di MinTick – Livello dell’ordine

Il seguente esempio deve essere eseguito su RACE per replicare i risultati che vediamo più in basso. Il codice invia semplicemente un ordine stop all’apertura del 3 ottobre 2019 (supponendo di usare un timeframe giornaliero) e lo invia a un livello che non è un multiplo del tick minimo.

				
					strategy("Tick Test", overlay=true)

// Inputs
st_yr_inp = input(defval=2019, title='Backtest Start Year', type=integer)
st_mn_inp = input(defval=10, title='Backtest Start Month', type=integer)
st_dy_inp = input(defval=02, title='Backtest Start Day', type=integer)
en_yr_inp = input(defval=2019, title='Backtest End Year', type=integer)
en_mn_inp = input(defval=10, title='Backtest End Month', type=integer)
en_dy_inp = input(defval=03, title='Backtest End Day', type=integer)

// Timestamp
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
can_trade = time >= start and time <= end


if (can_trade)
    strategy.order("Stop Order", false, stop=118.89)
				
			

Eseguendo il codice possiamo vedere l’effettivo prezzo di esecuzione:

Tradingview - ticktest

Notiamo che siamo stati eseguiti a 118.80, che corrisponde al primo prezzo disponibile al di sotto del livello di stop richiesto. Quindi, in conclusione, non è necessario calcolare con precisione gli ordini stop/limit al livello di tick più vicino. Tuttavia, dobbiamo essere consapevole che il prezzo a cui saremo eseguiti potrebbe essere leggermente diverso da quello previsto.

Tick con Loss e Profit

Vediamo ora come lavorare con i tick in Tradiingview tramite i parametri loss e profit. Vediamo un semplice esempio su l’uso del parametro loss dei tick e cosa significa in termini di differenza di prezzo. Ancora una volta, questo dovrebbe essere eseguito su RACE per replicare il seguente risultato.

				
					//@version=3
 strategy("Tick Test 2", overlay=true)

// Inputs
st_yr_inp = input(defval=2019, title='Backtest Start Year', type=integer)
st_mn_inp = input(defval=10, title='Backtest Start Month', type=integer)
st_dy_inp = input(defval=02, title='Backtest Start Day', type=integer)
en_yr_inp = input(defval=2019, title='Backtest End Year', type=integer)
en_mn_inp = input(defval=10, title='Backtest End Month', type=integer)
en_dy_inp = input(defval=03, title='Backtest End Day', type=integer)
ticks = input(defval=10, title='Stop Loss in Ticks', type=integer)

// Timestamp
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
can_trade = time >= start and time <= end

if (can_trade)
    strategy.entry("long", strategy.long)
    strategy.exit("Stop Order","long", loss=ticks)
				
			

Notiamo che il codice precedente è stato leggermente modificato. Abbiamo aggiunto un input extra ticks e abbiamo anche aggiunto una  chiamata a stratey.entry() per entrare in posizione. Dobbiamo prima inserire una posizione per poter usare la  funzione strategy.exit().

Tradingview - ticktest 2

Usando il valore predefinito di 10 tick, otteniamo un livello di stop loss di 1  euro che corrisponde a quanto previsto perchè il livello minimo di tick è di 0,1 euro.

Cosa succede con un valore negativo di tick?

Può sembrare logico utilizzare un valore di tick negativo per  gli stop loss delle posizioni Long e un valore di tick positivo per le posizioni Short . Dopotutto, per una posizione lunga vogliamo che il nostro stop sia al di sotto del prezzo di entrata, giusto? Bene, il motore di Tradingview effettua questa conversione in automatico. Di conseguenza,dobbiamo sempre usare un valore positivo di tick. Diamo un’occhiata a cosa succede con un valore negativo.

Possiamo usare lo stesso codice precedente modificando il valore di input “Stoploss in Ticks” in -10 invece di 10. Come possiamo vedere quando eseguiamo lo script, l’ordine viene eseguito immediatamente.

Tradingview - ticktest 3

Il Forex non ha un tick minimo

Alcuni utenti curiosi che usano plot(syminfo.mintick) per vedere qual è l’effettivo livello di tick potrebbero notare che le coppie Forex tendono ad avere un valore di tick pari a 0.

Tradingview - Min-Tick-FX

Quindi cosa cambia per noi? Niente…. perché le coppie FX sono quotate in pips. Pertanto, non è necessario specificare un tick minimo. Un pip è il valore di tick minimo. Non possiamo dividerlo ulteriormente e non ci muoviamo in multipli di pip. Pertanto, se inseriamo uno stop loss di 20 tick su una coppia Forex (senza yen giapponese), lo stop sarà di 2 pip. Questo può essere visto con il seguente codice:

				
					//@version=3
strategy("Tick Test FX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Inputs
st_yr_inp = input(defval=2019, title='Backtest Start Year', type=integer)
st_mn_inp = input(defval=10, title='Backtest Start Month', type=integer)
st_dy_inp = input(defval=02, title='Backtest Start Day', type=integer)
en_yr_inp = input(defval=2020, title='Backtest End Year', type=integer)
en_mn_inp = input(defval=10, title='Backtest End Month', type=integer)
en_dy_inp = input(defval=03, title='Backtest End Day', type=integer)
loss_ticks = input(defval=20, title='Stop Loss in Ticks', type=integer)
profit_ticks = input(defval=40, title='Profit in Ticks', type=integer)

// Timestamp
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
can_trade = time >= start and time <= end

ma = sma(close, 100)

if (can_trade and crossover(close, ma))
    strategy.entry("long", strategy.long)
    strategy.exit("SL/TP","long", loss=loss_ticks, profit=profit_ticks)

plot(ma, linewidth=2)
				
			

Elenco delle operazioni

Tradingview - ticktest Fx

Come possiamo vedere dall’elenco delle negoziazioni, uno stop loss di 20 tick ha causato una differenza di prezzo di 2 pip. Il livello di profit di 40 tick ha causato una differenza di 4 pip. Quindi possiamo vedere che il prezzo è in grado di mouversi di tick senza un livello minimo e, come tale, un livello di tick minimo pari a zero è appropriato.

Codice completo

In questo articolo abbiamo descritto come come lavorare con i tick in Tradingview per il trading algoritmico, Per il codice completo riportato in questo articolo, si può consultare il seguente repository di github:
https://github.com/datatrading-info/TradingView

Torna in alto
Scroll to Top