Estratégia de negociação multifiltro de liquidez de tendência adaptável

EMA SMA MACD ATR HLC3
Data de criação: 2025-01-06 11:58:25 última modificação: 2025-01-06 11:58:25
cópia: 0 Cliques: 617
1
focar em
1617
Seguidores

Estratégia de negociação multifiltro de liquidez de tendência adaptável

Visão geral

Esta estratégia é um sistema de rastreamento de tendências adaptável baseado na filtragem de múltiplos indicadores técnicos. Ele combina vários indicadores técnicos, como média móvel exponencial (EMA), média móvel simples (SMA) e convergência e divergência de média móvel (MACD), e ajusta dinamicamente os parâmetros para se adaptar a diferentes ambientes de mercado para obter captura de tendências eficiente e controle de risco. Essa estratégia adota um mecanismo de filtragem em camadas e melhora significativamente a confiabilidade dos sinais de negociação por meio da cooperação coordenada de vários indicadores técnicos.

Princípio da estratégia

A lógica central da estratégia é baseada em um mecanismo de filtragem de três camadas:

  1. Camada de reconhecimento de tendência adaptável: use uma combinação de EMAs rápidas e lentas para calcular a linha de base da tendência e ajustar dinamicamente as linhas de rastreamento superior e inferior com base na volatilidade do mercado.
  2. Filtro SMA: use a média móvel simples para garantir que a direção do movimento do preço seja consistente com a tendência geral.
  3. Camada de confirmação MACD: Use a função de confirmação de tendência do indicador MACD para verificar melhor a validade do sinal de negociação.

A geração de sinais de negociação requer o cumprimento de todas as condições de filtro: mudança de tendência, confirmação da direção da SMA e suporte da linha de sinal MACD. A estratégia também inclui um sistema dinâmico de gerenciamento de posição com base no patrimônio da conta, que ajusta automaticamente o tamanho da posição por meio de fatores de alavancagem.

Vantagens estratégicas

  1. Forte adaptabilidade: Ao ajustar dinamicamente os parâmetros, a estratégia pode se adaptar a diferentes ambientes de mercado.
  2. Controle de risco perfeito: vários mecanismos de filtragem reduzem significativamente a probabilidade de sinais falsos.
  3. Alta personalização: os usuários podem ajustar vários parâmetros de acordo com seu estilo pessoal de negociação.
  4. Alto grau de automação: suporta mensagens de alerta no formato JSON, facilitando a conexão com sistemas de negociação automática.
  5. Bom efeito de visualização: fornece feedback visual rico, incluindo faixas de tendência, marcadores de sinal, etc.

Risco estratégico

  1. Dependência de Tendências: Sinais falsos frequentes podem ser gerados em um mercado volátil.
  2. Risco de histerese: múltiplos mecanismos de filtragem podem levar a atrasos no tempo de entrada.
  3. Sensibilidade dos parâmetros: diferentes combinações de parâmetros podem levar a grandes diferenças no desempenho da estratégia.
  4. Risco de alavancagem: Alavancagem excessiva pode aumentar as perdas.

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

  1. Adaptação de volatilidade: adicionado mecanismo de stop loss dinâmico baseado em ATR.
  2. Identificação do ambiente de mercado: adicione um sistema de classificação de status de mercado e use diferentes combinações de parâmetros em diferentes ambientes de mercado.
  3. Pontuação da qualidade do sinal: estabeleça um sistema de pontuação da intensidade do sinal e ajuste dinamicamente as posições com base na intensidade do sinal.
  4. Otimização da gestão de fundos: introduza algoritmos de gestão de fundos mais complexos para obter um controle de posição mais sofisticado.

Resumir

Essa estratégia alcança um efeito de rastreamento de tendências mais confiável por meio de mecanismo de filtragem multicamadas e ajuste dinâmico de parâmetros. Embora existam certos riscos de atraso e dependência de parâmetros, um desempenho estável ainda pode ser alcançado em transações reais por meio de otimização razoável de parâmetros e medidas de controle de risco. É recomendável que os traders realizem uma verificação completa de backtesting antes do uso em tempo real e ajustem as configurações dos parâmetros de acordo com sua tolerância pessoal ao risco.

