Estratégia de negociação dinâmica de stop-profit e stop-loss de pirâmide adaptável com base na média móvel de volume

HMA MACD ATR RSI OBV VMA
Data de criação: 2024-04-12 16:19:20 última modificação: 2024-04-12 16:19:20
cópia: 1 Cliques: 651
1
focar em
1617
Seguidores

Estratégia de negociação dinâmica de stop-profit e stop-loss de pirâmide adaptável com base na média móvel de volume

Visão geral

A estratégia combina vários indicadores técnicos, como a média móvel de Hull (HMA), a média móvel de convergência e dispersação (MACD), o alcance real médio (ATR), o índice de força relativa (RSI), a onda de energia (OBV) e a média móvel de volume de transação, para identificar tendências de mercado e potenciais oportunidades de entrada através de uma análise integrada desses indicadores. Ao mesmo tempo, a estratégia também usa métodos de gestão de risco, como a pirâmide de aumento de posição, o stop loss dinâmico e o stop loss móvel, procurando capturar oportunidades de tendência e controlar rigorosamente o risco.

Princípio da estratégia

  1. Calcular indicadores como HMA, MACD, ATR, RSI, OBV e média móvel de volume de transação
  2. A condição de vazio é julgada com base no cruzamento da linha rápida e lenta do MACD, na relação do OBV com sua média móvel, no nível do RSI e na comparação do volume de transação com sua linha média
  3. Configure o número máximo de acréscimos na pirâmide e o percentual de cada acréscimo, aumentando gradualmente enquanto a tendência persiste
  4. Ajustar os níveis de stop loss e stop loss de acordo com a dinâmica do ATR e proteger os lucros com uma estratégia de stop loss móvel
  5. Controle dinâmico de posições em cada abertura de posição, com base na conta de equity, proporção de risco e ATR
  6. Desenhar uma linha horizontal de stop loss no gráfico para visualizar o controle de risco

Vantagens estratégicas

  1. A estratégia considera fatores como preço, tendência, dinâmica e volume de transação, aumentando a confiabilidade do sinal de negociação através da confirmação conjunta de vários indicadores.
  2. Gerenciamento de posições adaptável, controle dinâmico de risco: De acordo com fatores como juros, proporção de risco e ATR da conta, a estratégia pode ajustar dinamicamente o volume de cada posição aberta, reduzindo automaticamente as posições quando a volatilidade do mercado aumenta, para controlar efetivamente o risco.
  3. Aumento de posição da pirâmide, aproveitando as oportunidades da tendência: após a tendência ser estabelecida, a estratégia aumenta a lucratividade da estratégia, aumentando gradualmente a participação na tendência.
  4. Paradas de perda dinâmicas, controle de perdas em tempo real e proteção de lucros: a estratégia ajusta os níveis de parada de perda em tempo real de acordo com as mudanças no ATR, parando em tempo real quando a tendência se inverte, enquanto protege continuamente os lucros obtidos através da estratégia de parada de perda móvel, reduzindo efetivamente a retirada da estratégia.
  5. Gráficos intuitivos facilitam a monitorização e a tomada de decisões: a estratégia traça indicadores-chave e linhas horizontais de stop-loss no gráfico, permitindo que o comerciante monitore intuitivamente a evolução do mercado e a execução da estratégia, fornecendo uma base para ajustes de estratégia em tempo hábil.

Risco estratégico

  1. Risco de otimização de parâmetros: a estratégia contém vários parâmetros que, se os parâmetros forem escolhidos inadequadamente, podem levar ao fraco desempenho da estratégia. Portanto, na aplicação real, os parâmetros precisam ser otimizados e testados para garantir a solidez da estratégia.
  2. Risco de mudança no ambiente de mercado: a estratégia é retrospectiva e otimizada com base em dados históricos, mas o ambiente de mercado pode mudar, resultando em uma grande diferença no desempenho futuro da estratégia em relação ao desempenho histórico. Portanto, é necessário avaliar periodicamente o desempenho da estratégia e, se necessário, fazer ajustes.
  3. Risco de evento de cisne negro: situações extremas de mercado (como a queda de uma tempestade) podem levar a uma maior retração da estratégia. Para lidar com esse risco, pode-se considerar a inclusão de mais medidas de controle de risco na estratégia, como definir o limite máximo de retração e parar de negociar quando o limite for atingido.
  4. Risco de sobreajuste: Se os parâmetros da estratégia são muito complexos, pode haver um fenômeno de sobreajuste, ou seja, a estratégia tem um bom desempenho em dados históricos, mas não é bom em aplicações reais. Para evitar o sobreajuste, a estratégia pode ser avaliada por métodos como a verificação cruzada.

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

  1. Otimização de parâmetros dinâmicos: considerar métodos como o uso de aprendizado de máquina para ajustar os parâmetros da estratégia em tempo real de acordo com as mudanças no ambiente de mercado, aumentando a adaptabilidade da estratégia.
  2. Multi-mercado, multi-variedade: estender a estratégia para mais mercados e variedades, aumentando a solidez da estratégia por meio de investimentos diversificados.
  3. Combinação com análise fundamental: baseada na análise técnica, adicione considerações sobre fatores fundamentais, como macroeconomia e tendências do setor, para melhorar a abrangência da estratégia.
  4. Adicionar a análise de sentimento de mercado: introdução de indicadores de sentimento de mercado, como o índice de pânico, para capturar mudanças extremas de sentimento de mercado e oferecer mais oportunidades de negociação para a estratégia.
  5. Melhorar as medidas de controle de risco: aperfeiçoar ainda mais o sistema de controle de risco, como a introdução de mecanismos de ajuste adaptativo para a estratégia de parada de perdas e melhorar a capacidade de gerenciamento de risco da estratégia.

