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.
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:
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.
A estratégia de negociação de média móvel de casco duplo tem as seguintes vantagens:
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.
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.
Adota técnicas tradicionais de análise técnica para fácil compreensão, adequadas para negociação de algo.
A lógica é simples e clara, fácil de implementar, adequada para negociação algorítmica de alta frequência.
Tipos e parâmetros de MA do casco personalizáveis para otimização em diferentes produtos e prazos.
Apesar de ter muitos méritos, a estratégia também apresenta alguns riscos:
Os parâmetros de ajuste são finos para filtrar alguns negócios ruidosos.
A estratégia segue sobretudo tendências, sendo menos eficaz durante períodos planos.
Os MAs de casco ainda têm algum grau de atraso, especialmente para períodos curtos.
Os sinais frequentes podem levar a excesso de negociação.
Aqui estão alguns aspectos importantes para otimizar a estratégia:
Otimizar os tipos e parâmetros de MA do casco para ajustar a sensibilidade do trilho médio para diferentes produtos.
Adicionar mecanismos de stop loss como trailing stop ou stop loss incremental para controlar o montante da perda de uma única transação.
Combinar com outros indicadores para determinar a direção e a força da tendência, evitando armadilhas, por exemplo, MACD, KD, etc.
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.
Combinação de quadros de tempo múltiplos.
Refinar a lógica de entrada, confirmar as entradas com padrões de velas para melhorar a certeza de entrada.
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")