Estrategia ADX + RSI

El autor:¿ Qué pasa?, Fecha: 2023-09-27 16:27:39
Las etiquetas:

Resumen general

Esta es una estrategia de seguimiento de tendencias que combina los indicadores ADX y RSI. Utiliza el RSI para identificar los niveles de sobrecompra y sobreventa para generar señales comerciales, y el ADX para determinar la tendencia para filtrar las operaciones cuando la tendencia no está clara, evitando así los golpes en los mercados de rango.

Estrategia lógica

  1. Utilice el RSI de 7 períodos para identificar los niveles de sobrecompra y sobreventa
  • El índice de rentabilidad inferior a 30 se considera sobreventa
  • El RSI por encima de 70 se considera sobrecomprado
  1. Utilice ADX para determinar la tendencia
  • ADX por encima de 30 sugiere una fuerte tendencia
  • ADX por debajo de 30 no sugiere tendencia
  1. Reglas de entrada
  • En el caso de las entidades de crédito, el importe de las pérdidas derivadas de las pérdidas derivadas de las operaciones de inversión se calcula en función de las pérdidas derivadas de las operaciones de inversión.
  • En caso de que el índice de rentabilidad sea superior a 70 y el índice ADX sea superior a 30
  1. Tome ganancias y deje pérdidas
  • En el caso de las entidades de crédito, el importe de las pérdidas derivadas de las pérdidas derivadas de las pérdidas derivadas de las pérdidas derivadas de las pérdidas derivadas de las pérdidas derivadas de las pérdidas derivadas de las pérdidas derivadas de las pérdidas derivadas de las pérdidas.
  • Precios de cierre de los usos cerrados
  • Utilizaciones basadas en la oscilación máximos/ mínimos de la oscilación recientes

Análisis de ventajas

  1. El RSI identifica eficazmente los niveles de sobrecompra y sobreventa para evitar las trampas de compra/venta

  2. El ADX filtra los mercados de rango para evitar los golpes

  3. Los métodos opcionales de toma de ganancias/detención de pérdidas ayudan a controlar mejor los riesgos

  4. Sencillo y fácil de entender, bueno para los principiantes para aprender el comercio de algoritmos

  5. Mucho espacio para la optimización y el refinamiento de parámetros

Análisis de riesgos

  1. El índice de variabilidad de los precios de los precios de los precios de los productos de consumo (RSI) de los Estados miembros es el siguiente:

  2. La determinación de tendencia de ADX tiene retrasos, puede perder puntos de inflexión de tendencia

  3. La colocación incorrecta de un stop loss puede provocar pérdidas.

  4. Riesgo de sobreoptimización debido a la simplicidad

  5. Optimización de parámetros necesaria para un mejor rendimiento

Direcciones de optimización

  1. Optimizar los parámetros del índice de rentabilidad y los niveles de sobrecompra/sobreventa

  2. Prueba diferentes períodos de ADX para encontrar el ajuste óptimo

  3. Prueba de diferentes métodos de obtención de beneficios/dejan de perder

  4. Añadir filtro de tendencia para evitar operaciones contra tendencia

  5. Combinar con otros indicadores para mejorar el rendimiento

Resumen de las actividades

Esta estrategia combina las fortalezas de los indicadores clásicos RSI y ADX para identificar tendencias y evitar problemas. Tiene mucho espacio para la optimización para lograr un mejor rendimiento.


/*backtest
start: 2023-09-19 00:00:00
end: 2023-09-26 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tweakerID

// This is a strategy that uses the 7 Period RSI to buy when the indicator is shown as oversold (OS) and sells when 
// the index marks overbought (OB). It also uses the ADX to determine whether the trend is ranging or trending
// and filters out the trending trades. Seems to work better for automated trading when the logic is inversed (buying OB 
// and selling the OS) wihout stop loss.

//@version=4
strategy("ADX + RSI Strat", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, commission_value=0.04, calc_on_every_tick=false)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))


//SL & TP Inputs
i_SL=input(false, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=0, step=.2, title="SL Expander")
i_TPExpander=input(defval=0, step=.2, title="TP Expander")
i_reverse=input(true, title="Reverse Trades")

//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0))*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0))*i_SLExpander)
lTP=strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0))+((valuewhen(bought, atr(14), 0))*i_TPExpander))
sTP=strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0)-strategy.position_avg_price)-((valuewhen(bought, atr(14), 0))*i_TPExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
SL= islong ? LSL : isshort ? SSL : na
TP= islong ? lTP : isshort ? sTP : na

//RSI Calculations
RSI=rsi(close, 7)
OS=input(30, step=5)
OB=input(80, step=5)

//ADX Calculations
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -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 = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
adxlevel=input(30, step=5)


//Entry Logic
BUY = sig < adxlevel and (RSI < OS) 
SELL = sig < adxlevel and (RSI > OB) 

//Entries
strategy.entry("long", strategy.long, when=i_reverse?SELL:BUY)
strategy.entry("short", strategy.short, when=not i_reverse?SELL:BUY)
//Exits
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL")
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross, title="TP")
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, color=color.green, title="Bullish Setup")
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, color=color.red, title="Bearish Setup")

Más.