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.
La estrategia se basa en los siguientes puntos clave:
Utilizando el indicador parabólico SAR para determinar la dirección de la tendencia actual.
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.
Se va largo cuando SAR se vuelve hacia abajo mientras las tres líneas SMMA están subiendo.
Cortocircuito cuando SAR se vuelve mientras las tres líneas SMMA están cayendo.
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.
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.
El SAR puede detectar rápidamente los cambios de tendencia y capturar las oportunidades de reversión.
Las SMMA triples filtran eficazmente el ruido del mercado y evitan las falsas rupturas.
El uso de SMMA da como resultado curvas más suaves y menos interferencia de las flechas de MA.
Incorporar stop loss y take profit ayuda a controlar la pérdida de una sola operación y bloquear las ganancias parciales.
Los parámetros flexibles permiten la optimización para diferentes mercados.
También hay algunos riesgos a tener en cuenta:
El SAR puede cambiar con frecuencia durante las tendencias agitadas, aumentando los costos por el comercio excesivo.
Las configuraciones SMMA pueden no adaptarse bien a todos los instrumentos, lo que requiere una optimización individual.
SAR stop loss tiene retraso de tiempo, potencialmente aumentando las pérdidas.
El SAR puede cambiar las rupturas falsas en tendencias constantes.
Los ajustes deficientes de SMMA pueden causar tendencias perdidas o señales malas.
Para hacer frente a los riesgos, las optimizaciones pueden centrarse en:
Ajuste de los parámetros SAR basados en la volatilidad para reducir los saltos.
Ajuste de los períodos SMMA para adaptarlos a las características del instrumento.
Mejorar el stop loss, por ejemplo con órdenes de seguimiento o de límite.
Uso de órdenes de límite para el stop loss en operaciones activas.
Pruebas extensas y ajuste de parámetros.
Basándose en el análisis anterior, las optimizaciones pueden incluir:
Optimizando los parámetros SAR para curvas más suaves y menos volteretas.
Ajuste de las longitudes de las SMMA para que coincidan con los instrumentos de negociación
Empleando stop loss dinámicos como trailing stops u órdenes límite.
Uso de órdenes de límite para el stop loss en operaciones de alta frecuencia.
Añadiendo filtros como RSI, KD para mejorar la calidad de la señal.
Mejorar las condiciones de entrada, por ejemplo, comprobando los patrones de las velas con los tiros SAR.
Añadir condiciones de reingreso después de que se active el stop loss.
Mejora de las ganancias con el retraso, parcialmente cerrado, niveles asombrosos.
Ajuste de parámetros basado en los resultados de las pruebas de retroceso y el análisis de sensibilidad.
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)