Estratégia avançada de negociação quantitativa: sistema de execução automatizado com base no momentum intradiário e na gestão de risco

DOJI SL TP ATR momentum
Data de criação: 2025-02-21 14:25:50 última modificação: 2025-02-27 16:57:06
cópia: 2 Cliques: 446
2
focar em
319
Seguidores

Estratégia avançada de negociação quantitativa: sistema de execução automatizado com base no momentum intradiário e na gestão de risco Estratégia avançada de negociação quantitativa: sistema de execução automatizado com base no momentum intradiário e na gestão de risco

Visão geral

Trata-se de uma estratégia de negociação totalmente automatizada baseada na dinâmica diária, combinada com um rigoroso gerenciamento de risco e um sistema de gerenciamento de posições preciso. A estratégia funciona principalmente durante o horário de negociação em Londres, procurando oportunidades de negociação identificando mudanças na dinâmica do mercado e excluindo os Doji, enquanto impõe regras de parada diária para controlar o risco.

Princípio da estratégia

A lógica central da estratégia baseia-se em vários componentes-chave. Primeiro, o tempo de negociação é limitado ao horário de Londres (excluindo o 0 e o 19), para garantir a liquidez suficiente do mercado. Os sinais de entrada são baseados em movimentos de preços.

Vantagens estratégicas

  1. Gerenciamento de risco abrangente: inclui stop loss fixo, regras de stop loss diárias e gerenciamento de posição dinâmico
  2. Adaptabilidade: o tamanho das transações é automaticamente ajustado de acordo com os direitos e interesses da conta, adaptando-se a diferentes tamanhos de fundos
  3. Garantia de liquidez: Execução de transações estritamente limitada ao horário de negociação de Londres para evitar riscos de baixa liquidez
  4. Filtragem de Falso-Signal: reduz os danos causados por Falso-Breakthroughs, excluindo Doji e sinais contínuos
  5. Lógicas de execução claras: condições de entrada e saída claras para facilitar o monitoramento e otimização

Risco estratégico

  1. Risco de volatilidade do mercado: o stop loss fixo pode não ser flexível durante períodos de alta volatilidade
  2. Risco de deslizamento de preço: pode haver um deslizamento maior em um mercado em rápida volatilidade
  3. Dependência de tendência: estratégias que podem gerar mais falsos sinais em mercados turbulentos
  4. Sensibilidade de parâmetros: a configuração do stop loss tem maior influência no desempenho da estratégia As soluções incluem: a adoção de um mecanismo de stop loss dinâmico, o aumento de filtros de volatilidade do mercado, a introdução de indicadores de confirmação de tendências, etc.

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

  1. Introdução de um mecanismo de parada de perda adaptável: ajuste dinâmico do intervalo de parada com base no ATR ou na taxa de flutuação
  2. Aumentar o filtro do cenário de mercado: adicionar indicadores de intensidade de tendência e aumentar o tempo de manutenção de posições quando há uma tendência clara
  3. Mecanismo de confirmação de sinal optimizado: combinação de volume de tráfego e outros indicadores técnicos para aumentar a confiabilidade do sinal
  4. Melhorar a gestão de fundos: Introdução de um sistema de gestão de risco integrado, considerando a retirada de controlos
  5. Aumentar a análise de microestrutura do mercado: Integração de dados de fluxo de pedidos para melhorar a precisão de entrada

Resumir

A estratégia constrói uma estrutura de negociação completa através da combinação de breakouts dinâmicos, gestão de risco rigorosa e execução automática. A principal vantagem da estratégia reside no seu sistema de controle de risco abrangente e design adaptativo, mas ainda requer otimização em termos de identificação de ambientes de mercado e filtragem de sinais.

