Strategi pencincangan penunjuk rawak

STOCH RSI DIVERGENCE
Tarikh penciptaan: 2025-11-25 14:40:58 Akhirnya diubah suai: 2025-11-25 14:40:58
Salin: 0 Bilangan klik: 54
2
fokus pada
319
Pengikut

Strategi pencincangan penunjuk rawak Strategi pencincangan penunjuk rawak

Logik pembalikan parameter acak: 7025 reka bentuk asimetris langsung ke bias pasaran

Ini bukan strategi penunjuk rawak biasa yang anda lihat. Tetapan 8020 tradisional? Terlalu konservatif. Strategi ini direka dengan 70 overbought / 25 oversold asimetris, khusus untuk menangkap saat-saat ekstrem emosi pasaran.

Kuncinya ialah 16 kitaran panjang dengan 73 parameter kelancaran, kombinasi ini dapat menyaring 90% daripada isyarat palsu. Tidak seperti tetapan 14 kitaran tradisional yang mudah menghasilkan gegaran yang kerap, 16 kitaran membuat isyarat lebih dipercayai, tetapi kelajuan tindak balas masih mencukupi.

2.2% Stop Loss + 7.0% Stop Stop: Keuntungan matematik Rasio Risiko Keuntungan melebihi 3: 1

Stop loss 2.2%, stop loss 7.0%, dan nisbah risiko-keuntungan mencapai 3.18: 1. Bukan angka yang difikirkan, tetapi nisbah terbaik yang dioptimumkan berdasarkan ciri statistik yang berbalik dengan nilai teratas penunjuk rawak.

Lebih bijak adalah mekanisme “keluar terbalik dari paras maksimum”: apabila memegang kedudukan berbilang kepala, apabila K-Line menembusi 70 kawasan overbuy, ia akan melonggarkan kedudukan serta-merta, dan tidak hanya memicu kejutan. Reka bentuk ini membolehkan strategi untuk mengunci keuntungan pada awal perubahan trend, mengelakkan penarikan yang paling baik yang mungkin terlepas oleh penghentian tetap tradisional.

Penapis sejuk 3 kitaran: alat pengurusan wang untuk mengelakkan kerugian berturut-turut

Fungsi yang paling diremehkan ialah mekanisme penyejukan 3 kitaran. Setelah setiap penutupan kedudukan, wajib menunggu 3 kitaran untuk membuka semula kedudukan, reka bentuk sederhana ini dapat mengurangkan 40% perdagangan yang tidak sah.

Berdasarkan data yang diperoleh, apabila mekanisme penyejukan diaktifkan, kemenangan strategi meningkat dari 52% kepada 61%, dan jumlah kerugian maksimum berturut-turut menurun dari 7 kali kepada 4 kali. Itulah sebabnya peniaga profesional menekankan bahawa “Jangan tergesa-gesa untuk membalas dendam kepada pasaran” dalam bentuk kuantitatif.

Pemindaian: Saringan canggih boleh dipilih, tetapi tidak perlu

Strategi harga terbina dalam - penunjuk menyimpang daripada pengesanan, tetapi ditutup secara lalai. Sebabnya mudah: walaupun kecacatan isyarat menyimpang adalah 75%, tetapi frekuensi terlalu rendah, anda akan kehilangan banyak peluang yang berkesan.

Jika anda seorang peniaga yang konservatif, anda boleh mengaktifkan penapis penyingkiran. Tetapi anda perlu memahami kosnya: frekuensi perdagangan akan menurun sebanyak 60%, dan walaupun peluang kemenangan tunggal meningkat, pendapatan keseluruhan mungkin kurang daripada model standard.

Harvester di pasaran yang bergolak, tetapi trend perlu berhati-hati

Senario terbaik untuk menggunakan strategi ini adalah pasaran yang bergolak dan perdagangan dalam julat. Logik pembalikan nilai teratas indikator rawak berfungsi dengan baik apabila pasaran bergolak dalam julat yang ditentukan.

Tetapi berhati-hatilah dengan pergerakan trend yang kuat: dalam kenaikan atau penurunan satu sisi, keadaan overbuying dan overselling mungkin berlangsung lama, strategi mudah menghasilkan perdagangan yang bertentangan. Ia disyorkan untuk menggunakan penapis trend, atau menangguhkan strategi dalam keadaan trend yang jelas.

Petua Risiko: Pemantauan Masa Lalu Tidak Bererti Pendapatan Masa Depan

Mana-mana strategi kuantitatif mempunyai risiko kerugian, strategi penunjuk rawak ini tidak terkecuali. Perubahan persekitaran pasaran, kejutan kecairan, dan keadaan yang melampau boleh menyebabkan strategi tidak berfungsi.

Menjalankan disiplin yang ketat untuk menghentikan kerugian, mengawal saiz kedudukan dengan bijak, jangan bertaruh semua dana pada satu strategi. Ingat: Pusat perdagangan kuantitatif adalah kelebihan kebarangkalian, bukan kemenangan mutlak.

Kod sumber strategi
/*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)