Una estrategia de seguimiento automático basada en la triple SMA


Fecha de creación: 2024-01-26 15:05:58 Última modificación: 2024-01-26 15:05:58
Copiar: 1 Número de Visitas: 640
1
Seguir
1617
Seguidores

Una estrategia de seguimiento automático basada en la triple SMA

Descripción general

La estrategia de triple SMA es una estrategia para determinar tendencias y entradas basadas en una media móvil simple de tres períodos diferentes. Puede seguir automáticamente las tendencias y aprovechar las reveses en las tendencias para aumentar la posición.

Principio de estrategia

La estrategia utiliza tres diferentes períodos de SMA como indicadores principales para determinar la tendencia, incluidos los SMA de 200 períodos, 400 períodos y 600 períodos. Si el precio está por encima de los tres SMA, se considera una tendencia alcista y, a la inversa, una tendencia alcista.

Como indicador de entradas, la estrategia se combina con el uso de precios cerrados y el oscilador StochClose. La señal se emite solo cuando el precio coincide con la dirección del triple SMA. El indicador StochClose se usa para determinar si se ha sobrevendido o sobrevendido, cuando StochClose hace más cuando se lleva 95 y vacío cuando se lleva 5.

El estándar de stop loss es el stop loss cuando el precio toca el SMA más lento.

La estrategia puede ser incrementada hasta 10 veces. Y se establece un límite de tres diferentes proporciones, el 1%, 2% y 6%, respectivamente.

Análisis de las ventajas

La mayor ventaja de la estrategia de triple SMA es que, mediante la combinación de tres diferentes períodos de SMA, se puede determinar mejor la dirección y la fuerza de la tendencia. Tiene una mayor capacidad de filtrar falsas señales que un solo SMA.

Además, en combinación con el indicador StochClose para determinar si se está sobrecomprando o sobrevendido, se puede evitar ingresar cerca del punto de inflexión de la tendencia, lo que reduce las entradas erróneas.

El criterio de stop loss es simple y directo, con el SMA de ciclo más lento como línea de stop loss, para evitar al máximo el stop loss prematuro.

El posicionamiento permitido también permite a la estrategia seguir la tendencia y obtener beneficios.

Análisis de riesgos

El principal riesgo de esta estrategia es que los tres SMA no pueden filtrar completamente todas las señales falsas y pueden causar pérdidas si no se forma una tendencia de reajuste después de una ruptura. Esto generalmente ocurre cerca de resistencias de soporte importantes.

Además, el propio indicador StochClose puede generar señales erróneas, lo que lleva a entradas inadecuadas. Esto suele ocurrir en zonas de fluctuación de precios.

Para reducir estos riesgos, se puede ajustar adecuadamente la frecuencia de la SMA; o agregar otros indicadores para un juicio de combinación, como KDJ, MACD, etc., para garantizar la calidad de la señal ingresada.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Aumentar o ajustar el número de ciclos de la SMA para encontrar el parámetro de ciclo más adecuado para una variedad específica

  2. Añadir otros indicadores para el juicio combinado, como KDJ, MACD, etc., para mejorar la calidad de las entradas

  3. Optimización de los parámetros de stop loss para adaptarlos mejor a la amplitud de fluctuación del mercado

  4. Optimice la cantidad y proporción de acumulaciones para encontrar la estrategia de acumulación más adecuada

  5. Prueba diferentes parámetros de variedades para adaptar los parámetros de la estrategia a más variedades

Resumir

La estrategia de triple SMA es una estrategia de seguimiento de tendencias muy práctica en general. Al combinar la aplicación de tres diferentes períodos de SMA y el indicador StochClose, se logra un mejor efecto de juicio de tendencias, que evita eficazmente las señales erróneas. Al mismo tiempo, se permite un alza de posición adecuada, lo que permite seguir siempre la tendencia a participar en el profit.

Código Fuente de la Estrategia
/*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)