Estratégia de negociação adaptativa multiindicadora baseada em canal gaussiano e RSI estocástico

GC SRSI HLC3 TR RSI
Data de criação: 2025-02-21 11:28:34 última modificação: 2025-02-21 11:28:34
cópia: 0 Cliques: 410
2
focar em
319
Seguidores

Estratégia de negociação adaptativa multiindicadora baseada em canal gaussiano e RSI estocástico Estratégia de negociação adaptativa multiindicadora baseada em canal gaussiano e RSI estocástico

Visão geral

A estratégia é um sistema de negociação integrado que combina o filtro do canal de Gauss com um indicador de RSI aleatório. A estratégia usa modelos matemáticos complexos para construir canais de auto-adaptação que são capazes de filtrar o ruído do mercado de forma eficaz e capturar as mudanças de preços importantes.

Princípio da estratégia

A lógica central da estratégia é baseada nos seguintes componentes principais:

  1. Calculação do canal de Gauss: processamento de dados de preços do HLC3 com o filtro de Gauss de vários pólos, criando um canal adaptativo. Otimização do efeito de filtragem por meio de parâmetros beta e alpha, e redução opcional da lag.
  2. Ajuste de largura de canal: Ajuste dinâmico de largura de canal com base na amplitude de onda real (TR), usando 1.414 como o múltiplo padrão.
  3. RSI aleatório: Combinação de RSI de 14 períodos e um indicador aleatório para produzir um sinal acima de 80 ou abaixo de 20
  4. Condições de entrada: Precisa atender simultaneamente a três condições: ascensão do canal de Gauss, ruptura do preço e sinal de disparo do RSI aleatório.
  5. Lógica de saída: Quando o preço cai para cima do canal de Gauss, o posicionamento é zero.

Vantagens estratégicas

  1. Reliabilidade do sinal: O mecanismo de confirmação de múltiplos indicadores aumenta significativamente a confiabilidade do sinal de negociação.
  2. Adaptabilidade: O canal de Gauss pode ajustar automaticamente a largura do canal de acordo com as flutuações do mercado.
  3. Filtragem de ruído: Os filtros de Gauss são eficazes para reduzir o ruído do mercado.
  4. Alta flexibilidade: oferece vários parâmetros ajustáveis, incluindo o ciclo de passagem, o número de pólos e o parâmetro RSI.
  5. Intuitivo visual: Indica a direção da tendência e os sinais de negociação através da mudança de cor.

Risco estratégico

  1. Sensibilidade de parâmetros: o número de pontos e a configuração do ciclo de amostragem do canal de Gauss têm um grande impacto na performance da estratégia.
  2. Risco de atraso: Apesar de oferecer opções para reduzir o atraso, o indicador em si é um pouco atrasado.
  3. Risco de Falso Breakout: Falso breakout pode ocorrer com frequência no mercado de Forex.
  4. Insuficiência de gestão de fundos: A versão atual não tem um mecanismo de gestão de posições detalhado.

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

  1. Identificação do cenário de mercado: adicionar indicadores de força de tendência e ajustar os parâmetros de estratégia em diferentes cenários de mercado.
  2. Otimização de parâmetros dinâmicos: ajuste automático dos parâmetros do canal de Gauss de acordo com a volatilidade do mercado.
  3. Melhoria na gestão de posições: introdução de um sistema de gestão de posições dinâmico baseado na volatilidade.
  4. Mecanismo de saída reforçado: aumento do stop loss móvel e mecanismo de fechamento parcialmente lucrativo.
  5. Otimização de quadros de tempo: validação de sinais em múltiplos quadros de tempo, aumentando a estabilidade das transações.

Resumir

A estratégia, combinando o filtro de Gauss com o indicador RSI aleatório, constrói um sistema de negociação com uma forte auto-adaptação. A base matemática do Gauss garante a suavidade e a confiabilidade do sinal, enquanto a combinação do RSI aleatório aumenta ainda mais a precisão do tempo de entrada. A principal vantagem da estratégia reside na sua eficiente filtragem do ruído do mercado e na precisão da captação de tendências, mas também requer atenção às questões de otimização numérica e de gestão de risco.

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

