A estratégia Pivot Point SuperTrend é uma estratégia inovadora que combina dois indicadores populares
A base da estratégia reside na fusão de Pivot Points e indicadores de SuperTrend, além da adição de um robusto filtro de tendência. Ele começa com o cálculo de Pivot Highs e Lows durante um período especificado, servindo como pontos de referência cruciais para análise de tendência. Através de um cálculo médio ponderado, esses Pivot Points criam uma linha central, refinando o indicador geral.
Em seguida, com base na linha do centro e na faixa média verdadeira (ATR) com um fator definido pelo usuário, as faixas superior e inferior são geradas. Estas faixas se adaptam à volatilidade do mercado, adicionando flexibilidade à estratégia.
O filtro de tendência adicional introduzido na estratégia aumenta ainda mais suas capacidades. Este filtro é baseado em uma média móvel, fornecendo uma avaliação dinâmica da força e direção da tendência. Combinando este filtro de tendência com os sinais originais do Pivot Point SuperTrend, a estratégia visa tomar decisões de negociação mais informadas e confiáveis.
Precisão melhorada: a incorporação de um filtro de tendência melhora a precisão da estratégia, confirmando a direção geral da tendência antes de gerar sinais.
Continuidade da tendência: A integração de Pontos de Pivot e SuperTrend, juntamente com o filtro de tendência, visa prolongar as negociações durante fortes tendências de mercado, maximizando potencialmente as oportunidades de lucro.
Redução dos Whipsaws: o cálculo da média ponderada da estratégia, juntamente com o filtro de tendência, ajuda a minimizar sinais falsos e reduz os whipsaws durante condições de mercado incertas ou laterais.
Informações sobre suporte e resistência: a estratégia continua a fornecer níveis de suporte e resistência adicionais com base nos Pontos Pivot, oferecendo informações contextuais valiosas aos traders.
Dependência de parâmetros: a estratégia é sensível a parâmetros como período ATR e multiplicador.
Reversões de tendência: perto dos pontos de reversão de tendência, a estratégia pode gerar sinais falsos resultando em perdas desnecessárias.
Super-otimização: Os parâmetros podem ser otimizados para obter os melhores resultados, mas não têm viabilidade futura.
Risco de Gap: quando os preços se movem fora das faixas, a estratégia entra em uma posição plana. Isso pode perder oportunidades quando as tendências retomam após um gap.
Filtros adicionais: podem ser adicionados filtros de volume, volatilidade, etc., para aumentar a robustez da estratégia.
Parâmetros dinâmicos: Os métodos de otimização automática ou de ajuste adaptativo dos parâmetros com base nas condições de mercado em mudança podem tornar a estratégia mais versátil.
Stop Losses: Pesquisar maneiras de projetar mecanismos de stop loss mantendo a lógica estratégica para controlar efetivamente a queda.
Optimização de ativos cruzados: avaliar parâmetros de estratégia em diferentes mercados e instrumentos.
A estratégia Pivot Point SuperTrend demonstra pontos fortes únicos em dimensões como simplicidade e capacidade de seguir tendências. Ao mesmo tempo, aspectos como parâmetros, stop losses, otimização de ativos oferecem espaço para melhorá-la em uma ferramenta ainda mais universal e confiável.
/*backtest start: 2023-02-19 00:00:00 end: 2024-02-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // © Julien_Eche // Strategy based on "Pivot Point Supertrend" Indicator by LonesomeTheBlue //@version=4 strategy("PPS", overlay=true, initial_capital=500000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000) prd = input(defval = 2, title="Pivot Point Period", minval = 1, maxval = 50) Factor=input(defval = 3, title = "ATR Factor", minval = 1, step = 0.1) Pd=input(defval = 10, title = "ATR Period", minval=1) showpivot = input(defval = false, title="Show Pivot Points") showlabel = input(defval = true, title="Show Buy/Sell Labels") showcl = input(defval = false, title="Show PP Center Line") showsr = input(defval = false, title="Show Support/Resistance") // get Pivot High/Low float ph = pivothigh(prd, prd) float pl = pivotlow(prd, prd) // drawl Pivot Points if "showpivot" is enabled plotshape(ph and showpivot, text="H", style=shape.labeldown, color=na, textcolor=color.red, location=location.abovebar, transp=0, offset = -prd) plotshape(pl and showpivot, text="L", style=shape.labeldown, color=na, textcolor=color.lime, location=location.belowbar, transp=0, offset = -prd) // calculate the Center line using pivot points var float center = na float lastpp = ph ? ph : pl ? pl : na if lastpp if na(center) center := lastpp else //weighted calculation center := (center * 2 + lastpp) / 3 // upper/lower bands calculation Up = center - (Factor * atr(Pd)) Dn = center + (Factor * atr(Pd)) // get the trend float TUp = na float TDown = na Trend = 0 TUp := close[1] > TUp[1] ? max(Up, TUp[1]) : Up TDown := close[1] < TDown[1] ? min(Dn, TDown[1]) : Dn Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1) Trailingsl = Trend == 1 ? TUp : TDown // plot the trend linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : na plot(Trailingsl, color = linecolor , linewidth = 2, title = "PP SuperTrend") plot(showcl ? center : na, color = showcl ? center < hl2 ? color.blue : color.red : na) // check and plot the signals bsignal = Trend == 1 and Trend[1] == -1 ssignal = Trend == -1 and Trend[1] == 1 plotshape(bsignal and showlabel ? Trailingsl : na, title="Buy", text="Buy", location = location.absolute, style = shape.labelup, size = size.tiny, color = color.lime, textcolor = color.black, transp = 0) plotshape(ssignal and showlabel ? Trailingsl : na, title="Sell", text="Sell", location = location.absolute, style = shape.labeldown, size = size.tiny, color = color.red, textcolor = color.white, transp = 0) //get S/R levels using Pivot Points float resistance = na float support = na support := pl ? pl : support[1] resistance := ph ? ph : resistance[1] // if enabled then show S/R levels plot(showsr and support ? support : na, color = showsr and support ? color.lime : na, style = plot.style_circles, offset = -prd) plot(showsr and resistance ? resistance : na, color = showsr and resistance ? color.red : na, style = plot.style_circles, offset = -prd) // Trend Filter from SuperTrend Long Strategy 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) // Combine the SuperTrend calculations 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) // Strategy Entry Conditions 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 // Combined entry conditions longCondition = (trend == 1 and trend[1] == -1 and close > ma) or (bsignal and window()) shortCondition = (trend == -1 and trend[1] == 1 and close < ma) or (ssignal and window()) if (longCondition) strategy.entry("BUY", strategy.long) if (shortCondition) strategy.close("BUY") strategy.entry("SELL", strategy.short) buy1 = barssince((trend == 1 and trend[1] == -1 and close > ma) or (bsignal and window())) sell1 = barssince((trend == -1 and trend[1] == 1 and close < ma) or (ssignal and window())) color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na barcolor(color1)