Estrategias de negociación de línea corta basadas en el seguimiento de tendencias y el indicador ADX

El autor:¿ Qué pasa?, Fecha: 2024-01-22 17:10:55
Las etiquetas:

基于趋势追踪和ADX指标的短线交易策略

Resumen

La estrategia combina los indicadores de supertrend, puntos pivot y líneas de suspensión dinámicas formadas por el rango verdadero promedio (ATR) y el indicador de movimiento direccional promedio (ADX) para realizar el juicio y seguimiento de la tendencia. La estrategia es adecuada para el comercio de líneas cortas, puede capturar la continuación de la tendencia después de que se haya ordenado el disco medio, y el control de retroceso también funciona bien.

Principios estratégicos

El indicador de supertrend, combinado con el eje central y el ATR stop loss, determina la dirección en la que el precio rompe la línea de stop loss dinámica para determinar la dirección de la posición. Al mismo tiempo, el indicador ADX determina la fuerza de la tendencia y emite señales de negociación solo cuando la tendencia es lo suficientemente fuerte.

En concreto, el eje central obtiene primero el soporte y resistencia más recientes, y luego forma un precio intermedio dinámico con la media aritmética de los dos días anteriores. Luego, calcula el ATR y lo multiplica por el factor ATR, y luego aumenta y disminuye el precio intermedio dinámico, obteniendo un alza y una bajada.

La línea de stop loss se ajusta dinámicamente en función de los precios más recientes y el valor ATR, lo que permite seguir las tendencias.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. Utiliza el indicador ultraderechista para seguir la dirección de la tendencia y evitar el bloqueo de ganancias en mercados turbulentos.

  2. El indicador ADX permite determinar la intensidad de la tendencia, evitando errores en los intercambios.

  3. La línea de stop loss se ajusta dinámicamente para bloquear las ganancias al máximo.

  4. El RSI se combina para evitar las compras y las ventas.

  5. En general, la configuración de los parámetros de la política es razonable, la continuidad se considera en la selección del dframe, y la configuración de stop loss también es buena.

Análisis de riesgos

La estrategia también tiene algunos riesgos:

  1. Los indicadores ultratrend y MA pueden emitir señales de conflicto.

  2. El indicador ADX está configurado para 14 ciclos y es poco sensible a eventos repentinos.

  3. El parámetro RSI está configurado como el valor predeterminado y puede que no sea posible evitar completamente el exceso de compras y ventas.

  4. Los efectos de los eventos inesperados, como los grandes vacíos/noticias positivas, no se tienen en cuenta.

Las soluciones correspondientes:

  1. Ajustar el ciclo de MA para que coincida con el indicador de la supertrend.

  2. Intentar cortar el ciclo ADX para aumentar la sensibilidad a los eventos de emergencia.

  3. Optimiza los parámetros del RSI para encontrar el valor óptimo.

  4. En la actualidad, la mayoría de los medios de comunicación de todo el mundo se han dedicado a la difusión de noticias.

Dirección de optimización

La estrategia también puede ser optimizada en los siguientes aspectos:

  1. El aumento de la tendencia de los modelos de aprendizaje automático para tomar decisiones más inteligentes.

  2. Intentar introducir indicadores alternativos como el ADX para determinar la intensidad de la tendencia.

  3. Se ha añadido un módulo de frenado adaptativo para que el frenado sea más dinámico y preciso.

  4. Se puede extraer más características y optimizar la estrategia general mediante la tecnología de aprendizaje profundo.

  5. El desarrollo de estrategias con lenguajes avanzados como Python aumenta la escalabilidad de estrategias.

Resumen

Esta estrategia es muy práctica en su conjunto, y su núcleo es seguir la dirección de la tendencia y participar cuando la tendencia es lo suficientemente fuerte. Los paramentos y paramentos también están bien establecidos para bloquear las ganancias al máximo y evitar la expansión de las pérdidas. Por supuesto, todavía hay mucho espacio para la optimización.


/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bendre ADX STrend", overlay = true)

///////////////////////////
// SuperTrend + Pivot Point
//////////////////////////

src =  input(close, title="EMA Source")
PPprd = input(defval = 2, title="Pivot Point Period")
AtrFactor=input(defval = 2, title = "ATR Factor")
AtrPd=input(defval = 21, title = "ATR Period")

StartDate = input(timestamp("1 Dec 2023"), title="Start Date")
EndDate = input(timestamp("12 Jan 2024"), title="End Date")
window()  => true

var float ph = na
var float pl = na
ph := ta.pivothigh(PPprd, PPprd)
pl :=ta.pivotlow(PPprd, PPprd)

float center = na
center := center[1]
// float lastpp = ph ? ph : pl ? pl : 0.0
float lastpp = na(ph) ? na(pl) ? na : pl : ph

if lastpp > 0
    if na(center)
        center := lastpp
    else
        center := (center * 2 + lastpp) / 3

Up = center - (AtrFactor * ta.atr(AtrPd))
Dn = center + (AtrFactor * ta.atr(AtrPd))

var float TUp = na
var float TDown = na
Trend = 0
TUp := close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up
TDown := close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn
Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// Lines
linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : na
plot(Trailingsl, color = linecolor ,  linewidth = 2, title = "PP SuperTrend")

bsignalSSPP = close > Trailingsl
ssignalSSPP = close < Trailingsl


///////
// ADX
//////

lenADX = 14
th = 14
TrueRange = math.max(math.max(high-low, math.abs(high-nz(close[1]))), math.abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? math.max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? math.max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/lenADX) + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/lenADX) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/lenADX) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = math.abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = ta.sma(DX, lenADX)


//////
// MA
/////

lenMA = 21
srcMA = input(close, title="Source")
// offsetMA = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
offsetMA = input(0, title="Offset")
outMA = ta.sma(srcMA, lenMA)

//
// RSI
//
length = input( 14 )
overSold = input( 30 )
overBought = input( 65 )
price = close
vrsi = ta.rsi(price, length)

//
// DMI - Direction Movement Index
// 
[diplus1, diminus1, adx] = ta.dmi(14, 14)

// Buy - Sell Entries
buy = bsignalSSPP and outMA < close and ADX > th
sell = ssignalSSPP 


if (buy and vrsi > overBought and adx > 19)
    // .order // Tuned version
    strategy.entry("Buy", strategy.long, when = window())
    // strategy.close("Sell", "close Sell")

if (sell) and (strategy.position_size > 0)
    // strategy.entry("Sell", strategy.short)
    strategy.close("Buy", "Close Buy")

if(sell and vrsi < overSold and adx > 25)
    strategy.entry("Sell", strategy.short, when = window())

if ( ta.crossover( diminus1, diplus1) or ((buy) and (strategy.position_size > 0)) )
    strategy.close("Sell", "close Sell")

// if(sell) and (diminus1 > diplus1) and adx > 23 and adx > adx[1] and (vrsi < overSold)
//     strategy.entry("Sell", strategy.short, when = window())

// if (strategy.position_size > 0 and ta.crossunder(diminus1, adx)) or (strategy.position_size > 0  and (buy))
//     strategy.close("Sell", "close Sell")





Más contenido