Tradingview Strategia Mean Reverting sulle Cryptovalute

Strategia Mean-Reverting sulle CryptoValute con Tradingview

In questo articolo descriviamo una strategia mean-reverting sulle cryptovalute con Tradingview per il trading algoritmico. Si tratta di una semplice e completa strategia di mean reversion che è stata testata su varie criptovalute  con timeframe di 1 ora. Detto questo, è sempre possibile modificare questa strategia per  testare altri timeframe e altri asset. I principi rimangono gli stessi.

Cos’è la mean reversion?

La mean-reverting è semplicemente un bel modo per descrivere qualcosa che sta ritornando verso un prezzo “medio” (la media). Generalmente, un trader usa una strategia di mean reversion quando il prezzo dell’asset/azione/valuta si è abbastanza allontanato dalla media storica e ha la convinzione che poi tornerà indietro.

Strategia Mean-Reverting sulle CryptoValute con Tradingview

La strategia mean-reverting sulle cryptovalute con Tradingview prevede di effettuare operazioni quando una media mobile esponenziale veloce si è allontanata a grande distanza da una media mobile più lenta. In questo scenario, la media lenta funge da prezzo medio. Quindi se il recente movimento dei prezzi si  è allontano da essa, la statistica vuole che il prezzo tende a tornare verso la media. Al posto del prezzo di chiusura usiamo una media mobile esponenziale veloce per eliminare un po’ di rumore dal movimento del prezzo.

Infine, per cercare di assicurarci che il prezzo inizi a tornare verso la media, effettuiamo un controllo finale sulla media mobile esponenziale. Prima di entrare in posizione, verifichiamo che la media mobile veloce è aumentata (o diminuita in caso short) per un dato numero di candele. In questo modo possiamo evitare i casi in cui il prezzo supera il prezzo di entrata e continua ad allontanarsi dalla media sempre di più.

Nota di attenzione:

Le strategie di mean-reverting, come descritto nei tutorial sul trading algoritmico, possono essere rischiose se effettuiamo operazioni dalla parte sbagliata quando il mercato  è fortemente in trend. Questa strategia dovrebbe essere impiegata con cura. Abbiamo inserito un paio di opzioni per aiutare a evitare le perdite, tra cui uno stop loss e uno switch per disabilitare le operazioni in determinate direzioni. Disabilitare le operazioni in una direzione ci consente di modificare la strategia per “acquistare i ribassi” o “vendere i massimi”. Il problema è identificare correttamente quando il regime di mercato cambia e  quindi usare il setup corretto!

Il codice

				
					//@version=3
