Estrategia de negociación combinada multiindicador ADX,RSI,SMA

El autor:¿ Qué pasa?, Fecha: 14 de septiembre de 2023 16:19:46
Las etiquetas:

Estrategia lógica

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:

  1. Indice Direccional Medio (ADX): Fuerza de la tendencia

  2. Indice de fortaleza relativa (RSI): sobrecomprado/sobrevendido

  3. Promedio móvil simple (SMA): tendencia a corto plazo

  4. Supertrend: tendencia a largo/corto plazo

  5. Breakout del canal: entrada de la brecha de la tendencia

La lógica de negociación es:

  1. ADX muestra presencia y fuerza de tendencia

  2. SuperTrend confirma la alineación de las tendencias a corto y largo plazo

  3. El RSI identifica las regiones sobrecompradas/sobrevendidas

  4. Introducción en el cruce SMA

  5. Entra en el canal de ruptura

La combinación de múltiples indicadores mejora la precisión de la señal.

Ventajas

  • 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

Los riesgos

  • El ajuste de múltiples parámetros requiere optimización

  • Las condiciones combinadas ocurren con menos frecuencia

  • Indicadores contradictorios difíciles de resolver

Resumen de las actividades

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")


Más.