Estratégias de acompanhamento de tendências baseadas em múltiplos indicadores


Data de criação: 2023-12-27 17:15:45 última modificação: 2023-12-27 17:15:45
cópia: 1 Cliques: 599
1
focar em
1623
Seguidores

Estratégias de acompanhamento de tendências baseadas em múltiplos indicadores

Visão geral

Esta estratégia chama-seEstratégias de acompanhamento de tendências em combinação com vários indicadores(Multi-Indicator Trend Tracking Strategy), que utiliza vários indicadores, como o indicador de variação de Fisher, a média móvel ponderada (WMA), o indicador de força relativa (RSI) e a linha de medição (OBV), para determinar a direção da tendência do mercado e realizar negociações de acompanhamento de tendências.

Princípio da estratégia

  1. O indicador de variação de Fisher determina a tendência e a intensidade da mudança de preço. Quando as quatro linhas de Fisher mudam de cor ao mesmo tempo, um sinal de negociação é emitido.
  2. O WMA julga a direção da grande tendência. O RSI filtra os falsos sinais.
  3. Os indicadores OBV são usados para confirmar tendências.

Especificamente, o indicador de troca de Fisher contém 4 linhas de 1x2, 4x4 e 8x4. Quando 4 linhas se movem para cima em verde, geram um sinal positivo, e quando 4 linhas se movem para baixo em vermelho, geram um sinal negativo. A WMA julga a direção da grande tendência, se o indicador for para cima, julga-a como pessimista, e se for para baixo, julga-a como pessimista. O OBV é usado para confirmar a direção da tendência.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. O indicador de transformação de Fisher tem um forte discernimento, e quando as 4 linhas de Fisher mudam de cor ao mesmo tempo, há uma grande probabilidade de uma reversão de tendência.
  2. A WMA julga as principais tendências e evita negociações adversas.
  3. Os indicadores OBV confirmam tendências e evitam falsas rupturas em mercados sem tendência.
  4. O RSI filtra os falsos sinais para garantir a sua confiabilidade.

A aplicação de uma combinação de vários indicadores garante a precisão e a confiabilidade dos sinais de negociação, além da capacidade de acompanhar as tendências, o que permite obter melhores efeitos estratégicos.

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. A linha de Fisher é propensa a produzir falsos sinais se o mercado se equilibrar.
  2. A configuração incorreta do parâmetro WMA também afeta a acuracidade do julgamento.
  3. O índice de conversão de Fisher é um indicador de fraqueza para o que acontece em linhas ultracortas.
  4. A estratégia pode resultar em enormes perdas em caso de falha na rede.

Para reduzir o risco, pode-se ajustar adequadamente os parâmetros do RSI e otimizar os parâmetros do ciclo WMA. Ao mesmo tempo, pode-se definir um ponto de parada para evitar perdas excessivas.

Direção de otimização

A estratégia pode ser melhorada em:

  1. Pode testar a eficácia da estratégia sob diferentes parâmetros de ciclo para encontrar a melhor combinação de parâmetros.
  2. Adição de um mecanismo de stop loss. O stop loss é aplicado quando a perda atinge uma certa proporção.
  3. Adapte ainda mais os parâmetros do indicador de transformação de Fisher de acordo com os resultados da ressonância magnética para encontrar o conjunto de parâmetros mais preciso para o indicador.
  4. Tente adicionar filtros para outros indicadores, como indicadores de Força e Fraqueza, Bias, etc.
  5. Teste diferentes configurações de tamanho de posição.

Resumir

Esta estratégia utiliza o indicador de mudança de Fisher, o indicador WMA, o indicador OBV e o indicador RSI para determinar a direção da tendência do mercado. O seu sinal de julgamento é preciso, a capacidade de confirmação é forte e pode bloquear efetivamente a tendência para obter lucro.

