Sistema de negociação de tendências adaptável multidimensional inteligente

FVG RSI MACD VWAP EMA ATR supertrend
Data de criação: 2025-02-21 11:37:36 última modificação: 2025-02-21 11:37:36
cópia: 0 Cliques: 483
2
focar em
319
Seguidores

Sistema de negociação de tendências adaptável multidimensional inteligente Sistema de negociação de tendências adaptável multidimensional inteligente

Visão geral

A estratégia é um sistema de negociação inteligente que combina vários indicadores tecnológicos para identificar oportunidades de mercado por meio de uma análise integrada do Fair Value Gap (FVG), sinais de tendência e comportamento de preços. O sistema usa um mecanismo de dupla estratégia, combinando o acompanhamento de tendências e características de negociação de faixas, para otimizar o desempenho das negociações por meio de gerenciamento de posição dinâmico e mecanismo de saída multidimensional.

Princípio da estratégia

A lógica central da estratégia baseia-se nas seguintes dimensões:

  1. Identificação de lacunas FVG - busca de oportunidades de negócios potenciais através do cálculo do tamanho das lacunas de salto de preço
  2. Sistema de confirmação de tendências - combina a linha média de 200 dias, o indicador SuperTrend e o MACD para confirmar as tendências do mercado
  3. Confirmação de fundos inteligentes - usando o RSI como um gatilho para a negociação de supercompra, supervenda, anormalidade de volume de transação e padrões de comportamento de preços
  4. Gerenciamento de posições dinâmico - variação de tamanho de posição com base no ATR para garantir a consistência da abertura de risco
  5. Mecanismo de saída em níveis múltiplos - gerenciamento de saídas de transações usando uma combinação de tracking stop loss e stop loss de meta

Vantagens estratégicas

  1. Adaptabilidade - estratégias que ajustam automaticamente os parâmetros e posições de acordo com a volatilidade do mercado
  2. Controle de risco perfeito - controle de risco através de múltiplos filtros e gestão rigorosa de posições
  3. Qualidade de sinal confiável - aumento da precisão dos sinais de transação com confirmação de indicadores multidimensionais
  4. Modos de negociação flexíveis - Capturando tendências e oportunidades de desaceleração
  5. A ciência da gestão de fundos - a utilização de uma gestão de risco percentual para garantir a racionalidade da utilização de fundos

Risco estratégico

  1. Sensibilidade de parâmetros - a configuração de vários parâmetros pode afetar o desempenho da estratégia e precisa de otimização contínua
  2. Dependência do cenário de mercado - Falso sinal de ruptura pode ocorrer em certos cenários de mercado
  3. Efeitos de deslizamento - mercados com menor liquidez podem enfrentar deslizamentos maiores
  4. Complexidade computacional - o cálculo de múltiplos indicadores pode causar atraso no sinal
  5. Requisitos de capital mais elevados - uma estratégia de implementação completa requer um maior capital inicial

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

  1. Otimização de peso de indicadores - métodos de aprendizado de máquina podem ser introduzidos para ajustar dinamicamente o peso de cada indicador
  2. Aumento da adaptabilidade do mercado - mecanismos de adaptação para aumentar a volatilidade do mercado
  3. Melhorias na filtragem de sinais - introdução de mais indicadores de microestrutura de mercado
  4. Otimização do mecanismo de execução - aumento do mecanismo inteligente de segmentação de pedidos e redução dos custos de impacto
  5. Modernização do controlo de riscos - adição de um sistema dinâmico de gestão de orçamento de riscos

Resumir

A estratégia utiliza vários indicadores técnicos e técnicas de negociação para construir um sistema de negociação completo. Sua vantagem reside na capacidade de se adaptar às mudanças do mercado, mantendo um controle rigoroso do risco. Embora haja algum espaço para otimização, é uma estratégia de negociação quantitativa razoavelmente projetada.

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

