
La estrategia de seguimiento de tendencias móviles de stop loss es una estrategia de negociación cuantitativa que combina indicadores de determinación de tendencias y mecanismos de stop loss móviles. La estrategia utiliza indicadores de supertrend para determinar la dirección de la tendencia actual y utiliza líneas de stop loss móviles para rastrear los cambios de precios en tiempo real, lo que permite el seguimiento de tendencias y el control de riesgos.
La estrategia primero calcula el indicador de supertrend para determinar si se encuentra actualmente en una tendencia alcista o bajista. El indicador de supertrend combina el indicador ATR y el punto central para determinar con mayor precisión la dirección de la tendencia. Si el indicador de supertrend se determina como una tendencia alcista, genera una señal de compra; si se determina como una tendencia bajista, genera una señal de venta.
La estrategia abre más posiciones al generar una señal de compra; al mismo tiempo, calcula una línea de parada móvil en tiempo real, que se calcula como el punto central menos el valor del indicador ATR. Siempre que el precio de cierre actual sea superior a la línea de parada, la línea de parada se moverá en tiempo real y se mantendrá en una posición de parada razonable. Si el precio cae por encima de la línea de parada, la parada de posición se iguala.
La estrategia combina el indicador ADX y el indicador RSI para filtrar señales de negociación inapropiadas. La estrategia solo toma posiciones cuando el indicador de tendencia súper es más grande que el límite establecido y el RSI está en un nivel razonable.
La mayor ventaja de esta estrategia reside en la capacidad de capturar muy bien la dirección de la tendencia y realizar el seguimiento de la tendencia. El indicador de tendencia súper es más preciso que la media móvil simple y puede determinar rápidamente el punto de inflexión. Al mismo tiempo, el mecanismo de parada móvil puede ajustar automáticamente el punto de parada, bloquear al máximo las ganancias y controlar eficazmente el riesgo.
Además, la estrategia incluye los indicadores ADX y RSI para filtración de fluctuaciones, lo que evita errores en los períodos de mayor volatilidad del mercado. Los indicadores ADX garantizan una tendencia suficiente, los indicadores RSI evitan el fenómeno de sobrecompra y sobreventa, lo que aumenta la probabilidad de ganancias.
El mayor riesgo de esta estrategia es la probabilidad de que la tendencia se juzgue mal y el indicador de tendencia súper emita una señal errónea. Aunque el indicador de tendencia súper es mejor que la media móvil simple, es inevitable que se juzgue mal en situaciones complejas.
Además, la configuración incorrecta de los parámetros de la estrategia también conlleva ciertos riesgos. Por ejemplo, los parámetros de ATR en las convenciones provocan un ajuste demasiado radical de la línea de parada. La configuración incorrecta de los parámetros de ADX y RSI también puede perder oportunidades de negociación o aumentar la probabilidad de operaciones erróneas.
La estrategia puede ser optimizada en los siguientes aspectos:
Intentar otros indicadores de tendencia, como el DMI, KDJ, etc., combinados con indicadores de tendencia súper, para formar un sistema de juicio de valencia de múltiples factores, puede mejorar la precisión de juicio.
Se ha añadido un módulo de optimización de parámetros de adaptación basado en el aprendizaje automático para que los parámetros ATR, ADX, RSI, etc. puedan ajustarse al mercado en tiempo real, en lugar de ser simples valores fijos.
La introducción de indicadores RSI alternativos como el índice de emoción, para filtrar las señales. El índice RSI no es ideal para juzgar situaciones complejas, mientras que los indicadores de emoción social pueden juzgar mejor el calor del mercado.
Aumentar el módulo de gestión de posiciones y ajustar dinámicamente el tamaño de las posiciones en función de la distancia de la línea de parada del precio actual. Cuanto más lejos de la línea de parada, se puede aumentar adecuadamente las posiciones para aumentar el espacio de ganancias.
La estrategia de seguimiento de tendencias móviles para detener el uso integral de métodos como el análisis de tendencias, el deterioro móvil y el filtrado de múltiples factores, al mismo tiempo que se captura la tendencia y se controla estrictamente el riesgo, es una estrategia cuantitativa más madura. La estrategia tiene un gran espacio de optimización y merece ser mejorada para adaptarse a un entorno de mercado más complejo.
/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Bendre ADX Sup Trend", 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 = 18, title = "ATR Period")
StartDate = input(timestamp("1 Dec 2022"), title="Start Date")
EndDate = input(timestamp("12 Jan 2023"), title="End Date")
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)
// Buy - Sell Entries
buy = bsignalSSPP and outMA < close and ADX > th
sell = ssignalSSPP
if (buy and vrsi > overBought)
// .order // Tuned version
strategy.entry("Buy", strategy.long)
// 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 )
// strategy.entry("Sell", strategy.short)
// if(buy) and (strategy.position_size > 0)
// strategy.close("Sell", "close Sell")