Estratégia de captura de tendências da HLHB

Autora:ChaoZhang, Data: 2023-09-28 11:44:04
Tags:

Resumo

A estratégia visa capturar tendências de curto prazo usando o crossover EMA e o RSI como sinais de negociação, com filtro ADX para entrar em negócios e stop loss para bloquear lucros.

Estratégia lógica

A estratégia baseia-se nos seguintes indicadores e condições para gerar sinais de negociação:

  • EMA rápida de 5 períodos: linha azul
  • EMA lenta de 10 períodos: linha vermelha
  • RSI de 10 períodos aplicado ao preço médio (H+L)/2
  • ADX de 14 períodos

Sinais de entrada:

  • Long: quando a EMA rápida cruza acima da EMA lenta a partir de baixo e o RSI cruza acima de 50 a partir de baixo
  • Curto: quando a EMA rápida cruza abaixo da EMA lenta de cima e o RSI cruza abaixo de 50 de cima
  • Somente receber sinais quando o ADX for > 25

Sinais de saída:

  • Usar stop loss de rastreamento, 150 pips de distância de rastreamento e 400 pips tomar lucro
  • Fechar negociação quando ocorre um novo sinal
  • Fechar todas as transacções antes do fim da semana

A estratégia combina crossover EMA, RSI overbought/oversold e força da tendência ADX para criar regras de entrada sólidas.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. EMA crossover para a direção da tendência. Cruzamento ascendente sugere tendência ascendente enquanto cruzamento descendente tendência descendente. Pode identificar mudanças de tendência.

  2. A adição do RSI filtra alguns falsos sinais de ruptura. zonas sobrevendidas/supercompradas indicam retrações de curto prazo e evitam entradas desnecessárias nos mercados de intervalo.

  3. ADX para garantir a existência de uma verdadeira tendência.

  4. A distância de trail de 150 pips e a meta de lucro de 400 pips seguem a tendência.

  5. O encerramento de todas as posições antes do fim de semana evita os riscos do fim de semana e reforça a regularidade das negociações.

Análise de riscos

A estratégia apresenta igualmente os seguintes riscos:

  1. Os sistemas de cruzamento EMA são propensos a sinais de ruptura falsos, levando a perdas.

  2. O RSI só identifica níveis de sobrecompra/supervenda, não inversões de tendência.

  3. ADX apenas julga a existência da tendência, o tempo de entrada pode estar desligado.

  4. Os níveis fixos de stop loss e take profit podem não se adaptar às alterações do mercado.

  5. Considerar fechamentos diários ou saídas condicionais.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Teste diferentes combinações de EMA para encontrar comprimentos ideais.

  2. Tente diferentes parâmetros do RSI ou combine com o KDJ para melhor julgamento sobrecomprado/supervendido.

  3. Otimizar os parâmetros ADX para uma filtragem mais adequada e uma qualidade de entrada mais elevada.

  4. Combinação de ensaios de paradas fixas e tracção dinâmica baseada em ATR.

  5. Para efeitos do cálculo do valor da posição em risco, o valor da posição em risco deve ser calculado de acordo com o método de cálculo da posição em risco, de acordo com o método de cálculo da posição em risco.

  6. Introduzir o dimensionamento das posições com base na volatilidade para ajustamento dinâmico com base na volatilidade do mercado.

  7. Explorar técnicas de aprendizagem de máquina para otimizar automaticamente parâmetros de adaptabilidade.

Resumo

Em resumo, esta é uma estratégia simples de tendência, identificando a direção da tendência com cruzamento EMA, filtrando com RSI, exigindo tendência com ADX e trailing stop for profit.


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

