La Super Trend Dual Moving Average Strategy es una estrategia de trading cuantitativa basada en el indicador de Super Trend y la media móvil simple.
La estrategia utiliza dos indicadores:
Indicador de tendencia súper: Calcula los rieles superiores e inferiores basados en la verdadera volatilidad ATR y un multiplicador. Cuando el precio de cierre es superior al rieles superior, indica una visión alcista. Cuando es inferior al rieles inferior, indica una visión bajista.
Promedio móvil simple de 200 días: toma el promedio aritmético de los precios de cierre en los últimos 200 días. Cuando el precio de cierre es superior a esta línea, representa una tendencia alcista importante. Cuando es inferior a esta línea, representa una tendencia bajista importante.
Estrategia lógica:
Cuando el indicador de Super Tendencia dé una señal alcista (valor de Super Tendencia superior a 0) y el precio de cierre sea superior al MA de 200 días, vaya largo.
Cuando el indicador de Super Tendencia dé una señal bajista (valor de Super Tendencia inferior a 0) y el precio de cierre sea inferior al MA de 200 días, vaya corto.
Cierre la posición cuando el indicador Super Trend dé una señal inversa respecto a la anterior.
El stop loss está establecido en 25%.
La estrategia combina el indicador Super Trend para determinar la tendencia a corto plazo y el MA de 200 días para determinar la tendencia a largo plazo, que puede filtrar eficazmente las falsas rupturas, reducir la frecuencia de negociación al tiempo que mejora la tasa de ganancia.
El principal riesgo de esta estrategia es que el rango de stop loss es relativamente grande. Puede aumentar el riesgo de liquidación forzada en situaciones de alto apalancamiento. Además, cuando el mercado está limitado al rango, el indicador Super Trend generará señales redundantes, aumentando así los costos de transacción y la frecuencia de negociación.
El riesgo puede reducirse ajustando adecuadamente el período de ATR, los parámetros del multiplicador y el intervalo de stop loss.
La estrategia se puede optimizar en los siguientes aspectos:
Ajustar el período ATR y los parámetros del multiplicador para optimizar el indicador Super Trend.
Pruebe otros indicadores de MA como EMA y VIDYA para su sustitución.
Se añadirán otros indicadores auxiliares como el canal BOLL o el indicador KD para un mayor filtrado de la señal.
Optimice la estrategia de stop loss, como moverla al punto de equilibrio o a la parada posterior junto con niveles de marco de tiempo más altos.
En general, esta estrategia es muy práctica. Considera tanto el juicio de tendencia a corto plazo como el juicio de tendencia a largo plazo con ajustes razonables de stop loss. Puede lograr mejores resultados a través del ajuste y optimización de parámetros, lo que vale la pena una verificación y aplicación de operaciones reales.
/*backtest start: 2023-12-16 00:00:00 end: 2024-01-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/ // © wielkieef //@version=5 strategy("Smart SuperTrend Strategy ", shorttitle="ST Strategy", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.01) // Parametry wskaźnika SuperTrend atrLength = input(10, title="Lenght ATR") factor = input(3.0, title="Mult.") // Parametry dla SMA lengthSMA = input(200, title="Lenght SMA") // Parametry dla Stop Loss sl = input.float(25.0, '% Stop Loss', step=0.1) // Obliczanie ATR atr = ta.atr(atrLength) // Obliczanie podstawowej wartości SuperTrend up = hl2 - (factor * atr) dn = hl2 + (factor * atr) // Obliczanie 200-SMA sma200 = ta.sma(close, lengthSMA) // Inicjalizacja zmiennych var float upLevel = na var float dnLevel = na var int trend = na var int trendWithFilter = na // Logika SuperTrend upLevel := close[1] > upLevel[1] ? math.max(up, upLevel[1]) : up dnLevel := close[1] < dnLevel[1] ? math.min(dn, dnLevel[1]) : dn trend := close > dnLevel[1] ? 1 : close < upLevel[1] ? -1 : nz(trend[1], 1) // Filtr SMA i aktualizacja trendWithFilter trendWithFilter := close > sma200 ? math.max(trend, 0) : math.min(trend, 0) // Logika wejścia longCondition = trend == 1 shortCondition = trend == -1 // Wejście w pozycje if (longCondition) and close > sma200 strategy.entry("Long", strategy.long) if (shortCondition) and close < sma200 strategy.entry("Short", strategy.short) // Warunki zamknięcia pozycji Long_close = trend == -1 and close > sma200 Short_close = trend == 1 and close < sma200 // Zamknięcie pozycji if (Long_close) strategy.close("Long") if (Short_close) strategy.close("Short") // Kolory superTrendu z filtrem sma200 trendColor = trendWithFilter == 1 ? color.green : trendWithFilter == -1 ? color.red : color.blue //ploty plot(trendWithFilter == 1 ? upLevel : trendWithFilter == -1 ? dnLevel : na, color=trendColor, title="SuperTrend") // Stop Loss ( this code is from author RafaelZioni, modified by wielkieef ) per(procent) => strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) // -------------------------------------------------------------------------------------------------------------------- strategy.exit('SL',loss=per(sl)) //by wielkieef