Estrategia de ruptura de la banda de media móvil

El autor:¿ Qué pasa?, Fecha: 2023-09-17 18:33:57
Las etiquetas:

Resumen general

Esta estrategia utiliza promedios móviles para formar un canal de precios y generar señales cuando el precio rompe las bandas del canal.

Estrategia lógica

  1. Calcule las medias móviles, con opciones como SMA/EMA/WMA/RMA.

  2. La banda superior es cierto incremento porcentual de la media móvil.

  3. Opciones para el comercio solo largo, solo corto o bidireccional.

  4. Establezca puntos de stop loss y take profit. El punto de take profit es cierto incremento porcentual del precio de entrada. El punto de stop loss es cierto decremento porcentual del precio de entrada.

Análisis de ventajas

  1. Es sencillo de implementar la determinación de tendencias utilizando promedios móviles.

  2. Los parámetros ajustables se adaptan a los diferentes períodos de retención y preferencias de riesgo.

  3. Las direcciones largas/cortas opcionales se adaptan a las diversas condiciones del mercado.

  4. El porcentaje fijo de stop loss y take profit permite la controlabilidad.

Análisis de riesgos

  1. Suelen quedar atrapados cuando la tendencia cambia abruptamente.

  2. El ajuste inadecuado de los parámetros corre el riesgo de sobre-negociación o retraso.

  3. El porcentaje fijo de pérdidas/ganancias no es flexible.

  4. Aumento de la frecuencia de las operaciones y de los costes de las comisiones con operaciones bidireccionales.

Direcciones de optimización

  1. Optimizar los parámetros de la media móvil para equilibrar el retraso y el ruido.

  2. Optimizar el ancho de banda del canal para que coincida con la frecuencia de volatilidad del mercado.

  3. Prueba diferentes configuraciones de stop loss y take profit.

  4. Añadir indicadores de tendencia y oscilación para medir las condiciones generales del mercado.

  5. Implementar filtros de tiempo para evitar los impactos de eventos significativos.

Resumen de las actividades

La estrategia logra una tendencia simple siguiendo los canales de media móvil, pero necesita una optimización de parámetros y un control de riesgos más fuertes.


/*backtest
start: 2023-08-17 00:00:00
end: 2023-09-16 00:00:00
period: 1h
basePeriod: 15m
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/
// © TaylorTneh
//@version=4

// strategy("Moving Average Band Taylor V1",shorttitle="MA Band+",overlay=true,default_qty_type=strategy.cash,default_qty_value=1000,initial_capital=1000,currency=currency.USD,commission_value=.1)

price = input(close, title="Source")
mabtype = input(title="Moving Average Type", defval="RMA", options=["SMA", "EMA", "RMA", "WMA"])
malen = input(10, "MA Period : 10")
magap = input(0.6, "Band Gap : 0.6", minval = -10, maxval = 10, step = 0.1)
mabup = if mabtype == "SMA"
    sma(high, malen)
else
    if mabtype == "EMA"
        ema(high, malen)
    else
        if mabtype == "WMA"
            wma(high, malen)
        else
            if mabtype == "RMA"
                rma(high, malen)
                    
mabdn = if mabtype == "SMA"
    sma(low, malen)
else
    if mabtype == "EMA"
        ema(low, malen)
    else
        if mabtype == "WMA"
            wma(low, malen)
        else
            if mabtype == "RMA"
                rma(low, malen)
                    
upex = mabup * (1 + magap/100)
dnex = mabdn * (1 - magap/100)
plot(upex, "Upper MA Band", color.orange)
plot(dnex, "Lower MA Band", color.orange)


//-------------------------------------------- (Strategy)
strategy.entry("Long", strategy.long, stop = upex)
strategy.entry("Short", strategy.short, stop = dnex)
//Long Only//strategy.entry("Long", strategy.long, stop = upex)
//Long Only//strategy.exit("Short", stop = dnex)
//Short Only//strategy.entry("Short", strategy.short, stop = dnex)
//Short Only//strategy.exit("Long", stop = upex)


//-------------------------------------------- (Take Profit & Stop Lose)
stopPer = input(500.0, title='# Stop Loss %', type=input.float) / 100
takePer = input(500.0, title='# Take Profit %', type=input.float) / 100
//Determine where you've entered and in what direction
longStop = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake = strategy.position_avg_price * (1 + takePer)
if strategy.position_size > 0 
    strategy.exit(id="L-TP/SL", stop=longStop, limit=longTake)
if strategy.position_size < 0 
    strategy.exit(id="S-TP/SL", stop=shortStop, limit=shortTake)


//-------------------------------------------- (Sample Time Filter Strategy)
//fromyear = input(2018, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
//toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
//frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
//tomonth = input(10, defval = 10, minval = 01, maxval = 12, title = "To Month")
//fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
//today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//strategy.entry("Long", strategy.long, stop = upex, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
//strategy.entry("Short", strategy.short, stop = dnex, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
//--------------------------------------------


Más.