Esta estratégia combina vários indicadores técnicos para identificar a direcção da tendência e os níveis de sobrecompra/supervenda dos sinais comerciais.
Os principais indicadores utilizados são:
Indice Direccional Médio (ADX): Força da tendência
Indice de força relativa (RSI): sobrecompra/supervenda
Média móvel simples (SMA): tendência a curto prazo
SuperTendência: tendência a longo/curto prazo
Breakout do canal: entrada de breakout da tendência
A lógica de negociação é:
ADX mostra presença e força da tendência
SuperTrend confirma o alinhamento das tendências de curto/longo prazo
O RSI identifica regiões com sobrecompra/supervenda
Introdução no cruzamento SMA
Entrar no canal de ruptura
A combinação de múltiplos indicadores melhora a precisão do sinal.
Indicadores múltiplos melhoram a qualidade
Estratégias combinadas para entrada sistemática
ADX identifica tendência, RSI sobrecomprado/supervendido
SuperTrend capta tendências, SMA e entrada de ruptura do canal
Ajuste de múltiplos parâmetros requer otimização
Condições combinadas ocorrem com menos frequência
Sinais de indicadores conflitantes difíceis de resolver
Esta estratégia utiliza plenamente os pontos fortes de vários indicadores para construir um sistema robusto. Mas a otimização de parâmetros é fundamental para a freqüência de negociação ideal.
/*backtest start: 2023-09-12 00:00:00 end: 2023-09-13 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // strategy("Combined Strategy", overlay=true, default_qty_value=100, initial_capital=1000, margin_long=0.1) adxlen = input(7, title="ADX Smoothing") dilen = input(7, title="DI Length") dirmov(len) => up = ta.change(high) down = -ta.change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = ta.rma(ta.tr, len) plus = fixnan(100 * ta.rma(plusDM, len) / truerange) minus = fixnan(100 * ta.rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) // The same on Pine Script™ pine_supertrend(factor, atrPeriod) => src = hl2 atr = ta.atr(atrPeriod) upperBand = src + factor * atr lowerBand = src - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand int direction = na float superTrend = na prevSuperTrend = superTrend[1] if na(atr[1]) and ta.rsi(close, 21) < 66 and ta.rsi(close,3) > 80 and ta.rsi(close, 28) > 49 and sig > 20 direction := 1 else if prevSuperTrend == prevUpperBand direction := close > upperBand ? -1 : 1 else direction := close < lowerBand ? 1 : -1 superTrend := direction == -1 ? lowerBand : upperBand [superTrend, direction] [pineSupertrend, pineDirection] = pine_supertrend(3, 10) upTrend = pineDirection < 0 downTrend = pineDirection > 0 // Define the 20-period SMA sma20 = ta.sma(close, 20) a = ta.rsi(close,14) OB = input(70) OS = input(30) os = a > OB ob = a < OS if upTrend and close > pineSupertrend and close > sma20 and os strategy.entry("Buy", strategy.long) if ta.crossunder(close, sma20) or ob strategy.close_all() //define when to breakout of channel //("ChannelBreakOutStrategy", overlay=true) length = input.int(title="Length", minval=1, maxval=1000, defval=5) upBound = ta.highest(high, length) downBound = ta.lowest(low, length) if (not na(close[length])) strategy.entry("ChBrkLE", strategy.long, stop=upBound + syminfo.mintick, comment="ChBrkLE") strategy.entry("ChBrkSE", strategy.short, stop=downBound - syminfo.mintick, comment="ChBrkSE")