
La estrategia es un sistema de seguimiento de tendencias basado en múltiples capas de medias móviles (SMA), combinado con una técnica de detección de cruzamiento de precisión. Determina la tendencia del mercado a través de la jerarquía de las medias móviles de 20, 50, 100 y 200 períodos y utiliza el cruce de precios en tiempo real con las medias móviles para desencadenar señales de negociación. La estrategia está diseñada teniendo en cuenta la universalidad de diferentes zonas horarias y períodos de negociación y puede funcionar en gráficos de varios períodos de tiempo.
La estrategia utiliza un mecanismo de filtrado de tendencias de tres niveles, que requiere que la media de 50 períodos esté por encima de la media de 100 períodos, y que la media de 100 períodos esté por encima de la media de 200 períodos para confirmar una tendencia alcista, y viceversa para confirmar una tendencia descendente. La señal de entrada se basa en el cruce del precio con la media de 50 períodos, y se utiliza para realizar una detección de cruce precisa, para determinar el momento en que ocurre el cruce mediante la comparación del comportamiento del precio actual con la relación de posición de la línea K anterior. La señal de salida está determinada por la relación del precio con la media de 20 períodos.
Se trata de una estrategia de seguimiento de tendencias estructurada y con claridad lógica, que garantiza la fiabilidad de la señal y permite un seguimiento eficaz de las tendencias mediante el uso combinado de múltiples niveles de medias móviles. La estrategia está diseñada con plena consideración de la practicidad y la universalidad, y es adecuada para su uso en diferentes entornos de mercado.
/*backtest
start: 2024-02-22 00:00:00
end: 2024-06-25 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Multi-SMA Strategy - Core Signals", overlay=true)
// ———— Universal Inputs ———— //
int smaPeriod1 = input(20, "Fast SMA")
int smaPeriod2 = input(50, "Medium SMA")
bool useTickCross = input(true, "Use Tick-Precise Crosses")
// ———— Timezone-Neutral Calculations ———— //
sma20 = ta.sma(close, smaPeriod1)
sma50 = ta.sma(close, smaPeriod2)
sma100 = ta.sma(close, 100)
sma200 = ta.sma(close, 200)
// ———— Tick-Precise Cross Detection ———— //
golden_cross = useTickCross ?
(high >= sma50 and low[1] < sma50[1]) :
ta.crossover(sma20, sma50)
death_cross = useTickCross ?
(low <= sma50 and high[1] > sma50[1]) :
ta.crossunder(sma20, sma50)
// ———— Trend Filter ———— //
uptrend = sma50 > sma100 and sma100 > sma200
downtrend = sma50 < sma100 and sma100 < sma200
// ———— Entry Conditions ———— //
longCondition = golden_cross and uptrend
shortCondition = death_cross and downtrend
// ———— Exit Conditions ———— //
exitLong = ta.crossunder(low, sma20)
exitShort = ta.crossover(high, sma20)
// ———— Strategy Execution ———— //
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)
strategy.close("Long", when=exitLong)
strategy.close("Short", when=exitShort)
// ———— Clean Visualization ———— //
plot(sma20, "20 SMA", color.new(color.blue, 0))
plot(sma50, "50 SMA", color.new(color.red, 0))
plot(sma100, "100 SMA", color.new(#B000B0, 0), linewidth=2)
plot(sma200, "200 SMA", color.new(color.green, 0), linewidth=2)
// ———— Signal Markers ———— //
plotshape(longCondition, "Long Entry", shape.triangleup, location.belowbar, color.green, 0)
plotshape(shortCondition, "Short Entry", shape.triangledown, location.abovebar, color.red, 0)
plotshape(exitLong, "Long Exit", shape.xcross, location.abovebar, color.blue, 0)
plotshape(exitShort, "Short Exit", shape.xcross, location.belowbar, color.orange, 0)