Canal Gaussiano multiperíodo combinado com estratégia de rastreamento de tendência StochRSI

RSI HLC3 TR SMA BAND
Data de criação: 2025-02-18 13:50:36 última modificação: 2025-02-18 13:50:36
cópia: 3 Cliques: 503
1
focar em
1617
Seguidores

Canal Gaussiano multiperíodo combinado com estratégia de rastreamento de tendência StochRSI

Visão geral

A estratégia é um sistema de negociação de acompanhamento de tendências baseado no Gauss Swing e no Stoch RSI. A estratégia identifica tendências de mercado através do Gauss Channel e combina com o Stoch RSI para otimizar o tempo de entrada. O sistema utiliza um método de combinação de múltiplos itens para construir o Gauss Channel e acompanhar a tendência de preços através da adaptação dinâmica da trajetória ascendente e descendente, permitindo um acompanhamento preciso do movimento do mercado.

Princípio da estratégia

O núcleo da estratégia é um canal de preços construído com base no algoritmo de Gosnell Wave. A implementação inclui os seguintes passos-chave:

  1. Implementar filtragem de Gauss de 9o grau usando a função polinomial f_filt9x para melhorar a filtragem por otimização de pólos
  2. Calculação de linhas de onda principais e canais de taxa de flutuação com base no preço do HLC3
  3. A introdução do modo Reduced Lag reduziu o atraso do filtro e o modo FastResponse aumentou a velocidade de resposta.
  4. O indicador StochRSI é usado para determinar os sinais de negociação para a faixa de overbought e oversold (8020)
  5. Quando o canal de Gauss sobe e o preço entra em trânsito, a combinação com o indicador StochRSI gera um sinal de multiplicação
  6. Quando o preço cai para cima, você começa a se posicionar.

Vantagens estratégicas

  1. A Gaussian possui uma excelente capacidade de redução de ruído, filtrando efetivamente o ruído do mercado.
  2. Permite um acompanhamento suave da tendência através de multiplexação e redução de falsos sinais
  3. Suporte para a otimização de atrasos e modos de resposta rápida, com flexibilidade de acordo com as características do mercado
  4. Combinação com o StochRSI para otimizar o tempo de entrada e aumentar a taxa de sucesso das negociações
  5. Utilização de largura de canal dinâmica, adaptando-se a variações na taxa de flutuação do mercado

Risco estratégico

  1. Há um certo atraso de GoSpinWave, que pode causar entrada ou saída em pouco tempo.
  2. Os sinais de negociação podem ser frequentes em mercados turbulentos, aumentando os custos de negociação.
  3. StochRSI pode gerar sinais de atraso em certas condições de mercado
  4. O processo de otimização de parâmetros é complexo, e os parâmetros precisam ser reajustados em diferentes circunstâncias de mercado
  5. O sistema exige recursos de computação mais elevados e há um certo atraso na computação em tempo real

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

  1. Introdução de mecanismos de otimização de parâmetros adaptativos, ajustando os parâmetros de acordo com a dinâmica do mercado
  2. Adição de módulos de identificação de cenários de mercado, com diferentes combinações de parâmetros em diferentes condições de mercado
  3. Otimização do algoritmo de Gauss para reduzir ainda mais a latência de cálculo
  4. Introdução de mais indicadores técnicos para verificação cruzada e melhoria da confiabilidade do sinal
  5. Desenvolvimento de mecanismos inteligentes de parada de prejuízos para aumentar a capacidade de controle de risco

Resumir

A estratégia, através da combinação das ondas de Gauss e dos indicadores StochRSI, permite um acompanhamento eficaz das tendências do mercado. O sistema possui uma boa capacidade de redução de ruído e identificação de tendências, mas também apresenta um certo atraso e dificuldade de otimização de parâmetros. Com otimização e aperfeiçoamento contínuos, a estratégia espera obter ganhos estáveis em negociações reais.

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

//@version=5
strategy(title="Demo GPT - Gaussian Channel Strategy v3.0", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=0, default_qty_type=strategy.percent_of_equity, default_qty_value=250)

// ============================================
// Gaussian Functions (Must be at top)
// ============================================
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.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

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]

// ============================================
// Date Filter
// ============================================
startDate = input(timestamp("1 Jan 2018"), "Start Date", group="Time Settings")
endDate = input(timestamp("31 Dec 2069"), "End Date", group="Time Settings")
timeCondition = true

// ============================================
// Stochastic RSI (Hidden Calculations)
// ============================================
stochRsiK = input.int(3, "Stoch RSI K", group="Stochastic RSI", tooltip="Only for calculations, not visible")
stochRsiD = input.int(3, "Stoch RSI D", group="Stochastic RSI")
rsiLength = input.int(14, "RSI Length", group="Stochastic RSI")
stochLength = input.int(14, "Stochastic Length", group="Stochastic RSI")

rsiValue = ta.rsi(close, rsiLength)
k = ta.sma(ta.stoch(rsiValue, rsiValue, rsiValue, stochLength), stochRsiK)
d = ta.sma(k, stochRsiD)

// ============================================
// Gaussian Channel
// ============================================
gaussianSrc = input(hlc3, "Source", group="Gaussian")
poles = input.int(4, "Poles", minval=1, maxval=9, group="Gaussian")
samplingPeriod = input.int(144, "Sampling Period", minval=2, group="Gaussian")
multiplier = input.float(1.414, "Multiplier", step=0.1, group="Gaussian")
reducedLag = input.bool(false, "Reduced Lag Mode", group="Gaussian")
fastResponse = input.bool(false, "Fast Response Mode", group="Gaussian")

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

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

[mainFilter, filter1] = f_pole(alpha, srcData, poles)
[trFilter, trFilter1] = f_pole(alpha, trData, poles)

finalFilter = fastResponse ? (mainFilter + filter1) / 2 : mainFilter
finalTrFilter = fastResponse ? (trFilter + trFilter1) / 2 : trFilter

upperBand = finalFilter + finalTrFilter * multiplier
lowerBand = finalFilter - finalTrFilter * multiplier

// ============================================
// Trading Logic
// ============================================
longCondition = 
  finalFilter > finalFilter[1] and      // Green Channel
  close > upperBand and                 // Price above upper band
  (k >= 80 or k <= 20) and             // Stoch RSI condition
  timeCondition

exitCondition = ta.crossunder(close, upperBand)

if longCondition
    strategy.entry("Long", strategy.long)

if exitCondition
    strategy.close("Long")

// ============================================
// Visuals (Gaussian Only)
// ============================================
bandColor = finalFilter > finalFilter[1] ? color.new(#00ff00, 0) : color.new(#ff0000, 0)
plot(finalFilter, "Filter", bandColor, 2)
plot(upperBand, "Upper Band", bandColor)
plot(lowerBand, "Lower Band", bandColor)
fill(plot(upperBand), plot(lowerBand), color.new(bandColor, 90))

barcolor(close > open and close > upperBand ? color.green : 
         close < open and close < lowerBand ? color.red : na)