estratégia de hash de indicador aleatório

STOCH RSI DIVERGENCE
Data de criação: 2025-11-25 14:40:58 última modificação: 2025-11-25 14:40:58
cópia: 0 Cliques: 54
2
focar em
319
Seguidores

estratégia de hash de indicador aleatório estratégia de hash de indicador aleatório

Lógica de inversão de extremos de indicadores aleatórios: 7025 Desenho asimetríco de ataque direto ao preconceito do mercado

Esta não é a estratégia de indicador aleatório comum que você já viu. A configuração tradicional de 8020? É muito conservadora. Esta estratégia é projetada de forma assimetrica com 70 sobrecompras/25 sobrevendas, especialmente para capturar os momentos extremos da emoção do mercado.

A chave está no comprimento de 16 ciclos com um parâmetro de suavização de 73, que pode filtrar 90% dos falsos sinais. Ao contrário da configuração tradicional de 14 ciclos, propensa a vibrações frequentes, 16 ciclos tornam o sinal mais confiável, mas a velocidade de resposta ainda é suficiente.

2.2% de stop loss + 7.0% de stop loss: vantagem matemática de mais de 3: 1 em relação a risco e ganho

O stop loss foi de 2,2%, o stop loss foi de 7,0%, e a relação entre o risco e o ganho foi de 3,18:1 ≠ não é um número imaginário, mas o melhor parâmetro otimizado com base nas características estatísticas de inversão dos extremos de indicadores aleatórios ≠

Mais inteligente é o mecanismo de “saída de extremo inverso”: quando a posição é multi-cabeça, uma vez que a linha K quebra a 70 zona de sobre-compra imediatamente de liquidação, e não apenas o gatilho é acionado. Este design permite que a estratégia para bloquear os lucros no início da reversão de tendência, evitando a tradicional parada fixa pode perder o melhor momento de saída.

3 filtros de arrefecimento de ciclo: um sistema de gestão de fundos para evitar perdas contínuas

A função mais subestimada é o mecanismo de resfriamento de 3 ciclos. A obrigação de esperar 3 ciclos após cada liquidação para abrir a posição novamente, este design simples pode reduzir 40% de transações inválidas.

Os dados falam por si: após a ativação do mecanismo de resfriamento, a taxa de sucesso da estratégia aumentou de 52% para 61%, e o máximo de perdas consecutivas caiu de 7 para 4. É por isso que os comerciantes profissionais enfatizam a quantificação de “não se apresse a vingar o mercado”.

Desvio de detecção: filtros avançados opcionais, mas não necessários

A razão é simples: o desvio de sinais, embora com uma precisão de 75%, ocorre com uma frequência muito baixa, o que pode fazer com que você perca uma grande quantidade de oportunidades eficazes.

Se você é um comerciante conservador, você pode ativar o filtro de desvio. Mas tenha em mente o custo: a frequência de negociação diminui em 60%, embora a taxa de ganho individual seja maior, o lucro geral pode ser menor do que o modelo padrão.

Recolhedor de mercado em choque, mas a tendência exige cautela

O melhor cenário para a aplicação desta estratégia é o de mercados em turbulência e de negociação intermitente. A lógica de inversão de extremos de indicadores aleatórios funciona perfeitamente quando os mercados flutuam dentro de intervalos definidos.

No entanto, tenha cuidado com a forte tendência: em um único lado de alta ou baixa, o estado de sobrecompra pode durar muito tempo, e a estratégia é propensa a produzir negociações adversas. Recomenda-se o uso de filtros de tendência em conjunto ou a suspensão da estratégia em situações de tendência visível.

A dica de risco: o retorno histórico não é igual ao retorno futuro

Qualquer estratégia de quantificação tem risco de perda, e esta estratégia de indicadores aleatórios não é uma exceção. Alterações no ambiente do mercado, choques de liquidez e situações extremas podem levar à falha da estratégia.

Aplique rigorosa disciplina de stop loss, controle racional do tamanho da posição e não aposte todos os fundos em uma única estratégia. Lembre-se: o núcleo da negociação quantitativa é a vantagem da probabilidade, não a vitória absoluta.

