Estratégia de Trailing Stop de acompanhamento de tendência


Data de criação: 2024-01-17 11:19:06 última modificação: 2024-01-17 11:19:06
cópia: 0 Cliques: 375
1
focar em
1235
Seguidores

Estratégia de Trailing Stop de acompanhamento de tendência

Visão geral

A estratégia de parada móvel de rastreamento de tendências é uma estratégia de negociação quantitativa que combina indicadores de determinação de tendências e mecanismos de parada móvel. A estratégia usa indicadores de tendência super para determinar a direção da tendência atual e usa linhas de parada móveis para acompanhar a mudança de preços em tempo real, para monitorar a tendência e controlar o risco.

Princípio da estratégia

A estratégia primeiro calcula o indicador de super-tendência para determinar se a tendência atual é ascendente ou descendente. O indicador de super-tendência combina o indicador ATR com o ponto central para determinar com mais precisão a direção da tendência. Se o indicador de super-tendência for considerado ascendente, gerará um sinal de compra; Se for considerado uma tendência de queda, gerará um sinal de venda.

Ao gerar um sinal de compra, a estratégia abre mais posições; ao mesmo tempo, ela calcula uma linha de parada móvel em tempo real, que é calculada como o ponto central menos o valor do indicador ATR. Desde que o preço de fechamento atual esteja acima da linha de parada, a linha de parada será movida em tempo real e sempre permanecerá em uma posição de parada razoável.

Esta estratégia combina o indicador ADX com o indicador RSI para filtrar os sinais de negociação inadequados. A posição é aberta somente quando o ADX é maior do que o limite estabelecido e o RSI está em um nível razoável.

Análise de vantagens

A maior vantagem da estratégia é a capacidade de ter uma boa compreensão da direção da tendência e de acompanhar a tendência. O indicador de tendência super é mais preciso do que a média móvel simples e pode determinar rapidamente o ponto de inflexão. Ao mesmo tempo, o mecanismo de parada móvel pode ajustar automaticamente o ponto de parada, bloquear o máximo de lucro e controlar eficazmente o risco.

Além disso, a estratégia inclui os indicadores ADX e RSI para filtragem, evitando erros de negociação em períodos de maior volatilidade do mercado. Os indicadores ADX garantem tendência suficiente, e os indicadores RSI evitam o fenômeno de sobrecompra e sobrevenda, aumentando a probabilidade de lucro.

Análise de Riscos

O maior risco da estratégia é a probabilidade de um indicador de tendência errar e de um indicador de tendência super emitir um sinal errado. Embora o indicador de tendência super seja melhor do que a média móvel simples, é inevitável que ele faça erros de julgamento em situações complexas.

Além disso, a configuração inadequada dos parâmetros da estratégia também traz alguns riscos. Por exemplo, os parâmetros do ATR causaram um ajuste muito radical da linha de parada; A configuração inadequada dos parâmetros do ADX e do RSI também pode perder oportunidades de negociação ou aumentar a probabilidade de negociações erradas. Isso requer um grande histórico de retrospectiva para encontrar o parâmetro ideal.

Direção de otimização

A estratégia pode ser melhorada em alguns aspectos:

  1. Tente outros indicadores de tendência, como DMI, KDJ, etc., combinados com indicadores de tendência super, formando um sistema de julgamento de colagem de múltiplos fatores, que pode melhorar a precisão de julgamento.

  2. A adição de módulos de otimização de parâmetros adaptativos baseados em aprendizado de máquina, permitindo que os parâmetros ATR, ADX, RSI, etc. possam ser ajustados ao mercado em tempo real, em vez de simples valores fixos.

  3. A introdução de indicadores RSI alternativos, como o indicador de emoção, para filtrar os sinais. O indicador RSI não é ideal para julgar situações complexas, enquanto os indicadores de emoção social e outros podem julgar melhor o calor do mercado.

  4. Adicionar módulo de gerenciamento de posição, ajustando dinamicamente o tamanho da posição de acordo com a distância da linha de parada do preço atual. Quanto mais longe da linha de parada, maior será a posição apropriada para aumentar a margem de lucro.

Resumir

A estratégia de parada móvel de rastreamento de tendências usa métodos como análise de tendências, parada móvel e filtragem de múltiplos fatores. Ao mesmo tempo em que capta tendências, controla rigorosamente o risco. É uma estratégia quantitativa mais madura.

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

//@version=5
strategy("Bendre ADX Sup Trend", overlay = true)

///////////////////////////
// SuperTrend + Pivot Point
//////////////////////////

src =  input(close, title="EMA Source")
PPprd = input(defval = 2, title="Pivot Point Period")
AtrFactor=input(defval = 2, title = "ATR Factor")
AtrPd=input(defval = 18, title = "ATR Period")

StartDate = input(timestamp("1 Dec 2022"), title="Start Date")
EndDate = input(timestamp("12 Jan 2023"), title="End Date")

var float ph = na
var float pl = na
ph := ta.pivothigh(PPprd, PPprd)
pl :=ta.pivotlow(PPprd, PPprd)

float center = na
center := center[1]
// float lastpp = ph ? ph : pl ? pl : 0.0
float lastpp = na(ph) ? na(pl) ? na : pl : ph

if lastpp > 0
    if na(center)
        center := lastpp
    else
        center := (center * 2 + lastpp) / 3

Up = center - (AtrFactor * ta.atr(AtrPd))
Dn = center + (AtrFactor * ta.atr(AtrPd))

var float TUp = na
var float TDown = na
Trend = 0
TUp := close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up
TDown := close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn
Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// Lines
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")

bsignalSSPP = close > Trailingsl
ssignalSSPP = close < Trailingsl


///////
// ADX
//////

lenADX = 14
th = 14
TrueRange = math.max(math.max(high-low, math.abs(high-nz(close[1]))), math.abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? math.max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? math.max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/lenADX) + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/lenADX) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/lenADX) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = math.abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = ta.sma(DX, lenADX)


//////
// MA
/////

lenMA = 21
srcMA = input(close, title="Source")
// offsetMA = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
offsetMA = input(0, title="Offset")
outMA = ta.sma(srcMA, lenMA)

//
// RSI
//
length = input( 14 )
overSold = input( 30 )
overBought = input( 65 )
price = close
vrsi = ta.rsi(price, length)


// Buy - Sell Entries
buy = bsignalSSPP and outMA < close and ADX > th
sell = ssignalSSPP 


if (buy and vrsi > overBought)
    // .order // Tuned version
    strategy.entry("Buy", strategy.long)
    // strategy.close("Sell", "close Sell")

if (sell) and (strategy.position_size > 0)
    // strategy.entry("Sell", strategy.short)
    strategy.close("Buy", "Close Buy")

// if(sell and vrsi < overSold )
//     strategy.entry("Sell", strategy.short)

// if(buy) and (strategy.position_size > 0)
//     strategy.close("Sell", "close Sell")