
A estratégia de acompanhamento de tendências de auto-adaptação é uma estratégia de negociação quantitativa que combina indicadores de bandas de Brin e indicadores de equilíbrio, ajusta dinamicamente o fator de força da tendência, para realizar o acompanhamento de tendências e paradas. A estratégia usa o indicador de bandas de Brin para calcular a volatilidade dos preços, com base nessa dinâmica, calcula a força da tendência razoável, e em combinação com o indicador ATR para traçar o canal de tendências de auto-adaptação, para realizar o julgamento e acompanhamento de tendências de alta e baixa.
O indicador central da estratégia é a faixa de Brin. A faixa de Brin é composta por um meio, um meio e um meio. A faixa de Brin é uma média móvel simples de n dias.
Então, calcula-se a relação entre a largura de banda de Brin ((up-track - down-track) e a média do trajeto, chamada de fator de força de penetração . Este fator reflete a taxa de flutuação do mercado atual e a força da tendência. Nós definimos o valor máximo e mínimo do fator de força, para evitar que seja exagerado ou exagerado.
Depois de obter um fator de intensidade razoável, em combinação com o indicador ATR, o ATR move-se para cima e para baixo, respectivamente, na trajetória ascendente e descendente*A distância do fator de força forma um canal de tendência que se adapta. Quando o preço de fechamento sobe de baixo para cima, faça mais; quando o preço de fechamento sobe de cima para baixo, faça menos.
Além disso, a estratégia também estabelece um mecanismo de parada de perda. Quando uma posição de multi-cabeça é formada, se o preço cair para o ponto mais baixo da posição de abertura, a parada de parada de parada é eliminada; a posição de cabeça vazia também.
A estratégia tem as seguintes vantagens:
A forma como o fator de intensidade é calculado permite que a estratégia ajuste a largura do canal de acordo com a dinâmica da taxa de flutuação do mercado, ampliando o canal em mercados de tendência alta e diminuindo o canal em mercados de turbulência, para se adaptar a diferentes tipos de mercados.
A frequência de operação é moderada. Em comparação com a estratégia de média móvel simples, a estratégia de correlação de canais de correlação é menos frequente, evitando a abertura de posições desnecessariamente freqüente.
A entrada é precisa. Esta entrada de ruptura com as pistas pode filtrar o ruído do mercado de forma eficaz, garantindo que a abertura da tendência seja capturada com uma alta probabilidade.
Há um mecanismo de parada de prejuízos. O método de parada de prejuízos incorporado pode controlar efetivamente os prejuízos individuais, o que é uma grande vantagem da estratégia.
A estratégia também apresenta alguns riscos:
Os parâmetros são mais sensíveis. O ciclo n e o múltiplo k da faixa de Bryn têm uma grande influência nos resultados, exigindo testes repetidos para encontrar a melhor combinação de parâmetros.
Quando os preços são fortemente flutuantes, a trajetória da faixa de borla se estende rapidamente, resultando na impossibilidade de acompanhar a tendência. Nesse caso, é necessário suspender a estratégia e esperar que a trajetória se converja para voltar a funcionar.
Às vezes, há sinais errados. A estratégia de Brin não é perfeita, e há sinais errados que exigem perdas correspondentes.
A estratégia de parar o prejuízo é mais simples. O prejuízo da estratégia considera apenas o preço máximo e mínimo após a abertura da posição, sem a combinação de métodos de parar mais complexos, como a taxa de flutuação, que pode ser demasiado radical ou conservador e precisa ser otimizado.
A estratégia também precisa ser melhorada em alguns aspectos:
Teste a eficácia de diferentes moedas e diferentes parâmetros de período. Os parâmetros da estratégia podem ser otimizados para diferentes moedas e períodos, aumentando a adaptabilidade da estratégia.
Otimização do mecanismo de parada de perda. Pode-se introduzir parada móvel, parada de oscilação, parada de rastreamento, etc., para tornar a parada mais inteligente.
Em combinação com outros indicadores filtrar entrada. Pode ser adicionado como MACD, KDJ e outros indicadores, para evitar que a faixa de Brin produzem sinais errados no mercado de oscilação do disco lateral.
Aumentar o mecanismo de gerenciamento de posições. Implementar maneiras de gerenciamento como o rastreamento de stop-loss, o aumento de posição em pirâmide e a posição de proporção fixa pode melhorar a taxa de retorno da estratégia.
Optimizar o feedback. Expandindo o tempo de resposta, ajustando os parâmetros, analisando o relatório de feedback, etc., para verificar a eficácia da estratégia e encontrar os parâmetros otimizados.
A estratégia de acompanhamento de tendências de auto-adaptação é uma estratégia quantitativa mais madura do que a estratégia em geral. Ela usa a tendência de captura dinâmica do indicador de Brin, em conjunto com o indicador ATR para construir o canal de adaptação e realizar o julgamento da tendência de hiperespaço. Ao mesmo tempo, o mecanismo de controle de risco de parada incorporado.
/*backtest
start: 2023-12-15 00:00:00
end: 2024-01-14 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("[Th] Adaptive Trend v1", shorttitle="[TH] Adaptive Trend", overlay=true)
Pd=input(2, minval=1,maxval = 100, title="Period")
Bw=input(50, minval=1,maxval = 100, title="Bandwidth")
minFactor = input(0.5, minval=0.1, maxval=1.0, step=0.1, title="Minimum Factor")
maxFactor = input(3.00, minval=0.2, maxval=5.0, step=0.1, title="Maximum Factor")
plot_trend=input(true, title="Plot trend")
plot_losscut = input(true, title="Plot losscut")
/////////////// Calculate the BB's ///////////////
basisBB = ema(close, 20)
devBB = 2 * stdev(close, 20)
upperBB = basisBB + devBB
lowerBB = basisBB - devBB
//plot(upperBB)
//plot(lowerBB)
///////////// Trend ////////////////////////////
rawFactor = ((upperBB-lowerBB)/basisBB)*Bw
Factor = rawFactor > minFactor ? (rawFactor > maxFactor ? maxFactor : rawFactor) : minFactor
Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))
TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
TrendUpPlot=plot(plot_trend?TrendUp:na, style=line, color=green, linewidth=1)
TrendDownPlot=plot(plot_trend?TrendDown:na, style=line, color=red, linewidth=1)
Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
fill(TrendUpPlot,TrendDownPlot, color=Trend == 1 ? green : red, transp=80)
sig_trend_long = Trend[1] == -1 and Trend == 1
sig_trend_short = Trend[1] == 1 and Trend == -1
///////////// Loss Cut ////////////////////////////
price_cut = sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1] ? open : price_cut[1]
current_trend = sig_trend_long[1] ? 1 : (sig_trend_short[1] ? -1 : current_trend[1])
sig_loss_cut = sig_trend_long or sig_trend_short ? false : ( current_trend == 1 ? (price_cut > low) : (current_trend == -1 ? (price_cut < high) : false) )
has_position = sig_loss_cut ? false : ((sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1]) ? true : has_position[1])
sig_reentry_long = not has_position and current_trend == 1 and low > price_cut
sig_reentry_short = not has_position and current_trend == -1 and high < price_cut
bgcolor(plot_losscut and ( not has_position or sig_loss_cut ) ? silver : white, transp=70)
plotshape(plot_losscut and sig_loss_cut and current_trend == 1? 1 : na, color=green, style=shape.xcross, location=location.belowbar ,size=size.tiny)
plotshape(plot_losscut and sig_loss_cut and current_trend == -1? 1 : na, color=red, style=shape.xcross, location=location.abovebar ,size=size.tiny)
LossCutPlot = plot(plot_losscut ? price_cut : na, linewidth=4, color=black, transp=60)
fill(TrendDownPlot, LossCutPlot, color=silver, transp=90)
plotshape(sig_trend_long or sig_reentry_long ? Trend : na, title="Up Entry Arrow", color=green, style=shape.triangleup, location=location.belowbar, size=size.tiny)
plotshape(sig_trend_short or sig_reentry_short ? Trend : na, title="Down Entry Arrow",color=red, style=shape.triangledown, size=size.tiny)
///////////// Strategy ////////////////////////////
if true
strategy.entry('long', long=strategy.long, comment='Long', when=sig_trend_long or sig_reentry_long)
strategy.entry('short', long=strategy.short, comment='Short', when=sig_trend_short or sig_reentry_short)
if(current_trend == 1)
strategy.close('long', when=sig_loss_cut == true)
//strategy.exit('lc',from_entry='long', stop=price_cut)
if( current_trend == -1 )
strategy.close('short', when=sig_loss_cut == true)
//strategy.exit('sc',from_entry='short', stop=price_cut)