//@version=3
strategy("Hucklekiwi Pip - HLHB Trend-Catcher System", shorttitle="HLHB TCS", overlay=true,
  default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// -----------------------------------------------------------------------------
// HLHB Trend-Catcher System as described on BabyPips.com
//
// Strategy Author: Hucklekiwi Pip 
// Coded By: Backtest Rookies
// -----------------------------------------------------------------------------
//
// Refs:
//   - Original System: https://www.babypips.com/trading/forex-hlhb-system-explained
//   - Updated System: https://www.babypips.com/trading/forex-hlhb-system-20190311
//
//
// Description (From Hucklekiwi Pip)
// 
//   The HLHB System simply aims to catch short-term forex trends.
//   It is patterned after the Amazing Crossover System that Robopip once backtested.
//   In fact, it was one of his highest-scoring mechanical systems in 2014! 
//   The system can be applied to any pair, but since I’m into major pairs, 
//   I’m applying it to the 1-hour charts of EUR/USD and GBP/USD.
// -----------------------------------------------------------------------------
// STRATEGY REQUIREMENTS
// -----------------------------------------------------------------------------
//
// Setup
// -----
//  - EUR/USD 1-hour chart
//  - GBP/USD 1-hour chart
//  - 5 EMA: blue line
//  - 10 EMA: red line
//  - RSI (10) applied to the median price (HL/2)
//  - ADX (14)
//
// Entry
// -----
//  - BUY when the 5 EMA crosses above the 10 EMA from underneath and the RSI 
//    crosses above the 50.0 mark from the bottom.
//  - SELL when the 5 EMA crosses below the 10 EMA from the top and the RSI 
//    crosses below the 50.0 mark from the top.
//  - Make sure that the RSI did cross 50.0 from the top or bottom and not just 
//    ranging tightly around the level.
//  - ADX > 25 for Buy and Sells
//
// Exit
// ----
//  - Use a 50-pip trailing stop and a 200-pip profit target. This increases the 
//    chances of the system riding longer trends.
//  - Close the trade when a new signal materializes.
//  - Close all trades by the end of the week.
// 
// -----------------------------------------------------------------------------

// Strategy Varaibles
// -------------------
ema_fast_len = input(5, title='Fast EMA Length')
ema_slow_len = input(10 , title='Slow EMA Length')
rsi_len = input(10, title='Slow EMA Length')
session_end_hour = input(16, minval=0, maxval=23, title='Weekly Session End (Hour)')
session_end_minute = input(0, minval=0, maxval=59, title='Weekly Session End (Minute)')
// Targets taken from the update post which states 150 & 400 instead of 50 and 200.
profit_target = input(400, title='Profit Target (Pips/Points)')
trailing_stop_dist = input(150, title='Trailing Stop Distance (Pips/Points)')
adx_filt = input(true, title='User ADX Filter')
adx_min = input(25, minval=0, title='Minimum ADX Level')
adx_len = input(14, title="ADX Smoothing")
di_len = input(14, title="DI Length")

// Setup the Indicators
ema_fast = ema(close, ema_fast_len)
ema_slow = ema(close, ema_slow_len)
rsi_ind = rsi(close, rsi_len)

// ADX
adx_dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]

adx_adx(dilen, adxlen) =>
	[plus, minus] = adx_dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]

[adx_sig, adx_plus, adx_minus] = adx_adx(di_len, adx_len)


// Strategy Logic
ema_long_cross = crossover(ema_fast, ema_slow)
ema_short_cross = crossunder(ema_fast, ema_slow)
rsi_long_cross = crossover(rsi_ind, 50)
rsi_short_cross = crossunder(rsi_ind, 50)
adx_check = adx_filt ? adx_sig >= adx_min : true

longCondition = ema_long_cross and rsi_long_cross and adx_check
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = ema_short_cross and rsi_short_cross and adx_check
if (shortCondition)
    strategy.entry("Short", strategy.short)

strategy.exit("SL/TP", "Long", profit=profit_target,  loss=trailing_stop_dist, trail_points=trailing_stop_dist)  
strategy.exit("SL/TP", "Short", profit=profit_target, loss=trailing_stop_dist, trail_points=trailing_stop_dist)  

// Friday = 6
// If we miss the hour for some reason (due to strange timeframe), then close immediately
// Else if we are on the closing hour, then check to see if we are on or passed the close minute
close_time = dayofweek == 6 ? 
  hour[0] > session_end_hour ? true :
  hour[0] == session_end_hour ?
      minute[0] >= session_end_minute :
  false : false

strategy.close_all(when=close_time)

// Plotting
plot(ema_fast, color=blue, title="Fast EMA")
plot(ema_slow, color=red, title="Slow EMA")

plotshape(rsi_long_cross, style=shape.triangleup, size=size.tiny, location=location.belowbar, color=green, title='RSI Long Cross Marker')
plotshape(rsi_short_cross, style=shape.triangledown, size=size.tiny, location=location.abovebar, color=red, title='RSI Short Cross Marker')

// ADX Filter Highlight
bgcolor(adx_filt and adx_check ? orange : na, transp=90)

Mais.