O recurso está a ser carregado... Carregamento...

Sistema de negociação quantitativo de volatilidade adaptativa e de impulso (AVMQTS)

Autora:ChaoZhang, Data: 2024-11-27 14:20:24
Tags:ATRMACDSMATPSL

img

Resumo

Esta estratégia é um sistema de negociação adaptativo que combina os indicadores de volatilidade e momentum para capturar as tendências do mercado através da coordenação de vários indicadores técnicos. A estratégia usa o indicador ATR para monitorar a volatilidade do mercado, o MACD para julgar o momentum da tendência e combina os indicadores de momentum de preço para confirmar os sinais de negociação, com um mecanismo flexível de stop-loss e take-profit. O sistema tem forte adaptabilidade e pode ajustar automaticamente a frequência de negociação e o controle de posição de acordo com as condições do mercado.

Princípios de estratégia

A estratégia baseia-se em um sistema de indicadores triplos como sua lógica de negociação central: primeiro, o ATR é usado para medir as condições de volatilidade do mercado para fornecer referência de volatilidade para decisões de negociação; segundo, os cruzes douradas e da morte do indicador MACD são usados para capturar pontos de virada da tendência, com cruzes de linha rápidas e lentas do MACD usadas como os principais sinais de gatilho de negociação; terceiro, os indicadores de impulso de preço são usados para verificação, observando mudanças de preço em relação aos períodos anteriores para confirmar a força da tendência. O sistema também incorpora uma média móvel de 50 dias como um filtro de tendência, permitindo apenas posições longas quando o preço está acima da média móvel e posições curtas quando abaixo. Para evitar o excesso de negociação, a estratégia de sinal impõe intervalos mínimos de negociação e opcionalmente execução alternada.

Vantagens da estratégia

  1. Validação cruzada de múltiplos indicadores: através da coordenação de indicadores em três dimensões - volatilidade, tendência e impulso, melhorando muito a confiabilidade dos sinais de negociação.
  2. Forte adaptabilidade: a estratégia pode ajustar-se dinamicamente de acordo com as condições de volatilidade do mercado, adaptando-se a diferentes ambientes de mercado.
  3. Controlo de risco abrangente: as configurações de stop-loss e take-profit baseadas em percentagem controlam eficazmente o risco de transação única.
  4. Frequência de negociação controlada: Evita o excesso de negociação através de configurações mínimas de intervalo de negociação e mecanismo de alternância de sinais.
  5. Estrutura do sistema clara: elevado grau de modularidade do código com limites claros entre os módulos funcionais, facilitando a manutenção e a otimização.

Riscos estratégicos

  1. Risco de mercado oscilante: em mercados laterais, podem ser gerados múltiplos sinais falsos, levando a stop-losses consecutivos.
  2. Risco de deslizamento: durante períodos de intensa volatilidade, os preços reais das transacções podem desviar-se significativamente dos preços de desencadeamento do sinal.
  3. Sensibilidade dos parâmetros: a estratégia utiliza múltiplos indicadores técnicos e a razoabilidade das definições dos parâmetros afeta diretamente o desempenho da estratégia.
  4. Dependência do ambiente de mercado: a estratégia tem um melhor desempenho em mercados com tendências claras, mas pode ter um desempenho inferior em outras condições de mercado.

Orientações para a otimização da estratégia

  1. Introduzir um mecanismo de reconhecimento do ambiente de mercado: adicionar indicadores de força da tendência para utilizar diferentes configurações de parâmetros em diferentes ambientes de mercado.
  2. Otimizar o mecanismo de stop-loss e take-profit: considerar o ajustamento dinâmico dos rácios de stop-loss e take-profit com base no ATR para se adaptar melhor à volatilidade do mercado.
  3. Adicionar a gestão de posições: Recomendar a introdução de um sistema dinâmico de gestão de posições baseado na volatilidade, reduzindo adequadamente o volume de negociação durante períodos de alta volatilidade.
  4. Adicionar mais condições de filtragem: considere adicionar volume, volatilidade e outros indicadores de filtragem para melhorar a qualidade do sinal.

Resumo

Esta estratégia é um sistema de negociação quantitativo bem projetado e logicamente rigoroso que consegue capturar efetivamente as tendências do mercado através do uso de múltiplos indicadores técnicos. O sistema fez considerações detalhadas no controle de riscos e execução de negociações, mostrando boa praticidade.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("[ETH] Volatility & Momentum Adaptive Strategy", shorttitle="Definitive 1 day Ethereum Signal", overlay=true, initial_capital=10000, currency=currency.USD)

// === Input Parameters === //
trade_size = input.float(5, title="Trade Size (ETH)")
atr_length = input.int(8, minval=1, title="ATR Length")
macd_fast = input.int(8, minval=1, title="MACD Fast Length")
macd_slow = input.int(7, minval=1, title="MACD Slow Length")
macd_signal = input.int(9, minval=1, title="MACD Signal Length")
momentum_length = input.int(37, title="Momentum Length")
stop_loss_percent = input.float(9.9, title="Stop Loss Percentage (%)")
take_profit_percent = input.float(9.0, title="Take Profit Percentage (%)")
alternate_signal = input.bool(true, title="Alternate Buy/Sell Signals")

// === Indicators === //
// ATR to measure volatility
atr = ta.atr(atr_length)

// MACD for trend momentum
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)
macd_cross_up = ta.crossover(macd_line, signal_line)
macd_cross_down = ta.crossunder(macd_line, signal_line)

// Momentum
momentum = ta.mom(close, momentum_length)

// === Signal Control Variables === //
var bool last_signal_long = na
var int last_trade_bar = na
min_bars_between_trades = 5 // Adjust for minimal trade frequency control
time_elapsed = na(last_trade_bar) or (bar_index - last_trade_bar) >= min_bars_between_trades

// === Buy and Sell Conditions === //
// Buy when:
buy_signal = (macd_cross_up and momentum > 0 and close > ta.sma(close, 50) and time_elapsed)

// Sell when:
sell_signal = (macd_cross_down and momentum < 0 and close < ta.sma(close, 50) and time_elapsed)

// Enforce alternate signals if selected
if alternate_signal
    buy_signal := buy_signal and (na(last_signal_long) or not last_signal_long)
    sell_signal := sell_signal and (not na(last_signal_long) and last_signal_long)

// === Trade Execution === //
// Buy Position
if (buy_signal)
    if strategy.position_size < 0
        strategy.close("Short")
    strategy.entry("Long", strategy.long, qty=trade_size)
    last_signal_long := true
    last_trade_bar := bar_index

// Sell Position
if (sell_signal)
    if strategy.position_size > 0
        strategy.close("Long")
    strategy.entry("Short", strategy.short, qty=trade_size)
    last_signal_long := false
    last_trade_bar := bar_index

// === Stop Loss and Take Profit === //
if strategy.position_size > 0
    long_take_profit = strategy.position_avg_price * (1 + take_profit_percent / 100)
    long_stop_loss = strategy.position_avg_price * (1 - stop_loss_percent / 100)
    strategy.exit("TP/SL Long", from_entry="Long", limit=long_take_profit, stop=long_stop_loss)

if strategy.position_size < 0
    short_take_profit = strategy.position_avg_price * (1 - take_profit_percent / 100)
    short_stop_loss = strategy.position_avg_price * (1 + stop_loss_percent / 100)
    strategy.exit("TP/SL Short", from_entry="Short", limit=short_take_profit, stop=short_stop_loss)

// === Visual Signals === //
plotshape(series=buy_signal and time_elapsed, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=sell_signal and time_elapsed, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")


Relacionados

Mais.