En la carga de los recursos... Cargando...

Estrategia parabólica SAR Dinámica Triple SMMA

El autor:¿ Qué pasa?, Fecha: 2023-11-08 11:53:09
Las etiquetas:

img

Resumen general

Esta es una estrategia de negociación de ruptura que combina el indicador SAR parabólico y las líneas SMMA triples con diferentes períodos. Va largo cuando las tres líneas SMMA están subiendo y va corto cuando todas están cayendo, mientras que utiliza el indicador SAR para determinar la dirección de la tendencia y tomar entradas de contratrend cuando SAR vuelve direcciones. La estrategia también incorpora stop loss y take profit.

Estrategia lógica

La estrategia se basa en los siguientes puntos clave:

  1. Utilizando el indicador parabólico SAR para determinar la dirección de la tendencia actual.

  2. Establecer tres líneas SMMA con períodos diferentes (línea rápida 21, línea media 50, línea lenta 200). Cuando las tres líneas están subiendo, indica una tendencia alcista. Cuando todas están bajando, indica una tendencia bajista.

  3. Se va largo cuando SAR se vuelve hacia abajo mientras las tres líneas SMMA están subiendo.

  4. Cortocircuito cuando SAR se vuelve mientras las tres líneas SMMA están cayendo.

  5. Incorporar el stop loss basado en SAR y tomar ganancias a un cierto porcentaje del precio de entrada.

Específicamente, la estrategia primero comprueba si el SAR vuelve las direcciones en la barra actual. Si el SAR vuelve de arriba a abajo mientras que los SMMA están subiendo, va largo. Si el SAR vuelve de abajo a arriba mientras que los SMMA están cayendo, va corto.

Después de la entrada, el stop loss se establece en el precio SAR en la siguiente barra, utilizando SAR como un stop loss dinámico.

Análisis de ventajas

Esta estrategia combina la ventaja de un indicador de tendencia y las medias móviles de marcos de tiempo múltiples, lo que permite las entradas oportunas en las inversiones de tendencia mientras se filtran las rupturas falsas con SMMA.

  1. El SAR puede detectar rápidamente los cambios de tendencia y capturar las oportunidades de reversión.

  2. Las SMMA triples filtran eficazmente el ruido del mercado y evitan las falsas rupturas.

  3. El uso de SMMA da como resultado curvas más suaves y menos interferencia de las flechas de MA.

  4. Incorporar stop loss y take profit ayuda a controlar la pérdida de una sola operación y bloquear las ganancias parciales.

  5. Los parámetros flexibles permiten la optimización para diferentes mercados.

Análisis de riesgos

También hay algunos riesgos a tener en cuenta:

  1. El SAR puede cambiar con frecuencia durante las tendencias agitadas, aumentando los costos por el comercio excesivo.

  2. Las configuraciones SMMA pueden no adaptarse bien a todos los instrumentos, lo que requiere una optimización individual.

  3. SAR stop loss tiene retraso de tiempo, potencialmente aumentando las pérdidas.

  4. El SAR puede cambiar las rupturas falsas en tendencias constantes.

  5. Los ajustes deficientes de SMMA pueden causar tendencias perdidas o señales malas.

Para hacer frente a los riesgos, las optimizaciones pueden centrarse en:

  1. Ajuste de los parámetros SAR basados en la volatilidad para reducir los saltos.

  2. Ajuste de los períodos SMMA para adaptarlos a las características del instrumento.

  3. Mejorar el stop loss, por ejemplo con órdenes de seguimiento o de límite.

  4. Uso de órdenes de límite para el stop loss en operaciones activas.

  5. Pruebas extensas y ajuste de parámetros.

Direcciones de optimización

Basándose en el análisis anterior, las optimizaciones pueden incluir:

  1. Optimizando los parámetros SAR para curvas más suaves y menos volteretas.

  2. Ajuste de las longitudes de las SMMA para que coincidan con los instrumentos de negociación

  3. Empleando stop loss dinámicos como trailing stops u órdenes límite.

  4. Uso de órdenes de límite para el stop loss en operaciones de alta frecuencia.

  5. Añadiendo filtros como RSI, KD para mejorar la calidad de la señal.

  6. Mejorar las condiciones de entrada, por ejemplo, comprobando los patrones de las velas con los tiros SAR.

  7. Añadir condiciones de reingreso después de que se active el stop loss.

  8. Mejora de las ganancias con el retraso, parcialmente cerrado, niveles asombrosos.

  9. Ajuste de parámetros basado en los resultados de las pruebas de retroceso y el análisis de sensibilidad.

