
Esta estrategia combina el uso de un indicador de movimiento de la media del índice ((ADX) y un indicador de movimiento hacia arriba ((DI+) para determinar la dirección y la tendencia del mercado, mientras que el uso de promedios móviles rápidos y lentos para determinar la dirección de las operaciones y el tiempo de tenencia, pertenece a la estrategia de comercio de seguimiento de tendencias. Esta estrategia puede capturar eficazmente los puntos de inflexión de la línea media corta y funciona mejor en mercados con baja volatilidad y tendencia evidente.
La lógica central de la estrategia es que se genera una señal de compra cuando la línea +DI rompe el ADX desde abajo y una señal de venta cuando la línea +DI se rompe el ADX desde arriba. Por lo tanto, la estrategia depende de la intersección entre los indicadores de DI y ADX para determinar la tendencia del mercado y el punto de reversión. Al mismo tiempo, la relación de la línea rápida y media se utiliza para determinar la tendencia del mercado en general y solo se considera la generación de una señal de negociación cuando el EMA rápido es superior al EMA lento.
En concreto, una señal de compra se emite cuando se cumplen las siguientes condiciones: 1, el EMA rápido es mayor que el EMA lento 2 , la línea DI + se rompe desde abajo en la línea ADX 3 El ADX está por debajo del umbral de 30
La señal de venta se emite cuando se cumplen las siguientes condiciones: 1 ADX por encima del umbral 30 La línea DI + 2 cae desde arriba hacia abajo en la línea ADX
La estrategia también incluye la lógica de stop loss, en la que se retiran todas las posiciones cuando el precio está por debajo del precio de stop loss.
Esta estrategia, combinada con DI, ADX y indicadores de la línea media, es eficaz para determinar el punto de inflexión de la tendencia del mercado. Tiene las siguientes ventajas:
La estrategia también tiene algunos riesgos a tener en cuenta:
Estos riesgos pueden ser mejorados mediante la optimización de los parámetros de ADX y de la línea media, el ajuste de los niveles de stop loss y la combinación de señales de confirmación de otros indicadores.
La estrategia tiene espacio para ser optimizada aún más:
La estrategia de tendencia cruzada de ADX es más estable en general y puede capturar el espacio de reversión de manera efectiva antes de la oscilación, pero se debe tener en cuenta el control del riesgo. Se puede obtener un mejor rendimiento ajustado al riesgo mediante la configuración de parámetros optimizados y reglas estrictas de entrada y parada.
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
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/
// © mohanee
//@version=4
//ADX strategy
SmoothedTrueRange=0.00
SmoothedDirectionalMovementPlus=0.00
SmoothedDirectionalMovementMinus=0.00
strategy(title="ADX strategy", overlay=false,pyramiding=3, default_qty_type=strategy.fixed, default_qty_value=3, initial_capital=10000, currency=currency.USD)
len = input(11, title="ADX Length", minval=1)
threshold = input(30, title="threshold", minval=5)
fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)
stopLoss =input(8, title="Stop Loss",minval=1) //
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange:= nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus:= nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)
plot(DIPlus, color=color.green, title="DI+")
//plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")
hline(threshold, color=color.black, linestyle=hline.style_dashed)
fastEmaVal=ema(close,fastEma)
slowEmaVal=ema(close,slowEma)
//long condition
longCondition= ADX < threshold and crossover(DIPlus,ADX) and fastEmaVal > slowEmaVal
barcolor(longCondition ? color.yellow: na)
strategy.entry(id="ADXLE", long=true, when= longCondition and strategy.position_size<1)
barcolor(strategy.position_size>1 ? color.blue: na)
bgcolor(strategy.position_size>1 ? color.blue: na)
//Add
strategy.entry(id="ADXLE", comment="Add", long=true, when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(DIPlus,ADX) )
//calculate stop Loss
stopLossVal = strategy.position_avg_price - (strategy.position_avg_price*stopLoss*0.01)
strategy.close(id="ADXLE",comment="SL Exit", when=close<stopLossVal) //close all on stop loss
//exit condition
exitCondition= ADX > threshold and crossunder(DIPlus,ADX) // and fastEmaVal > slowEmaVal
strategy.close(id="ADXLE",comment="TPExitAll", qty=strategy.position_size , when= exitCondition) //close all