O recurso está a ser carregado... Carregamento...

Momentum Breakout Estratégia de rastreamento bidirecional

Autora:ChaoZhang, Data: 2023-12-18 10:47:46
Tags:

img

Resumo

Esta estratégia combina indicadores de impulso e indicadores de rastreamento bidirecionais para capturar sinais de ruptura em tendências fortes para rastreamento de tendências.

Estratégia lógica

  1. O indicador HiLo Activator calcula o preço do ponto médio usando o ponto médio do mais alto e do mais baixo. Quando os preços quebram acima do ponto médio, um sinal de compra é gerado. Quando os preços quebram abaixo do ponto médio, um sinal de venda é gerado.

  2. O índice direcional médio (ADX) é usado para medir a força da tendência. Quanto maior o valor do ADX, mais forte a tendência.

  3. Os indicadores direcionais DI+ e DI- representam, respectivamente, a força da tendência ascendente e da tendência descendente.

  4. Os sinais de compra são gerados quando os preços ultrapassam o ponto médio, o ADX é superior ao limiar e o DI+ é superior ao limiar.

Análise das vantagens

Esta estratégia combina as vantagens dos indicadores de impulso e de tendência para captar breakouts precoces e seguir as tendências de perto.

Em comparação com o uso de indicadores de momento sozinhos, esta estratégia adiciona avaliação de força de tendência para filtrar sinais e melhorar a lucratividade.

Em geral, a estratégia pode acompanhar as tendências sem problemas, entrar e sair em tempo hábil e evitar ficar preso em consolidações, reduzindo simultaneamente as perdas decorrentes de inversões de tendência.

Análise de riscos

Esta estratégia tem alguns riscos de reversão temporária dos preços gerando sinais errados.

Para reduzir os riscos, ajuste os parâmetros do HiLo Activator para aumentar a faixa de fuga.

Os usuários também devem notar diferenças entre produtos e ambientes de mercado.

Orientações de otimização

As principais formas de otimizar esta estratégia incluem:

  1. Ajuste o período do HiLo Activator e os níveis de gatilho para equilibrar os riscos e o tempo.

  2. Ajustar o período e o limiar do ADX para equilibrar a qualidade e a frequência do sinal.

  3. Estabelecer limiares separados para DI+ e DI- para acomodar as diferenças entre tendências ascendentes e descendentes.

  4. Adicionar estratégias de stop loss com níveis de stop loss para controlar a perda de uma única negociação.

  5. Combinar com outros indicadores auxiliares para melhorar a estabilidade geral.

Conclusão

Esta estratégia considera tanto o impulso quanto os indicadores de tendência para gerar sinais durante tendências fortes. Tem a vantagem de seguir as tendências de forma suave e próxima, adequada para capturar oportunidades de tendência precoces. Também tem habilidades razoáveis de controle de risco para reduzir perdas de sinais errados e whipssaws. Com ajuste de parâmetros e adições de stop loss, ele pode alcançar um desempenho constante. Como uma estratégia de rastreamento de tendências versátil que se encaixa em diferentes produtos e mercados, merece boa atenção e aplicação dos traders quant.


/*backtest
start: 2022-12-11 00:00:00
end: 2023-12-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("HiLo Activator with ADX", shorttitle="HASB_ADX", overlay=true)

// Parameters for the HiLo Activator
length_ha = input(14, title="HiLo Activator Period")
offset_ha = input(0, title="Offset")
trigger_ha = input(1, title="Trigger for Buy/Sell")

// Parameters for ADX
adx_length = input(14, title="ADX Period", minval=1)
adx_threshold = input(25, title="ADX Threshold")
di_threshold = input(50, title="DI Threshold")

// Parameter for choosing the number of candles for backtest
backtest_candles = input(1000, title="Number of Candles for Backtest", minval=1)

// Function to get backtest data
getBacktestData() =>
    var float data = na
    if bar_index >= backtest_candles
        data := security(syminfo.tickerid, "D", close[backtest_candles])
    data

// HiLo Activator calculations
ha = (highest(high, length_ha) + lowest(low, length_ha)) / 2

// ADX calculations
trh = high - high[1]
trl = low[1] - low
tr = max(trh, trl)
atr = sma(tr, adx_length)
plus_dm = high - high[1] > low[1] - low ? max(high - high[1], 0) : 0
minus_dm = low[1] - low > high - high[1] ? max(low[1] - low, 0) : 0
smoothed_plus_dm = sma(plus_dm, adx_length)
smoothed_minus_dm = sma(minus_dm, adx_length)
di_plus = 100 * (smoothed_plus_dm / atr)
di_minus = 100 * (smoothed_minus_dm / atr)
dx = 100 * abs(di_plus - di_minus) / (di_plus + di_minus)
adx = sma(dx, adx_length)

// Buy and Sell signals based on HiLo Activator and ADX
signalLong = crossover(close, ha) and adx > adx_threshold and di_plus > di_threshold
signalShort = crossunder(close, ha) and adx > adx_threshold and di_minus > di_threshold

// Plot HiLo Activator and ADX
plot(ha, color=color.blue, title="HiLo Activator")
plot(offset_ha, color=color.red, style=plot.style_histogram, title="Offset")
plot(adx, color=color.purple, title="ADX")

// Backtest strategy
strategy.entry("Buy", strategy.long, when = signalLong)
strategy.entry("Sell", strategy.short, when = signalShort)
strategy.close("Buy", when = signalShort)
strategy.close("Sell", when = signalLong)

// Accuracy percentage
var accuracy = 0.0
var totalTrades = 0
var winningTrades = 0

if (signalLong or signalShort)
    totalTrades := totalTrades + 1

if (signalLong and (not na(signalLong[1]) and (not signalLong[1])))
    winningTrades := winningTrades + 1

if (signalShort and (not na(signalShort[1]) and (not signalShort[1])))
    winningTrades := winningTrades + 1

accuracy := totalTrades > 0 ? (winningTrades / totalTrades) * 100 : 0

// Plot accuracy percentage on the chart
plot(accuracy, title="Accuracy Percentage", color=color.purple, style=plot.style_histogram)


Mais.