strategy("EMA, SMA Mean Reversion", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Input
st_yr_inp = input(defval=2017, title='Backtest Start Year', type=integer)
st_mn_inp = input(defval=01, title='Backtest Start Month', type=integer)
st_dy_inp = input(defval=01, title='Backtest Start Day', type=integer)
en_yr_inp = input(defval=2025, title='Backtest End Year', type=integer)
en_mn_inp = input(defval=01, title='Backtest End Month', type=integer)
en_dy_inp = input(defval=01, title='Backtest End Day', type=integer)
sma_lookback = input(defval=100, title="Lookback Period For SMA")
ema_lookback = input(defval=10, title="Lookback Period For EMA")
long_diff_perc = input(defval=6, title="Percentage Deviation From SMA to go Long") / 100
short_diff_perc = input(defval=20, title="Percentage Deviation From SMA to go Short") / 100
ema_filter_bars = input(defval=4, title="The number of bars the EMA must rise/fall")
lng_allwd = input(defval=true, title="Allow Longs?")
srt_allwd = input(defval=true, title="Allow Shorts?")
use_stop = input(defval=true, title="Use Stoploss?")
stop_perc = input(defval=30, title="Stop Loss Percentage") / 100

// Date
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
// Indicators
Setup
sma = sma(close, sma_lookback)
ema = ema(close, ema_lookback)

// Strategia
Calcuations
close_stdev = stdev(close, sma_lookback)
sd1_upper = close + (close_stdev * 1)
sd1_lower = close - (close_stdev * 1)
close_diff = (close - sma) / sma

// Entrate e Uscite
longCondition = close_diff <= -long_diff_perc and rising(ema, ema_filter_bars) and lng_allwd and can_trade
if (longCondition)
    strategy.entry("Long", strategy.long)
    if use_stop
        stop_price = close * (1 - stop_perc)
        strategy.order("Long Stoploss", false, stop=stop_price)

shortCondition = close_diff >= short_diff_perc and falling(ema, ema_filter_bars) and srt_allwd and can_trade
if (shortCondition)
    strategy.entry("Short", strategy.short)
    if use_stop
        stop_price = close * (1 + stop_perc)
        strategy.order("Short Stoploss", true, stop=stop_price)

strategy.close("Long", when=close_diff >= 0)
strategy.cancel("Long Stoploss", when=close_diff >= 0)
strategy.close("Short", when=close_diff <= 0)
strategy.cancel("Short Stoploss", when=close_diff <= 0)

// Grafico
sma_col = sma > sma[1] ? green: red
ema_fill = close_diff <= -long_diff_perc ? lime: close_diff >= short_diff_perc ? maroon: aqua
p_sma = plot(sma, color=sma_col, linewidth=3)
p_ema = plot(ema, color=black, linewidth=2)
p_sd1 = plot(sd1_upper, color=black, linewidth=1, transp=85)
p_sd2 = plot(sd1_lower, color=black, linewidth=1, transp=85)
fill(p_sd1, p_sd2, title='STDEV Fill', color=silver, transp=80)
fill(p_sma, p_ema, title='EMA > Mean Percentage', color=ema_fill, transp=80)
				
			

Come usare il codice

Ci sono due principali modi per usare questo codice. Vediamo le caratteristiche di ciascun metodo:

Ritorno alla media

Il mean-reverting è configurato “out-of-the-box”. Tuttavia, non significa che non ci sia del lavoro da fare. Prima di tutto, la percentuale  di deviazione dalla media deve essere modificata in base alle caratteristiche dello strumento che vogliamo negoziare. La seconda cosa è decidere quale tipo di stoploss (se presente) è l’ideale per la tolleranza al rischio prevista dalla nostra strategia. Nelle strategie di mean-reverting, in genere, si preferisce uno stop loss ampio perché spesso il prezzo può continuare a muoversi contro il trade per un po’ di tempo prima di tornare vero la media. Quindi, usiamo lo stop-loss come protezione contro un evento catastrofico.

Buy the dips / sell the tops

Per quelli di voi che stanno cercando di cavalcare una tendenza. Abilitare il trading in un’unica direzione funziona davvero bene in un mercato  con un forte trend. Permette di ottenere entrate migliori rimanendo nella direzione giusta del trend. Per capire quale direzione abilitare è necessario intercettare i cambi di regime.

Usare i parametri in input

E’ errato pensare che i parametri di una strategia mean-reverting sono validi per tutti i regimi di mercato. Quindi, durante i test dobbiamo individuare i valori dei parametri  validi in regimi specifici. In questo modo abbiamo indicazioni della configurazione da usare per quel particolare regime.

Non esagerare con le medie mobili

Infine, durante la configurazione, possiamo essere tentati di modificare le medie mobili per ottenere il massimo profitto dalla strategia. Dobbiamo evitare questa tentazione perchè stiamo semplicmente allineando le MA con i massimi e minini di una specifica serie di dati storici, conosciuto  come “Curve Fitting”.

Le medie mobili dovrebbero essere impiegate per misurare la distanza  dal prezzo medio. Pertanto, dobbiamo modificarla in modo da fornire una migliore misurazione. Ad esempio, possiamo regolare la SMA lenta in modo che rappresenti più storico del prezzo medio o modificare l’EMA veloce per ridurre ulteriormente il rumore.

Costruire nuove strategie

Questo codice è solo il punto di partenza. Dobbiamo usarlo come base per provare nuove le idee e migliorare i rendimenti. Ancora una volta, dobbiamo fare attenzione a non trasformare ogni trade in una operazione vincente, cioè l’overfitting. Dobbiamo testare i miglioramenti su un insieme di  valute e timeframe diversi.

Alcuni risultati

 

Bitcoin Out-of-the-box: 20 trade, strike rate del 75% con un profitto del 42%.

Tradingview Strategia Mean Reverting sulle Cryptovalute - Bitcoin

 

Ethereum Buy-the-dips: 22 trade, strike rate dell’86% con oltre il 200% di profitto

Tradingview Strategia Mean Reverting sulle Cryptovalute - ethereum

 

Monero Out of the box:  28 trade, strike rate del 67% con un profitto del 75%.

Tradingview Strategia Mean Reverting sulle Cryptovalute - monero

Codice completo

In questo articolo abbiamo descritto una strategia mean-reverting sulle cryptovalute con 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