Avance del seguimiento dinámico SAR con tres estrategias de media móvil


Fecha de creación: 2023-11-08 11:53:09 Última modificación: 2023-11-08 11:53:09
Copiar: 0 Número de Visitas: 776
1
Seguir
1617
Seguidores

Avance del seguimiento dinámico SAR con tres estrategias de media móvil

Descripción general

Se trata de una estrategia de negociación de ruptura que combina el SAR paralelo con la media SMMA de tres períodos diferentes. Se hace más cuando las tres medias suben en su totalidad y se hace más de la mitad cuando las tres medias bajan en su totalidad, al tiempo que se combina con el SAR para determinar la dirección de la tendencia y abrir posiciones de reversión cuando el SAR se mueve.

Principio de estrategia

La estrategia se basa en los siguientes puntos:

  1. El uso de un indicador SAR paralelo para determinar la dirección de la tendencia actual. El indicador SAR puede rastrear dinámicamente los cambios en los precios y determinar las tendencias múltiples y las tendencias en blanco.

  2. Establezca tres líneas medias SMMA de diferentes períodos: ((línea rápida 21 períodos, línea media 50 períodos, línea lenta 200 períodos). Cuando las tres líneas medias suben todas, se considera que se forma una tendencia múltiple; cuando las tres líneas medias bajan todas, se considera que se forma una tendencia en blanco).

  3. En el caso de que el SAR se mueva hacia abajo, se debe hacer una entrada adicional si las tres líneas de equilibrado se elevan por completo.

  4. Cuando el SAR se mueve hacia arriba, se hace una entrada en blanco si las tres líneas medias están completamente abajo.

  5. Establezca paradas y paradas. El parado utiliza el indicador SAR como parada dinámica y el parador se establece como una proporción del precio de entrada.

Concretamente, la estrategia comienza por determinar si el indicador SAR de la BAR actual está cambiando. Si el SAR cambia de arriba hacia abajo y las tres medias suben en su totalidad, se hace más; si el SAR cambia de abajo hacia arriba y las tres medias bajan en su totalidad, se hace vacío.

Después de mantener la posición, la línea de stop loss se establece como el siguiente precio indicador de SAR de BAR, con SAR como un stop tracking dinámico. El stop loss se establece como el 10% del precio de entrada. Cuando el precio alcanza el nivel de stop loss o stop loss, la posición se retira.

Análisis de las ventajas

Esta estrategia combina las ventajas de los indicadores de determinación de tendencias y de la línea media de períodos de tiempo múltiples, para entrar en juego a tiempo cuando se produce un cambio de tendencia, al mismo tiempo que se filtra la falsa ruptura a través de la línea media. Las principales ventajas son:

  1. El SAR es capaz de determinar dinámicamente el giro de la tendencia y capturar rápidamente las oportunidades de cambio de tendencia.

  2. Las tres líneas uniformes filtran el ruido del mercado y evitan falsas brechas.

  3. El uso de la línea media SMMA, la curva es más suave y reduce la interferencia de la oscilación de la línea media en el comercio.

  4. Con la configuración de Stop Loss Stop, se puede controlar una sola pérdida y bloquear parte de las ganancias.

  5. La configuración de los parámetros de la estrategia es flexible y se pueden ajustar los parámetros para diferentes mercados y optimizar el efecto de la estrategia.

Análisis de riesgos

La estrategia también tiene algunos riesgos, como:

  1. En una tendencia de oscilación, el indicador SAR puede tener varias y frecuentes variaciones, lo que lleva a un aumento de las comisiones por el comercio demasiado frecuente.

  2. La configuración de tres líneas uniformes puede no ser adecuada para todas las variedades y debe adaptarse a las condiciones específicas de cada variedad.

  3. El precio SAR de la parada de pérdidas se establece como el siguiente BAR con un retraso de tiempo, lo que puede ampliar las pérdidas.

  4. El problema de las falsas rupturas en una tendencia estable que hacen que el SAR se desvíe puede mitigarse ajustando los parámetros para suavizar la curva SAR.

  5. Los ajustes de línea media incorrectos también pueden perder la tendencia o generar señales erróneas que requieren una prueba y optimización cuidadosas.

El riesgo puede ser optimizado a partir de los siguientes puntos:

  1. Ajuste los parámetros SAR según la volatilidad de las diferentes variedades para reducir la probabilidad de cambios frecuentes.

  2. Ajustar los parámetros de las tres líneas medias para que se acerquen más a las características de las diferentes variedades.

  3. Optimizar las estrategias de detención de pérdidas, por ejemplo, mediante la adopción de paradas pequeñas, paradas móviles, etc.

  4. En los mercados con alta frecuencia de transacciones, se utiliza el precio límite para evitar que los puntos de deslizamiento amplíen las pérdidas.

  5. Realizar pruebas de ajuste de parámetros para evaluar el impacto de la línea media y los parámetros SAR en la eficacia de la estrategia.

Dirección de optimización

De acuerdo con el análisis anterior, la estrategia puede ser optimizada en los siguientes aspectos:

  1. Optimizar la configuración de los parámetros SAR, suavizar la curva SAR, reducir la frecuencia de giro de la curva y evitar el exceso de comercio.

  2. Ajustar la longitud de las tres líneas de equilibrio para que se ajusten mejor a las características de las variedades de transacciones específicas y ejerzan un mejor efecto de filtración de tendencias.

  3. La adopción de estrategias de detención de pérdidas dinámicas, tales como el movimiento de la detención, la suspensión de la detención de la pequeña, etc., para reducir la pérdida de la detención de pérdidas.

  4. En los mercados de alta frecuencia, el uso de un solo stop loss en el precio límite reduce la pérdida del punto de deslizamiento del stop loss.

  5. Se añaden otros indicadores para filtrar, como RSI, KD, etc., para mejorar la calidad de la señal y reducir la probabilidad de falsas brechas.

  6. Optimización de las condiciones de entrada, se puede considerar la inspección de la forma de la línea K al mismo tiempo que se gira el SAR, para evitar señales de baja calidad.

  7. Añade la condición de reingreso si el precio continúa en la dirección favorable después de la parada.

  8. Mejorar las estrategias de frenado, como frenado móvil, frenado parcial, frenado por diferencial, etc., para mejorar la rentabilidad.

  9. Optimización de los parámetros basados en los resultados de la retroalimentación para evaluar el impacto de los parámetros en la eficacia de la estrategia general.

Resumir

En general, es una estrategia de ruptura sencilla y práctica que combina el indicador de seguimiento de tendencias SAR y la línea de la igualdad. Utiliza la sensibilidad de SAR para determinar la dirección de la tendencia y el efecto de la onda de la igualdad para entrar rápidamente en el punto de cambio de tendencia. Al mismo tiempo, establece un stop loss para controlar el riesgo y bloquear los beneficios.

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