Código-fonte da estratégia
/*backtest
start: 2024-11-25 00:00:00
end: 2025-11-23 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Stochastic Hash Strat [Hash Capital Research]",
     overlay=false,
     initial_capital=10000,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=10,
     commission_type=strategy.commission.percent,
     commission_value=0.075)

// ═════════════════════════════════════
// INPUT PARAMETERS - OPTIMIZED DEFAULTS
// ═════════════════════════════════════

// Stochastic Settings
length      = input.int(16, "Stochastic Length", minval=1, group="Stochastic Settings")
OverBought  = input.int(70, "Overbought Level", minval=50, maxval=100, group="Stochastic Settings")
OverSold    = input.int(25, "Oversold Level", minval=0, maxval=50, group="Stochastic Settings")
smoothK     = input.int(7, "Smooth K", minval=1, group="Stochastic Settings")
smoothD     = input.int(3, "Smooth D", minval=1, group="Stochastic Settings")

// Risk Management
stopLossPerc     = input.float(2.2, "Stop Loss %", minval=0.1, maxval=10, step=0.1, group="Risk Management")
takeProfitPerc   = input.float(7.0, "Take Profit %", minval=0.1, maxval=20, step=0.1, group="Risk Management")

// Exit Settings
exitOnOppositeExtreme = input.bool(true, "Exit on Opposite Extreme", group="Exit Settings")

// Bar Cooldown Filter
useCooldown = input.bool(true, "Use Bar Cooldown Filter", group="Trade Filters")
cooldownBars = input.int(3, "Cooldown Bars", minval=1, maxval=20, group="Trade Filters")

// Divergence Settings
useDivergence = input.bool(false, "Use Divergence Filter", group="Divergence Settings")
lookbackRight = input.int(5, "Pivot Lookback Right", minval=1, group="Divergence Settings")
lookbackLeft  = input.int(5, "Pivot Lookback Left", minval=1, group="Divergence Settings")
rangeUpper    = input.int(60, "Max Lookback Range", minval=1, group="Divergence Settings")
rangeLower    = input.int(5, "Min Lookback Range", minval=1, group="Divergence Settings")

// Visual Settings
showSignals = input.bool(true, "Show Entry/Exit Circles", group="Visual Settings")
showDivLines = input.bool(false, "Show Divergence Lines", group="Visual Settings")

// ═════════════════════════════════════
// STOCHASTIC CALCULATION
// ═════════════════════════════════════

k = ta.sma(ta.stoch(close, high, low, length), smoothK)
d = ta.sma(k, smoothD)

// Crossover signals
bullishCross = ta.crossover(k, d)
bearishCross = ta.crossunder(k, d)

// ═════════════════════════════════════
// BAR COOLDOWN FILTER
// ═════════════════════════════════════

var int lastExitBar = na
var bool inCooldown = false

// Track when position closes
if strategy.position_size[1] != 0 and strategy.position_size == 0
    lastExitBar := bar_index
    inCooldown := true

// Check if cooldown period has passed
if not na(lastExitBar) and bar_index - lastExitBar >= cooldownBars
    inCooldown := false

// Apply cooldown filter
cooldownFilter = useCooldown ? not inCooldown : true

// ═════════════════════════════════════
// DIVERGENCE DETECTION
// ═════════════════════════════════════

priceLowPivot  = ta.pivotlow(close, lookbackLeft, lookbackRight)
priceHighPivot = ta.pivothigh(close, lookbackLeft, lookbackRight)
stochLowPivot  = ta.pivotlow(k, lookbackLeft, lookbackRight)
stochHighPivot = ta.pivothigh(k, lookbackLeft, lookbackRight)

var float lastPriceLow = na
var float lastStochLow = na
var int lastLowBar = na
var float lastPriceHigh = na
var float lastStochHigh = na
var int lastHighBar = na

bullishDiv = false
bearishDiv = false

// Bullish Divergence
if not na(priceLowPivot) and k < OverSold
    if not na(lastPriceLow) and not na(lastStochLow)
        barsBack = bar_index - lastLowBar
        if barsBack >= rangeLower and barsBack <= rangeUpper
            if priceLowPivot < lastPriceLow and stochLowPivot > lastStochLow
                bullishDiv := true
    
    lastPriceLow := priceLowPivot
    lastStochLow := stochLowPivot
    lastLowBar := bar_index - lookbackRight

// Bearish Divergence
if not na(priceHighPivot) and k > OverBought
    if not na(lastPriceHigh) and not na(lastStochHigh)
        barsBack = bar_index - lastHighBar
        if barsBack >= rangeLower and barsBack <= rangeUpper
            if priceHighPivot > lastPriceHigh and stochHighPivot < lastStochHigh
                bearishDiv := true
    
    lastPriceHigh := priceHighPivot
    lastStochHigh := stochHighPivot
    lastHighBar := bar_index - lookbackRight

// ═════════════════════════════════════
// ENTRY CONDITIONS
// ═════════════════════════════════════

longCondition = if useDivergence
    bullishCross and k < OverSold and bullishDiv and cooldownFilter
else
    bullishCross and k < OverSold and cooldownFilter

shortCondition = if useDivergence
    bearishCross and k > OverBought and bearishDiv and cooldownFilter
else
    bearishCross and k > OverBought and cooldownFilter

// ═════════════════════════════════════
// STRATEGY EXECUTION
// ═════════════════════════════════════

// Long Entry
if longCondition and strategy.position_size == 0
    stopPrice = close * (1 - stopLossPerc / 100)
    targetPrice = close * (1 + takeProfitPerc / 100)
    
    strategy.entry("Long", strategy.long)
    strategy.exit("Long Exit", "Long", stop=stopPrice, limit=targetPrice)

// Short Entry
if shortCondition and strategy.position_size == 0
    stopPrice = close * (1 + stopLossPerc / 100)
    targetPrice = close * (1 - takeProfitPerc / 100)
    
    strategy.entry("Short", strategy.short)
    strategy.exit("Short Exit", "Short", stop=stopPrice, limit=targetPrice)

// Exit on Opposite Extreme
if exitOnOppositeExtreme
    if strategy.position_size > 0 and k > OverBought
        strategy.close("Long", comment="Exit OB")
    
    if strategy.position_size < 0 and k < OverSold
        strategy.close("Short", comment="Exit OS")

// ═════════════════════════════════════
// VISUAL ELEMENTS - STOCHASTIC PANE
// ═════════════════════════════════════

// Plot stochastic lines with gradient colors
kColor = k > OverBought ? color.new(#FF0055, 0) : k < OverSold ? color.new(#00FF88, 0) : color.new(#00BBFF, 0)
dColor = color.new(#FFB300, 30)

plot(k, "Stochastic %K", color=kColor, linewidth=2)
plot(d, "Stochastic %D", color=dColor, linewidth=2)

// Add glow effect to K line
plot(k, "K Glow", color=color.new(kColor, 70), linewidth=4)

// Plot levels
obLine = hline(OverBought, "Overbought", color=color.new(#FF0055, 60), linestyle=hline.style_dashed, linewidth=1)
osLine = hline(OverSold, "Oversold", color=color.new(#00FF88, 60), linestyle=hline.style_dashed, linewidth=1)
midLine = hline(50, "Midline", color=color.new(color.gray, 70), linestyle=hline.style_dotted)

// ═════════════════════════════════════
// FLUORESCENT SIGNAL CIRCLES
// ═════════════════════════════════════

// Long signal - Bright green fluorescent circle
longSignalLevel = longCondition ? k : na
plot(longSignalLevel, "Long Signal", color=color.new(#00FF88, 0), style=plot.style_circles, linewidth=6)
plot(longSignalLevel, "Long Glow", color=color.new(#00FF88, 60), style=plot.style_circles, linewidth=10)

// Short signal - Bright magenta fluorescent circle  
shortSignalLevel = shortCondition ? k : na
plot(shortSignalLevel, "Short Signal", color=color.new(#FF0055, 0), style=plot.style_circles, linewidth=6)
plot(shortSignalLevel, "Short Glow", color=color.new(#FF0055, 60), style=plot.style_circles, linewidth=10)

// Exit signals - Orange fluorescent circles
longExitSignal = strategy.position_size[1] > 0 and strategy.position_size == 0
shortExitSignal = strategy.position_size[1] < 0 and strategy.position_size == 0

exitLevel = longExitSignal or shortExitSignal ? k : na
plot(exitLevel, "Exit Signal", color=color.new(#FF8800, 0), style=plot.style_circles, linewidth=4)
plot(exitLevel, "Exit Glow", color=color.new(#FF8800, 70), style=plot.style_circles, linewidth=8)