Estrategia de rebote de media móvil


Fecha de creación: 2023-12-08 16:47:39 Última modificación: 2023-12-08 16:47:39
Copiar: 0 Número de Visitas: 925
1
Seguir
1621
Seguidores

Estrategia de rebote de media móvil

Descripción general de la estrategia

La estrategia de rebote de la media móvil es una estrategia que sigue a los precios para romper las medias móviles. Se examina si el tiburón se rebota por debajo de la media móvil, y si lo hace, es una señal de cabeza; si el tiburón se rebota por encima de la media móvil, es una señal de cabeza.

Nombre de la estrategia

Exponential Moving Average Bounce Strategy

Principio de estrategia

La estrategia se basa en el promedio móvil exponencial. Se calcula una línea EMA en tiempo real. Luego se comprueba si el precio rebota por encima o por debajo de la línea EMA:

  • Si el precio cae por encima de la línea EMA y luego retoma el recorrido por encima de la línea EMA, es una señal de múltiples cabezas.
  • Una señal de cabeza hueca se produce si el precio rompe la línea EMA y luego vuelve a caer para cerrar por debajo de la línea EMA

La respuesta es la señal de entrada en la estrategia.

Análisis de las ventajas estratégicas

El funcionamiento de flujo, evitar ser atrapados

La estrategia de rebote de la EMA sólo se utiliza cuando se determina una reversión de los precios, lo que evita que la operación de rebote se bloquee.

Retiradas pequeñas, ganancias históricas

Debido a la utilización de las medias móviles de índices, que permiten suavizar eficazmente los datos de precios y filtrar el ruido del mercado, el retroceso de la estrategia es pequeño y los rendimientos históricos son mejores.

Es fácil de entender, los parámetros se ajustan con flexibilidad

La estrategia de rebote de EMA depende únicamente de las medias móviles, es muy simple y directa, fácil de entender para los novatos; al mismo tiempo, los parámetros de los períodos de EMA se pueden ajustar de manera flexible para adaptarse a diferentes variedades.

Análisis de riesgos

Es fácil falsas señales

A menudo hay falsas rupturas densas cerca de la línea EMA, que pueden provocar señales erróneas. Se requiere ajustar los parámetros EMA para filtrar estos ruidos.

La operación de fluctuación no puede predecir el punto de inflexión.

La estrategia es esencialmente una operación de avance. No se puede predecir el punto de inflexión de los precios, solo se puede perseguir la tendencia.

La posición de deterioro es fácil de romper.

Los puntos de parada cercanos a la media móvil a veces se superan, lo que genera pérdidas ampliadas. Esto requiere el uso de un método de parada más flexible.

Dirección de optimización

Combinación con otros indicadores para filtrar señales

Se pueden agregar otros indicadores como el RSI, el MACD y otros para confirmar la inversión de precios y filtrar las falsas señales.

Optimización de la pérdida

Se pueden utilizar métodos de deterioro más flexibles, como el tiempo de detención y el deterioro por vibración, para reducir el riesgo de ser derribado.

Optimización de parámetros

Optimización de los parámetros del ciclo EMA para encontrar la combinación óptima de parámetros. También se puede hacer que los parámetros EMA cambien dinámicamente para seguir el ciclo del mercado.

Resumir

La estrategia de rebote de la media móvil es una estrategia de seguimiento de tendencias sencilla y práctica. Se opera de forma progresiva, tiene pequeñas retrocesos y es fácil de entender. Al mismo tiempo, existe un cierto riesgo de falsas señales y riesgo de parada. Se puede optimizar la estrategia para que sea una estrategia cuantitativa estable y confiable a través de una mejor combinación de indicadores, métodos de parada y opciones de parámetros.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tweakerID

// Simple strategy that checks for price bounces over an Exponential Moving Average. If the CLOSE of the candle bounces
// back from having it's LOW below the EMA, then it's a Bull Bounce. If the CLOSE of the candle bounces down from having it's
// high above the EMA, then it's a Bear Bounce. This logic can be reverted.

//@version=4
strategy("EMA Bounce", overlay=true, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, 
     initial_capital=10000, 
     commission_value=0.04, 
     calc_on_every_tick=false, 
     slippage=0)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

/////////////////////// STRATEGY INPUTS ////////////////////////////////////////
title1=input(true, "-----------------Strategy Inputs-------------------")  

i_EMA=input(20, title="EMA Length")

/////////////////////// BACKTESTER /////////////////////////////////////////////
title2=input(true, "-----------------General Inputs-------------------")  

// Backtester General Inputs
i_SL=input(true, title="Use Swing Stop Loss and Take Profit")
i_SPL=input(defval=10, title="Swing Point Loopback")
i_PercIncrement=input(defval=.2, step=.1, title="Swing Point SL Perc Increment")*0.01
i_TPRRR = input(1.2, step=.1, title="Take Profit Risk Reward Ratio")

// Bought and Sold Boolean Signal
bought = strategy.position_size > strategy.position_size[1] 
 or strategy.position_size < strategy.position_size[1]

// Price Action Stop and Take Profit
LL=(lowest(i_SPL))*(1-i_PercIncrement)
HH=(highest(i_SPL))*(1+i_PercIncrement)
LL_price = valuewhen(bought, LL, 0)
HH_price = valuewhen(bought, HH, 0)
entry_LL_price = strategy.position_size > 0 ? LL_price : na 
entry_HH_price = strategy.position_size < 0 ? HH_price : na 
tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR
stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR


/////////////////////// STRATEGY LOGIC /////////////////////////////////////////

EMA=ema(close, i_EMA)
LowAboveEMA=low > EMA
LowBelowEMA=low < EMA
HighAboveEMA=high > EMA
HighBelowEMA=high < EMA
BullBounce=LowAboveEMA[1] and LowBelowEMA and close > EMA //and close > open
BearBounce=HighBelowEMA[1] and HighAboveEMA and close < EMA //and close < open
plot(EMA)

BUY=BullBounce
SELL=BearBounce

//Inputs
DPR=input(false, "Allow Direct Position Reverse")
reverse=input(false, "Reverse Trades")

// Entries
if reverse
    if not DPR
        strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0)
    else     
        strategy.entry("long", strategy.long, when=SELL)
        strategy.entry("short", strategy.short, when=BUY)
else
    if not DPR 
        strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0)
    else
        strategy.entry("long", strategy.long, when=BUY)
        strategy.entry("short", strategy.short, when=SELL)


SL=entry_LL_price
SSL=entry_HH_price
TP=tp
STP=stp

strategy.exit("TP & SL", "long", limit=TP, stop=SL, when=i_SL)
strategy.exit("TP & SL", "short", limit=STP, stop=SSL, when=i_SL)

/////////////////////// PLOTS //////////////////////////////////////////////////

plot(strategy.position_size > 0 ? SL : na , title='SL', style=plot.style_cross, color=color.red)
plot(strategy.position_size < 0 ? SSL : na , title='SSL', style=plot.style_cross, color=color.red)
plot(strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green)
plot(strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green)
// Draw price action setup arrows
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, 
 color=color.green, title="Bullish Setup", transp=80, size=size.auto)
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, 
 color=color.red, title="Bearish Setup", transp=80, size=size.auto)