Resumen de las actividades

En resumen, esta es una estrategia de ruptura simple y práctica que combina la sensibilidad de SAR en la captura de los cambios de tendencia y el efecto de filtrado de los promedios móviles. Puede identificar rápidamente los puntos de inversión de tendencia. El uso de stop loss y take profit ayuda a controlar los riesgos y bloquear las ganancias.


/*backtest
start: 2023-10-08 00:00:00
end: 2023-11-07 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="SAR + 3SMMA with SL & TP", overlay=true, calc_on_order_fills=false, calc_on_every_tick=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.USD, commission_type= strategy.commission.percent, commission_value=0.03)
start = input.float(0.02, step=0.01, group="SAR")
increment = input.float(0.02, step=0.01, group="SAR")
maximum = input.float(0.2, step=0.01, group="SAR")

//Take Profit Inputs     
take_profit = input.float(title="Take Profit (%)", minval=0.0, step=0.1, defval = 0.1, group="Stop Loss and Take Profit", inline="TP") * 0.01

//Stop Loss Inputs
stop_loss = input.float(title="StopLoss (%)", minval=0.0, step=0.1, defval=1, group="Stop Loss and Take Profit", inline="SL") * 0.01

// Smooth Moving Average
fastSmmaLen = input.int(21, minval=1, title="Fast Length", group = "Smooth Moving Average")
midSmmaLen = input.int(50, minval=1, title="Mid Length", group = "Smooth Moving Average")
slowSmmaLen = input.int(200, minval=1, title="Slow Length", group = "Smooth Moving Average")

src = input(close, title="Source", group = "Smooth Moving Average")

smma(ma, src, len) => 
    smma = 0.0
    smma := na(smma[1]) ? ma : (smma[1] * (len - 1) + src) / len
    smma

fastSma = ta.sma(src, fastSmmaLen)
midSma = ta.sma(src, midSmmaLen)
slowSma = ta.sma(src, slowSmmaLen)

fastSmma = smma(fastSma, src, fastSmmaLen)
midSmma = smma(midSma, src, midSmmaLen)
slowSmma = smma(slowSma, src, slowSmmaLen)

isSmmaUpward = ta.rising(fastSmma, 1) and ta.rising(midSmma, 1) and ta.rising(slowSmma, 1)

var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na

if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := math.max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := math.min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := math.min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := math.min(AF + increment, maximum)
	if uptrend
		SAR := math.min(SAR, low[1])
		if bar_index > 1
			SAR := math.min(SAR, low[2])
	else
		SAR := math.max(SAR, high[1])
		if bar_index > 1
			SAR := math.max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)

sarIsUpTrend = uptrend ? true : false

sarFlippedDown = sarIsUpTrend and not sarIsUpTrend[1] ? true : false
sarFlippedUp = not sarIsUpTrend and sarIsUpTrend[1] ? true : false


longEntryCondition = isSmmaUpward and sarFlippedDown
shortEntryCondition = not isSmmaUpward and sarFlippedUp

if(longEntryCondition)
    strategy.entry("L", strategy.long, stop=nextBarSAR, comment="L")

if(shortEntryCondition)
    strategy.entry("S", strategy.short, stop=nextBarSAR, comment="S")


strategy.exit("CL", when=strategy.position_size > 0, limit=strategy.position_avg_price * (1+take_profit), stop=strategy.position_avg_price*(1-stop_loss))
strategy.exit("CS", when=strategy.position_size < 0, limit=strategy.position_avg_price * (1-take_profit), stop=strategy.position_avg_price*(1+stop_loss))


plot(SAR, style=plot.style_cross, linewidth=1, color=color.orange)
plot(nextBarSAR, style=plot.style_cross, linewidth=1, color=color.aqua)
plot(series = fastSmma, title="fastSmma", linewidth=1)
plot(series = midSmma, title="midSmma", linewidth=2)
plot(series = slowSmma, title="slowSmma", linewidth=3)
plotchar(series = isSmmaUpward, title="isSmmaUpward", char='')
plotchar(series=sarIsUpTrend, title="sarIsUpTrend", char='')
plotchar(series=sarFlippedUp, title="sarFlippedUp", char='')
plotchar(series=sarFlippedDown, title="sarFlippedDown", char='')
plotchar(series=longEntryCondition, title="longEntryCondition", char='')
plotchar(series=shortEntryCondition, title="shortEntryCondition", char='')
plotchar(series=strategy.position_size > 0, title="inLong", char='')
plotchar(series=strategy.position_size < 0, title="inShort", char='')


//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)



Más.