//@version=6
strategy("Adaptive Trend Signals", overlay=true, margin_long=100, margin_short=100, pyramiding=1, initial_capital=50000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

// 1. Enhanced Inputs with Debugging Options

fvgSize = input.float(0.25, "FVG Size (%)", minval=0.1, step=0.05)
atrPeriod = input.int(14, "ATR Period")  // Increased for better stability
rsiPeriod = input.int(7, "RSI Period")
useSuperTrend = input.bool(true, "Use SuperTrend Filter")
useTrendFilter = input.bool(false, "Use 200 EMA Trend Filter")  // Disabled by default
volatilityThreshold = input.float(1.0, "Volatility Threshold (ATR%)", step=0.1)  // Increased threshold
useVolume = input.bool(true, "Use Volume Confirmation")
riskPercentage = input.float(2.0, "Risk %", minval=0.1, maxval=5)

// 2. Advanced Market Filters with Trend Change Detection
var int marketTrend = 0
var bool trendChanged = false
ema200 = ta.ema(close, 200)
prevMarketTrend = marketTrend
marketTrend := close > ema200 ? 1 : close < ema200 ? -1 : 0
trendChanged := marketTrend != prevMarketTrend

// 3. Enhanced FVG Detection with Adjusted Volume Requirements
bullishFVG = (low[1] > high[2] and (low[1] - high[2])/high[2]*100 >= fvgSize) or 
             (low > high[1] and (low - high[1])/high[1]*100 >= fvgSize)

bearishFVG = (high[1] < low[2] and (low[2] - high[1])/low[2]*100 >= fvgSize) or 
             (high < low[1] and (low[1] - high)/low[1]*100 >= fvgSize)

// 4. Smart Money Confirmation System with Signal Debugging
rsi = ta.rsi(close, rsiPeriod)
[macdLine, signalLine, _] = ta.macd(close, 5, 13, 5)
[supertrendLine, supertrendDir] = ta.supertrend(3, 10)

// Script 2 Indicators
[macdLine2, signalLine2, _] = ta.macd(close, 4, 11, 3)
[supertrendLine2, supertrendDir2] = ta.supertrend(3, 7)
vWAP = ta.vwap(close)
ema21 = ta.ema(close, 21)

// 5. Price Action Filters from Script 2
breakoutLong = close > ta.highest(high, 5) and (useVolume ? volume > ta.sma(volume, 10)*1.8 : true)
breakdownShort = close < ta.lowest(low, 5) and (useVolume ? volume > ta.sma(volume, 10)*1.8 : true)
bullishRejection = low < vWAP and close > (high + low)/2 and close > open
bearishRejection = high > vWAP and close < (high + low)/2 and close < open

// 6. Combined Entry Conditions
longBaseCond = (bullishFVG and rsi < 35 and macdLine > signalLine) or
              (bullishFVG and rsi < 38 and supertrendDir2 == 1) or
              (breakoutLong and macdLine2 > signalLine2) or
              (bullishRejection and close > ema21)

shortBaseCond = (bearishFVG and rsi > 65 and macdLine < signalLine) or
               (bearishFVG and rsi > 62 and supertrendDir2 == -1) or
               (breakdownShort and macdLine2 < signalLine2) or
               (bearishRejection and close < ema21)

longSignal = longBaseCond and (not useSuperTrend or supertrendDir == 1) and (not useTrendFilter or marketTrend == 1)

shortSignal = shortBaseCond and (not useSuperTrend or supertrendDir == -1) and (not useTrendFilter or marketTrend == -1)

// 7. Position Sizing with Minimum Quantity
var float longEntryPrice = na
var float shortEntryPrice = na
atr = ta.atr(atrPeriod)
positionSizeScript1 = math.max(strategy.equity * riskPercentage / 100 / (atr * 1.5), 1)
positionSizeScript2 = strategy.equity * riskPercentage / 100 / (atr * 2)

// 8. Dynamic Exit System with Dual Strategies
var float trailPrice = na
if longSignal or trendChanged and marketTrend == 1
    trailPrice := close
if shortSignal or trendChanged and marketTrend == -1
    trailPrice := close

trailOffset = atr * 0.75

// Script 1 Exit Logic
if strategy.position_size > 0
    trailPrice := math.max(trailPrice, close)
    strategy.exit("Long Exit", "Long", stop=trailPrice - trailOffset, trail_offset=trailOffset)
    
if strategy.position_size < 0
    trailPrice := math.min(trailPrice, close)
    strategy.exit("Short Exit", "Short", stop=trailPrice + trailOffset, trail_offset=trailOffset)

// Script 2 Exit Logic
longStop = close - atr * 1.2
shortStop = close + atr * 1.2
strategy.exit("Long Exit 2", "Long", stop=longStop, limit=na(longEntryPrice) ? na : longEntryPrice + (atr * 4), trail_points=not na(longEntryPrice) and close > longEntryPrice + atr ? atr * 3 : na, trail_offset=atr * 0.8)
strategy.exit("Short Exit 2", "Short", stop=shortStop, limit=na(shortEntryPrice) ? na : shortEntryPrice - (atr * 4), trail_points=not na(shortEntryPrice) and close < shortEntryPrice - atr ? atr * 3 : na, trail_offset=atr * 0.8)

// 9. Trend Change Signals and Visuals
// plot(supertrendLine, "SuperTrend", color=color.new(#2962FF, 0))
// plot(supertrendLine2, "SuperTrend 2", color=color.new(#FF00FF, 0))
// plot(ema200, "200 EMA", color=color.new(#FF6D00, 0))
// plot(ema21, "21 EMA", color=color.new(#00FFFF, 0))

bgcolor(marketTrend == 1 ? color.new(color.green, 90) : 
       marketTrend == -1 ? color.new(color.red, 90) : na)

plotshape(trendChanged and marketTrend == 1, "Bullish Trend", shape.labelup, 
         location.belowbar, color=color.green, text="▲ Trend Up")
plotshape(trendChanged and marketTrend == -1, "Bearish Trend", shape.labeldown, 
         location.abovebar, color=color.red, text="▼ Trend Down")

// 10. Signal Visualization for Both Strategies
// plotshape(longSignal, "Long Entry", shape.triangleup, location.belowbar, 
//          color=color.new(#00FF00, 0), size=size.small)
// plotshape(shortSignal, "Short Entry", shape.triangledown, location.abovebar, 
//          color=color.new(#FF0000, 0), size=size.small)
// plotshape(breakoutLong, "Breakout Long", shape.flag, location.belowbar, 
//          color=color.new(#00FF00, 50), size=size.small)
// plotshape(breakdownShort, "Breakdown Short", shape.flag, location.abovebar, 
//          color=color.new(#FF0000, 50), size=size.small)

// 11. Order Execution with Dual Entry Systems
if trendChanged and marketTrend == 1
    strategy.entry("Long Trend", strategy.long, qty=positionSizeScript1)
    longEntryPrice := close
    
if trendChanged and marketTrend == -1
    strategy.entry("Short Trend", strategy.short, qty=positionSizeScript1)
    shortEntryPrice := close

if longSignal and strategy.position_size == 0
    strategy.entry("Long Signal", strategy.long, qty=positionSizeScript2)
    longEntryPrice := close
    
if shortSignal and strategy.position_size == 0
    strategy.entry("Short Signal", strategy.short, qty=positionSizeScript2)
    shortEntryPrice := close