Estratégia combinada de inversão de tendência e indicador líder de Ehlers

Autora:ChaoZhang, Data: 2023-11-07 16:10:26
Tags:

img

Resumo

Esta estratégia combina uma estratégia de inversão de tendência e uma estratégia de indicador líder de Ehlers para gerar sinais de negociação mais confiáveis.

Estratégia lógica

Estratégia de inversão da tendência

Esta estratégia é do livro How I Tripled My Money in the Futures Market de Ulf Jensen, página 183. É uma estratégia de tipo de reversão. Vai longo quando o fechamento é maior do que o fechamento anterior por 2 dias consecutivos e a linha lenta estocástica de 9 dias está abaixo de 50. Vai curto quando o fechamento é menor do que o fechamento anterior por 2 dias consecutivos e a linha rápida estocástica de 9 dias está acima de 50.

Estratégia de indicadores de liderança da Ehlers

Esta estratégia traça um único preço sintético detendido diário (DSP) e um indicador líder diário de Ehlers (ELI) usando dados intradiários. O DSP captura o ciclo dominante do preço e é calculado subtraindo um filtro Butterworth de 3 pólos de um filtro de 2 pólos. O ELI dá indicação avançada de pontos de virada cíclicos e é calculado subtraindo a média móvel simples do DSP do próprio DSP. Os sinais de compra e venda são gerados quando o ELI cruza acima ou abaixo do DSP.

Análise das vantagens

A maior vantagem desta estratégia combinada é a combinação de identificação de reversão de tendência e detecção de ponto de virada cíclica para sinais mais confiáveis.

Outra vantagem é a flexibilidade no ajuste de parâmetros. Os parâmetros do indicador estocástico podem ser ajustados com base nas condições do mercado.

Análise de riscos

O maior risco desta estratégia é a falta de tendências persistentes. Uma vez que a estratégia espera que os sinais de reversão entrem, ela pode perder fortes movimentos iniciais da tendência. Os sinais de reversão também podem se tornar falhas que resultam em serem presos.

As soluções consistem em ajustar parâmetros para encurtar o período de detecção de reversão para capturar a reversão da tendência em tempo hábil.

Orientações de otimização

A estratégia pode ser melhorada nos seguintes aspectos:

  1. Introduzir stop loss para controlar a perda de uma única transação.

  2. Otimizar os parâmetros para ajustar os períodos de sinal de reversão para diferentes ambientes de mercado.

  3. Adicionar outros filtros de indicadores para melhorar a qualidade do sinal e reduzir os falsos sinais.

  4. Adicionar módulos de dimensionamento de posições e gestão de riscos.

  5. Testar parâmetros em diferentes produtos para encontrar ajustes otimizados.

  6. Adicionar módulos de aprendizagem de máquina para ajuste de parâmetros adaptativos.

Resumo

A estratégia combina inversão de tendência e detecção de ponto de virada cíclica para uma entrada mais confiável no mercado. A maior vantagem é a alta qualidade e flexibilidade do sinal. O principal risco é a falta de tendências iniciais, que podem ser mitigadas por meio de ajuste de parâmetros e stop loss. Melhorias futuras podem se concentrar em stop loss, otimização de parâmetros, filtragem de sinal, etc. para tornar a estratégia robusta em todos os ambientes de mercado.


/*backtest
start: 2023-10-07 00:00:00
end: 2023-11-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 26/11/2019
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// This Indicator plots a single
// Daily DSP (Detrended Synthetic Price) and a Daily ELI (Ehlers Leading
// Indicator) using intraday data.
// Detrended Synthetic Price is a function that is in phase with the dominant
// cycle of real price data. This one is computed by subtracting a 3 pole Butterworth
// filter from a 2 Pole Butterworth filter. Ehlers Leading Indicator gives an advanced
// indication of a cyclic turning point. It is computed by subtracting the simple
// moving average of the detrended synthetic price from the detrended synthetic price.
// Buy and Sell signals arise when the ELI indicator crosses over or under the detrended
// synthetic price.
// See "MESA and Trading Market Cycles" by John Ehlers pages 64 - 70. 
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

D_ELI(Length) =>
    pos = 0.0
    xHL2 = security(syminfo.tickerid, 'D', hl2)
    xEMA1 = ema(xHL2, Length)
    xEMA2 = ema(xHL2, 2 * Length)
    xEMA1_EMA2 = xEMA1 - xEMA2
    xResultEMA = ema(xEMA1_EMA2, Length)
    nRes = xEMA1_EMA2 - xResultEMA
    pos:= iff(nRes > 0, 1,
	       iff(nRes < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & D_ELI (Ehlers Leading Indicator)", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthELI = input(7, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posD_ELI = D_ELI(LengthELI)
pos = iff(posReversal123 == 1 and posD_ELI == 1 , 1,
	   iff(posReversal123 == -1 and posD_ELI == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Mais.