Valor de mercado da posição em risco da instituição

Autora:ChaoZhang, Data: 2024-01-17 16:37:23
Tags:

img

Resumo

Esta estratégia integra o sinal de reversão da linha de base, o filtro de volatilidade ATR e o filtro de tendência HMA para gerar sinais de negociação robustos para estratégias de negociação quantitativas.

Estratégia lógica

A estratégia usa uma média móvel de 37 períodos como linha de base. Quando o preço rompe para cima desta linha de base, ele gera um sinal de compra, e quando ele quebra de cima, ele gera um sinal de venda. Para evitar sinais falsos, a estratégia requer que o preço se mova além da volatilidade de 2xATR depois de penetrar a linha de base para confirmar a validade dos sinais. Além disso, a estratégia usa um HMA de 11 períodos para julgar a tendência principal.

Para a captação de lucro, a estratégia suporta o uso de um ou vários (dois ou três) níveis de captação de lucro.

Análise das vantagens

Em comparação com as estratégias de breakout de média móvel simples, esta estratégia adiciona o filtro de volatilidade ATR que remove muitos sinais inválidos. Isso se alinha muito bem com técnicas de breakout de padrão visual, levando a taxas de vitória mais altas. Além disso, o viés de tendência HMA evita a seleção adversa e reduz significativamente as perdas desnecessárias. O esquema de lucro múltiplo também permite que mais lucros sejam bloqueados.

Riscos e soluções

O principal risco é que o filtro de volatilidade do ATR pode remover alguns sinais válidos, causando falha na abertura de posições em tempo hábil. Além disso, o julgamento da tendência do HMA não é muito significativo às vezes quando o preço está apenas tendo uma retração de curto prazo, não uma reversão. Isso pode levar a stop loss desnecessários. Para reduzir os riscos, podemos baixar o parâmetro do filtro de volatilidade do ATR para permitir mais sinais. Também podemos ajustar o parâmetro do período do HMA para usar o HMA de longo prazo para julgar as principais tendências, evitando interferência de flutuações de curto prazo.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Testar mais combinações de parâmetros para encontrar o conjunto óptimo de valores, por exemplo, período de referência, período ATR, coeficiente de volatilidade, etc.

  2. Adicionar mais filtros ou osciladores para avaliar as condições de mercado para aumentar a robustez do modelo.

  3. Otimizar os parâmetros dos mecanismos de obtenção de lucros, testar mais níveis de preços e sistemas de atribuição.

  4. Incorporar modelos de aprendizagem de máquina para gerar sinais comerciais mais eficazes.

Conclusão

Esta estratégia integra o sinal de linha de base de média móvel dupla, o filtro de volatilidade ATR e o filtro de viés de tendência HMA em um sistema de negociação quantitativo muito prático.


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


Mais.