Estrategia de rebote de promedio móvil exponencial

El autor:¿ Qué pasa?, Fecha: 2023-12-08 16:47:39
Las etiquetas:

img

Resumen de la estrategia

La estrategia de rebote de la media móvil exponencial (EMA) es una estrategia que rastrea los avances de precios de la línea de la media móvil.

Nombre de la estrategia

Estrategia de rebote de promedio móvil exponencial

Estrategia lógica

Esta estrategia se basa en la línea de la media móvil exponencial (EMA). Calcula una línea EMA en tiempo real. Luego comprueba si el precio rebota de nuevo desde la línea EMA:

  • Si el precio primero rompe la línea EMA y luego rebota por encima de la línea EMA, es una señal alcista
  • Si el precio primero rompe la línea EMA y luego cae por debajo de la línea EMA, es una señal bajista

Tal rebote es la señal de entrada para la estrategia.

Análisis de ventajas

Comercializa con la tendencia, evita quedar atrapado

La estrategia de rebote de la EMA solo entra en vigor después de confirmar la inversión de precios, lo que evita que se negocie en contra de la tendencia y se quede atrapado.

Pequeños retiros, buenos rendimientos históricos

Al utilizar la media móvil exponencial, la estrategia puede suavizar eficazmente los datos de precios y filtrar el ruido del mercado, lo que resulta en pequeñas reducciones y buenos rendimientos históricos.

Fácil de entender, ajuste flexible de los parámetros

La estrategia de rebote de la EMA se basa simplemente en promedios móviles, que es sencillo de entender para los principiantes.

Análisis de riesgos

Es propenso a señales falsas

Los parámetros de la EMA deben ajustarse para filtrar el ruido.

Comercio con la tendencia, incapaz de predecir los puntos de inflexión

La estrategia se opera esencialmente junto con la tendencia. No es capaz de predecir los puntos de inflexión de los precios y sólo puede seguir la tendencia. Esto puede perder la mejor oportunidad de entrada durante los ajustes cíclicos.

Pérdida de parada propensa a ser eliminada

El stop loss cerca de la línea media móvil a veces se golpea, lo que lleva a pérdidas ampliadas.

Optimización

Incorporar otros indicadores para el filtrado de señales

Indicadores como el RSI y el MACD se pueden agregar para confirmar la inversión de precios y filtrar señales falsas.

Optimización de los métodos de stop loss

Los métodos de stop loss más flexibles, como los time stops y los volatility stops, pueden utilizarse para reducir el riesgo de que se realice una salida.

Optimización de parámetros

Optimizar los parámetros del período EMA para encontrar las mejores combinaciones de parámetros.

Conclusión

La estrategia de rebote de la EMA es una estrategia de seguimiento de tendencias simple y práctica. Tiene pequeñas reducciones y es fácil de entender. Al mismo tiempo, también tiene algunos riesgos de señales falsas y ser detenido. Podemos optimizar la estrategia mediante el uso de mejores combinaciones de indicadores, métodos de stop loss y selecciones de parámetros para que sea una estrategia cuantitativa estable y confiable.


/*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)


Más.