Estratégia de dupla reversão do equilíbrio

Autora:ChaoZhang, Data: 2023-12-15 16:56:20
Tags:

img

Resumo

A estratégia de equilíbrio de reversão dupla é uma estratégia combinada que utiliza estratégias de reversão e filtragem de decomposição de modo empírico (EMD).

Princípio da estratégia

123 Sistema de inversão

O sistema de reversão 123 tem origem no livro How I Tripped My Money in the Futures Market de Ulf Jensen. Ele pertence ao tipo de estratégias de reversão. Ele vai longo quando o preço de fechamento é maior do que o fechamento anterior por 2 dias consecutivos e o estocástico lento de 9 dias está abaixo de 50. Ele vai curto quando ocorre a configuração oposta.

Descomposição em modo empírico (EMD)

O EMD é um método de análise de dados adaptativo. Ele pode efetivamente decompor os dados em diferentes componentes de frequência e extrair a tendência de longo prazo. Aqui, definimos o comprimento para 20, delta para 0,5 e fração para 0,1 para gerar sinais de negociação com base nos componentes de frequência de preço.

Combinação de sinais

A estratégia de balanço de reversão dupla combina os sinais de negociação do sistema de reversão 123 e da EMD. Ele confirma entradas apenas quando os sinais de ambos os sistemas concordam.

Análise das vantagens

A estratégia de equilíbrio de reversão dupla aproveita as vantagens de ambas as estratégias de reversão e técnicas de processamento de sinal digital.

Ele também introduz o padrão 123 para evitar batidas indesejáveis e os parâmetros EMD configurados corretamente ajudam a filtrar algum ruído.

Análise de riscos

O maior risco dessa estratégia vem do fracasso da reversão. Embora o padrão 123 reduza essa probabilidade, a incerteza da negociação de reversão permanece alta. Além disso, o método EMD pode falhar durante mercados extremamente voláteis.

Para controlar esses riscos, os parâmetros do sistema de reversão podem ser ajustados para produzir sinais mais confiáveis. Diferentes métodos de filtragem também podem ser testados em vez de EMD para obter um melhor desempenho de filtragem. Além disso, é necessário manter pequenos tamanhos de posição para limitar as perdas.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Teste diferentes conjuntos de parâmetros para o sistema de inversão para encontrar o ideal

  2. Tente diferentes métodos de filtragem digital, por exemplo, transformação wavelet, transformação de Hilbert etc.

  3. Adicionar stop loss para controlar a perda de uma única transação

  4. Incorporar outros indicadores para garantir uma maior precisão direcional

  5. Otimizar modelos de gestão de dinheiro como o dimensionamento de posições

Resumo

A estratégia de balanço de reversão dupla combina os pontos fortes das estratégias de reversão e técnicas de processamento de sinal digital. Com ajuste adequado de parâmetros e controle de risco, gera um desempenho comercial estável.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 30/06/2020
// 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
// The related article is copyrighted material from Stocks & Commodities Mar 2010
//
// 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

Empirical(Length,Delta,Fraction) =>
    pos = 0
    xBandpassFilter = 0.0
    xPeak = 0.0
    xValley =0.0
    xPrice = hl2
    beta = cos(3.1415 * (360 / Length) / 180)
    gamma = 1 / cos(3.1415 * (720 * Delta / Length) / 180)
    alpha = gamma - sqrt(gamma * gamma - 1)
    xBandpassFilter := 0.5 * (1 - alpha) * (xPrice - xPrice[2]) + beta * (1 + alpha) * nz(xBandpassFilter[1]) - alpha * nz(xBandpassFilter[2])
    xMean = sma(xBandpassFilter, 2 * Length)
    xPeak :=  iff (xBandpassFilter[1] > xBandpassFilter and xBandpassFilter[1] > xBandpassFilter[2], xBandpassFilter[1], nz(xPeak[1])) 
    xValley :=  iff (xBandpassFilter[1] < xBandpassFilter and xBandpassFilter[1] < xBandpassFilter[2], xBandpassFilter[1], nz(xValley[1])) 
    xAvrPeak = sma(xPeak, 50)
    xAvrValley = sma(xValley, 50)
    nAvrPeak = Fraction * xAvrPeak
    nAvrValley = Fraction * xAvrValley
    pos := iff(xMean > nAvrPeak and xMean > nAvrValley, 1,
    	   iff(xMean < nAvrPeak and xMean < nAvrValley, -1, nz(pos[1], 0)))
    pos

strategy(title="Combo Backtest 123 Reversal & Empirical Mode Decomposition", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthEMD = input(20, minval=1)
Delta = input(0.5)
Fraction = input(0.1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posEmpirical = Empirical(LengthEMD,Delta,Fraction)
pos = iff(posReversal123 == 1 and posEmpirical == 1 , 1,
	   iff(posReversal123 == -1 and posEmpirical == -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.