A EMA reforçou a sua estratégia SuperTrend

Autora:ChaoZhang, Data: 2023-10-07 10:07:15
Tags:

Resumo

Esta estratégia julga a direção da tendência do preço comparando o ATR e o preço, combinado com o julgamento assistente da média móvel.

Princípio da estratégia

Os principais passos desta estratégia para determinar a tendência dos preços são:

  1. Calcular o ATR dos últimos N dias, utilizando o método de cálculo do ATR de Wilder, que pode refletir melhor a volatilidade actual do mercado.

  2. Calcule as faixas superior e inferior com base no coeficiente ATR e ATK. Faixas superior = preço - (atk x ATR); Faixas inferior = preço + (atk x ATR).

  3. Comparar o preço com as faixas superior e inferior para determinar a direção da tendência.

  4. Tomar longo ou curto quando ocorre sinal de negociação.

  5. Adicionar uma estratégia de stop loss para controlar os riscos.

  6. Use a marcação colorida para o estado da estratégia para ajudar no julgamento.

Esta estratégia faz pleno uso das vantagens do ATR para captar rapidamente as alterações da tendência de preços e alcançar operações de baixa retirada.

Vantagens

As vantagens desta estratégia incluem:

  1. ATR pode responder rapidamente às últimas tendências do mercado e ajudar a captar as mudanças de tendência em tempo hábil.

  2. A zona de amortização entre as bandas superior e inferior pode reduzir a probabilidade de ruptura de stop loss e baixos drawdowns.

  3. Os breakouts são sinais de alta qualidade para direcções longas e curtas.

  4. Alta personalização: o período de ATR e o multiplicador são ajustáveis para se adaptarem aos diferentes ambientes de mercado.

  5. Forte visualização. Ferramentas gráficas exibem o estado da estratégia de forma intuitiva.

  6. Fácil de otimizar. Módulos como stop loss em movimento, filtro podem ser adicionados para otimização adicional.

Em geral, esta estratégia tem vantagens notáveis, como uma pequena retirada, tornando-a muito adequada para estratégias de tendência.

Riscos

Há também alguns riscos:

  1. Risco de erro na determinação da tendência: podem ocorrer sinais errados durante a consolidação dos preços.

  2. Risco de selecção do ponto de saída: o ponto de stop loss deve ser ajustado de forma razoável para evitar uma saída prematura.

  3. Risco de otimização de parâmetros. Período de ATR e multiplicador precisam de testes e otimização repetitivos, configurações inadequadas afetarão o desempenho.

  4. Risco de alta frequência de negociação: a frequência de negociação pode ser demasiado elevada durante a volatilidade extrema do mercado.

  5. Risco de desempenho médio: o desempenho pode ser insatisfatório em alguns mercados sem tendências óbvias.

  6. Ajuste para o risco de negociação ao vivo.

  7. Risco sistemático: deve considerar-se o controlo global do risco do sistema, em vez de depender apenas desta estratégia.

Os riscos podem ser controlados por:

  1. Otimizando os parâmetros do ATR para melhorar a precisão.

  2. Usando análises de vários prazos para determinar tendências.

  3. Adotar um stop loss móvel para bloquear os lucros e reduzir os drawdowns.

  4. Adicionando filtros para controlar a frequência de negociação.

  5. Ajuste dos parâmetros para os diferentes mercados.

  6. Teste de diferentes produtos para encontrar o melhor cenário de aplicação.

  7. Considerando de forma abrangente todos os riscos comerciais na negociação ao vivo.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Adicionando filtros como médias móveis para reduzir sinais incorretos.

  2. Otimização dos parâmetros ATR através do ensaio de diferentes períodos para encontrar valores ótimos.

  3. Otimizar o parâmetro do multiplicador para determinar a sensibilidade da geração de sinal.

  4. Adicionar estratégias dinâmicas de stop loss baseadas no ATR ou na volatilidade.

  5. Usando indicadores de tempo mais longos para análise para filtrar falsos sinais esporádicos.

  6. Adotar modelos de aprendizagem de máquina como RNN para melhorar o julgamento de sinais.

  7. Ajuste dos parâmetros com base nas características do produto, por exemplo, utilização de um período ATR mais curto para as existências voláteis.

  8. Otimizar os pontos de entrada usando abordagens de retirada de ruptura para encontrar melhores entradas.

  9. Combinar indicadores de volume para avaliar a intensidade do sinal.

  10. Adicionar estratégias de lucro baseadas em indicadores de tendência.

Conclusão

Em geral, esta estratégia de supertrend é muito prática, com vantagens como resposta rápida e pequena redução. É um sistema típico de tendência seguinte. Mas os riscos como erros de julgamento e otimização de parâmetros devem ser observados na negociação ao vivo e um gerenciamento de risco abrangente deve ser implementado. Uma otimização adicional pode tornar a estratégia mais robusta e lucrativa em mais mercados.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 6h
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/
// © KivancOzbilgic


//@version=4
strategy("SuperTrend STRATEGY", overlay=true)
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)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
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)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => true
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1= barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)

//@version=3
//study(title="3 Moving Average Exponential", shorttitle="3 EMA", overlay=true)
//len1 = input(17, minval=1, title="Fast")
//len2 = input(72, minval=1, title="Medium")
len3 = input(305, minval=1, title="Slow")
//src1 = input(close, title="Source Fast")
//src2 = input(close, title="Source Medium")
src3 = input(close, title="Source Slow")
//out1 = ema(src1, len1)
//out2 = ema(src2, len2)
out3 = ema(src3, len3)
//plot(out1, title="EMA1", color=fuchsia)
//plot(out2, title="EMA2", color=orange)
plot(out3, title="EMA3", color=color.blue)

Mais.