Estratégia de negociação de balanço da média móvel do casco

Autora:ChaoZhang, Data: 2023-10-07 15:24:31
Tags:

Resumo

Esta estratégia é uma estratégia de negociação de curto prazo baseada no indicador Hull Moving Average.

Estratégia lógica

Esta estratégia baseia-se principalmente no indicador da média móvel Hull. A linha da média móvel Hull consiste em duas médias móveis. Primeiro, calcula a linha média móvel mediana nma do preço, com um período de hullperiod. Em seguida, calcula a linha média móvel rápida n2ma, com um período de metade dos nmas. Quando n2ma cruza acima de nma, um sinal de compra é gerado. Quando n2ma cruza abaixo de nma, um sinal de venda é gerado.

Para filtrar alguns sinais falsos, a estratégia também introduz a Hull Line (Hull_Line). A Hull Line é um resultado de regressão linear da diferença entre nma e n2ma.

As regras estratégicas são as seguintes:

  1. Calcular o nma, com período de carcaça

  2. Calcular o n2ma, com o período metade do período nma

  3. Calcular a diferença entre n2ma e nma

  4. Moving average the diff with period sqrt ((hullperiod), obtém and get the Hull Line Hull_Line

  5. Quando o preço cruza acima da linha Hull, um sinal de compra é gerado.

  6. Quando o preço cruza abaixo da linha Hull, um sinal de venda é gerado.

  7. Se houver uma divergência entre o preço e a linha Hull, pular o sinal

  8. Entrar com uma certa percentagem da posição, adotar stop loss de saída

Análise das vantagens

As vantagens desta estratégia incluem:

  1. Com base na média móvel Hull, pode rapidamente capturar a tendência e seguir a tendência

  2. Usar Hull Line para filtrar sinais falsos e melhorar a qualidade do sinal

  3. Uma boa relação risco/recompensa e uma utilização adequada para negociações a curto prazo

  4. Ajuste flexível dos parâmetros, adaptável aos diferentes ambientes de mercado

  5. Adotar reversão stop loss, pode parar a perda em tempo e controlar os riscos

  6. Combinar a sazonalidade para evitar riscos sistémicos em períodos de tempo específicos

Análise de riscos

Esta estratégia tem também alguns riscos:

  1. Seguindo a estratégia de tendência, não pode negociar o dia todo

  2. Perdas maiores quando a tendência se inverte

  3. Retardo das médias móveis, não conseguem capturar pontos de virada em tempo útil

  4. A alta frequência de negociação leva a custos comerciais mais elevados

  5. A definição inadequada dos parâmetros pode conduzir a uma menor rentabilidade nos mercados de gama

Para controlar estes riscos, podemos tomar as seguintes medidas:

  1. Adotar estratégia de stop loss martingale para controlar perdas únicas

  2. Otimizar os parâmetros e testar a robustez em diferentes ambientes de mercado

  3. Combinar indicadores de avaliação de tendências para evitar a perseguição de tendências durante reversões

  4. Aumentar o tempo de retenção para reduzir a frequência de negociação

Orientações de otimização

Esta estratégia pode também ser otimizada nos seguintes aspectos:

  1. Combinar indicadores de impulso para localizar o ponto de partida das tendências para uma melhor entrada

  2. Adicionar modelos de aprendizagem de máquina para ajudar a julgar a direção e a força da tendência

  3. Adotar configuração de parâmetros adaptativos para ajustar parâmetros com base na dinâmica do mercado em tempo real

  4. Configurar sistemas de casco de vários prazos, com diferentes tamanhos de posição para diferentes prazos

  5. Combinar indicadores de volume para evitar falhas com impulso insuficiente

  6. Adicionar um modelo de dimensionamento de posições baseado na volatilidade para ajustar dinamicamente as dimensões das posições com base na volatilidade

Resumo

O Hull Moving Average Swing Trading Strategy é uma estratégia eficiente de curto prazo para seguir tendências. Ele usa o sistema Hull Moving Average para determinar a direção da tendência com o propósito de seguir a tendência. Em comparação com os sistemas de média móvel única, ele tem maior qualidade de sinal e flexibilidade de parâmetros. A vantagem desta estratégia está em capturar rapidamente as mudanças de tendência com reduções relativamente pequenas. A fraqueza é a incapacidade de lidar com inversões de tendência.


/*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


Mais.