Estrategia de ruptura de la EMA siguiendo la tendencia


Fecha de creación: 2024-01-12 14:23:11 Última modificación: 2024-01-12 14:23:11
Copiar: 0 Número de Visitas: 345
1
Seguir
1166
Seguidores

Estrategia de ruptura de la EMA siguiendo la tendencia

Descripción general

La estrategia es una estrategia de ruptura de tipo seguimiento de tendencias basada en las medias móviles indexadas (EMA). La estrategia determina la dirección de la tendencia en los marcos de tiempo lunar, diurno y solar, y realiza operaciones de entrada y salida específicas en la línea solar.

Principio de estrategia

Juzgar las tendencias

  1. En la línea lunar, el precio está por encima de la EMA del día 8, la EMA del día 8 está por encima de la EMA del día 21, lo que se considera una tendencia múltiple;
  2. En la línea de la semana, el precio está por encima de la EMA del día 8 y la EMA del día 8 está por encima de la EMA del día 21, lo que se considera una tendencia múltiple;
  3. En la línea diaria, el precio es superior al EMA del día 8, el EMA del día 8 es superior al EMA del día 21, lo que se considera una tendencia múltiple;

Señales de entrada

  1. En la línea diaria se ha producido un retroceso a la baja, el punto más bajo tocó el EMA del 8 de ayer;
  2. La regresión constituye la forma Ring Low de Lower High y Lower Low;
  3. Los precios de cierre más altos que los máximos del día anterior constituyen una señal de reversión de tendencia;

Señales de salida

Establezca un parámetro de pérdida de frenado para alcanzar la salida.

Análisis de las ventajas

  1. En el caso de las tendencias en los tres marcos de tiempo, mejorar la precisión de los juicios;
  2. Los puntos bajos de la regresión tocan los soportes constitutivos de la EMA, aumentando la certeza de la entrada;
  3. En la actualidad, la mayoría de las empresas de la industria de la construcción están en la fase de desarrollo de la industria de la construcción.

Análisis de riesgos

  1. La discrepancia entre los tres marcos de tiempo puede dar lugar a señales erróneas.
  2. El hecho de que el retorno sea demasiado grande hace que la estrategia sea ineficaz.
  3. El mercado está en crisis y las fiestas pueden acabar con las pérdidas.

Dirección de optimización

  1. Los indicadores MACD, RSI, etc. se han añadido como ayuda para el juicio.
  2. Optimización de la configuración de los parámetros de EMA;
  3. Ajuste de la amplitud de la parada de pérdidas en combinación con el indicador de fluctuación;

Resumir

La estrategia en su conjunto es una estrategia de seguimiento de tendencias, con un gran potencial de ganancias cuando se juzga correctamente la tendencia. Se debe tener cuidado para evitar errores en el juicio de la tendencia y generar señales erróneas por un ajuste excesivo. Al mismo tiempo, la optimización de la configuración de stop loss es clave para mejorar aún más la ventaja de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-11 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/
// © the_daily_trader

//@version=5
// ---------------------        Start of Code        ---------------------
strategy("Swing Trades Validator", overlay=true, margin_long=100, pyramiding = 0)

// Indicator Display Checks
TakeProfitPercent       = input.float(title="Profit Target %", defval=10, minval=1, step=0.05)
StopLossPercent         = input.float(title="Stop Loss %", defval=10, minval=1, step=0.05)
pullbackchoice          = input.bool(false, "Relaxed Entry Rules")

