Estrategia de trading cuantitativo basada en la reversión de la media móvil del canal ATR


Fecha de creación: 2023-12-11 15:38:25 Última modificación: 2023-12-11 15:38:25
Copiar: 3 Número de Visitas: 776
1
Seguir
1621
Seguidores

Estrategia de trading cuantitativo basada en la reversión de la media móvil del canal ATR

Descripción general

La estrategia es una estrategia de solo hacer más, que utiliza el precio para romper el límite inferior del canal ATR para determinar el momento de entrada, y la salida con la línea media del canal ATR o el límite superior del canal ATR como parada. Al mismo tiempo, también utiliza el ATR para calcular el precio de parada. La estrategia es adecuada para hacer operaciones de línea corta rápida.

Principio de estrategia

Cuando el precio cae por debajo del límite inferior del canal ATR, indica que el precio ha bajado de forma anormal. En este caso, la estrategia hará una entrada adicional cuando se abra la siguiente línea K. El precio de parada será el precio de entrada menos el coeficiente de parada de ATR multiplicado por ATR. El precio de parada es la línea media del canal ATR o el límite del canal ATR, si el precio de cierre de la línea K actual es inferior al mínimo de la línea K anterior, el mínimo de la línea K anterior será el precio de la parada.

En concreto, la estrategia incluye principalmente la siguiente lógica:

  1. Cálculo de la línea media ATR y ATR
  2. Determinación de las condiciones de filtro de tiempo
  3. La marca puede hacer más entradas cuando el precio está por debajo del límite inferior del canal ATR
  4. La siguiente vez que la línea K se abra, haz más entradas.
  5. Registro de las entradas
  6. Cálculo del precio de parada
  7. Se detiene la posición cuando el precio está por encima de la línea media del canal ATR o del límite superior del canal ATR
  8. Cuando el precio está por debajo del precio de parada, la parada se retira

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. Utiliza el canal ATR para determinar entrada y parada, con una mayor fiabilidad
  2. En el caso de los juegos de azar, los jugadores deben entrar en el juego solo después de una caída anormal para evitar la subida.
  3. Estrictas reglas para detener los daños y un control efectivo de los riesgos
  4. Apto para operaciones rápidas y cortas, sin necesidad de mantener posiciones durante mucho tiempo
  5. Reglas simples y fáciles de entender, de implementar y optimizar

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. Las comisiones de transacción y el riesgo de deslizamiento asociados con las transacciones frecuentes
  2. Es posible que se produzca un deterioro de la secuencia de disparos
  3. Optimización incorrecta de los parámetros puede afectar la eficacia de la estrategia
  4. El stop loss puede ser excesivo cuando el precio de la ficha fluctúa mucho

Se puede reducir el riesgo mediante el ajuste del ciclo ATR, la reducción del factor de parada y otros métodos. También es importante elegir un corredor con tarifas comerciales más bajas.

Dirección de optimización

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

  1. Añadir filtros de otros indicadores para evitar perder el mejor momento de entrada
  2. Optimización de los parámetros del ciclo ATR
  3. Consideración de la posibilidad de un mecanismo de readmisión
  4. Ajuste dinámico de las pérdidas
  5. La inclusión de las reglas de tendencia para evitar la entrada en contra

Resumir

La estrategia en su conjunto es una estrategia simple y práctica para romper la línea media de la línea corta. Tiene reglas de entrada claras, un estricto mecanismo de stop loss y un sistema de stop perfectos. También ofrece un espacio de optimización para ajustar algunos parámetros. Si el comerciante puede elegir el indicador adecuado y combinar el stop loss para controlar el riesgo, la estrategia debería poder obtener buenos resultados.

Código Fuente de la Estrategia
/*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)