A estratégia identifica oportunidades de entrada de longo prazo através do indicador SuperTrend. Utiliza o ATR médio real e a multiplicação para determinar o suporte dinâmico para entrar em posições longas. A estratégia se concentra nas oportunidades de negociação de longo prazo.
A ascensão e a descensão são calculadas de acordo com o ciclo e a multiplicação do ATR. Quando o preço entra na ascensão, ele sobe, e quando ele entra na descensão, cai.
Para calcular a tendência atual, 1 representa um aumento e - 1 representa uma diminuição. Quando o preço se eleva, a tendência é invertida por uma queda, provocando um sinal de compra. Quando a tendência é revertida por uma queda, provocando um sinal de venda.
Combinando a média móvel como um filtro de tendência, a ruptura da linha de alta exige que o preço seja superior ao MA para comprar, e a ruptura da linha de baixa exige que o preço seja inferior ao MA para vender, para evitar falsas rupturas.
Apresentação visual de trends, sinais de negociação, etc., para auxiliar o julgamento.
A estratégia tem as seguintes vantagens:
O indicador SuperTrend permite acompanhar dinamicamente as mudanças de preço e refletir sobre as reversões de tendência em tempo real.
O ATR pode ser usado para bloquear o lucro, ajustando o ponto de parada de acordo com as flutuações do mercado.
Combinado com a eliminação de falsas rupturas de MA, pode efetivamente filtrar os sinais de negociação de ruído do mercado de turbulência.
A visualização é projetada para mostrar de forma intuitiva a estratégia de negociação e a situação do mercado, e é fácil de operar.
O que significa que os investidores devem ter em conta os pontos de inflexão de tendências para manter posições de longo prazo.
A estratégia tem os seguintes riscos:
Os indicadores SuperTrend são sensíveis aos parâmetros, com ajustes frequentes de linha aérea, podendo ocorrer negociações frequentes.
Em situações de tremores, a linha de parada é ativada com frequência.
Os investimentos pequenos são mais afetados pelas taxas de transação, sem levar em conta os custos de transação.
Não há stop loss, o risco de retração é maior.
A tendência pode ter perdido algumas oportunidades.
Os riscos podem ser reduzidos através das seguintes medidas:
Otimizar os parâmetros ATR para reduzir a frequência de ajuste de linhas aéreas múltiplas.
Aumentar o filtro de linha K equivalente, evitando o estorvo de pequenas ondas de alta frequência.
Configure um Stop Loss para proteger o lucro.
Ajustar adequadamente a média móvel para equilibrar o efeito de filtragem.
Otimizar a gestão de fundos e reduzir os custos de transação.
A estratégia pode ser otimizada em:
Teste diferentes fontes de preços, como o preço de fechamento, o preço mais alto, etc.
Tente outros indicadores de stop loss dinâmicos, como o Chandelier Exit.
Adição de módulos de gestão de posições e otimização da eficiência do uso de fundos.
Refine o tempo de entrada em combinação com os indicadores de volatilidade.
Adição de módulos de stop loss e de paralisação para controlar o risco.
Parâmetros de ajuste para diferentes mercados.
Explorar algoritmos de aprendizagem de máquina para otimização de parâmetros.
Combinação de outros indicadores de julgamento para melhorar a precisão da filtragem.
A estratégia usa o SuperTrend para integrar a determinação de tendências de stop loss dinâmicas e é auxiliada pelo filtro de tendências do MA para identificar o momento de compra da linha longa. O design visual simplifica a operação.
/*backtest
start: 2020-09-13 00:00:00
end: 2023-09-19 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("SuperTrend Long Strategy", overlay=true, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000)
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
// Moving Average as Trend Filter
periodes_ma = input(title="Moving Average Period", type=input.integer, defval=20)
src_ma = input(title="Moving Average Source", type=input.source, defval=close)
ma = sma(src_ma, periodes_ma)
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 and close > ma
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 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 and close < ma
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0))
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 70) : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 70) : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", 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() => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
strategy.close("BUY")
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)