// EMAs
emaH            = ta.ema(close, 8)
emaHyest        = ta.ema(close[1], 8)
emaHyest1       = ta.ema(close[2], 8)
emaHyest2       = ta.ema(close[3], 8)
emaL            = ta.ema(close, 21)
emaLyest        = ta.ema(close[1], 21)
emaLyest1       = ta.ema(close[2], 21)
emaLyest2       = ta.ema(close[3], 21)
emaf            = ta.ema(close, 50)
emath           = ta.ema(close, 200)
emathhigh       = ta.ema(high, 200)
emathlow        = ta.ema(low, 200)
emaslowmonthly  = request.security(syminfo.tickerid, "M", emaL) // Monthly 21ema
emafastmonthly  = request.security(syminfo.tickerid, "M", emaH) // Monthly 8ema
emaslowweekly   = request.security(syminfo.tickerid, "W", emaL) // Weekly 21ema
emafastweekly   = request.security(syminfo.tickerid, "W", emaH) // Weekly 8ema
emaslowdaily    = request.security(syminfo.tickerid, "D", emaL) // Daily 21ema
emafastdaily    = request.security(syminfo.tickerid, "D", emaH) // Daily 8ema
emafdaily       = request.security(syminfo.tickerid, "D", emaf) // Daily 50ema
emathdaily      = request.security(syminfo.tickerid, "D", emath) // Daily ema
emathdailyhigh  = request.security(syminfo.tickerid, "D", emathhigh) // Daily ema High
emathdailylow   = request.security(syminfo.tickerid, "D", emathlow) // Daily ema Low
ema21yest       = request.security(syminfo.tickerid, "D", emaLyest) // Daily 21ema 1 day ago
ema21yest1      = request.security(syminfo.tickerid, "D", emaLyest1) // Daily 21ema 2 days ago
ema21yest2      = request.security(syminfo.tickerid, "D", emaLyest2) // Daily 21ema 3 days ago
ema8yest        = request.security(syminfo.tickerid, "D", emaHyest) // Daily 8ema 1 day ago
ema8yest1       = request.security(syminfo.tickerid, "D", emaHyest1) // Daily 8ema 2 days ago
ema8yest2       = request.security(syminfo.tickerid, "D", emaHyest2) // Daily 8ema 3 days ago


// Prices
monthopen       = request.security(syminfo.tickerid, 'M', open, barmerge.gaps_off, barmerge.lookahead_on)
monthclose      = request.security(syminfo.tickerid, 'M', close, barmerge.gaps_off, barmerge.lookahead_on)
weekopen        = request.security(syminfo.tickerid, 'W', open, barmerge.gaps_off, barmerge.lookahead_on)
weekclose       = request.security(syminfo.tickerid, 'W', close, barmerge.gaps_off, barmerge.lookahead_on)
dayopen         = request.security(syminfo.tickerid, 'D', open, barmerge.gaps_off, barmerge.lookahead_on)
dayclose        = request.security(syminfo.tickerid, 'D', close, barmerge.gaps_off, barmerge.lookahead_on)
threedayhigh    = request.security(syminfo.tickerid, 'D', high[3], barmerge.gaps_off, barmerge.lookahead_on)
twodayhigh      = request.security(syminfo.tickerid, 'D', high[2], barmerge.gaps_off, barmerge.lookahead_on)
yesthigh        = request.security(syminfo.tickerid, 'D', high[1], barmerge.gaps_off, barmerge.lookahead_on)
yestlow         = request.security(syminfo.tickerid, 'D', low[1], barmerge.gaps_off, barmerge.lookahead_on)

// Conditions 
monthlybullish          = emafastmonthly > emaslowmonthly
monthlybullishprice     = close > emafastmonthly
monthlybullishcandle    = monthclose > monthopen
weeklybullish           = emafastweekly > emaslowweekly
weeklybullishprice      = close > emafastweekly
weeklybullishcandle     = weekclose > weekopen
dailybullish1           = emafdaily > emathdaily
dailybullish2           = emafastdaily > emaslowdaily
dailybullishprice       = close > emafastdaily
dailybullishcandle      = dayclose > dayopen
ringlow                 = yestlow <= ema8yest
aggropullback           = twodayhigh < threedayhigh
pullback                = (pullbackchoice ? aggropullback : 0)
pullbackfailure         = dayclose > yesthigh and yesthigh < twodayhigh or pullback
emasetup                = ema8yest > ema21yest and ema8yest1 > ema21yest1 and ema8yest2 > ema21yest2

// Target Profit and Stop Loss Inputs
// Input parameters can be found at the beginning of the code
ProfitTarget        = (close * (TakeProfitPercent / 100)) / syminfo.mintick
StopLoss            = (close * (StopLossPercent / 100)) / syminfo.mintick

longCondition = monthlybullish and monthlybullishprice and weeklybullish and weeklybullishprice and dailybullish1 and dailybullish2 and dailybullishprice and monthlybullishcandle and weeklybullishcandle and dailybullishcandle and ringlow and pullbackfailure and emasetup

if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit ("Exit", "Long", profit = ProfitTarget, loss = StopLoss)
    // strategy.close("Long", qty_percent = 100)


// -----------xxxxxxxxxxx-------------    End of Code     -----------xxxxxxxxxxx---------------