La estrategia triple SMA es una estrategia de seguimiento de tendencias basada en tres promedios móviles simples (SMA) de diferentes períodos para la identificación de tendencias y entradas.
La estrategia utiliza tres SMA de diferentes períodos como indicador principal de tendencia, incluidos los SMA de 200-, 400- y 600-período.
Para las entradas, la estrategia combina el uso del precio de cierre y el oscilador StochClose. Las señales se generan solo cuando el precio se alinea con la dirección del triple SMAs
El stop loss se establece para que el precio cruce por debajo de la SMA más lenta.
La estrategia permite la pirámide de hasta 10 veces.
La mayor ventaja de la estrategia Triple SMA es que al combinar tres SMA de diferentes períodos, puede identificar mejor la dirección y la fuerza de la tendencia.
Además, la incorporación de StochClose para el análisis de sobrecompra/sobreventa evita tomar señales en torno a posibles puntos de inversión de tendencia.
El stop loss basado en la SMA más lenta también maximiza la capacidad de la estrategia para manejar tendencias al tiempo que minimiza las paradas prematuras.
Permitir la pirámide permite que la estrategia participe continuamente en las tendencias.
El principal riesgo de esta estrategia es que los SMA triples pueden no filtrar completamente todas las señales falsas. Si el precio no forma una tendencia después de romper los SMA y retrocede pronto, pueden ocurrir pérdidas. Esto a menudo ocurre alrededor de los principales niveles de soporte / resistencia.
Además, StochClose en sí mismo puede generar señales incorrectas, lo que conduce a entradas inapropiadas, especialmente en mercados de rango.
Para mitigar estos riesgos, se pueden ajustar parámetros como los períodos de SMA. Se pueden agregar más indicadores, como KDJ y MACD, para mejorar la calidad de la señal.
La estrategia se puede optimizar en los siguientes aspectos:
Añadir/ajustar los períodos de SMA para encontrar valores óptimos adecuados a productos específicos
Añadir indicadores adicionales como KDJ y MACD para filtrar combinaciones y mejores entradas
Optimizar los estándares de stop loss y take profit para adaptarse mejor a los rangos de volatilidad del mercado
Optimizar las configuraciones de pirámide para encontrar estrategias ideales de pirámide
Prueba en diferentes productos y adaptación de los parámetros a más productos
En conclusión, la estrategia Triple SMA es un enfoque muy práctico de seguimiento de tendencias. Al combinar las SMA triples y StochClose, logra una identificación de tendencias sólidas y evita señales falsas.
/*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"}] */ //@version=4 strategy(title="Tripla Sma with entries based on sma price closes ", shorttitle="TRIPLE SMA STRATEGY", overlay=true) ////resolution="" len = input(200, minval=1, title="sma 1 length") len1 = input(400, minval=1, title="sma 2 length") len2 = input(600, minval=1, title="sma 3 length") src = input(close, title="Source") //////////////////////////////////////////// smma = 0.0 smma := na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len up = smma > smma [1] down =smma < smma[1] mycolor = up ? #64b5f6 : down ? #d32f2f : na fastma = sma(hl2, 1) fastplot = plot(fastma, color=#000000, transp=100, title='sma on candle') slowplot = plot(smma, color=mycolor, transp=55, title='sma1') //////////////////////////////////////////// smma1 = 0.0 smma1 := na(smma1[1]) ? sma(src, len1) : (smma1[1] * (len1 - 1) + src) / len1 up2 = smma1 > smma1 [1] down2 =smma1 < smma1[1] mycolor2 = up2 ? #64b5f6 : down2 ? #d32f2f : na slowplot2 = plot(smma1, color=mycolor2, transp=45, title='sma2') //////////////////////////////////////////// smma2 = 0.0 smma2 := na(smma2[1]) ? sma(src, len2) : (smma2[1] * (len2 - 1) + src) / len2 up3 = smma2 > smma2 [1] down3 =smma2 < smma2[1] mycolor3 = up3 ? #64b5f6 : down3 ? #d32f2f : na slowplot3 = plot(smma2, color=mycolor3, transp=35, title='sma3') //////////////////////////////////////////////////////////////////////////////////////// //Fill gaps fillData = smma > fastma fillData2 = smma < fastma fillDtat = smma1 > smma fillDtat2 = smma1 < smma fillDat = smma2 > smma1 fillDat2 = smma2 < smma1 fillCol1 = fillData ? #ef5350 : fillData2 ? #64b5f6 : na fillCol2 = fillDtat ? #ef5350 : fillDtat2 ? #64b5f6 : na fillCol3 = fillDat ? #ef5350 : fillDat2 ? #64b5f6 : na fill(slowplot, fastplot, color=fillCol1, transp=90, title="sma1 fill") fill(slowplot, slowplot2, color=fillCol2, transp=80, title="sma2 fill") fill(slowplot2, slowplot3, color=fillCol3, transp=60, title="sma3 fill") uc = (close > smma) and (close > smma1) dc = (close < smma) and (close < smma1) barColor = uc ? #64b5f6 : dc ? #e91e63 : #b2b5be barcolor(color=barColor) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //StochClose from @trendinvestpro periods = input(50, minval=1, title="length for the oscillator") smooth = input(5, minval=1, title="oscillator smoothing") hhc=highest(close,periods) llc=lowest(close,periods) StochClose = sma((close-llc)/(hhc-llc)*100, smooth) shortline = input(95, minval=0, title="signal when oscillator crosses above") longline = input(5, minval=0, title="signal when oscillator crosses below") //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// longs = close > smma2 shorts = close < smma2 long = longs == true and crossunder(StochClose, longline) short = shorts == true and crossover(StochClose, shortline) stoplong = close < smma and close < smma1 and close < smma2 stopshort = close > smma and close > smma1 and close > smma2 p1 = strategy.position_avg_price / 100 / syminfo.mintick maxx = input(2500, title="max orders filled on a day", minval=0) takeprofit1 = input(1, title="take profit level 1", minval=0) takeprofit2 = input(2, title="take profit level 2", minval=0) takeprofit3 = input(6, title="take profit level 3", minval=0) takeprofitqt1 = input(30, title="take profit quantity first", minval=0) takeprofitqt2 = input(30, title="take profit quantity second", minval=0) takeprofitqt3 = input(30, title="take profit quantity third", minval=0) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////Strategy entries///////////////////////////////////////////////////////////////////////////////////////// // strategy.risk.max_intraday_filled_orders(maxx) strategy.entry("long", strategy.long, when=long) strategy.exit("tpl1", "long", qty_percent = takeprofitqt1, profit = takeprofit1 * p1) strategy.exit("tpl2", "long", qty_percent = takeprofitqt2, profit = takeprofit2 * p1) strategy.exit("tpl3", "long", qty_percent = takeprofitqt3, profit = takeprofit3 * p1) strategy.close("long", when=stoplong == true) strategy.entry("short", strategy.short, when=short) strategy.exit("tpl1", "short", qty_percent = takeprofitqt1, profit = takeprofit1 * p1) strategy.exit("tpl2", "short", qty_percent = takeprofitqt2, profit = takeprofit2 * p1) strategy.exit("tpl3", "short", qty_percent = takeprofitqt3, profit = takeprofit3 * p1) strategy.close("short", when=stopshort == true)