Estratégia do sistema de média móvel de reversão oscilante


Data de criação: 2023-10-18 12:23:13 última modificação: 2023-10-18 12:23:13
cópia: 2 Cliques: 620
1
focar em
1617
Seguidores

Estratégia do sistema de média móvel de reversão oscilante

Visão geral

A estratégia usa o sistema de linha-meia para determinar a direção da tendência e, em combinação com os indicadores de volatilidade, evita mercados de baixa volatilidade e usa o stop loss de choque para gerenciar as negociações.

Princípios

A estratégia julga a direção da tendência comparando a relação de posição entre a média rápida e a média lenta. Quando a média rápida atravessa a média lenta, veja mais e veja menos.

A lógica de negociação da estratégia é a seguinte:

  1. Calcule a média rápida (default 20 dias) e a média lenta (default 50 dias).

  2. Calcule a taxa de variação de largura da faixa de Bryn (default 40 dias, 2 vezes o diferencial padrão).

  3. Quando a linha média rápida atravessa a linha média lenta, e a taxa de variação de largura de banda de Bryn é superior ao limite definido (default 9%), um sinal de múltiplas cabeças é gerado.

  4. Quando a média rápida atravessa a média lenta e a taxa de variação da largura de banda de Bryn excede o limiar definido (default 9%), um sinal de cabeçalho é gerado.

  5. Calcule o canal de vazio de Candeli como um ponto de parada.

  6. O preço máximo de um stop loss é o ATR.*Multiplicação, o ponto de parada é o preço mínimo + ATR*Multiplicação.

Vantagens

  1. Usando um sistema de linha média para determinar a direção da tendência, pode-se seguir a tendência de forma eficaz.

  2. A introdução da taxa de variação da largura de banda de Brin evita o choque do mercado e reduz as transações desnecessárias.

  3. O sistema de travamento de choque é usado para evitar que o jogador fique preso no campo.

  4. Os vários parâmetros são ajustáveis e podem ser otimizados para diferentes mercados.

  5. A lógica da estratégia é clara e fácil de entender, facilitando a aprendizagem.

Riscos

  1. O sistema linear apresenta um atraso e pode perder a oportunidade de uma rápida reversão.

  2. A configuração inadequada dos parâmetros da faixa de Bryn pode filtrar os sinais de negociação válidos.

  3. A perda de vibração é muito sensível e pode causar transações excessivamente frequentes.

  4. A falta de otimização de parâmetros pode levar a um risco de posse.

  5. A falta de capacidade para se adaptar às mudanças drásticas do mercado provocadas por eventos de grande importância.

Direção de otimização

  1. É possível testar combinações lineares de diferentes parâmetros para encontrar o melhor parâmetro.

  2. Pode-se testar os parâmetros da faixa de Bryn em diferentes períodos para encontrar o melhor efeito de filtragem de flutuação.

  3. Pode ser combinado com outros indicadores para a confirmação de entrada, melhorando a qualidade do sinal.

  4. A introdução de estratégias de stop loss dinâmicas permite que o stop loss acompanhe melhor o mercado.

  5. Pode ser combinado com a tecnologia de aprendizagem de máquina para otimizar automaticamente os parâmetros, adaptando-se às mudanças do mercado.

Resumir

A estratégia integra um sistema de linha de equilíbrio, indicadores de correlação e tecnologia de parada de choque, formando um sistema de acompanhamento de tendências relativamente estável. Otimizando os parâmetros, pode-se obter um bom efeito estratégico.

Código-fonte da estratégia
/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © juanchez

//@version=4
strategy("CHI", overlay = true, close_entries_rule = "ANY")

n = input(title= "highest high o lowest low period", defval= 22)
f= input(title= "multiplicador", defval= 4)
long = highest(high, n) - atr(n)*f
short= lowest(low, n) + atr(n)*f
plot(long, color= color.red)
plot(short, color= color.green)

//moving averages
period= input(title= "moving averages period", defval= 50)
period2= input(title= "moving averages period2", defval= 20)
type= input(title= "moving averages type", options= ["sma", "ema"], defval= "ema")

//moving average function
mo(p, t) =>
    if t == "sma"
        sma(close[barstate.islast ? 1: 0], p)
    else  if t== "ema"
        ema(close[barstate.islast ? 1: 0], p)

m= mo(period, type)
m2= mo(period2, type)

trend= m2 > m 

plot(m, color = color.maroon, linewidth = 3)
plot(m2, linewidth= 3)


//BOLLINGER BANDS ENTRIES
bb1_period= input(title= "Bollinger bands 1 period", defval=40, minval=1)
bb1_source=input(title="Bollinger band 1 source", defval=close)
bb1_multi=input(title="Bollinger Bands 1 factor", defval=2, minval=1, step=0.1)
show_bb1= input(title="Show Bollinger bands 1", defval=false)
//BOLLINGER BANDS
_bb(src, lenght, multi)=>
    float moving_avg= sma(src[barstate.islast? 1: 0], lenght)
    float deviation= stdev(src[barstate.islast? 1: 0], lenght)
    float lowerband = moving_avg - deviation*multi
    float upperband = moving_avg + deviation*multi
    
    [moving_avg, lowerband, upperband]
    
[bb1, lowerband1, upperband1]= _bb(bb1_source,  bb1_period, bb1_multi)

//FIRST BAND    
plot(show_bb1? bb1 : na, title="BB1 Moving average", linewidth= 3, color= color.fuchsia)
plot(show_bb1? upperband1 : na, title="BB1 Upper Band", linewidth= 3, color= color.green)
plot(show_bb1? lowerband1 : na, title="BB1 Lower Band", linewidth= 3, color= color.red)

//BB's Width threshold 
thresh= input(title= "widen %", defval= 9, minval = 0, step = 1, maxval= 100)

widht= (upperband1 - lowerband1)/bb1
roc= change(widht)/widht[1]*100
cross=crossover(roc, thresh)

// entry
//long
elong= input(true, title= "enable long")
longcondition= m2 > m and cross and elong

//short
eshort= input(true, title= "enable short")
shortcondition= m2 < m and cross and eshort


plotshape(longcondition? true: false , location= location.belowbar, style= shape.labelup, size= size.small, color= color.green, text= "Buy", textcolor= color.white)
plotshape(shortcondition? true: false , location= location.abovebar, style= shape.labeldown, size= size.small, color= color.red, text= "Sell", textcolor= color.white)

out= crossunder(close, long)
outt= crossover(close, short)

strategy.entry("long", strategy.long, when = longcondition)
strategy.close("long", when = out)

strategy.entry("short", strategy.short, when = shortcondition)
strategy.close("short", when = outt)