Tradingview Strategia Inside Bar Momentum

Strategia Inside Bar Momentum con Tradingview

In questo articolo descriviamo e testiamo la strategia Inside Bar Momentum con Tradingview per il trading algoritmico. Secondo i report in alcuni siti questa strategia ha avuto un’eccellente performance nel trading dal vivo. In quanto tale, sembra una strategia interessante da replicare in Tradingview e  verificare il backtest.

Che cos’è una Inside Bar

Una barra inside è il nome di una candela che può entrare completamente nella candela che la precede. Significa che il massimo della candela precedente è maggiore del massimo della candela “Inside Bar”. Inoltre, il minimo della barra precedente è inferiore del minimo della candela “Inside Bar”.

Le barre inside possono essere utilizzate come segnale di analisi tecnica per le strategie con i pattern di prezzo. Si pensa che le barre inside possano indicare una pausa o un consolidamento del mercato prima del verificarsi un movimento più ampio. Questo concetto è simile alla compressione di Bollinger, cioè la calma prima della tempesta!

Questa particolare strategia prevede che la “barra  inside” stia segnalando una pausa prima che il momentum continui nella stessa direzione. Prima di entrare nelle regole, approfondiamo i concetti  relativi alla barra inside con un esempio visivo.

Tradingview - Inside-Bars

Strategia Inside Bar Momentum con Tradingview

Descriviamo ora la logica alla base della strategia Inside Bar Momentum con Tradingview. La strategia si concentra sulle “configurazioni” invece che sui segnali, cioè non entriamo in un trade non appena riceviamo un segnale. Invece, il segnale evidenzia una potenziale configurazione che potrebbe realizzarsi o meno. Una volta identificata la configurazione, inviamo un ordine stop per tentare di entrare ad un livello ideale quando si conferma la configurazione.

  • Setup Long:  abbiamo una barra inside e la candela precedente è verde
  • Setup Short: abbiamo una barra inside e la candela precedente è rossa

Come accennato in precedenza, una volta individuato il setup, inseriamo un ordine  stop ad una specifica distanza (percentuale) dall’high o dal low della barra precedente della barra inside. Si considera l’high per i setup long e il low per il setup short.

  • Uscita: semplice take profit e stop loss misurati dal massimo o dal minimo della barra precedente della barra inside. (Non dal prezzo di entrata!)

Nota speciale: se abbiamo una nuova barra inside mentre abbiamo una posizione aperta, allora chiudiamo la posizione con un ordine market. Se abbiamo una nuova barra inside ma non è stato attivato il livello di entrata,  allora riiniziamo annullando l’ordine di entrata esistente e creando un nuovo ordine.

Il codice

				
					//@version=3
// Inside Bar Momentum Strategy
 
