Estratégia de ruptura da média móvel dupla

Autora:ChaoZhang, Data: 2023-12-18 10:24:08
Tags:

img

Resumo

A estratégia de ruptura de reversão de média móvel dupla é uma estratégia combinada que incorpora tanto a estratégia de reversão 123 quanto a estratégia de divergência de média móvel e preço.

Estratégia lógica

A estratégia de ruptura da média móvel dupla consiste em dois componentes:

  1. 123 Estratégia de reversão

    A 123 Reversal Strategy gera sinais de negociação baseados em dois dias consecutivos de reversão de preço de fechamento (ou seja, fechamento mais alto seguido de fechamento mais baixo; ou fechamento mais baixo seguido de fechamento mais alto), combinado com a linha K do Oscilador Estocástico de 9 dias sendo abaixo/acima de um certo nível (padrão 50).

  2. Estratégia de divergência de preços e médias móveis

    A Estratégia de Divergência Price & MA calcula a diferença percentual entre o preço e uma média móvel de determinado período (default 14).

A estratégia de ruptura de reversão de média móvel dupla só gera sinais de negociação reais quando os sinais de ambas as estratégias acima estão alinhados na mesma direção, ou seja, ambos são sinais de compra ou ambos são sinais de venda.

Análise das vantagens

A estratégia de ruptura de reversão de média móvel dupla combina os pontos fortes das estratégias de reversão e de sinergia de tendência.

O 123 Reversal seleciona sinais de reversão para capitalizar as reviravoltas. O Price & MA Divergence rastreia a tendência de longo prazo. Juntos, eles capturam reversões de curto prazo enquanto seguem a tendência maior para evitar serem presos.

Além disso, ao exigir sinais alinhados de ambas as estratégias, o número de transações inválidas pode ser significativamente reduzido, melhorando a relação sinal/ruído.

Análise de riscos

Apesar de aproveitar os pontos fortes de ambas as estratégias, a estratégia de ruptura de reversão de média móvel dupla também herda os riscos associados a cada uma delas.

Para o componente 123 Reversal, duas reversões diárias consecutivas não garantem uma reversão de tendência real. Eles podem muito bem ser sinais falsos causados por retrações de curto prazo.

Para a parte de Divergência de Preço e MA, parâmetros de média móvel inadequados podem levar a sinais atrasados.

Em resumo, os principais riscos desta estratégia provêm de um ajustamento de parâmetros deficiente e de geração de sinal defeituosa. Os riscos podem ser mitigados através de otimização de parâmetros, stop loss/take profit, intervenção manual, etc.

Oportunidades de melhoria

A estratégia de ruptura da dupla média móvel pode ser reforçada nos seguintes aspectos:

  1. Otimizar os parâmetros MA e oscilador para melhores sinais
  2. Adicionar outros indicadores para filtragem de sinal
  3. Incorporar stop loss e take profit
  4. Adicionar a determinação da tendência para evitar negociações prematuras
  5. Intervenção manual e ajuste adaptativo dos parâmetros

Com uma combinação de diferentes métodos de melhoria, a estabilidade e a rentabilidade da estratégia podem ser ainda melhoradas.

Conclusão

A estratégia combina os pontos fortes das estratégias de reversão e de tendência, gerando negócios apenas quando ambos os tipos de sinal se alinham. Captura oportunidades de reversão de curto prazo enquanto monta tendências maiores para evitar armadilhas. O mecanismo de sinal duplo também melhora a confiabilidade. Com abundantes oportunidades de aprimoramento, é uma estratégia de negociação quantificada versátil e poderosa.


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-17 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 13/04/2021
// 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
// Percent difference between price and MA
//
// 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


DBP_MA(Length,SellZone,BuyZone) =>
    pos = 0.0
    xSMA = sma(close, Length)
    nRes = abs(close - xSMA) * 100 / close
    pos:= iff(nRes < BuyZone, 1,
           iff(nRes > SellZone, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Difference between price and MA", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Difference between price and MA ----")
LengthDBP = input(14, minval=1)
SellZone = input(0.54, minval=0.01, step = 0.01)
BuyZone = input(0.03, minval=0.01, step = 0.01)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posDBP_MA = DBP_MA(LengthDBP,SellZone,BuyZone)
pos = iff(posReversal123 == 1 and posDBP_MA == 1 , 1,
	   iff(posReversal123 == -1 and posDBP_MA == -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.