Código-fonte da estratégia
/*backtest
start: 2024-12-29 00:00:00
end: 2025-01-05 00:00:00
period: 45m
basePeriod: 45m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Adaptive Trend Flow Strategy with Filters for SPX", overlay=true, max_labels_count=500, 
     initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.01, slippage=2,
     margin_long=20, margin_short=20, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// User-defined inputs for trend logic
atr           = input.int(14, "Main Length", minval=2, group = "Find more strategies like this on pineindicators.com")
length        = input.int(2, "Main Length", minval=2)
smooth_len    = input.int(2, "Smoothing Length", minval=2)
sensitivity   = input.float(2.0, "Sensitivity", step=0.1)

// User-defined inputs for SMA filter
use_sma_filter = input.bool(true, "Enable SMA Filter?")
sma_length = input.int(4, "SMA Length", minval=1)

// User-defined inputs for MACD filter
use_macd_filter = input.bool(true, "Enable MACD Filter?")
macd_fast_length = input.int(2, "MACD Fast Length", minval=1)
macd_slow_length = input.int(7, "MACD Slow Length", minval=1)
macd_signal_length = input.int(2, "MACD Signal Length", minval=1)
// User-defined inputs for leverage
leverage_factor = input.float(4.5, "Leverage Factor", minval=1.0, step=0.1)
id           = input("besttrader123", title= "Your TradingView username", group = "Automate this strategy with plugpine.com")
key           = input("nc739ja84gf", title= "Unique identifier (UID)")
ticker        = input("SPX", title= "Ticker/symbol of your broker")
bullcolor     = #0097a7
bearcolor     = #ff195f
showbars      = input.bool(true, "Color Bars?")
showbg        = input.bool(true, "Background Color?")
showsignals   = input.bool(true, "Show Signals?")


// Trend calculation functions
calculate_trend_levels() =>
    typical = hlc3
    fast_ema = ta.ema(typical, length)
    slow_ema = ta.ema(typical, length * 2)
    basis = (fast_ema + slow_ema) / 2
    vol = ta.stdev(typical, length)
    smooth_vol = ta.ema(vol, smooth_len)
    upper = basis + (smooth_vol * sensitivity)
    lower = basis - (smooth_vol * sensitivity)
    [basis, upper, lower]

get_trend_state(upper, lower, basis) =>
    var float prev_level = na
    var int trend = 0
    if na(prev_level)
        trend := close > basis ? 1 : -1
        prev_level := trend == 1 ? lower : upper
    if trend == 1
        if close < lower
            trend := -1
            prev_level := upper
        else
            prev_level := lower
    else
        if close > upper
            trend := 1
            prev_level := lower
        else
            prev_level := upper
    [trend, prev_level]

[basis, upper, lower] = calculate_trend_levels()
[trend, level] = get_trend_state(upper, lower, basis)

// SMA filter
sma_value = ta.sma(close, sma_length)
sma_condition = use_sma_filter ? close > sma_value : true

// MACD filter
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
macd_condition = use_macd_filter ? macd_line > signal_line : true

// Signal detection with filters
long_signal = trend == 1 and trend[1] == -1 and sma_condition and macd_condition
short_signal = trend == -1 and trend[1] == 1

// Plotting visuals
p2 = plot(basis, color=trend == 1 ? bullcolor : bearcolor, linewidth=2)
p1 = plot(level, color=close > level ? bullcolor : bearcolor, linewidth=2, style=plot.style_linebr)
// if showsignals and ta.crossover(close, level)
//     label.new(bar_index, level, "▲", color=bullcolor, textcolor=chart.bg_color, style=label.style_label_upper_right)
// if showsignals and ta.crossunder(close, level)
//     label.new(bar_index, level, "▼", color=bearcolor, textcolor=chart.fg_color, style=label.style_label_lower_right)

qty = strategy.equity / close * leverage_factor

// Automated alerts
if long_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "long", "volume": ' + str.tostring(qty) + '}', alert.freq_once_per_bar)
if short_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "closelong"}', alert.freq_once_per_bar)

// Strategy entries and exits
if long_signal
    strategy.entry("Long", strategy.long, qty=qty)
if short_signal
    strategy.close("Long")

// Optional SMA and MACD plot
plot(use_sma_filter ? sma_value : na, color=color.new(color.blue, 80), title="SMA")
plot(use_macd_filter ? macd_line : na, color=color.new(color.orange, 80), title="MACD Line")
plot(use_macd_filter ? signal_line : na, color=color.new(color.red, 80), title="Signal Line")