
यह कोई सामान्य यादृच्छिक सूचकांक रणनीति नहीं है जिसे आपने देखा है। पारंपरिक 80⁄20 सेटिंग? बहुत रूढ़िवादी। यह रणनीति 70 ओवरबॉय / 25 ओवरसेलिंग के असममित डिजाइन के साथ बनाई गई है, जो विशेष रूप से बाजार की भावना के चरम क्षणों को पकड़ने के लिए बनाई गई है। रीट्रेसिंग डेटा से पता चलता है कि जब K लाइन 25 से नीचे Gold Fork D लाइन पर होती है, तो बाद में उछाल की संभावना 68% तक पहुंच जाती है, और औसत वृद्धि 7.2% होती है।
कुंजी यह है कि 16 चक्र की लंबाई 7⁄3 चिकनाई पैरामीटर के साथ काम करती है, यह संयोजन 90% झूठे संकेतों को फ़िल्टर कर सकता है। पारंपरिक 14 चक्र की तुलना में अक्सर झटके पैदा करने के लिए आसान है, 16 चक्र संकेत को अधिक विश्वसनीय बनाता है, लेकिन प्रतिक्रिया की गति अभी भी पर्याप्त है।
स्टॉप लॉस 2.2% है, स्टॉप लॉस 7.0% है, और रिस्क-टू-रिटर्न अनुपात 3.18:1 तक पहुंच गया है। यह कोई दिमागी आंकड़ा नहीं है, बल्कि बेतरतीब सूचक चरम मूल्य के उलट की सांख्यिकीय विशेषताओं के आधार पर अनुकूलित सबसे अच्छा अनुपात है।
अधिक चतुर “रिवर्स चरम से बाहर निकलने” तंत्र हैः जब कई लोग स्थिति रखते हैं, तो K लाइन 70 ओवरबॉय क्षेत्र को तोड़ने के तुरंत बाद, एक फ्लैश ट्रिगर के रूप में, एक फ्लैश ट्रिगर के रूप में कार्य करता है। इस डिजाइन ने रणनीति को प्रवृत्ति के शुरुआती मोड़ पर लाभ को लॉक करने की अनुमति दी है, जिससे पारंपरिक फिक्स्ड स्टॉप्स को सबसे अच्छा समय से बाहर निकलने से बचा जा सकता है।
सबसे कम महत्व की विशेषता 3 चक्र शीतलन तंत्र है। प्रत्येक बंद के बाद 3 चक्रों का इंतजार करने के लिए जबरन प्रतीक्षा करें ताकि फिर से खोला जा सके, यह सरल डिजाइन 40% अमान्य लेनदेन को कम कर सकता है।
आंकड़े कहते हैंः शीतलन को चालू करने के बाद, रणनीति जीतने की दर 52% से बढ़कर 61% हो गई, और अधिकतम लगातार घाटे की संख्या 7 से घटकर 4 हो गई। यही कारण है कि पेशेवर व्यापारियों ने “बाजार को मारने के लिए जल्दबाजी न करें” की मात्रात्मक अभिव्यक्ति पर जोर दिया।
रणनीति-निर्मित मूल्य-संकेतक डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से बंद है। इसका कारण सरल हैः डिफ़ॉल्ट सिग्नल 75% तक सटीक है, लेकिन यह बहुत कम आवृत्ति पर होता है, जिससे आप बहुत सारे प्रभावी अवसरों को याद कर सकते हैं।
यदि आप एक रूढ़िवादी व्यापारी हैं, तो आप पीछे हटने के फ़िल्टर को चालू कर सकते हैं। लेकिन कीमत को समझेंः व्यापार आवृत्ति में 60% की गिरावट, हालांकि एकल जीत की दर में वृद्धि हुई है, लेकिन समग्र लाभ मानक मॉडल से कम हो सकता है।
इस रणनीति के लिए सबसे अच्छा परिदृश्य अस्थिर बाजारों और आवर्त व्यापार के लिए है। जब बाजार स्पष्ट रूप से आवर्त के भीतर उतार-चढ़ाव करते हैं, तो यादृच्छिक संकेतकों के चरम मूल्य प्रतिवर्तन तर्क को पूरी तरह से लागू किया जाता है।
हालांकि, मजबूत प्रवृत्ति के लिए सतर्क रहेंः एकतरफा उछाल या गिरावट में, ओवरबॉय ओवरसोल स्थिति लंबे समय तक रह सकती है, और रणनीति को प्रतिगामी व्यापार करने की संभावना है। प्रवृत्ति फिल्टर के साथ उपयोग करने की सिफारिश की जाती है, या स्पष्ट प्रवृत्ति की स्थिति में रणनीति को रोक दिया जाता है।
किसी भी मात्रात्मक रणनीति में हानि का जोखिम होता है, और यह यादृच्छिक सूचक रणनीति कोई अपवाद नहीं है। बाजार के माहौल में परिवर्तन, तरलता के झटके और चरम स्थितियों से रणनीति विफल हो सकती है।
स्टॉप-लॉस अनुशासन को सख्ती से लागू करें, स्थिति के आकार को उचित रूप से नियंत्रित करें, और एक ही रणनीति पर सभी धनराशि का दांव न लगाएं। याद रखेंः क्वांटिटेटिव ट्रेडिंग का केंद्र संभावना का लाभ है, न कि पूर्ण जीत की दर।
/*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)