Estratégia de negociação do oscilador de média móvel de Hull


Data de criação: 2023-10-07 15:24:31 última modificação: 2023-10-07 15:24:31
cópia: 0 Cliques: 1028
1
focar em
1617
Seguidores

Visão geral

Esta estratégia é uma estratégia de negociação de curta linha baseada no indicador de média móvel de Hull. A estratégia utiliza a média móvel de Hull para formar um sinal de compra e venda, pertencendo à estratégia de acompanhamento de tendências.

Princípio da estratégia

A estratégia é baseada principalmente no indicador de média móvel de Hull, que consiste em duas médias móveis. Primeiro, calcula-se a média móvel intermediária nma do preço, com um período de hullperiod.

Para filtrar alguns sinais falsos, a estratégia também introduziu a linha de Hull (Hull_Line). A linha de Hull é o resultado de uma regressão linear do diferencial entre nma e n2ma. A estratégia salta o sinal de compra e venda quando o preço se desvia da linha de Hull.

A estratégia é a seguinte:

  1. Calcule nma, período de hullperiod

  2. Calcule n2ma, com um ciclo igual a metade do ciclo nma

  3. Calcule a diferença entre n2ma e nma

  4. A média móvel para a diferença com um período de sqrt{\displaystyle \sqrt{\mathrm {hull } } } {\displaystyle \sqrt{\mathrm {hull } } } {\displaystyle \sqrt{{\mathrm {hull } } } } } é a linha de Hull

  5. Um sinal de compra é emitido quando o preço atravessa a linha de Hull

  6. Quando o preço ultrapassa a linha de Hull, emite um sinal de venda

  7. Se o preço for desviado da linha de Hull, salte o sinal

  8. Entrando em uma posição com uma certa proporção, o método de parada de perda de saída é eliminado

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. A média móvel de Hull é baseada em uma rápida captação de tendências, e a tendência é definida por um conjunto de fatores.

  2. Filtração de falsos sinais com cabos de Hull para melhorar a qualidade do sinal

  3. A retirada e a perda de lucro são boas para operações de linha curta.

  4. Ajuste de parâmetros com flexibilidade para adaptar-se a diferentes cenários de mercado

  5. O uso de stop-loss reversível, que pode parar o risco em tempo hábil

  6. Riscos sistemáticos combinados com a estacionalidade para evitar períodos de tempo específicos

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. A estratégia de acompanhamento de tendências não permite a negociação 24 horas por dia.

  2. Quando a tendência se inverte, os prejuízos são maiores

  3. A média móvel está atrasada e não consegue capturar os pontos de inflexão em tempo hábil

  4. Transações em linha curta são frequentes e custam caro

  5. Parâmetros mal definidos podem causar queda nos lucros em mercados de baixa volatilidade

Os riscos acima mencionados podem ser controlados com as seguintes medidas:

  1. A estratégia de parada de Martingale para controlar perdas individuais

  2. Parâmetros de otimização, testando a robustez dos parâmetros em diferentes ambientes de mercado

  3. Indicadores de tendência para evitar a reversão de queda

  4. Aumentar o tempo de detenção e reduzir a frequência de negociação

Direção de otimização

A estratégia também pode ser melhorada em alguns aspectos:

  1. Combinação de indicadores de dinâmica para determinar o ponto de partida de uma tendência e uma melhor entrada de layout

  2. Adição de modelos de aprendizagem de máquina para auxiliar na determinação da direção e intensidade das tendências

  3. Configuração de parâmetros adaptativos, ajustando os parâmetros de acordo com o mercado em tempo real

  4. Configuração de sistemas de casco de múltiplos períodos de tempo, com posições diferentes em diferentes períodos

  5. Combinado com o indicador de energia do volume de transações, evita-se a falsa ruptura de energia insuficiente

  6. Adição de um módulo de gerenciamento de posições baseado na volatilidade, ajustando as posições dinamicamente de acordo com a volatilidade

Resumir

A estratégia de negociação de média móvel oscilante de Hull é, em geral, uma estratégia de acompanhamento de linha curta muito prática. Ela usa o sistema de média móvel de Hull para determinar a direção da tendência e alcançar a tendência. Comparado ao sistema de média móvel única, ele possui maior qualidade de sinal e flexibilidade de parâmetros.

Código-fonte da estratégia
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//                               Hull Moving Average Swing Trader by SEASIDE420
strategy("Hull Moving Average Swing Trader", shorttitle="HMA_Swing_Trader", default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0)
hullperiod = input(title="HullMA Period", type=input.integer, defval=210, minval=1)
price = input(open, type=input.source, 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=2020, 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 * n2
Hull_retracted = if n1 > n2
    Hull_retracted = Hull_Line - 2
else
    Hull_retracted = Hull_Line + 2
c1 = Hull_retracted + n1 - price
c2 = Hull_retracted - n2 + price
c4 = n1 > n2 ? color.green : color.red
c2p = plot(c2, color=color.black, linewidth=1)
c3p = plot(price, color=color.black, linewidth=1)
fill(c3p, c2p, color=c4, transp=75)
//plot(cross(c1, c2) ? c1 : na, style=plot.style_circles, color=c4, linewidth=4)
if price < c2
    strategy.close("BUY", when=window())
if price > c2
    strategy.close("SELL", when=window())
if price > c2 and price[1] > c1
    strategy.entry("BUY", strategy.long, when=window())
if price < 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