La estrategia de seguimiento de impulso y tendencia

El autor:¿ Qué pasa?, Fecha: 2024-02-22 17:27:18
Las etiquetas:

img

Resumen general

La idea central de esta estrategia es combinar el indicador de Super Tendencia y el Índice de Movimiento Direccional Medio (ADX) para juzgar y rastrear las tendencias. El indicador de Super Tendencia se utiliza para identificar la dirección actual de la tendencia del precio, y el ADX se utiliza para determinar la fuerza de la tendencia. Las operaciones solo se realizan bajo condiciones de tendencia fuerte. Además, la estrategia también utiliza el color del cuerpo de las velas, el volumen de operaciones y otros indicadores para la confirmación, formando un conjunto relativamente completo de reglas comerciales.

En general, esta estrategia pertenece a la estrategia de seguimiento de tendencias, cuyo objetivo es captar tendencias claras a medio y largo plazo, evitando al mismo tiempo la interferencia de los períodos de consolidación y oscilación.

Principios de estrategia

  1. Cuando el precio se encuentra por encima de la Super Tendencia es una señal larga, y cuando se encuentra por debajo de la Super Tendencia es una señal corta.

  2. Las señales de negociación se generan solo cuando el ADX es mayor que el umbral, para que los períodos con una consolidación poco clara puedan filtrarse.

  3. El color del cuerpo del candelabro se utiliza para juzgar si está actualmente en un patrón ascendente o descendente, combinado con el indicador Super Trend para formar una confirmación.

  4. El aumento del volumen de operaciones sirve como señal de confirmación, y las posiciones solo se establecen cuando el volumen de operaciones aumenta.

  5. Establezca stop loss y take profit para bloquear las ganancias y controlar los riesgos.

  6. Cierre todas las posiciones antes del final del día.

Ventajas de la estrategia

  1. Seguir tendencias claras a medio y largo plazo, evitar oscilaciones y lograr una alta rentabilidad.

  2. La estrategia tiene pocos parámetros y es fácil de entender e implementar.

  3. Los riesgos están bien controlados con el stop loss y el take profit.

  4. El uso de múltiples indicadores para la confirmación puede reducir las señales falsas.

Riesgos de la estrategia

  1. Puede sufrir grandes pérdidas durante las correcciones importantes en todo el mercado.

  2. Las acciones individuales pueden tener reversiones bruscas debido a cambios en los fundamentos.

  3. Los acontecimientos del cisne negro de los grandes cambios de política.

Soluciones:

  1. Ajustar adecuadamente los parámetros del ADX para garantizar que las operaciones se realicen únicamente en condiciones de tendencia fuerte.

  2. El importe de las pérdidas individuales se calculará en función de los valores de las pérdidas individuales.

  3. Supervise de cerca las políticas y los eventos importantes, recorte activamente las pérdidas si es necesario.

Direcciones para la optimización

  1. Prueba diferentes combinaciones de parámetros de Super Tendencia para encontrar la que genere las señales más estables.

  2. Prueba diferentes combinaciones de parámetros ADX para determinar los ajustes óptimos.

  3. Añadir otros indicadores de confirmación como volatilidad y bandas de Bollinger para reducir aún más las señales falsas.

  4. Combinar con estrategias de ruptura para reducir las pérdidas de manera oportuna cuando las tendencias se rompen.

Resumen de las actividades

La lógica general de esta estrategia es clara, utilizando la Super Tendencia para juzgar la dirección de la tendencia del precio, el ADX para determinar la fuerza de la tendencia y operar a lo largo de tendencias fuertes.


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

//Intraday Strategy Template

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

//@version=4
strategy("[VJ]Hulk Smash Intra", overlay=true, calc_on_every_tick = false, pyramiding=0,default_qty_type=strategy.percent_of_equity, default_qty_value=100,initial_capital=2000)

// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01    
     
var float i_multiplier = input(title = "ST Multiplier", type = input.float, 
     defval = 2, step = 0.1, confirm=true)

var int i_atrPeriod = input(title = "ST ATR Period", type = input.integer, 
     defval = 10, confirm=true)     
     
len = input(title="ADX Length", type=input.integer, defval=14)
th = input(title="ADX Threshold", type=input.integer, defval=20)
adxval = input(title="ADX Momemtum Value", type=input.integer, defval=25)     



// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0

// ********** Supporting functions - End **********


// ********** Strategy - Start **********

[superTrend, dir] = supertrend(i_multiplier, i_atrPeriod)

colResistance = dir == 1 and dir == dir[1] ? color.new(color.red, 0) : color.new(color.red, 100)
colSupport = dir == -1 and dir == dir[1] ? color.new(color.green, 0) : color.new(color.green, 100)


// Super Trend Long/short condition
stlong = close > superTrend
stshort = close < superTrend



// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)

//Vol Confirmation
vol = volume > volume[1]


//Candles colors
greenCandle = (close > open)
redCandle = (close < open)

// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)

// Trade only if intraday session is active




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 = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - nz(SmoothedTrueRange[1]) / len + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - 
   nz(SmoothedDirectionalMovementPlus[1]) / len + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
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)

// a = plot(DIPlus, color=color.green, title="DI+", transp=100)
// b = plot(DIMinus, color=color.red, title="DI-", transp=100)

//Final Long/Short Condition
longCondition = stlong and redCandle and vol and ADX>adxval
shortCondition = stshort and greenCandle and vol and ADX >adxval



//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("TP/SL", "My Long Entry Id",stop=stop_level, limit=profit_level)
    


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
    
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********

Más.