A Super Trend Dual Moving Average é uma estratégia quantitativa de negociação baseada no indicador Super Trend e na média móvel simples.
A estratégia utiliza dois indicadores:
Super Trend Indicator: Calcula os trilhos superiores e inferiores com base na verdadeira volatilidade ATR e um multiplicador. Quando o preço de fechamento é superior ao trilho superior, ele indica uma visão de alta. Quando inferior ao trilho inferior, ele indica uma visão de baixa.
A média móvel simples de 200 dias é a média aritmética dos preços de fechamento nos últimos 200 dias.
Estratégia lógica:
Quando o indicador Super Trend fornecer um sinal de alta (valor Super Trend superior a 0) e o preço de fechamento for superior à MA de 200 dias, vá longo.
Quando o indicador Super Trend dar um sinal de baixa (valor Super Trend inferior a 0) e o preço de fechamento for inferior ao MA de 200 dias, vá para curto.
Fechar a posição quando o indicador Super Trend dar um sinal inverso em relação ao anterior.
O stop loss é fixado em 25%.
A estratégia combina o indicador Super Trend para determinar a tendência de curto prazo e o MA de 200 dias para determinar a tendência de longo prazo, o que pode efetivamente filtrar falhas, reduzir a frequência de negociação enquanto melhora a taxa de ganho.
O principal risco desta estratégia é que o intervalo de stop loss é relativamente grande. Pode aumentar o risco de liquidação forçada em situações de alta alavancagem. Além disso, quando o mercado está limitado ao intervalo, o indicador Super Trend gerará sinais redundantes, aumentando assim os custos de transação e a frequência de negociação.
O risco pode ser reduzido ajustando adequadamente o período ATR, os parâmetros do multiplicador e o intervalo de stop loss.
A estratégia pode ser otimizada nos seguintes aspectos:
Ajustar o período ATR e os parâmetros do multiplicador para otimizar o indicador Super Trend.
Tente outros indicadores de MA, tais como EMA e VIDYA para substituição.
Adicionar outros indicadores auxiliares, como o canal BOLL ou o indicador KD, para uma filtragem adicional do sinal.
Otimizar a estratégia de stop loss, como movê-lo para o ponto de equilíbrio ou parar de atraso junto com níveis de prazo mais altos.
No geral, esta estratégia é muito prática. Ela considera tanto o julgamento da tendência de curto prazo quanto o julgamento da tendência de longo prazo com configurações razoáveis de stop loss. Pode alcançar melhores resultados através do ajuste e otimização de parâmetros, o que vale a pena verificação e aplicação de negociação real.
/*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