La estrategia EintSimple Pullback es una estrategia de reversión media basada en el cruce de dos promedios móviles. Primero utiliza una línea de promedio móvil a largo plazo y una línea de promedio móvil a corto plazo. Cuando la línea de promedio móvil a corto plazo rompe la línea de promedio móvil a largo plazo desde la parte inferior, se genera una señal de compra. Para filtrar las fallas, esta estrategia también requiere que el precio de cierre sea mayor que la línea de promedio móvil a largo plazo.
Después de entrar en el mercado, si el precio vuelve a caer por debajo de la línea media móvil a corto plazo, activará una señal de salida. Además, esta estrategia también establece una salida de stop loss. Si el retroceso desde el punto más alto alcanza el porcentaje de stop loss establecido, también saldrá de las posiciones.
La estrategia se basa principalmente en la cruz de oro de las medias móviles duales para determinar el momento de entrada.
Una vez que se cumplan las condiciones anteriores, esta estrategia tendrá una posición larga completa.
El juicio de la señal de salida se basa en dos condiciones: una es que el precio vuelva a caer por debajo de la media móvil a corto plazo; la otra es que el retroceso desde el punto más alto alcance el porcentaje de stop loss establecido; las condiciones específicas de salida son las siguientes:
Cuando se cumpla cualquiera de las condiciones de salida, esta estrategia cerrará todas las posiciones largas.
El uso de doble cruce de promedios móviles combinado con precios de cierre sólidos para juzgar puede filtrar eficazmente las fallas falsas.
La adopción de la entrada de retroceso puede entrar después de que el precio forma puntos de inflexión a corto plazo.
Con la configuración de stop loss, puede limitar el descenso máximo.
Las estrategias de cruce de promedios móviles dobles tienden a producir señales comerciales frecuentes y pueden perseguir picos y matar fondos.
La configuración incorrecta de los parámetros de las medias móviles puede dar lugar a curvas demasiado suaves o demasiado sensibles.
Los ajustes de stop loss demasiado sueltos conducirán a pérdidas ampliadas.
Prueba diferentes combinaciones de medias móviles a largo plazo y a corto plazo para encontrar los parámetros óptimos.
Comparar los efectos de utilizar el precio cerrado y el precio típico para determinar los cruces de la media móvil.
Prueba agregando filtros como indicadores de volumen o volatilidad.
Backtest optimizar el porcentaje de stop loss para encontrar el mejor ajuste.
La EintSimple Pullback Strategy es una estrategia de retroceso de promedios móviles duales sencilla y práctica. Utiliza eficazmente la funcionalidad direccional de los promedios móviles mientras combina precios de cierre sólidos para filtrar señales falsas. Aunque esta estrategia es propensa a comerciar con frecuencia y perseguir picos y matar fondos, se puede mejorar aún más a través de la optimización de parámetros y la adición de filtros.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 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/ // © ZenAndTheArtOfTrading / www.PineScriptMastery.com // @version=5 strategy("Simple Pullback Strategy", overlay=true, initial_capital=50000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)// 100% of balance invested on each trade // Get user input i_ma1 = input.int(title="MA 1 Length", defval=75, step=1, group="Strategy Parameters", tooltip="Long-term EMA") i_ma2 = input.int(title="MA 2 Length", defval=9, step=1, group="Strategy Parameters", tooltip="Short-term EMA") i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline") i_lowerClose = input.bool(title="Exit On Lower Close", defval=true, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2") 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") // Get indicator values ma1 = ta.ema(close, i_ma1) ma2 = ta.ema(close, i_ma2) // Check filter(s) f_dateFilter = true // Check buy/sell conditions var float buyPrice = 0 buyCondition = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter sellCondition = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1]) stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent // 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) plot(ma1, color=color.blue) plot(ma2, color=color.fuchsia)