Resumir

A estratégia através da combinação de vários indicadores, gestão de posições de adaptação, pirâmide de aumento de posição, stop loss dinâmico, etc. métodos, ao mesmo tempo em que aproveitar as oportunidades de tendência de controle rigoroso do risco, tem uma certa estabilidade e capacidade de lucro. Mas a estratégia também existe a otimização de parâmetros, mudanças no ambiente do mercado, eventos de cisne preto, etc. riscos, que precisam de otimização e aperfeiçoamento contínuo na aplicação real.

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

//@version=4
strategy("Enhanced Trading Strategy v5 with Visible SL/TP", overlay=true)

// Input settings
hma_length = input(9, title="HMA Length")
fast_length = input(12, title="MACD Fast Length")
slow_length = input(26, title="MACD Slow Length")
siglen = input(9, title="Signal Smoothing")
atr_length = input(14, title="ATR Length")
rsi_length = input(14, title="RSI Length")
obv_length = input(10, title="OBV Length")
volume_ma_length = input(10, title="Volume MA Length")

// Pyramiding inputs
max_pyramid_positions = input(3, title="Max Pyramid Positions")
pyramid_factor = input(0.5, title="Pyramid Factor")

// Risk and Reward Management Inputs
risk_per_trade = input(1.0, title="Risk per Trade (%)")
atr_multiplier_for_sl = input(1.5, title="ATR Multiplier for Stop Loss")
atr_multiplier_for_tp = input(3.0, title="ATR Multiplier for Take Profit")
trailing_atr_multiplier = input(2.0, title="ATR Multiplier for Trailing Stop")

// Position sizing functions
calc_position_size(equity, risk_pct, atr) =>
    pos_size = (equity * risk_pct / 100) / (atr_multiplier_for_sl * atr)
    pos_size

calc_pyramid_size(current_size, max_positions) =>
    pyramid_size = current_size * (max_positions - strategy.opentrades) / max_positions
    pyramid_size

// Pre-calculate lengths for HMA
half_length = ceil(hma_length / 2)
sqrt_length = round(sqrt(hma_length))

// Calculate indicators
hma = wma(2 * wma(close, half_length) - wma(close, hma_length), sqrt_length)
my_obv = cum(close > close[1] ? volume : close < close[1] ? -volume : 0)
obv_sma = sma(my_obv, obv_length)
[macd_line, signal_line, _] = macd(close, fast_length, slow_length, siglen)
atr = atr(atr_length)
rsi = rsi(close, rsi_length)
vol_ma = sma(volume, volume_ma_length)

// Conditions
long_condition = crossover(macd_line, signal_line) and my_obv > obv_sma and rsi > 50 and volume > vol_ma
short_condition = crossunder(macd_line, signal_line) and my_obv < obv_sma and rsi < 50 and volume > vol_ma

// Strategy Entry with improved risk-reward ratio
var float long_take_profit = na
var float long_stop_loss = na
var float short_take_profit = na
var float short_stop_loss = na

if (long_condition)
    size = calc_position_size(strategy.equity, risk_per_trade, atr)
    strategy.entry("Long", strategy.long, qty = size)
    long_stop_loss := close - atr_multiplier_for_sl * atr
    long_take_profit := close + atr_multiplier_for_tp * atr
    
if (short_condition)
    size = calc_position_size(strategy.equity, risk_per_trade, atr)
    strategy.entry("Short", strategy.short, qty = size)
    short_stop_loss := close + atr_multiplier_for_sl * atr
    short_take_profit := close - atr_multiplier_for_tp * atr

// Drawing the SL/TP lines
// if (not na(long_take_profit))
//     line.new(bar_index[1], long_take_profit, bar_index, long_take_profit, width = 2, color = color.green)
//     line.new(bar_index[1], long_stop_loss, bar_index, long_stop_loss, width = 2, color = color.red)

// if (not na(short_take_profit))
//     line.new(bar_index[1], short_take_profit, bar_index, short_take_profit, width = 2, color = color.green)
//     line.new(bar_index[1], short_stop_loss, bar_index, short_stop_loss, width = 2, color = color.red)

// Pyramiding logic
if (strategy.position_size > 0)
    if (close > strategy.position_avg_price * (1 + pyramid_factor))
        strategy.entry("Long Add", strategy.long, qty = calc_pyramid_size(strategy.position_size, max_pyramid_positions))

if (strategy.position_size < 0)
    if (close < strategy.position_avg_price * (1 - pyramid_factor))
        strategy.entry("Short Add", strategy.short, qty = calc_pyramid_size(-strategy.position_size, max_pyramid_positions))

// Trailing Stop
strategy.exit("Trailing Stop Long", "Long", trail_points = atr * trailing_atr_multiplier, trail_offset = atr * trailing_atr_multiplier)
strategy.exit("Trailing Stop Short", "Short", trail_points = atr * trailing_atr_multiplier, trail_offset = atr * trailing_atr_multiplier)

// Plots
plot(hma, title="HMA", color=color.blue)
plot(obv_sma, title="OBV SMA", color=color.orange)
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_dotted)
plotshape(long_condition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.labelup, text="Long")
plotshape(short_condition, title="Short Entry", location=location.abovebar, color=color.red, style=shape.labeldown, text="Short")