Impulso Oscilante Estratégia de negociação de média móvel baseada em faixas de Bollinger tamponadas

Autora:ChaoZhang, Data: 2024-01-05 12:27:02
Tags:

img

Resumo

Esta estratégia constrói um canal de preços baseado no indicador Bollinger Bands e no indicador Momentum Oscillating Moving Average, gerando sinais de negociação quando o preço atravessa o limite superior ou inferior do canal.

Estratégia lógica

A estratégia constrói um canal de preços usando a faixa média de Bollinger e a média móvel oscilante de momento. A faixa média adota a faixa média de Bollinger de 21 períodos. As faixas superior e inferior se estendem para cima e para baixo por uma faixa porcentual, respectivamente. A média móvel oscilante de momento se estende ou encolhe perto dos níveis de sobrecompra ou sobrevenda com base na faixa média. Quando o preço atravessa a faixa superior, vá longo.

Especificamente, a faixa média de Bollinger é calculada como:

Middle Band = Moving Average of N-period closing price

A faixa superior e a faixa inferior são calculadas da seguinte forma:

Upper Band = Middle Band + WidthDev * N-period Bollinger standard deviation 
Lower Band = Middle Band - WidthDev * N-period Bollinger standard deviation

Onde WidthDev representa a faixa percentual estendida para cima e para baixo.

O Momentum Oscillating Moving Average se estende ou encolhe com base na faixa média de acordo com certas regras. Quando o mercado se torna sobrecomprado ou sobrevendido, ele se estende mais longe da faixa média para fornecer mais oportunidades de longo ou curto. Quando o mercado se acalma, ele se contrai em direção à faixa média.

Em resumo, esta estratégia descreve um canal de preços usando Bollinger Bands e determina o tempo de entrada usando a Momentum Oscillating Moving Average, realizando a negociação de ruptura.

Análise das vantagens

  1. Reflete a volatilidade do mercado As bandas de Bollinger podem refletir a volatilidade do mercado e as tendências em mudança em tempo real.

  2. Reduz os falsos sinais O efeito de alongamento da média móvel oscilante de momento pode efetivamente reduzir os sinais falsos gerados pelas bandas de Bollinger.

  3. Temporário captura de inversão de tendência O cruzamento das faixas superiores e inferiores do BB e da média móvel oscilante do momento fornece um momento e um preço vantajosos para gerar sinais de negociação, que podem efetivamente captar os principais ajustes de alta e baixa e captar as inversões de tendência em tempo hábil.

Análise de riscos

  1. Parâmetros BB incorretos A configuração inadequada dos parâmetros BB, como o período de cálculo e o multiplicador do desvio-padrão, pode conduzir a um espaçamento demasiado largo ou demasiado estreito entre as faixas, gerando sinais falsos excessivos e prejudicando a estabilidade da estratégia.

  2. Amplitude de oscilação excessiva A amplitude de oscilação excessivamente grande da média móvel oscilante de momento pode resultar em pontos de stop loss muito distantes, aumentando o risco de perda.

  3. Reversão atrasada
    Quando o mercado está oscilando ou sem tendência, os sinais de negociação da BB e da Momentum Oscillating Moving Average podem atrasar-se, não refletindo as alterações de preço no tempo, causando um risco de reversão atrasado.

Orientações de otimização

  1. Otimizar parâmetros BB Teste diferentes períodos, multiplicadores de desvio padrão para encontrar combinações ideais de parâmetros que forneçam uma melhor frequência de sinal e menos falsos sinais.

  2. Otimizar os parâmetros da média móvel Teste diferentes amplitudes e períodos de oscilação para encontrar parâmetros que captem melhor as tendências e reduzam o atraso do sinal.

  3. Adicionar condições de filtro Adicionar filtros como volumes de negociação baseados em sinais cruzados para excluir sinais comerciais ineficientes.

  4. Combinação de estratégias Combinar esta estratégia com outras estratégias de stop loss ou estratégias de aprendizagem de máquina para controlar ainda mais os riscos e melhorar a estabilidade.

Resumo

