Estratégia de negociação de média móvel de casco duplo

Autora:ChaoZhang, Data: 2023-12-11 11:30:15
Tags:

img

Resumo

A estratégia de negociação de média móvel de casco duplo é uma estratégia de negociação quantitativa que usa a média móvel de casco duplo como sinais de negociação.

Princípios

O núcleo da estratégia de negociação da média móvel de casco duplo é a média móvel de casco duplo (DHMA). A DHMA consiste em três linhas: trilhos médios, superiores e inferiores, representando diferentes valores de preço médio.

Central Rail: Modo (mode) Switch, src, len
Ferrovias superiores: casco[1] Ferrovias inferiores: HULL[2]

Aqui a função Mode pode escolher entre diferentes variantes Hull MA como HMA, EHMA ou THMA. Src significa a fonte de preço e len é o parâmetro de período.

A estratégia utiliza o trilho médio do DHMA como referência para determinar a relação de preços e gerar sinais de negociação:

  • Quando o preço cruzar acima do meio do trilho, vá longo.
  • Quando o preço cruza abaixo do meio do trilho, feche a posição.

Em outras palavras, se o preço de fechamento da barra atual estiver acima do valor do meio do trilho, vá longo na próxima barra; se o preço de fechamento estiver abaixo, feche a posição longa na próxima barra.

Vantagens

A estratégia de negociação de média móvel de casco duplo tem as seguintes vantagens:

  1. Utiliza um mecanismo de bandas triplas em vez de uma única linha média móvel para melhores efeitos de suporte/resistência e acompanhamento da tendência.

  2. Em comparação com os MAs comuns, as médias móveis do Hull apresentam menos atraso e respondem melhor às alterações de preços.

  3. Adota técnicas tradicionais de análise técnica para fácil compreensão, adequadas para negociação de algo.

  4. A lógica é simples e clara, fácil de implementar, adequada para negociação algorítmica de alta frequência.

  5. Tipos e parâmetros de MA do casco personalizáveis para otimização em diferentes produtos e prazos.

Riscos

Apesar de ter muitos méritos, a estratégia também apresenta alguns riscos:

  1. Os parâmetros de ajuste são finos para filtrar alguns negócios ruidosos.

  2. A estratégia segue sobretudo tendências, sendo menos eficaz durante períodos planos.

  3. Os MAs de casco ainda têm algum grau de atraso, especialmente para períodos curtos.

  4. Os sinais frequentes podem levar a excesso de negociação.

Orientações de otimização

Aqui estão alguns aspectos importantes para otimizar a estratégia:

  1. Otimizar os tipos e parâmetros de MA do casco para ajustar a sensibilidade do trilho médio para diferentes produtos.

  2. Adicionar mecanismos de stop loss como trailing stop ou stop loss incremental para controlar o montante da perda de uma única transação.

  3. Combinar com outros indicadores para determinar a direção e a força da tendência, evitando armadilhas, por exemplo, MACD, KD, etc.

  4. Adicionar condições de ativação da estratégia baseadas no número de transações ou na taxa de lucro para controlar a contagem de encerramento do ciclo, reduzindo as saídas.

  5. Combinação de quadros de tempo múltiplos.

  6. Refinar a lógica de entrada, confirmar as entradas com padrões de velas para melhorar a certeza de entrada.

Conclusão

Em resumo, a estratégia de negociação de média móvel de casco duplo é uma abordagem quantitativa que utiliza a resposta rápida, seguindo a tendência das médias móveis de casco para construir sinais de negociação. Em comparação com os MAs tradicionais, ela tem uma resposta mais rápida e melhores habilidades de rastreamento. A lógica da estratégia é simples e clara, fácil de automatizar para negociação por algoritmo. Ainda há riscos de ruídos e tendência após limitações. Técnicas como ajuste de parâmetros, stop loss e combinação de outros indicadores podem melhorar seu desempenho prático.


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

//@version=4
//Basic Hull Ma Pack tinkered by InSilico 
//Converted to Strategy by DashTrader
strategy("Hull Suite Strategy", overlay=true, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0)
//////////////////////////////////////////////////////////////////////
// Testing Start dates
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop
//////////////////////////////////////////////////////////////////////
//INPUT
HAClose = security(heikinashi(syminfo.tickerid), timeframe.period, close)
src = input(close, title="Source")
modeSwitch = input("Hma", title="Hull Variation", options=["Hma", "Thma", "Ehma"])
length = input(55, title="Length(180-200 for floating S/R , 55 for swing entry)")
switchColor = input(true, "Color Hull according to trend?")
candleCol = input(false,title="Color candles based on Hull's Trend?")
visualSwitch  = input(true, title="Show as a Band?")
thicknesSwitch = input(1, title="Line Thickness")
transpSwitch = input(40, title="Band Transparency",step=5)

//FUNCTIONS
//HMA
HMA(_src, _length) =>  wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>  ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length)))
//THMA    
THMA(_src, _length) =>  wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - wma(_src, _length), _length)
    
//SWITCH
Mode(modeSwitch, src, len) =>
      modeSwitch == "Hma"  ? HMA(src, len) :
      modeSwitch == "Ehma" ? EHMA(src, len) : 
      modeSwitch == "Thma" ? THMA(src, len/2) : na
      
//OUT
HULL = Mode(modeSwitch, src, length)
MHULL = HULL[0]
SHULL = HULL[2]

//COLOR
hullColor = switchColor ? (HULL > HULL[2] ? #00ff00 : #ff0000) : #ff9800

//PLOT
///< Frame
Fi1 = plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(visualSwitch ? SHULL : na, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
///< Ending Filler
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)


if HULL[0] > HULL[2] and testPeriod()
    strategy.entry("long", strategy.long)
if HULL[0] < HULL[2] and testPeriod()
    strategy.close("long")

Mais.