Estratégia baseada no indicador Supertrend e Média Móvel Simples


Data de criação: 2024-01-16 15:19:09 última modificação: 2024-01-16 15:19:09
cópia: 0 Cliques: 616
1
focar em
1617
Seguidores

Estratégia baseada no indicador Supertrend e Média Móvel Simples

Visão geral

A estratégia de dupla linha de equilíbrio de ultra-trend é uma estratégia de negociação quantitativa baseada no indicador de ultra-trend e na média móvel simples. A estratégia usa o indicador de ultra-trend para determinar a direção da tendência do mercado e, em combinação com a média móvel simples de 200 dias, filtra para abrir uma posição em uma direção de grande tendência.

Princípio da estratégia

A estratégia usa dois indicadores:

  1. Indicador de super tendência: ele calcula a ascensão e a descensão com base na amplitude de onda real ATR e um múltiplo. Quando o preço de fechamento está acima da ascensão, é positivo, e abaixo da descensão, é negativo.

  2. Média Móvel Simples de 200 Dias: é a média aritmética dos preços de fechamento nos últimos 200 dias. Os preços de fechamento acima da linha representam a tendência de alta, e abaixo da linha representam a tendência de baixa.

A lógica da estratégia:

  1. Quando o indicador de supertrend é positivo (o valor do indicador de supertrend é maior que 0) e o preço de fechamento está acima da média diária de 200 dias, faça uma entrada de capital.

  2. Quando o indicador de tendência ultrapassa a baixa ((o valor do indicador de tendência ultrapassa a menor do que 0) e o preço de fechamento está abaixo da média de 200 dias, a entrada de uma posição de curto prazo .

  3. Quando o indicador de tendência ultrapassa a inversão do sinal anterior, a posição de equilíbrio é jogada.

  4. O Stop Loss está definido em 25%.

Análise de vantagens

Esta estratégia combina o indicador de tendência ultra para determinar a tendência de curto prazo e a linha média de 200 dias para determinar a tendência de longo prazo, o que permite filtrar efetivamente as brechas falsas e reduzir a frequência de negociação, ao mesmo tempo em que aumenta a taxa de vitória. Em um mercado grande, a tendência é clara o suficiente, com uma grande margem de perda e uma grande margem de lucro.

Análise de Riscos

O principal risco desta estratégia é o aumento do risco de liquidação forçada em situações de alto nível de alavancagem. Além disso, quando o mercado se reorganiza, os indicadores de ultra-trend geram sinais extras, aumentando a frequência e o custo das transações.

Pode-se reduzir o risco através de um ajuste adequado do ciclo ATR, do parâmetro multiplicador e da amplitude de parada.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Ajustar os parâmetros do ATR e do multiplicador e otimizar os parâmetros do indicador de ultra-tendência;

  2. Tente substituir por outros indicadores de equilíbrio, como EMA, VIDYA, etc.

  3. A adição de outros indicadores auxiliares, como o canal BOLL ou o indicador KD, para uma filtragem adicional do sinal;

  4. Optimizar as estratégias de parada de perdas, como mudar para um ponto de equilíbrio de ganho e perda ou parar com um grande nível de perda.

Resumir

Esta estratégia é muito prática para o conjunto, considerando tanto o julgamento de tendências de curto prazo quanto o julgamento de tendências de longo prazo, a configuração de stop loss também é mais razoável. O melhor efeito ainda pode ser obtido através do ajuste e otimização de parâmetros, vale a pena testar e usar no campo.

Código-fonte da estratégia
/*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