//@version=5
strategy(title="Gaussian Channel Strategy v3.0", overlay=true, calc_on_every_tick=false, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, slippage=0, fill_orders_on_standard_ohlc=true)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Gaussian Filter Functions (Must be declared first)
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
f_filt9x(_a, _s, _i) =>
    var int _m2 = 0, var int _m3 = 0, var int _m4 = 0, var int _m5 = 0, var int _m6 = 0, 
    var int _m7 = 0, var int _m8 = 0, var int _m9 = 0, var float _f = .0
    _x = 1 - _a
    _m2 := _i == 9 ? 36  : _i == 8 ? 28 : _i == 7 ? 21 : _i == 6 ? 15 : _i == 5 ? 10 : _i == 4 ? 6 : _i == 3 ? 3 : _i == 2 ? 1 : 0
    _m3 := _i == 9 ? 84  : _i == 8 ? 56 : _i == 7 ? 35 : _i == 6 ? 20 : _i == 5 ? 10 : _i == 4 ? 4 : _i == 3 ? 1 : 0
    _m4 := _i == 9 ? 126 : _i == 8 ? 70 : _i == 7 ? 35 : _i == 6 ? 15 : _i == 5 ? 5  : _i == 4 ? 1 : 0
    _m5 := _i == 9 ? 126 : _i == 8 ? 56 : _i == 7 ? 21 : _i == 6 ? 6  : _i == 5 ? 1  : 0 
    _m6 := _i == 9 ? 84  : _i == 8 ? 28 : _i == 7 ? 7  : _i == 6 ? 1  : 0 
    _m7 := _i == 9 ? 36  : _i == 8 ? 8  : _i == 7 ? 1  : 0 
    _m8 := _i == 9 ? 9   : _i == 8 ? 1  : 0 
    _m9 := _i == 9 ? 1   : 0
    _f := math.pow(_a, _i) * nz(_s) + _i * _x * nz(_f[1]) - (_i >= 2 ? _m2 * math.pow(_x, 2) * nz(_f[2]) : 0) + (_i >= 3 ? _m3 * math.pow(_x, 3) * nz(_f[3]) : 0) - (_i >= 4 ? _m4 * math.pow(_x, 4) * nz(_f[4]) : 0) + (_i >= 5 ? _m5 * math.pow(_x, 5) * nz(_f[5]) : 0) - (_i >= 6 ? _m6 * math.pow(_x, 6) * nz(_f[6]) : 0) + (_i >= 7 ? _m7 * math.pow(_x, 7) * nz(_f[7]) : 0) - (_i >= 8 ? _m8 * math.pow(_x, 8) * nz(_f[8]) : 0) + (_i == 9 ? _m9 * math.pow(_x, 9) * nz(_f[9]) : 0)

f_pole(_a, _s, _i) =>
    _f1 = f_filt9x(_a, _s, 1)
    _f2 = _i >= 2 ? f_filt9x(_a, _s, 2) : 0.0
    _f3 = _i >= 3 ? f_filt9x(_a, _s, 3) : 0.0
    _f4 = _i >= 4 ? f_filt9x(_a, _s, 4) : 0.0
    _f5 = _i >= 5 ? f_filt9x(_a, _s, 5) : 0.0
    _f6 = _i >= 6 ? f_filt9x(_a, _s, 6) : 0.0
    _f7 = _i >= 7 ? f_filt9x(_a, _s, 7) : 0.0
    _f8 = _i >= 8 ? f_filt9x(_a, _s, 8) : 0.0
    _f9 = _i == 9 ? f_filt9x(_a, _s, 9) : 0.0
    _fn = _i == 1 ? _f1 : _i == 2 ? _f2 : _i == 3 ? _f3 : _i == 4 ? _f4 : _i == 5 ? _f5 : _i == 6 ? _f6 : _i == 7 ? _f7 : _i == 8 ? _f8 : _i == 9 ? _f9 : na
    [_fn, _f1]

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------


// Gaussian Channel
int poles = input.int(4, "Poles", 1, 9, group="Gaussian Channel")
int period = input.int(144, "Sampling Period", 2, group="Gaussian Channel")
float mult = input.float(1.414, "True Range Multiplier", group="Gaussian Channel")
bool reducedLag = input.bool(false, "Reduced Lag Mode", group="Gaussian Channel")
bool fastResponse = input.bool(false, "Fast Response Mode", group="Gaussian Channel")

// Stochastic RSI
smoothK = input.int(3, "K", 1, group="Stochastic RSI")
smoothD = input.int(3, "D", 1, group="Stochastic RSI")
lengthRSI = input.int(14, "RSI Length", 1, group="Stochastic RSI")
lengthStoch = input.int(14, "Stochastic Length", 1, group="Stochastic RSI")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Calculations
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Gaussian Channel
beta = (1 - math.cos(4*math.asin(1)/period)) / (math.pow(1.414, 2/poles) - 1)
alpha = -beta + math.sqrt(math.pow(beta, 2) + 2*beta)
lag = (period - 1)/(2*poles)

src = hlc3
srcData = reducedLag ? src + (src - src[lag]) : src
trData = reducedLag ? ta.tr + (ta.tr - ta.tr[lag]) : ta.tr

[filterMain, filter1] = f_pole(alpha, srcData, poles)
[filterTRMain, filterTR1] = f_pole(alpha, trData, poles)

finalFilter = fastResponse ? (filterMain + filter1)/2 : filterMain
finalTR = fastResponse ? (filterTRMain + filterTR1)/2 : filterTRMain

hband = finalFilter + finalTR * mult
lband = finalFilter - finalTR * mult

// Stochastic RSI
rsi = ta.rsi(close, lengthRSI)
k = ta.sma(ta.stoch(rsi, rsi, rsi, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Trading Logic
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
gaussianGreen = finalFilter > finalFilter[1]
priceAbove = close > hband
stochCondition = k > 80 or k < 20

longCondition = gaussianGreen and priceAbove and stochCondition 
exitCondition = ta.crossunder(close, hband) 

strategy.entry("Long", strategy.long, when=longCondition)
strategy.close("Long", when=exitCondition)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Visuals
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
filterColor = finalFilter > finalFilter[1] ? #0aff68 : #ff0a5a
plot(finalFilter, "Filter", filterColor, 2)
plot(hband, "High Band", filterColor)
plot(lband, "Low Band", filterColor)
fill(plot(hband), plot(lband), color.new(filterColor, 90), "Channel Fill")