
बहुस्तरीय मूल्य संरचना पहचान और निष्पक्ष मूल्य अंतराल की मात्रा ट्रेडिंग सिस्टम एक स्वचालित ट्रेडिंग रणनीति है जो मूल्य व्यवहार पर आधारित है, जो दो महत्वपूर्ण ट्रेडिंग अवधारणाओं को जोड़ती हैः परिवर्तन विशेषता (CHoCH, Change of Character) और निष्पक्ष मूल्य अंतराल (FVG, Fair Value Gap) । यह रणनीति बाजार संरचना में परिवर्तन के बिंदुओं और असंतुलन क्षेत्रों की पहचान करके उच्च संभावना वाले व्यापार के अवसरों को पकड़ती है, जब कीमत निष्पक्ष मूल्य अंतराल में वापस आ जाती है, तो सटीक प्रवेश और निकास नियंत्रण के लिए प्रवेश करती है। यह व्यवस्थित दृष्टिकोण व्यापारियों को बाजार का निष्पक्ष विश्लेषण करने, भावनात्मक कारकों को खत्म करने और स्पष्ट जोखिम प्रबंधन नियमों के साथ सक्षम बनाता है।
यह प्रणाली निम्नलिखित मूल सिद्धांतों पर आधारित हैः
मूल्य संरचना पहचानPivot Points तकनीक के माध्यम से बाजार में उतार-चढ़ाव की ऊंचाई और उतार-चढ़ाव की ऊंचाई की पहचान करें, जो बाजार संरचना के महत्वपूर्ण घटक हैं। सिस्टम इन महत्वपूर्ण बिंदुओं को निर्धारित करने के लिए पैरामीटर की उतार-चढ़ाव की लंबाई का उपयोग करता है (डिफ़ॉल्ट 5 चक्र) ।
परिवर्तन लक्षण (CHoCH) का पता लगाने:
उचित मूल्य अंतराल (FVG) पहचान:
प्रवेश तर्क:
जोखिम प्रबंधन तंत्र:
कोड के गहन विश्लेषण के बाद, इस रणनीति के निम्नलिखित उल्लेखनीय फायदे हैंः
संरचित बाजार विश्लेषण: रणनीति मूल्य संरचना में परिवर्तन और बाजार असंतुलन के सिद्धांत पर आधारित है, न कि केवल सूचकांक के क्रॉसिंग पर, जो इसे बाजार के मोड़ की पहचान करने में एक अद्वितीय लाभ देता है।
प्रवेश का सही समय: CHoCH के बाद FVG के गठन की प्रतीक्षा करके, रणनीति एक लाभदायक मूल्य स्तर पर प्रवेश करने में सक्षम है, उच्च और निम्न को मारने से बचने और प्रवेश की गुणवत्ता में सुधार करने के लिए।
जोखिम प्रबंधन के लिए अनुकूलनरणनीतिः वास्तविक बाजार संरचना के आधार पर स्टॉप-लॉस स्थिति को स्वचालित रूप से समायोजित करना, न कि एक निश्चित अंक का उपयोग करना, यह विधि बाजार की वास्तविक अस्थिरता के अनुरूप है।
लेन-देन तत्वों को देखने के लिए: रणनीतियाँ CHoCH टैग, FVG बॉक्स, स्विंग पॉइंट और ट्रेडिंग लाइन सहित व्यापक दृश्यता प्रदान करती हैं, जिससे ट्रेडरों को बाजार संरचना और रणनीति तर्क को समझने में मदद मिलती है।
लचीला स्थिति प्रबंधन: जोखिम प्रतिशत के माध्यम से स्वचालित रूप से स्थिति का आकार समायोजित करें, जो खाते की धनराशि की रक्षा करता है और स्वतः अस्थिरता के आधार पर जोखिम को समायोजित करता है।
प्रदर्शन अनुकूलन डिजाइन: कोड में पुराने FVG बॉक्स को साफ करने के लिए एक तंत्र शामिल है, ताकि यह सुनिश्चित किया जा सके कि लंबे समय तक चलने पर सिस्टम का प्रदर्शन कम न हो।
समग्र प्रदर्शन निगरानीरणनीतियाँ वास्तविक समय में प्रदर्शन तालिका प्रदान करती हैं, जिसमें रणनीतियों की स्थिति, जीत की दर और लाभ कारक जैसे महत्वपूर्ण संकेतक शामिल होते हैं, जिससे व्यापारियों को रणनीतियों के प्रदर्शन का आकलन करने में मदद मिलती है।
हालांकि यह रणनीति तर्कसंगत है, इसके कुछ संभावित जोखिम और सीमाएं हैंः
फ़र्ज़ी घुसपैठ का खतरा:CHoCH सिग्नल एक झूठा ब्रेकआउट हो सकता है, जिससे कीमतें तेजी से वापस आ जाती हैं और स्टॉप लॉस को ट्रिगर करती हैं। इस जोखिम को कम करने के लिए, पुष्टिकरण तंत्र को जोड़ने पर विचार किया जा सकता है, जैसे कि डोगन के लाइन की पुष्टि के लिए इंतजार करना।
अंतराल जोखिम: अस्थिर बाजारों या रातोंरात व्यापार में, कीमतें स्टॉप-लॉस स्थिति से अधिक हो सकती हैं, जिससे वास्तविक नुकसान अपेक्षित से अधिक हो जाता है। गारंटीकृत स्टॉप-लॉस ऑर्डर का उपयोग करने की सिफारिश की जाती है (यदि संभव हो) या स्थिति के आकार को कम करना।
पैरामीटर संवेदनशीलतारणनीतिक प्रदर्शन अत्यधिक पर निर्भर करता है जैसे कि चलती लंबाई, न्यूनतम CHoCH दूरी और FVG आकार जैसे पैरामीटर सेटिंग्स। विभिन्न बाजारों और समय सीमाओं के लिए विभिन्न पैरामीटर संयोजनों की आवश्यकता हो सकती है, एक व्यापक प्रतिक्रिया अनुकूलन की सिफारिश की जाती है।
बाजार पर्यावरण पर निर्भरता: यह रणनीति ट्रेंडिंग बाजारों में बेहतर प्रदर्शन करती है, और अक्सर गलत सिग्नल का उत्पादन कर सकती है। ट्रेंडिंग फिल्टर या बाजार की स्थिति की पहचान करने वाले तंत्र को जोड़ने पर विचार करें।
कम्प्यूटेशनल जटिलतानीतिः कई सरणियों और सशर्त जांच का उपयोग करना, कम कॉन्फ़िगर किए गए उपकरणों पर प्रदर्शन समस्याओं का कारण बन सकता है। हालांकि कोड में सफाई तंत्र शामिल है, लेकिन लंबे समय तक चलने के लिए संसाधनों की खपत पर ध्यान देना आवश्यक है।
अपर्याप्त निकासी प्रबंधनवर्तमान रणनीति में विभिन्न बाजार स्थितियों के तहत स्थिति के आकार के गतिशील समायोजन को ध्यान में नहीं रखा गया है, जो निरंतर प्रतिकूल परिस्थितियों में बड़ी निकासी का कारण बन सकता है। खाता निकासी सीमा और चरणबद्ध कमी तंत्र को लागू करने की सिफारिश की गई है।
कोड विश्लेषण के आधार पर, निम्नलिखित अनुकूलन दिशाओं का सुझाव दिया गया हैः
बहु-समय फ़्रेम पुष्टि: उच्च समय सीमा के लिए बाजार संरचना विश्लेषण को लागू करें, केवल प्रमुख प्रवृत्ति दिशा में व्यापार करें। उदाहरण के लिए, एक दिनरेखा प्रवृत्ति फ़िल्टर जोड़ा जा सकता है, केवल तभी व्यापार करें जब दिनरेखा प्रवृत्ति दिशा के अनुरूप हो।
गतिशील पैरामीटर अनुकूलन: बाजार की अस्थिरता के आधार पर स्वचालित समायोजन के लिए पैरामीटर प्रणाली को लागू करना, जैसे कि उच्च अस्थिरता के दौरान न्यूनतम FVG आकार और CHoCH दूरी की आवश्यकता को बढ़ाना, और कम अस्थिरता के दौरान इन पैरामीटर को कम करना।
प्रवेश अनुकूलन:
जोखिम प्रबंधन में सुधार:
बाजार की स्थिति के अनुकूल:
मशीन लर्निंग: मशीन लर्निंग एल्गोरिदम को ऐतिहासिक CHoCH और FVG पैटर्न का विश्लेषण करने के लिए पेश किया गया है, जो अधिक सफलता की दर वाले पैटर्न की विशेषताओं की पहचान करता है, और तदनुसार प्रवेश निर्णय भार को समायोजित करता है।
समय फ़िल्टर करें: ट्रेडिंग समय फ़िल्टर जोड़ें, प्रमुख समाचारों और बाजार के खुलने / बंद होने के दौरान उच्च उतार-चढ़ाव से बचें, और बेहतर तरलता वाले ट्रेडिंग समय पर ध्यान केंद्रित करें।
बहुस्तरीय मूल्य संरचना पहचान और निष्पक्ष मूल्य अंतर के साथ एक मात्रात्मक ट्रेडिंग प्रणाली एक पूर्ण ट्रेडिंग समाधान है जो उन्नत मूल्य व्यवहार सिद्धांतों को जोड़ती है। यह बाजार संरचना में परिवर्तन की पहचान करके (CHoCH) और मूल्य असंतुलन क्षेत्रों (FVG) में प्रवेश करता है, आदर्श मूल्य स्तर पर, और एक व्यवस्थित जोखिम प्रबंधन दृष्टिकोण का उपयोग करके ट्रेडिंग पूंजी की रक्षा करता है।
इस रणनीति का सबसे बड़ा लाभ यह है कि यह वास्तविक बाजार संरचना के आधार पर विश्लेषणात्मक दृष्टिकोण है, न कि पिछड़े संकेतकों पर निर्भर है, जो इसे बाजार के टर्नओवर को पहले से पहचानने में सक्षम बनाता है। इसके अलावा, अच्छी तरह से दृश्यता और प्रदर्शन निगरानी प्रणाली व्यापारियों को रणनीति के तर्क को समझने और इसकी प्रभावशीलता का आकलन करने में सक्षम बनाती है।
हालांकि झूठी सफलता और पैरामीटर संवेदनशीलता जैसे जोखिम मौजूद हैं, लेकिन प्रस्तावित अनुकूलन दिशा, विशेष रूप से बहु-समय सीमा की पुष्टि, गतिशील पैरामीटर समायोजन और बढ़ी हुई जोखिम प्रबंधन क्षमता के माध्यम से, रणनीति की स्थिरता और प्रदर्शन में काफी सुधार किया जा सकता है।
यह रणनीति एक ठोस ढांचा प्रदान करती है, जो पारंपरिक मूल्य व्यवहार व्यापार के सार को अवशोषित करती है, जबकि मात्रात्मक प्रणालियों की निष्पक्षता और अनुशासनात्मक लाभों का उपयोग करती है। निरंतर पैरामीटर अनुकूलन और बाजार अनुकूलनशीलता के माध्यम से, इस रणनीति में विभिन्न बाजार स्थितियों में स्थिर व्यापार प्रदर्शन की क्षमता है।
/*backtest
start: 2024-06-03 00:00:00
end: 2025-06-02 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("ICT CHoCH & FVG Strategy - NQ1!", overlay=true, pyramiding=0, calc_on_every_tick=false, calc_on_order_fills=false, max_boxes_count=500, max_lines_count=100, max_labels_count=100)
// ============================================================================
// INPUT PARAMETERS
// ============================================================================
// Strategy Settings
riskRewardRatio = input.float(2.0, title="Risk:Reward Ratio", minval=0.5, maxval=10.0, group="Strategy Settings")
fixedTarget = input.int(40, title="Fixed Target (Ticks)", minval=5, maxval=200, group="Strategy Settings")
useRRTarget = input.bool(true, title="Use Risk:Reward Target", tooltip="If false, uses fixed target", group="Strategy Settings")
riskPercent = input.float(2.0, title="Risk % of Account", minval=0.1, maxval=10.0, group="Strategy Settings")
useAutoSize = input.bool(false, title="Auto Size Positions", tooltip="Size based on risk % and stop distance", group="Strategy Settings")
// Visual Settings
showCHoCH = input.bool(true, title="Show CHoCH Labels", group="Visual Settings")
showFVG = input.bool(true, title="Show FVG Boxes", group="Visual Settings")
showSwings = input.bool(true, title="Show Swing Points", group="Visual Settings")
showTradeLines = input.bool(true, title="Show Entry/SL/TP Lines", group="Visual Settings")
// CHoCH Detection Settings
swingLength = input.int(5, title="Swing Detection Length", minval=2, maxval=20, group="CHoCH Settings")
minCHoCHDistance = input.int(10, title="Min CHoCH Distance (bars)", minval=5, maxval=50, group="CHoCH Settings")
// FVG Settings
minFVGSize = input.float(2.0, title="Min FVG Size (ticks)", minval=0.25, maxval=10.0, group="FVG Settings")
maxFVGAge = input.int(50, title="Max FVG Age (bars)", minval=10, maxval=200, group="FVG Settings")
// ============================================================================
// VARIABLES AND ARRAYS
// ============================================================================
// Swing point detection
var float lastSwingHigh = na
var float lastSwingLow = na
var int lastSwingHighBar = na
var int lastSwingLowBar = na
// CHoCH tracking
var bool bullishCHoCH = false
var bool bearishCHoCH = false
var float chochLevel = na
var int chochBar = na
var bool waitingForFVG = false
// FVG tracking
var array<box> bullishFVGs = array.new<box>()
var array<box> bearishFVGs = array.new<box>()
var float activeFVGTop = na
var float activeFVGBottom = na
var bool lookingForEntry = false
// Trade management
var float stopLossLevel = na
var float takeProfitLevel = na
var bool inPosition = false
// ============================================================================
// HELPER FUNCTIONS
// ============================================================================
// Convert ticks to price for NQ
ticksToPrice(ticks) => ticks * 0.25
// Calculate position size based on risk
calcPositionSize(stopDistance) =>
if useAutoSize and strategy.equity > 0
accountValue = strategy.equity
riskAmount = accountValue * (riskPercent / 100)
stopDistancePrice = stopDistance * syminfo.mintick
math.max(1, math.floor(riskAmount / stopDistancePrice))
else
1
// ============================================================================
// SWING POINT DETECTION
// ============================================================================
// Detect swing highs and lows
swingHigh = ta.pivothigh(high, swingLength, swingLength)
swingLow = ta.pivotlow(low, swingLength, swingLength)
// Update swing points
if not na(swingHigh)
lastSwingHigh := swingHigh
lastSwingHighBar := bar_index - swingLength
if showSwings
label.new(bar_index - swingLength, swingHigh, "SH", style=label.style_triangledown, color=color.red, size=size.tiny)
if not na(swingLow)
lastSwingLow := swingLow
lastSwingLowBar := bar_index - swingLength
if showSwings
label.new(bar_index - swingLength, swingLow, "SL", style=label.style_triangleup, color=color.green, size=size.tiny)
// ============================================================================
// CHoCH DETECTION
// ============================================================================
// Check for bullish CHoCH (break above prior swing high after making lower low)
bullishCHoCHCondition = not na(lastSwingHigh) and not na(lastSwingLow) and
high > lastSwingHigh and
lastSwingLow < lastSwingHigh and
bar_index - lastSwingHighBar > minCHoCHDistance and
strategy.position_size == 0
// Check for bearish CHoCH (break below prior swing low after making higher high)
bearishCHoCHCondition = not na(lastSwingHigh) and not na(lastSwingLow) and
low < lastSwingLow and
lastSwingHigh > lastSwingLow and
bar_index - lastSwingLowBar > minCHoCHDistance and
strategy.position_size == 0
// Process CHoCH signals
if bullishCHoCHCondition and not bullishCHoCH
bullishCHoCH := true
bearishCHoCH := false
chochLevel := lastSwingHigh
chochBar := bar_index
waitingForFVG := true
lookingForEntry := false
if bearishCHoCHCondition and not bearishCHoCH
bearishCHoCH := true
bullishCHoCH := false
chochLevel := lastSwingLow
chochBar := bar_index
waitingForFVG := true
lookingForEntry := false
// ============================================================================
// FVG DETECTION
// ============================================================================
// Check for FVG formation (3-candle pattern)
if bar_index >= 2
// Bullish FVG: low[0] > high[2]
bullishFVG = low[0] > high[2] and (low[0] - high[2]) >= ticksToPrice(minFVGSize)
// Bearish FVG: high[0] < low[2]
bearishFVG = high[0] < low[2] and (low[2] - high[0]) >= ticksToPrice(minFVGSize)
// Process bullish FVG after bullish CHoCH
if bullishFVG and bullishCHoCH and waitingForFVG and bar_index > chochBar
fvgTop = low[0]
fvgBottom = high[2]
// Set active FVG for entry
activeFVGTop := fvgTop
activeFVGBottom := fvgBottom
waitingForFVG := false
lookingForEntry := true
// Process bearish FVG after bearish CHoCH
if bearishFVG and bearishCHoCH and waitingForFVG and bar_index > chochBar
fvgTop = low[2]
fvgBottom = high[0]
// Set active FVG for entry
activeFVGTop := fvgTop
activeFVGBottom := fvgBottom
waitingForFVG := false
lookingForEntry := true
// ============================================================================
// ENTRY LOGIC
// ============================================================================
// Long entry: price touches bullish FVG after bullish CHoCH
longCondition = lookingForEntry and bullishCHoCH and
not na(activeFVGTop) and not na(activeFVGBottom) and
low <= activeFVGTop and high >= activeFVGBottom and
strategy.position_size == 0
// Short entry: price touches bearish FVG after bearish CHoCH
shortCondition = lookingForEntry and bearishCHoCH and not na(activeFVGTop) and not na(activeFVGBottom) and low <= activeFVGTop and high >= activeFVGBottom and strategy.position_size == 0
// Process long entries
if longCondition
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na
entryPrice := math.avg(activeFVGTop, activeFVGBottom)
stopLoss := lastSwingLow
stopDistance = entryPrice - stopLoss
if useRRTarget
takeProfit := entryPrice + (stopDistance * riskRewardRatio)
else
takeProfit := entryPrice + ticksToPrice(fixedTarget)
// Calculate position size
qty = calcPositionSize(stopDistance / syminfo.mintick)
// Enter trade
strategy.entry("Long", strategy.long, qty=qty)
strategy.exit("Long Exit", "Long", stop=stopLoss, limit=takeProfit)
// Update tracking
stopLossLevel := stopLoss
takeProfitLevel := takeProfit
inPosition := true
lookingForEntry := false
// Reset CHoCH state
bullishCHoCH := false
activeFVGTop := na
activeFVGBottom := na
// Process short entries
if shortCondition
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na
entryPrice := math.avg(activeFVGTop, activeFVGBottom)
stopLoss := lastSwingHigh
stopDistance = stopLoss - entryPrice
if useRRTarget
takeProfit := entryPrice - (stopDistance * riskRewardRatio)
else
takeProfit := entryPrice - ticksToPrice(fixedTarget)
// Calculate position size
qty = calcPositionSize(stopDistance / syminfo.mintick)
// Enter trade
strategy.entry("Short", strategy.short, qty=qty)
strategy.exit("Short Exit", "Short", stop=stopLoss, limit=takeProfit)
// Update tracking
stopLossLevel := stopLoss
takeProfitLevel := takeProfit
inPosition := true
lookingForEntry := false
// Reset CHoCH state
bearishCHoCH := false
activeFVGTop := na
activeFVGBottom := na
// ============================================================================
// POSITION MANAGEMENT
// ============================================================================
// Reset position state when trade is closed
if inPosition and strategy.position_size == 0
inPosition := false
stopLossLevel := na
takeProfitLevel := na
// ============================================================================
// VISUAL SIGNALS
// ============================================================================
// Plot entry signals
plotshape(longCondition, title="Long Entry", location=location.belowbar, color=color.green,
style=shape.triangleup, size=size.normal)
plotshape(shortCondition, title="Short Entry", location=location.abovebar, color=color.red,
style=shape.triangledown, size=size.normal)
// Plot active stop loss and take profit levels
plot(inPosition ? stopLossLevel : na, title="Stop Loss", color=color.red, linewidth=2, style=plot.style_linebr)
plot(inPosition ? takeProfitLevel : na, title="Take Profit", color=color.green, linewidth=2, style=plot.style_linebr)
// ============================================================================
// CLEANUP
// ============================================================================
// Clean up old FVG boxes (helps with performance)
if bar_index % 100 == 0
while array.size(bullishFVGs) > 20
box.delete(array.shift(bullishFVGs))
while array.size(bearishFVGs) > 20
box.delete(array.shift(bearishFVGs))
// ============================================================================
// ALERTS
// ============================================================================
// Alert conditions
alertcondition(longCondition, title="Long Entry Signal", message="ICT Strategy: Long entry at FVG - SL: {{strategy.position_avg_price}}")
alertcondition(shortCondition, title="Short Entry Signal", message="ICT Strategy: Short entry at FVG - SL: {{strategy.position_avg_price}}")