Esta estrategia se basa en el indicador de promedio móvil dinámico para rastrear la tendencia del precio en tiempo real y generar señales de negociación cuando se rompe el promedio móvil.
Esta estrategia utiliza indicadores de promedio móvil dinámico, incluyendo ALMA, EMA, SMA y más. El principio es ir largo cuando el precio se rompe por encima del promedio móvil y ir corto cuando se rompe por debajo. Es decir, el promedio móvil sirve como un barómetro para la tendencia del precio, y las señales se pueden generar cuando se produce una inversión de tendencia.
Específicamente, la estrategia utiliza promedios móviles formados por precios altos y bajos. El MA de precio bajo sirve como línea de señal para señales largas, mientras que el MA de precio alto sirve como línea para cortes. Cuando el precio de cierre se eleva por encima del MA de precio bajo, vaya largo. Cuando el cierre cae por debajo del MA de precio alto, vaya corto.
Al juzgar la tendencia del precio con MA y combinarlo con el principio de ruptura para generar señales, se forma una estrategia de seguimiento de tendencia simple y práctica.
Esta estrategia juzga la dirección de la tendencia con MA y genera señales basadas en los principios de ruptura. Es simple de usar y adecuado para la tenencia a mediano y largo plazo. Los parámetros también se pueden ajustar para adaptarse a los cambios del mercado. Los riesgos de las fluctuaciones a corto plazo y la tenencia larga deben gestionarse con stop loss / taking profit. Hay margen de mejora mediante la incorporación de más indicadores y la búsqueda de parámetros óptimos a través del aprendizaje automático.
/*backtest start: 2023-12-02 00:00:00 end: 2024-01-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Baseline Strategy - evo", shorttitle="Baseline", overlay=true) //INPUTS mat = input("ALMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "ALMA"]) baseline = input(55, title="MA Length") src = input(ohlc4, title="Closing Source") offset = input(0.85, step=0.05, title="Offset (alma only)") sigma = input(10, title="Sigma (alma only)") useCurrentRes = input(true, title="Use Current Resolution") resCustom = input("1440", title="Timeframe") showsignals = input(false, title="Show Signals ?") //BASELINE baselinehigh = mat=="SMA" ? sma(high,baseline) : mat=="EMA" ? ema(high,baseline) : mat=="WMA" ? wma(high,baseline) : mat=="HMA" ? wma(2*wma(high, baseline/2)-wma(high, baseline), round(sqrt(baseline))) : mat=="VWMA" ? vwma(high,baseline) : mat=="RMA" ? rma(high,baseline) : mat=="ALMA" ? alma(high, baseline, offset, sigma) : na baselinelow = mat=="SMA" ? sma(low,baseline) : mat=="EMA" ? ema(low,baseline) : mat=="WMA" ? wma(low,baseline) : mat=="HMA" ? wma(2*wma(low, baseline/2)-wma(low, baseline), round(sqrt(baseline))) : mat=="VWMA" ? vwma(low,baseline) : mat=="RMA" ? rma(low,baseline) : mat=="ALMA" ? alma(low, baseline, offset, sigma) : na //RESOLUTION res = useCurrentRes ? timeframe.period : resCustom mtfhigh = security(syminfo.tickerid, res, baselinehigh) mtflow = security(syminfo.tickerid, res, baselinelow) //PLOTS plot(mtfhigh, color=color.navy, linewidth=2, transp=0, title="Baseline High") plot(mtflow, color=color.navy, linewidth=2, transp=0, title="Baseline Low") long = src > mtfhigh short = src < mtflow barcolor(long ? #ffe0b2 : short ? #2a2e39 : not long and not short ? #b09e82 : na, title="BaseLine BarColor") signal = 0 signal := long ? 1 : short ? 2 : nz(signal[1]) plotshape(showsignals ? (signal != signal[1] and long ? mtflow : na) : na, title="Long", location=location.absolute, size=size.small, style=shape.labelup, text="Long", textcolor=color.black, transp=40, color=#00ff00) plotshape(showsignals ? (signal != signal[1] and short ? mtfhigh : na) : na, title="Short", location=location.absolute, size=size.small, style=shape.labeldown, text="Short", textcolor=color.white, transp=40, color=#ff0000) alertcondition(signal != signal[1], title="Trend Change !", message="Trend Change !") if (long) strategy.entry("Long", strategy.long) if (short) strategy.entry("Short", strategy.short)