Código-fonte da estratégia
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//author Sdover0123
strategy(title='FTR, WMA, OBV & RSI Strat', shorttitle='FTR WMA, OBV, RSI',overlay=false, default_qty_type=strategy.percent_of_equity, initial_capital = 100, default_qty_value=100, commission_value = 0.06, pyramiding = 3)
Len = input.int(10, minval=1, group ="Fisher Transform")
mult1 = input.int(1, minval=1, group ="Fisher Transform")
mult2 = input.int(2, minval=1, group ="Fisher Transform")
mult3 = input.int(4, minval=1, group ="Fisher Transform")
mult4 = input.int(8, minval=1, group ="Fisher Transform")
fish(Length, timeMultiplier) =>
    var nValue1 = 0.0
    var nValue2 = 0.0
    var nFish = 0.0
    xHL2 = hl2
    xMaxH = ta.highest(xHL2, Length * timeMultiplier)
    xMinL = ta.lowest(xHL2, Length * timeMultiplier)
    nValue1 := 0.33 * 2 * ((xHL2 - xMinL) / (xMaxH - xMinL) - 0.5) + 0.67 * nz(nValue1[1])
    if nValue1 > .99
        nValue2 := .999
        nValue2
    else if nValue1 < -.99
        nValue2 := -.999
        nValue2
    else
        nValue2 := nValue1
        nValue2
    nFish := 0.5 * math.log((1 + nValue2) / (1 - nValue2)) + 0.5 * nz(nFish[1])
    nFish
Fisher1 = fish(Len, mult1)
Fisher2 = fish(Len, mult2)
Fisher4 = fish(Len, mult3)
Fisher8 = fish(Len, mult4)

rsiLength = input.int(14, minval=1, group ="Moving Averages")
rsiVal = (ta.rsi(close, rsiLength) - 50) / 10
avg = strategy.position_avg_price

wma(source, length) =>
    sum = 0.0
    for i = 0 to length - 1
        sum := sum + source[i] * (length - i)
    wma = sum / (length * (length + 1) / 2)
    wma

wmaLength = input.int(10, "WMA Length", minval=1, group ="Moving Averages")
wmaClose = wma(close, wmaLength)
// Determine if WMA is bullish or bearish
isWmaBullish = wmaClose > wmaClose[1]
isWmaBearish = wmaClose < wmaClose[1]

//OBV 
src = close
length = input.int(20, title="OBV Length", group="On-Balance Volume")
obv1(src) =>
    change_1 = ta.change(src)
    ta.cum(ta.change(src) > 0 ? volume : change_1 < 0 ? -volume : 0 * volume)*0.01
