Estrategia de negociación cuantitativa de reversión media del canal ATR

El autor:¿ Qué pasa?, Fecha: 2023-12-11 15:38:25
Las etiquetas:

img

Resumen general

Esta es una estrategia de solo largo que identifica señales de entrada cuando los precios se rompen por debajo de la banda inferior del canal ATR, y obtiene ganancias cuando los precios alcanzan la banda media (EMA) o la banda superior del canal ATR. También utiliza ATR para calcular los niveles de stop loss. Esta estrategia es adecuada para operaciones rápidas a corto plazo.

Estrategia lógica

Cuando el precio se rompe por debajo de la banda inferior de ATR, indica una caída de anomalía. La estrategia se extenderá en la próxima candelera abierta. El stop loss se establece en el precio de entrada menos el multiplicador de pérdida de ATR.

Específicamente, la lógica clave incluye:

  1. Calcular el ATR y la banda media (EMA)
  2. Define los filtros de tiempo
  3. Identificar la señal larga cuando el precio < banda ATR inferior
  4. Entra largo en el próximo bar abierto
  5. Precio de entrada récord
  6. Calcular el precio de las pérdidas de detención
  7. Se aplicará el método de cálculo de las pérdidas por riesgo.
  8. El valor de las pérdidas se calcula en función de las pérdidas.

Análisis de ventajas

Las ventajas de esta estrategia:

  1. Utiliza el canal ATR para señales de entrada y salida confiables
  2. Sólo mucho después de la anomalía de caída evita perseguir los máximos
  3. Control estricto del riesgo de pérdidas de parada
  4. Apto para operaciones rápidas a corto plazo
  5. Lógica sencilla fácil de implementar y optimizar

Análisis de riesgos

Hay algunos riesgos:

  1. La alta frecuencia de negociación conduce a mayores costes de transacción y deslizamiento
  2. Pueden ocurrir disparadores de pérdida consecutivos
  3. La optimización inadecuada de los parámetros afecta al rendimiento
  4. Las grandes oscilaciones de precios pueden dar lugar a un stop loss de gran tamaño

Estos riesgos pueden reducirse ajustando el período ATR, el multiplicador de pérdida de parada, etc. También es importante elegir corredores con bajas tarifas de negociación.

Direcciones de optimización

La estrategia puede mejorarse mediante:

  1. Añadir otros indicadores de filtro para evitar la falta de las mejores señales de entrada
  2. Optimización del período ATR
  3. Considerando el mecanismo de reingreso
  4. Tamaño de pérdida de parada adaptativo
  5. Añadir un filtro de tendencia para evitar operaciones contrarias a la tendencia

Conclusión

En resumen, esta es una estrategia de reversión media simple y práctica basada en el canal ATR. Tiene reglas de entrada claras, pérdida de parada estricta y una ganancia razonable. También hay espacio para ajustar los parámetros. Si los comerciantes pueden elegir el símbolo correcto y controlar el riesgo con la pérdida de parada, esta estrategia puede lograr buenos resultados.


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 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/
// © Bcullen175

//@version=5
strategy("ATR Mean Reversion", overlay=true, initial_capital=100000,default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=6E-5) // Brokers rate (ICmarkets = 6E-5)
SLx = input(1.5, "SL Multiplier", tooltip = "Multiplies ATR to widen stop on volatile assests, Higher values reduce risk:reward but increase winrate, Values below 1.2 are not reccomended")
src = input(close, title="Source")
period = input.int(10, "ATR & MA PERIOD")
plot(open+ta.atr(period))
plot(open-ta.atr(period))
plot((ta.ema(src, period)), title = "Mean", color=color.white)

i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Check filter(s)
f_dateFilter = true

atr = ta.atr(period)

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = low < (open-ta.atr(period)) and strategy.position_size == 0 and f_dateFilter
sellCondition   = (high > (ta.ema(close, period)) and strategy.position_size > 0 and close < low[1]) or high > (open+ta.atr(period))
stopDistance    = strategy.position_size > 0 ? ((buyPrice - atr)/buyPrice) : na
stopPrice       = strategy.position_size > 0 ? (buyPrice - SLx*atr): na
stopCondition   = strategy.position_size > 0 and low < stopPrice

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)


Más.