strategy("Babypips: Inside Bar Momentum Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=5)
 
From_Year  = input(defval = 2018, title = "From Year")
From_Month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
From_Day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
To_Year    = input(defval = 9999, title = "To Year")
To_Month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
To_Day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
Start  = timestamp(From_Year, From_Month, From_Day, 00, 00)  // backtest start window
Finish = timestamp(To_Year, To_Month, To_Day, 23, 59)        // backtest finish window
Window = time >= Start and time <= Finish
 
Stop_Buy_Perc  = input(10, "Stop Buy Order Percentage From Previous Candle's Range")/100
Stop_Loss_Perc = input(20, "Stop Loss Distance from High/Low of Previous Candle")/100
Take_Prof_Perc = input(80, "Take Profit Distance from High/Low of Previous Candle")/100
 
Risk = input(2, "Percentage Of EQUITY to risk per trade", step=0.1, minval=0, maxval=100)/100
 
Inside_Bar = high[1] > high[0] and low[1] < low[0]
Prev_Range = high[1] - low[1]
Bullish = open[1] < close[1]
Bearish = open[1] > close[1]
 
// Calcolo dei livelli chiave 
Long_Stop_Buy_Level   = high[1] + (Prev_Range * Stop_Buy_Perc)
Short_Stop_Buy_Level  = low[1]  - (Prev_Range * Stop_Buy_Perc)
Long_Stop_Loss_Level  = high[1] - (Prev_Range * Stop_Loss_Perc)
Short_Stop_Loss_Level = low[1]  + (Prev_Range * Stop_Loss_Perc)
Long_Take_Prof_Level  = high[1] + (Prev_Range * Take_Prof_Perc)
Short_Take_Prof_Level = low[1]  - (Prev_Range * Take_Prof_Perc)
 
long_qty = floor((strategy.equity * Risk) / (Long_Stop_Buy_Level - Long_Stop_Loss_Level))
short_qty = floor((strategy.equity * Risk) / (Short_Stop_Loss_Level - Short_Stop_Buy_Level))
 
 
Long_Condition = Window and Inside_Bar and Bullish
if (Long_Condition)
    // Nel caso abbiamo ancora un ordine buy stop attivo
    strategy.cancel_all()
    // Chiude tutte le posizioni aperte
    strategy.close_all()
    strategy.entry("Bullish IB", strategy.long, stop=Long_Stop_Buy_Level, qty=long_qty)
    strategy.exit("Bullish Exit","Bullish IB", stop=Long_Stop_Loss_Level, limit=Long_Take_Prof_Level)
    
 
Short_Condition = Window and Inside_Bar and Bearish
if (Short_Condition)
    // Nel caso abbiamo ancora un ordine buy stop attivo
    strategy.cancel_all()
    // Chiude tutte le posizioni aperte
    strategy.close_all()
    strategy.entry("Bearish IB", strategy.short, stop=Short_Stop_Buy_Level, qty=short_qty)
    strategy.exit("Bearish Exit","Bearish IB", stop=Short_Stop_Loss_Level, limit=Short_Take_Prof_Level)
    
// ----------------------------- PLOTTING ------------------------------------//
plotshape(Inside_Bar, style=shape.arrowdown, location=location.abovebar, color=purple)
				
			

Commento

Il codice tenta di seguire fedelmente il set di regole con alcuni vincoli aggiuntivi:

  • Livelli di ingresso, stop e profitto variabili
  • Intervalli di date di backtest
  • Dimensionamento della posizione

Dei tre extra, l’algoritmo di dimensionamento della posizione merita un approfondimento. La strategia originale prevede un rischio fisso, cioè un dimensionamento costante della posizione. Le uniche possibilità di uscire in perdita sono attraverso lo stop loss o attraverso un ordine a mercato (che viene attivato prima di raggiungere lo stop). Pertanto, questa strategia è un candidato ideale per beneficiare di un dimensionamento della posizione più ampio.

Nei mercati Forex i trader comunemente ridimensionano la propria posizione in modo da avere una perdita fissa di x% del conto complessivo nel caso si attivi lo stop loss. Dato che gli stop loss non sono a zero, si traduce in una quantità molto maggiore rispetto alla semplice divisione di una percentuale del conto per il prezzo. In altre parole la dimensione della posizione varia a seconda della distanza dello stop loss dal prezzo di entrata. Più è lontano, più la dimensione della posizione  è piccola. Al contrario, se lo stopo loss è vicino al prezzo, la dimensione della posizione  è più grande rischiando lo stesso importo.

Nel codice calcoliamo la dimensione della posizione con la seguente riga:

long_qty = floor((strategy.equity * Risk) / (Long_Stop_Buy_Level - Long_Stop_Loss_Level))

Da notare che dal momento che calcoliamo manualmente qty, nella scheda delle proprietà della strategia Order Size  non ha alcun impatto sulla dimensione della posizione.

Nota aggiuntiva: il codice in questo articolo funziona in modo efficace solo se la valuta del account è la stessa della valuta base. Vale a dire se stai negoziando USDEUR e la valuta del tuo conto è EUR. Se non è la valuta di base, i trader devono prima eseguire una conversione FX. Il codice in questo articolo non prevede questa conversione. Tuttavia, la valuta del conto in questa strategia è impostata su quella di default che sarà automaticamente la controvaluta.

Il grafico

Quando carichiamo la strategia per la prima volta, vediamo qualcosa che assomiglia a questo:

Tradingview - Inside-Bars - Grafico

Prestazioni

Poiché questa strategia è stata pensata per il mercato FX, è opportuno dare prima un’occhiata ad alcune coppie forex. Successivamente, vediamo come si comportata su altri mercati.

Nota importante: alcuni dei  seguenti risultati sembrano un po’ troppo belli per essere veri. In generale, se sembra così, di solito lo è! Quindi prendiamo questi risultati con una buona dose di cautela. Potrebbe esserci qualcosa di strano nella logica di Tradingview come come abbiamo scoperto nell’articolo su come usare il Trailing Stop in Tradingview.

Tutti i seguenti backtest sono stati eseguiti SENZA commissioni (importante perché le commissioni possono causare la morte di molte strategie).

Forex – GBPUSD

GBP-USD

Indici – S&P 500

SP500

Materie prime – Oro

GOLD

Crypto – BTCUSD

BTCUSD

Codice completo

In questo articolo abbiamo descritto come implementare la strategia Inside Bar Momentum con Tradingview  per  trading algoritmico. Per il codice completo riportato in questo articolo, si può consultare il seguente repository di github:
https://github.com/datatrading-info/TradingView

Scroll to Top