Estratégia de rompimento de média móvel dupla com base na volatilidade do ATR e no desvio da tendência do HMA


Data de criação: 2024-01-17 16:37:23 última modificação: 2024-01-17 16:37:23
cópia: 2 Cliques: 529
1
focar em
1617
Seguidores

Estratégia de rompimento de média móvel dupla com base na volatilidade do ATR e no desvio da tendência do HMA

Visão geral

A estratégia é uma estratégia de negociação quantitativa que combina sinais de ruptura de dupla equilíbrio com filtragem de volatilidade ATR e desvio de tendência HMA. A estratégia utiliza a construção de sinais de negociação de equilíbrio de dois períodos diferentes, em combinação com o indicador de volatilidade ATR para filtrar parte dos sinais inválidos e usar o HMA para determinar a direção da tendência e evitar operações de contracorrente.

Princípio da estratégia

A estratégia usa uma linha média de 37 ciclos de comprimento como a linha média de referência, gerando um sinal de compra quando o preço se move para cima abaixo da linha média, gerando um sinal de venda quando o preço se move para baixo. Para filtrar os sinais de falsidade, a estratégia define que o preço se move para a mesma direção após a quebra da linha média de referência.

No modo de ganho, a estratégia suporta a opção de usar um ponto de parada ou dois ou até três pontos de parada de preços diferentes. No modo de parada, a estratégia é diretamente acima e abaixo da linha de trajetória como um ponto de parada de longo e curto prazo.

Análise de vantagens estratégicas

Em comparação com uma única estratégia de ruptura de linha uniforme, a estratégia aumenta o filtro ATR de volatilidade na geração de sinais, que pode filtrar a maior parte dos sinais inativos, o que é muito compatível com a estratégia de forma de linha K na visão, e, portanto, pode obter uma maior taxa de vitória. Ao mesmo tempo, aumentar o HMA julga o desvio de tendência e evita a construção de posições de resistência, reduzindo significativamente as perdas desnecessárias.

Análise de riscos e soluções

O maior risco da estratégia é que o filtro de volatilidade do ATR pode eliminar parte do sinal efetivo, o que impede a estratégia de construir uma posição a tempo. Além disso, o efeito do HMA em julgar a grande tendência não é visível, às vezes o preço é apenas uma correção de curto prazo e não uma reversão da grande tendência, o que pode levar a perdas desnecessárias. Para reduzir o risco acima, os parâmetros do filtro de volatilidade do ATR podem ser reduzidos adequadamente, ampliando o alcance da volatilidade, permitindo que mais sinais de forma de linha K sejam gerados através de instruções de verificação.

Direção de otimização da estratégia

A estratégia pode ser otimizada em várias direções:

  1. Teste mais tipos de combinações de parâmetros para encontrar a combinação ideal. Parâmetros como o comprimento da linha média de referência, o ciclo ATR, o coeficiente de filtragem de volatilidade e outros são ajustáveis.

  2. Adicionar mais indicadores de filtragem ou osciladores para avaliar a situação do mercado, aumentando ainda mais a robustez da estratégia.

  3. Otimizar a configuração de parâmetros de modo de lucrar. Testar ainda mais a configuração de pontos de parada para diferentes níveis de quantidade e preço.

  4. Combinação de modelos de aprendizagem de máquina para gerar sinais de negociação mais eficientes.

Resumir

Esta estratégia integra os sinais de ruptura do núcleo de dupla linha de equilíbrio, os sinais de invalidez do filtro de volatilidade ATR e usa a HMA para determinar o desvio de tendência e evitar a construção de posições de contrapartida, uma estratégia de negociação quantitativa muito prática. O espaço para otimização dos parâmetros da estratégia é grande, o efeito ainda tem espaço para melhorar e vale a pena pesquisar e otimizar.

Código-fonte da estratégia
/*backtest
start: 2023-01-10 00:00:00
end: 2024-01-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © sevencampbell

//@version=5
strategy(title="Baseline Cross Qualifier Volatility Strategy with HMA Trend Bias", overlay=true)

// --- User Inputs ---

// Baseline Inputs
baselineLength = input.int(title="Baseline Length", defval=20)
baseline = ta.sma(close, baselineLength)

// PBCQ Inputs
pbcqEnabled = input.bool(title="Post Baseline Cross Qualifier Enabled", defval=true)
pbcqBarsAgo = input.int(title="Post Baseline Cross Qualifier Bars Ago", defval=3)

// Volatility Inputs
atrLength = input.int(title="ATR Length", defval=14)
multiplier = input.float(title="Volatility Multiplier", defval=2.0)
rangeMultiplier = input.float(title="Volatility Range Multiplier", defval=1.0)
qualifierMultiplier = input.float(title="Volatility Qualifier Multiplier", defval=0.5)

// Take Profit Inputs
takeProfitType = input.string(title="Take Profit Type", options=["1 Take Profit", "2 Take Profits", "3 Take Profits"], defval="1 Take Profit")

// HMA Inputs
hmaLength = input.int(title="HMA Length", defval=50)

// --- Calculations ---

// ATR
atr = ta.atr(atrLength)

// Range Calculation
rangeHigh = baseline + rangeMultiplier * atr
rangeLow = baseline - rangeMultiplier * atr
rangeColor = rangeLow <= close and close <= rangeHigh ? color.yellow : na
bgcolor(rangeColor, transp=90)

// Qualifier Calculation
qualifier = qualifierMultiplier * atr

// Dot Calculation
isLong = close > baseline and (close - baseline) >= qualifier and close > ta.hma(close, hmaLength)
isShort = close < baseline and (baseline - close) >= qualifier and close < ta.hma(close, hmaLength)
colorDot = isLong ? color.green : isShort ? color.red : na
plot(isLong or isShort ? baseline : na, color=colorDot, style=plot.style_circles, linewidth=3)

// --- Strategy Logic ---

// PBCQ
pbcqValid = not pbcqEnabled or low[pbcqBarsAgo] > baseline

// Entry Logic
longCondition = isLong and pbcqValid
shortCondition = isShort and pbcqValid
if (longCondition)
    strategy.entry("Long", strategy.long)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Exit Logic
if (takeProfitType == "1 Take Profit")
    strategy.exit("TP/SL", "Long", limit=rangeHigh, stop=rangeLow)
    strategy.exit("TP/SL", "Short", limit=rangeLow, stop=rangeHigh)
else if (takeProfitType == "2 Take Profits")
    strategy.exit("TP1", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh / 2)
    strategy.exit("TP2", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh)
    strategy.exit("TP1", "Short", qty=strategy.position_size * 0.5, limit=rangeLow / 2)
    strategy.exit("TP2", "Short", qty=strategy.position_size * 0.5, limit=rangeLow)
else if (takeProfitType == "3 Take Profits")
    strategy.exit("TP1", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh / 2)
    strategy.exit("TP2", "Long", qty=strategy.position_size * 0.25, limit=rangeHigh * 0.75)
    strategy.exit("TP3", "Long", qty=strategy.position_size * 0.25, limit=rangeHigh * 1.5)