Las operaciones cuantitativas basadas en la media móvil y el ATR Trailing Stop

El autor:¿ Qué pasa?, Fecha: 2023-12-08 15:53:22
Las etiquetas:

img

Resumen general

La estrategia se llama MADEFlex, que significa Estrategia de negociación cuantitativa flexible basada en la media móvil y el ATR Trailing Stop. Combina el indicador de media móvil y el mecanismo de ATR trailing stop para implementar una solución de negociación cuantitativa flexible y controlable.

Principios

El núcleo de esta estrategia es el indicador de Moving Average Displaced Envelope (MADE). MADE forma bandas superiores e inferiores multiplicando los factores porcentuales con el promedio móvil exponencial desplazado (EMA). Las señales de venta se generan cuando los precios se rompen por encima de la banda superior, y las señales de compra se generan cuando los precios se rompen por debajo de la banda inferior.

Específicamente, el indicador MADE contiene 3 parámetros: Período, porcentaje por encima de perAb, y porcentaje por debajo de perBl. El parámetro Período determina el período de EMA. La distancia de las bandas superior e inferior de la EMA está controlada por factores porcentuales. La parte de parada posterior de ATR se establece principalmente por el período ATR nATRPeriod y los múltiplos de ATR nATRMultip. Cuando el precio excede la línea de stop loss de la barra anterior, la línea de stop loss se ajusta al precio menos la pérdida ATR fija. Cuando el precio cae por debajo de la línea de stop loss de la barra anterior, la línea de stop loss se ajusta al precio más la pérdida ATR fija.

Por último, las señales de compra y venta se generan combinando las señales del indicador MADE y las condiciones de parada de trailing ATR.

Análisis de ventajas

La estrategia MADEFlex tiene las siguientes ventajas:

  1. Las señales combinadas más confiables y stop loss. MADE tiende a generar señales falsas.

  2. Los parámetros MADE y ATR se pueden ajustar para controlar la cantidad y calidad de la señal.

  3. Apoyo para el comercio inverso: el comercio inverso enriquece los escenarios de aplicación.

  4. Intuitivo parón visualizado. Juzgar el efecto de parada visualmente a través de líneas de parada trazadas.

Análisis de riesgos

La estrategia MADEFlex también presenta los siguientes riesgos:

  1. Los parámetros MADE incorrectos pueden generar señales falsas excesivas.

  2. La parada ATR excesivamente floja puede perder oportunidades de parada. Se deben probar los múltiplos ATR apropiados.

  3. El riesgo más alto con la negociación inversa. Especialmente en situaciones de alta volatilidad, la negociación inversa puede aumentar el riesgo de pérdida.

  4. En condiciones de mercado extremas, la falta de protección contra pérdidas de parada puede dar lugar a pérdidas más altas.

Direcciones de optimización

La estrategia MADEFlex puede optimizarse en las siguientes direcciones:

  1. Optimizar los parámetros MADE para mejorar la calidad de la señal. Se pueden probar diferentes periodos y combinaciones porcentuales para encontrar conjuntos de parámetros más confiables.

  2. Optimizar los parámetros de detención de ATR para obtener un mejor efecto de detención.

  3. Añadir otros filtros para reducir aún más las señales falsas, por ejemplo, combinando indicadores de volatilidad para filtrar.

  4. Añadir un mecanismo de toma de ganancias para salir a ciertos niveles de ganancias.

  5. Utilice métodos de aprendizaje automático para optimizar dinámicamente los parámetros, por ejemplo, el aprendizaje por refuerzo.

Conclusión

La estrategia MADEFlex combina con éxito las señales de trading del indicador Moving Average Envelope y la metodología ATR trailing stop. A través de parámetros ajustables, implementa una solución de trading cuantitativa flexible y controlable. La estrategia tiene una fiabilidad relativamente alta y una fuerte capacidad de control. Es adecuada para usuarios con alguna base cuantitativa para usar y optimizar.


/*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"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/09/2022
// Moving Average Displaced Envelope. These envelopes are calculated 
// by multiplying percentage factors with their displaced expotential 
// moving average (EMA) core.
// How To Trade Using:
// Adjust the envelopes percentage factors to control the quantity and 
// quality of the signals. If a previous high goes above the envelope 
// a sell signal is generated. Conversely, if the previous low goes below 
// the envelope a buy signal is given.
//
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
//
// ATR TS used by filter for MADE signals.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title='Moving Average Displaced Envelope & ATRTS', shorttitle='MADE+ATR', overlay=true)
tradeDirection = input.string('Both', title='Trade Direction', options=['Both', 'Long', 'Short'])
Price = input(title='Source', defval=close)
Period = input.int(defval=9, minval=1)
perAb = input.float(title='Percent above', defval=.5, minval=0.01, step=0.1)
perBl = input.float(title='Percent below', defval=.5, minval=0.01, step=0.1)
disp = input.int(title='Displacement', defval=13, minval=1)

nATRPeriod = input(15)
nATRMultip = input(2)
useATR = input(false, title='ATR Filter')
reverse = input(false, title='Trade reverse')

longAllowed = tradeDirection == 'Long' or tradeDirection == 'Both'
shortAllowed = tradeDirection == 'Short' or tradeDirection == 'Both'
pos = 0
sEMA = ta.ema(Price, Period)
top = sEMA[disp] * ((100 + perAb) / 100)
bott = sEMA[disp] * ((100 - perBl) / 100)

xATR = ta.atr(nATRPeriod)
xHHs =ta.sma(ta.highest(nATRPeriod), nATRPeriod)
xLLs =ta.sma(ta.lowest(nATRPeriod),nATRPeriod)
nSpread = (xHHs - xLLs) / 2
nLoss = nATRMultip * xATR
var xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) :
     close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : 
     close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss

ATRLong = close > xATRTrailingStop ? true : false
ATRShort = close < xATRTrailingStop ? true : false

iff_1 = close > top ? 1 : pos[1]
pos := close < bott ? -1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
clr = strategy.position_size
if possig == 1 
    if longAllowed and ATRLong
        strategy.entry('Long', strategy.long)
    else
        if ATRLong or strategy.position_size > 0
            strategy.close_all()
if possig == -1 
    if shortAllowed and ATRShort
        strategy.entry('Short', strategy.short)
    else    
        if ATRShort or strategy.position_size < 0
            strategy.close_all()
if possig == 0
    strategy.close_all()
    
plot(xATRTrailingStop[1], color=color.blue, title='ATR Trailing Stop')
barcolor(clr < 0 ? #b50404 : clr > 0 ? #079605 : #0536b3)



Más.