
La EintSimple Pullback Strategy es una estrategia de entrada de retorno basada en el cruce de dos medias móviles. La estrategia utiliza primero las dos medias móviles, la larga y la corta, para generar una señal de compra cuando la media móvil corta se rompe por debajo de la media móvil larga. La estrategia también requiere un precio de cierre superior a la media móvil larga para filtrar las rupturas de vacaciones.
Después de la entrada, si el precio vuelve a caer por debajo de la media móvil a corto plazo, el BTC refleja una señal de salida. Además, la estrategia también establece un stop-loss de salida, que también saldrá de la posición si el porcentaje de pérdida de parada establecido se alcanza desde el punto máximo de retracción.
La estrategia se basa principalmente en el cruce de oro de las medias móviles dobles para determinar el momento de entrada. En concreto, se debe cumplir con los siguientes requisitos para abrir más posiciones:
Una vez cumplidas estas condiciones, la estrategia se ejecutará a toda velocidad.
Las señales de salida se basan en dos condiciones, una es que el precio vuelva a caer por debajo de la media móvil a corto plazo, y la otra es el porcentaje de stop loss establecido desde el punto máximo de retracción. Las condiciones de salida específicas son las siguientes:
La estrategia elimina todas las ofertas adicionales cuando se cumplen cualquiera de las condiciones de salida.
El uso de una doble media móvil cruzada y combinada con un juicio de precios de cierre real, puede filtrar eficazmente las brechas falsas.
La entrada por retracción se puede hacer después de que el precio de las acciones haya formado un giro corto.
El sistema de suspensión de pérdidas permite limitar el máximo retiro.
Las estrategias de cruce de medias móviles dobles son propensas a generar múltiples señales de negociación, que pueden perseguir alzas y bajas.
La configuración incorrecta de los parámetros de la media móvil puede hacer que la curva sea demasiado suave o demasiado sensible.
La suspensión de pérdidas demasiado suave hace que las pérdidas aumenten.
Prueba combinaciones de promedios móviles de largo y corto plazo de diferentes longitudes para encontrar el parámetro óptimo.
Comparación de las pruebas de uso de precios de cierre y precios típicos para juzgar el efecto de cruce de medias móviles.
Prueba de filtros adicionales como volumen de transacciones o indicadores de volatilidad.
Optimización de la retroalimentación de la amplitud de parada para encontrar la configuración óptima.
EintSimple Pullback Strategy es una estrategia de retroceso de doble media móvil sencilla y práctica. Utiliza eficazmente la función indicativa de las medias móviles, mientras que combina el juicio de precios de cierre de entidades para filtrar las señales falsas. Aunque la estrategia es susceptible de generar problemas con el comercio frecuente y la persecución de las caídas, se puede perfeccionar aún más mediante la optimización de los 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)