os = obv1(src)
obv_osc = os - ta.ema(os, length)
obc_color = (obv_osc > 0 ? color.rgb(0, 255, 8) : color.rgb(255, 0, 0))
plot(obv_osc, color=obc_color, style=plot.style_line, title='OBV-Points', linewidth=2)
plot(obv_osc, color=color.new(#b2b5be, 70), title='OBV', style=plot.style_area)
obvBullFilter = input.float(0.1, minval = 0, maxval = 5, step = 0.01, title ="OBV Bullish minimum value", group="On-Balance Volume")
obvBearFilter = input.float(-0.1, minval = -5, maxval = 0, step = 0.01, title ="OBV Bearish minimum value", group="On-Balance Volume")
obvBull = obv_osc > obvBullFilter
obvBear = obv_osc < obvBearFilter

// Add buy/sell signals
ReversalFilterDown = input.float(-0.7, 'Reversal Down TP Filter', -4, 4, step = 0.01, group = "RSI Level Filters", tooltip = "This is defined by taking the RSI value -50 and /10. When all Fisher lines are changing colour, this will SL/TP the long")
ReversalFilterUp = input.float(0.7, 'Reversal Up TP Filter', -4, 4, step = 0.01, group = "RSI Level Filters", tooltip = "This is defined by taking the RSI value -50 and /10. When all Fisher lines are changing colour, this will SL/TP the short")
RSILevelBuyFilter = input.float(1.66, 'RSI Level Buy Filter', -4, 4, step = 0.01, group = "RSI Level Filters", tooltip = "This is defined by taking the RSI value -50 and /10. Consider negative values")
RSILevelSellFilter = input.float(1, 'RSI Level Sell Filter', -4, 4, step = 0.01, group = "RSI Level Filters", tooltip = "This is defined by taking the RSI value -50 and /10. Consider negative values")
//buys - if breaking out and all Fisher are green and RSI filter value is met 
buySignal = Fisher1 > Fisher1[1] and Fisher2 > Fisher2[1] and Fisher4 > Fisher4[1] and Fisher8 > Fisher8[1] and rsiVal > RSILevelBuyFilter and isWmaBullish and obvBull
ReversalUp = Fisher1 > Fisher1[1] and Fisher2 > Fisher2[1] and Fisher4 > Fisher4[1] and Fisher8 > Fisher8[1] and rsiVal > ReversalFilterUp
//sells - if breaking down and all Fisher are green and RSI filter value is met 
sellSignal = Fisher1 < Fisher1[1] and Fisher2 < Fisher2[1] and Fisher4 < Fisher4[1] and Fisher8 < Fisher8[1] and rsiVal < RSILevelSellFilter and isWmaBearish and obvBear
ReversalDown = Fisher1 < Fisher1[1] and Fisher2 < Fisher2[1] and Fisher4 < Fisher4[1] and Fisher8 < Fisher8[1] and rsiVal < ReversalFilterDown


// Buy and Sell conditions
if buySignal and time>timestamp(2022, 06, 01, 09, 30) and barstate.isconfirmed
    strategy.close("Sell", comment = "Close Short")
    strategy.entry("Buy", strategy.long, comment = "Long")

if sellSignal and time>timestamp(2022, 06, 01, 09, 30) and barstate.isconfirmed
    strategy.close("Buy", comment = "Close Long")
    strategy.entry("Sell", strategy.short, comment = "Short")

if ReversalDown
    strategy.close("Buy", comment = "Close Long")

if ReversalUp
    strategy.close("Sell", comment = "Close Short")

//Plotting
//Fisher
plot(Fisher1, color=Fisher1 > nz(Fisher1[1]) ? color.green : color.rgb(255, 0, 0), title='Fisher TF:1')
plot(Fisher2, color=Fisher2 > nz(Fisher2[1]) ? color.green : color.rgb(255, 0, 0), title='Fisher TF:1', linewidth=2)
plot(Fisher4, color=Fisher4 > nz(Fisher4[1]) ? #008000 : #b60000, title='Fisher TF:1', linewidth=3)
plot(Fisher8, color=Fisher8 > nz(Fisher8[1]) ? #004f00 : #b60000, title='Fisher TF:1', linewidth=3)
//RSI
plot(rsiVal, color=rsiVal < 0 ? color.purple : color.yellow, linewidth=2, title='RSI')

//WMA
plot(isWmaBullish ? -2 : na, color=color.rgb(76, 175, 79, 20), linewidth=3, style=plot.style_linebr, title="WMA Bullish")
plot(isWmaBearish ? -2 : na, color=color.rgb(255, 82, 82, 20), linewidth=3, style=plot.style_linebr, title="WMA Bearish")

//Buy/Sell Signals
plotshape(buySignal, title='Buy Signal', location=location.bottom, color=color.new(color.lime, 0), style=shape.triangleup, size=size.small)
plotshape(sellSignal, title='Sell Signal', location=location.top, color=color.new(color.red, 0), style=shape.triangledown, size=size.small)

//Orientation
hline(RSILevelBuyFilter, color=color.rgb(25, 36, 99, 20), linestyle=hline.style_dotted, linewidth=2)
hline(RSILevelSellFilter, color=color.rgb(111, 27, 27, 20), linestyle=hline.style_dotted, linewidth=2)
hline(0, color=color.rgb(181, 166, 144, 39), linestyle=hline.style_dashed, linewidth=2, title = "Zero Line")
hline(1.5, color=color.rgb(217, 219, 220, 50), linestyle=hline.style_dotted, linewidth=2, title = "1.5 // 65 Line")
hline(-1.5, color=color.rgb(217, 219, 220, 50), linestyle=hline.style_dotted, linewidth=2, title = "-1.5 // 35 Line")