Esta estratégia combina os pontos fortes das Bandas de Bollinger adaptativas e da Média Móvel Oscilante de Momento, alcançando uma integração de seguir tendências e capturar inversões de tendências.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//                               Hull Cloud v2 by SEASIDE420
strategy("Hull Moving Average Cloud v2", shorttitle="hull_cloud_v2", overlay=true, commission_type=strategy.commission.percent, commission_value=0.075, default_qty_type=strategy.percent_of_equity, max_bars_back=200, default_qty_value=100, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0)
hullperiod=input(title="HullMA Period",defval=210, minval=1)
Width=input(title="Cloud Width",defval=200, minval=2)
price=input(ohlc4,title="Price data")
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) 
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) 
FromYear = input(defval = 2017, title = "From Year", minval = 2017) 
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) 
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) 
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) 
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) 
window() => true
n2ma=2*wma(price,round(hullperiod/2))
nma=wma(price,hullperiod)
diff=n2ma-nma
sqn=round(sqrt(hullperiod))
n2ma1=2*wma(price[1],round(hullperiod/2))
nma1=wma(price[1],hullperiod)
diff1=n2ma1-nma1
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
Hull_Line=n1-n1[1]/n2[1]
Hull_retracted=if(n1>n2)
    Hull_retracted=Hull_Line-Width
else
    Hull_retracted=Hull_Line+Width
c1=(Hull_retracted*n1)/price[1] 
c2=(Hull_retracted*n2)/price[1]
c4=c1>c2?green:red
c2p=plot(c2, color=black, linewidth=1)
c3p=plot(price, color=black, linewidth=1)
fill(c3p, c2p, color=c4, transp=75)
plot(cross(c1, c2) ? c1 : na, style = circles,color=c4, linewidth = 4) 
if (price<c2)
    strategy.close("BUY", when=window())
if (price>c2)                       
    strategy.close("SELL", when=window())
if (price[1]>c2 and price[1]>c1)             
    strategy.entry("BUY",strategy.long, when=window())
if (price[1]<c1 and price[1]<c2)            
    strategy.entry("SELL",strategy.short, when=window())//           /L'-, 
//                               ,'-.      `   ````                 /  L '-, 
//     .                    _,--dMMMM\        `   ` ` '`..         /       '-, 
//     :             _,--,  )MMMMMMMMM),.      `     ,<>          /_      '-,' 
//     ;     ___,--. \MM(    `-'   )M//MM\          ,',.;      .-'* ;     .' 
//     |     \MMMMMM) \MM\       ,dM//MMM/     ___ < ,; `.      )`--'    / 
//     |      \MM()M   MMM)__   /MM(/MP'  ___, \  \ `  `. `.   /__,    ,' 
//     |       MMMM/   MMMMMM( /MMMMP'__, \     | /      `. `-,_\     / 
//     |       MM     /MMM---' `--'_ \     |-'  |/         `./ .\----.___ 
//     |      /MM'   `--' __,-  \""   |-'  |_,               `.__) . .F. )-. 
//     |     `--'       \   \    |-'  |_,     _,-/            J . . . J-'-. `-., 
//     |         __  \`. |   |   |         \    / _           |. . . . \   `-.  F 
//     |   ___  /  \  | `|   '      __  \   |  /-'            F . . . . \     '` 
//     |   \  \ \  /  |        __  /  \  |  |,-'        __,- J . . . . . \ 
//     |    | /  |/     __,-  \  ) \  /  |_,-     __,--'     |. .__.----,' 
//     |    |/    ___     \    |'.  |/      __,--'           `.-;;;;;;;;;\ 
//     |     ___  \  \     |   |  `   __,--'                  /;;;;;;;;;;;;. 
//     |     \  \  |-'\    '    __,--'                       /;;;;;;;;;;;;;;\ 
// \   |      | /  |      __,--'                             `--;;/     \;-'\ 
//  \  |      |/    __,--'                                   /  /         \  \ 
//   \ |      __,--'                                        /  /           \  \ 
//    \|__,--'                                          _,-;M-K,           ,;-;\ 
//                                                     <;;;;;;;;           '-;;;; 
//                                                                                  :D

Mais.