Estrategia de seguimiento automático triple SMA

El autor:¿ Qué pasa?, Fecha: 2024-01-26 15:05:58
Las etiquetas:

img

Resumen general

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.

Estrategia lógica

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. StochClose identifica los niveles de sobrecompra / sobreventa y da una señal larga cuando cruza por encima de 95 y una señal corta cuando cruza por debajo de 5.

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.

Análisis de ventajas

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.

Análisis de riesgos

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.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Añadir/ajustar los períodos de SMA para encontrar valores óptimos adecuados a productos específicos

  2. Añadir indicadores adicionales como KDJ y MACD para filtrar combinaciones y mejores entradas

  3. Optimizar los estándares de stop loss y take profit para adaptarse mejor a los rangos de volatilidad del mercado

  4. Optimizar las configuraciones de pirámide para encontrar estrategias ideales de pirámide

  5. Prueba en diferentes productos y adaptación de los parámetros a más productos

Conclusión

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)




Más.