Código-fonte da estratégia
/*backtest
start: 2025-01-21 00:00:00
end: 2025-02-08 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Trading Strategy for XAUUSD (Gold) – Automated Execution Plan", overlay=true, initial_capital=10000, currency=currency.USD)

//────────────────────────────
// 1. RISK MANAGEMENT & POSITION SIZING
//────────────────────────────
// Configurable inputs for Stop Loss and Take Profit
sl = input.float(title="Stop Loss ($)", defval=5, step=0.1)
tp = input.float(title="Take Profit ($)", defval=15, step=0.1)

// Volume: 0.01 lots per $100 of equity → lotSize = equity / 10000
lotSize = strategy.equity / strategy.initial_capital

//────────────────────────────
// 2. TRADING HOURS (London Time)
//────────────────────────────
// Get the current bar's timestamp in London time.
londonTime   = time(timeframe.period, "", "Europe/London")
londonHour   = hour(londonTime)
tradingAllowed = (londonHour != 0) and (londonHour < 19)

//────────────────────────────
// 3. DOJI CANDLE DEFINITION
//────────────────────────────
// A candle is considered a doji if the sum of its upper and lower shadows is greater than its body.
upperShadow = high - math.max(open, close)
lowerShadow = math.min(open, close) - low
bodySize    = math.abs(close - open)
isDoji      = (upperShadow + lowerShadow) > bodySize

//────────────────────────────
// 4. ENTRY CONDITIONS
//────────────────────────────
// Buy Signal:
//   • Current candle’s high > previous candle’s high.
//   • Current candle’s low is not below previous candle’s low.
//   • Bullish candle (close > open) and not a doji.
//   • Skip if previous candle already qualified.
buyRaw    = (high > high[1]) and (low >= low[1]) and (close > open) and (not isDoji)
buySignal = buyRaw and not (buyRaw[1] ? true : false)

// Sell Signal:
//   • Current candle’s low < previous candle’s low.
//   • Current candle’s high is not above previous candle’s high.
//   • Bearish candle (close < open) and not a doji.
//   • Skip if previous candle already qualified.
sellRaw    = (low < low[1]) and (high <= high[1]) and (close < open) and (not isDoji)
sellSignal = sellRaw and not (sellRaw[1] ? true : false)

//────────────────────────────
// 5. DAILY TAKE PROFIT (TP) RULE
//────────────────────────────
// Create a day-string (year-month-day) using London time.
// This flag will block new trades for the rest of the day if a TP is hit.
var string lastDay = ""
currentDay = str.tostring(year(londonTime)) + "-" + str.tostring(month(londonTime)) + "-" + str.tostring(dayofmonth(londonTime))
var bool dailyTPHit = false
if lastDay != currentDay
    dailyTPHit := false
    lastDay := currentDay

//────────────────────────────
// 6. TRACK TRADE ENTRY & EXIT FOR TP DETECTION
//────────────────────────────
// We record the TP target when a new trade is entered.
// Then, when a trade closes, if the bar’s high (for long) or low (for short) reached the TP target,
// we assume the TP was hit and block new trades for the day.
var float currentTP = na
var int currentTradeType = 0   // 1 for long, -1 for short

// Detect a new trade entry (transition from no position to a position).
tradeEntered = (strategy.position_size != 0 and strategy.position_size[1] == 0)
if tradeEntered
    if strategy.position_size > 0
        currentTP := strategy.position_avg_price + tp
        currentTradeType := 1
    else if strategy.position_size < 0
        currentTP := strategy.position_avg_price - tp
        currentTradeType := -1

// Detect trade closure (transition from position to flat).
tradeClosed = (strategy.position_size == 0 and strategy.position_size[1] != 0)
if tradeClosed and not na(currentTP)
    // For a long trade, if the bar's high reached the TP target;
    // for a short trade, if the bar's low reached the TP target,
    // mark the daily TP flag.
    if (currentTradeType == 1 and high >= currentTP) or (currentTradeType == -1 and low <= currentTP)
        dailyTPHit := true
    currentTP := na
    currentTradeType := 0

//────────────────────────────
// 7. ORDER EXECUTION
//────────────────────────────
// Only open a new position if no position is open, trading is allowed, and daily TP rule is not active.
if (strategy.position_size == 0) and tradingAllowed and (not dailyTPHit)
    if buySignal
        strategy.entry("Long", strategy.long, qty=lotSize)
    if sellSignal
        strategy.entry("Short", strategy.short, qty=lotSize)

//────────────────────────────
// 8. EXIT ORDERS (Risk Management)
//────────────────────────────
// For long positions: SL = entry price - Stop Loss, TP = entry price + Take Profit.
// For short positions: SL = entry price + Stop Loss, TP = entry price - Take Profit.
if strategy.position_size > 0
    longSL = strategy.position_avg_price - sl
    longTP = strategy.position_avg_price + tp
    strategy.exit("Exit Long", from_entry="Long", stop=longSL, limit=longTP)
if strategy.position_size < 0
    shortSL = strategy.position_avg_price + sl
    shortTP = strategy.position_avg_price - tp
    strategy.exit("Exit Short", from_entry="Short", stop=shortSL, limit=shortTP)

//────────────────────────────
// 9. VISUALIZATION
//────────────────────────────
plotshape(buySignal and tradingAllowed and (not dailyTPHit) and (strategy.position_size == 0), title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(sellSignal and tradingAllowed and (not dailyTPHit) and (strategy.position_size == 0), title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")