Esta estrategia combina varios indicadores técnicos para identificar la dirección de la tendencia y los niveles de sobrecompra/sobreventa de las señales comerciales.
Los principales indicadores utilizados son:
Indice Direccional Medio (ADX): Fuerza de la tendencia
Indice de fortaleza relativa (RSI): sobrecomprado/sobrevendido
Promedio móvil simple (SMA): tendencia a corto plazo
Supertrend: tendencia a largo/corto plazo
Breakout del canal: entrada de la brecha de la tendencia
La lógica de negociación es:
ADX muestra presencia y fuerza de tendencia
SuperTrend confirma la alineación de las tendencias a corto y largo plazo
El RSI identifica las regiones sobrecompradas/sobrevendidas
Introducción en el cruce SMA
Entra en el canal de ruptura
La combinación de múltiples indicadores mejora la precisión de la señal.
Los indicadores múltiples mejoran la calidad
Las estrategias se combinan para una entrada sistemática
ADX identifica la tendencia, el RSI sobrecomprado/sobrevendido
SuperTrend captura tendencias, SMA y entrada de ruptura del canal
El ajuste de múltiples parámetros requiere optimización
Las condiciones combinadas ocurren con menos frecuencia
Indicadores contradictorios difíciles de resolver
Esta estrategia utiliza plenamente las fortalezas de varios indicadores para construir un sistema robusto. Pero la optimización de parámetros es clave para la frecuencia de comercio ideal. En general, combina una fuerte identificación de tendencias con entradas eficientes.
/*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")