Baseado na estratégia Super Trend


Data de criação: 2024-02-02 11:11:48 última modificação: 2024-02-02 11:11:48
cópia: 0 Cliques: 782
1
focar em
1617
Seguidores

Baseado na estratégia Super Trend

Visão geral

Esta estratégia usa o indicador de ultra-tendência para determinar a tendência dos preços e, quando a tendência se transforma, entra em posições de compra ou venda. A estratégia permite ajustar o ciclo ATR e o múltiplo ATR para otimizar os parâmetros. Além disso, a estratégia também oferece opções para alterar o método de cálculo do ATR, resultando em resultados ligeiramente diferentes.

A estratégia também possui a função de configuração de intervalos de data de retracção e de negociação apenas em determinados períodos de tempo. Isso é especialmente útil para ações de negociação diária. Quando a opção de intervalo de tempo é ativada, é possível optar por entrar imediatamente na posição atual no início do período de tempo ou esperar a mudança de tendência para entrar na primeira ordem.

A estratégia também pode definir o ponto de parada e o ponto de parada com base na porcentagem. Na maioria dos casos, não é necessário definir um ponto de parada adicional, pois o próprio ATR fornece um ponto de parada. Portanto, apenas o ponto de parada pode ser ativado para otimizar o mecanismo de saída.

Por fim, a estratégia possui informações de entrada e saída de alertas de negociação personalizadas, que podem ser usadas no serviço de negociação automática.

Princípio da estratégia

A estratégia de ultra-trend é baseada nos seguintes princípios principais:

  1. Calcular o valor do ATR: você pode optar por usar o cálculo do SMA, ou você pode usar o indicador ATR embutido. A fórmula da versão SMA é:
   atr2 = sma(tr, Periods) 
  1. Calcule a subida e a descida: a subida é o preço menos o ATR multiplicado pelo ATR, a descida é o preço mais o ATR multiplicado pelo ATR.
   up = close - (Multiplier * atr)
   dn = close + (Multiplier * atr)
  1. Para avaliar a relação entre o preço e a trajetória ascendente e descendente, calcule a direção da tendência. Quando o preço sobe através da trajetória descendente, a tendência é de cabeça, quando o preço desce através da trajetória descendente, a tendência é de cabeça.
   trend := trend == -1 and close > dn ? 1 : trend == 1 and close < up ? -1 : trend 
  1. O sinal de negociação é gerado quando a tendência muda, como o sinal de venda é gerado quando a tendência muda de cabeça para cabeça vazia:
   sellSignal = trend == -1 and trend[1] == 1
  1. Filtração de entrada ou não de acordo com os sinais de negociação e outras condições.

  2. Estabeleça um stop loss e um stop-loss para bloquear lucros ou evitar riscos.

Estes são os pontos-chave da estratégia de ultra-trend, combinada com a otimização de parâmetros, para obter melhores resultados de negociação.

Vantagens estratégicas

A estratégia de ultra-trending tem as seguintes vantagens:

  1. O indicador de supertrend, por si só, é um bom indicador de tendências de preços e é uma ferramenta comum de rastreamento e parada de perdas.

  2. Os parâmetros do ATR são ajustáveis e podem ser otimizados para obter a melhor combinação de parâmetros para diferentes variedades. O método de cálculo do SMA também oferece outra opção.

  3. Pode-se configurar o intervalo de tempo de retrospecção e negociação em disco para atender às necessidades de diferentes períodos de negociação.

  4. Oferece a opção de entrar imediatamente na lista inicial ou esperar pelo sinal, com base nas características da variedade.

  5. A configuração de stop loss embutida pode aumentar a resistência ao risco da estratégia ou bloquear mais lucros.

  6. A informação de solicitação de negociação personalizada pode ser integrada a sistemas de negociação automáticos ou robóticos, permitindo a vigilância automática.

Risco estratégico

A estratégia também apresenta alguns riscos:

  1. Os indicadores de tendência ultra podem gerar mais sinais falsos e precisam ser filtrados em combinação com outros indicadores.

  2. Parâmetros de ATR incorretos podem levar a transações frequentes ou a tendências perdidas. Os parâmetros precisam ser otimizados para obter o melhor equilíbrio.

  3. Perder muito perto do ponto de parada pode ser uma saída prematura de uma posição de lucro, e o ponto de parada muito longe pode não ser suficiente para bloquear o lucro.

  4. A configuração errada do intervalo de tempo pode fazer com que você perca o principal período de negociação ou que você não use a garantia.

Os riscos acima podem ser resolvidos por meio de ajustes apropriados de parâmetros ou adição de condições de filtragem, aumentando a estabilidade da estratégia.

Direção de otimização da estratégia

A estratégia pode ser melhorada em alguns aspectos:

  1. Experimente diferentes parâmetros de ciclo ATR para encontrar o ponto de equilíbrio adequado. Geralmente, entre 10 e 20 é o ideal.

  2. Testar diferentes parâmetros de multiplicação de ATR, geralmente 2-5 é mais adequado, e pode ser gradualmente ajustado para encontrar o melhor valor.

  3. Tente adicionar outros indicadores para determinar o hiper-direcionamento, como MACD, KD, etc., para filtrar falsos sinais.

  4. Otimização dos parâmetros de parada de perda para encontrar a combinação de parâmetros ideal. Pode-se introduzir parada de perda dinâmica.

  5. Teste diferentes configurações de intervalos de tempo de negociação. Variedades de linha curta diária são adequadas para períodos de tempo mais curtos.

  6. Tente selecionar automaticamente os contratos e acompanhar os indicadores de alta liquidez ou de alta volatilidade.

Resumir

Esta estratégia de tendência ultra é uma estratégia de acompanhamento de tendência mais comum e prática. Ela possui características de configurabilidade de parâmetros e eficiência de acompanhamento de tendências, mas também possui certos riscos a serem evitados.

Código-fonte da estratégia
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © REV0LUTI0N

//@version=4

// Strategy
strategy("Supertrend Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
enableentry = input(true, title="Enter First Trade ASAP")
waitentry = input(false, title="Wait To Enter First Trade")

atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
Long = (trend == 1 ? up : na)
buySignal = trend == 1 and trend[1] == -1

dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
Short = (trend == 1 ? na : dn)
sellSignal = trend == -1 and trend[1] == 1

// Strategy Backtesting
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))

// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100

longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)

plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")

// Strategy Execution
if Long and time_cond and timetobuy and enableentry
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if Short and time_cond and timetobuy and enableentry
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if buySignal and time_cond and timetobuy and waitentry
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if sellSignal and time_cond and timetobuy and waitentry
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size > 0 and enablesl and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
    
if strategy.position_size > 0 and enabletp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)