
डायनामिक प्राइस ब्रीज-रिट्रीट-रिवर्स मल्टी-स्ट्रैटेजी ट्रेडिंग सिस्टम एक दिन के भीतर व्यापार करने की रणनीति है जो विशेष रूप से शॉर्ट-लाइन ट्रेडर्स के लिए डिज़ाइन की गई है, जो कि सुबह के उद्घाटन के बाद पहले 5 मिनट के लाइन के मूल्य क्षेत्र के आधार पर संचालित होती है। यह रणनीति तीन अलग-अलग प्रवेश मोड को एकीकृत करती हैः ब्रीज-इन, ट्रॉप-इन और रिवर्स-इन, निष्पक्ष मूल्य अंतराल (एफवीजी) की पहचान करके और मूल्य क्षेत्र के माध्यम से व्यापार करने के लिए। रणनीति अमेरिकी शेयर बाजार के उद्घाटन के बाद पहले घंटे की उच्च अस्थिरता पर केंद्रित है।
इस रणनीति का मूल सिद्धांत सुबह के ट्रेडों के बाद मूल्य के व्यवहार के पैटर्न पर आधारित है, जो तीन चरणों में संचालित होता हैः
9:30 AM):
प्रवेश बिंदु ढूंढना (केवल ट्रेडों के खुलने के एक घंटे बाद): इस रणनीति में तीन अलग-अलग प्रवेश विकल्प दिए गए हैंः
ब्रेक एंट्री:
ट्रैप एंट्री:
रिवर्सल एंट्री:
लेन-देन प्रबंधन:
रणनीति कोड एक पूर्ण तार्किक ढांचे को लागू करता है, जिसमें स्वचालित रूप से ट्रेडिंग फ़्रेम का पता लगाना, विभिन्न प्रविष्टि स्थितियों की पहचान करना, स्टॉप-लॉस स्टॉप स्तर सेट करना और उचित स्थिति आकार की गणना करना शामिल है। सिस्टम में समय फ़िल्टर भी शामिल है, जो यह सुनिश्चित करता है कि केवल एक विशिष्ट समय अवधि के भीतर व्यापार किया जाए, और विभिन्न प्रविष्टि रणनीतियों को चुनिंदा रूप से सक्षम या अक्षम किया जा सकता है।
संक्षिप्त और स्पष्ट नियम: रणनीतिक नियम स्पष्ट और सहज हैं, व्यक्तिपरक निर्णय की आवश्यकता नहीं है, व्यापारिक निर्णयों पर भावनाओं के प्रभाव को कम करता है। कोड में सशर्त तर्क और स्थिति ट्रैकिंग नियमों के सख्त कार्यान्वयन को सुनिश्चित करता है।
प्रवेश के विभिन्न तरीकों में लचीलापन: तीन अलग-अलग प्रविष्टि रणनीतियाँ प्रदान करता है ((ब्रेक, ट्रैप और रिवर्स), जिससे व्यापारियों को विभिन्न बाजार स्थितियों के अनुकूल बनाया जा सकता है।enableBreak、enableTrapऔरenableReversalपैरामीटर इस लचीलेपन को लागू करता है.
उच्च संभावना वाले समय पर ध्यान केंद्रित करेंरणनीतिः केवल शुरुआती घंटों के भीतर व्यापार करें, इस अवधि के दौरान आमतौर पर उच्च अस्थिरता और तरलता का लाभ उठाएं।inWindowशर्त यह सुनिश्चित करती है कि लेनदेन केवल 9:30 से 10:30 के बीच किया जाए।
सख्त जोखिम प्रबंधननिश्चित 2: 1 रिस्क-रिटर्न अनुपात और विशिष्ट मूल्य व्यवहार के आधार पर स्टॉप-लॉस सेटिंग्स, प्रत्येक ट्रेड के लिए स्पष्ट जोखिम नियंत्रण प्रदान करते हैं।riskPctपैरामीटर उपयोगकर्ता को अपनी जोखिम वरीयताओं के अनुसार प्रत्येक लेनदेन के लिए जोखिम प्रतिशत को समायोजित करने की अनुमति देता है।
जटिल संकेतकों की आवश्यकता नहीं हैयह रणनीति जटिल तकनीकी संकेतकों पर निर्भर नहीं करती है, बल्कि शुद्ध मूल्य व्यवहार और संरचना पर आधारित होती है, जिससे ओवरफिटिंग का जोखिम कम हो जाता है।
मौसमी पलायन: कोड में छुट्टियों की ब्लैकलिस्ट है ((15 दिसंबर से 15 जनवरी), ऐसे समय से बचने के लिए जब बाजार अस्थिर या कम तरल हो सकता है) ।
लचीला स्थिति प्रबंधन: सिस्टम जोखिम के प्रतिशत या अनुबंधों की एक निश्चित संख्या के आधार पर दो प्रकार के पोजीशन प्रबंधन प्रदान करता है, जो विभिन्न धन प्रबंधन आवश्यकताओं के लिए अनुकूल है।
फ़र्ज़ी घुसपैठ का खतरा: बाजार में झूठे ब्रेकआउट हो सकते हैं, जिससे ट्रेडों के ट्रिगर होने के बाद कीमतों में तेजी से उलटफेर हो सकता है। इस जोखिम को कम करने के लिए, रणनीति में ट्रैप और रिवर्स-इन-प्लेस मोड को एकीकृत किया गया है, लेकिन सावधानीपूर्वक निगरानी की आवश्यकता है।
चौड़ाई समस्या: यदि K लाइन की चौड़ाई या संकीर्णता पहले 5 मिनट के बाद होती है, तो यह रणनीति की प्रभावशीलता को प्रभावित कर सकता है। बहुत संकीर्णता से संकेतों को बार-बार ट्रिगर किया जा सकता है, और बहुत चौड़ाई से स्टॉप-लॉस बहुत दूर हो सकता है।
समय सीमा के अवसर लागतहालांकि, यह प्रतिबंध अनुशासन के रूप में भी काम करता है, जो अत्यधिक व्यापार को रोकता है।
फिक्स्ड रिस्क-रिटर्न अनुपात की सीमाएंहालांकि 2: 1 रिस्क-रिटर्न अनुपात स्थिरता प्रदान करता है, यह कुछ बाजार स्थितियों में इष्टतम विकल्प नहीं हो सकता है। मजबूत प्रवृत्ति वाले बाजारों में, उच्च रिस्क-रिटर्न अनुपात अधिक उपयुक्त हो सकता है।
छुट्टियों के दौरान असामान्य बाजारहालांकि रणनीति ने 15 दिसंबर से 15 जनवरी के बीच व्यापार से परहेज किया है, लेकिन अन्य छुट्टियों से पहले और बाद के बाजार व्यवहार भी असामान्य हो सकते हैं, जो रणनीति के प्रदर्शन को प्रभावित कर सकते हैं।
FVG पर निर्भरता: रणनीति ब्रेकआउट और रिवर्स में प्रवेश के दौरान एफवीजी मॉडल पर निर्भर करती है, लेकिन कुछ बाजार स्थितियों में, एफवीजी आसानी से नहीं बन सकता है या पहचाना नहीं जा सकता है।
एकल समय सीमा की सीमाएंइस प्रकार, एक मिनट के चार्ट पर पूरी तरह से भरोसा करने से रणनीतियों को बड़े समय के भीतर महत्वपूर्ण बाजार संरचनाओं की अनदेखी करने का जोखिम हो सकता है।
अनुकूलित चौड़ाई: बाजार की अस्थिरता की गतिशीलता के आधार पर चौड़ाई को समायोजित करने के लिए विचार किया जा सकता है, उदाहरण के लिए, उच्च अस्थिरता वाले दिनों में एक व्यापक श्रेणी का उपयोग करें, कम अस्थिरता वाले दिनों में एक संकीर्ण श्रेणी का उपयोग करें। यह हाल के औसत वास्तविक अस्थिरता की गणना करके किया जा सकता है (एटीआर) या इसी तरह के संकेतक।
अनुकूलित समय विंडो9:30-10:30 के बजाय विभिन्न बाजारों के लिए इष्टतम ट्रेडिंग समय खिड़की का अध्ययन किया जा सकता है। कुछ बाजार अलग-अलग समय पर अधिक स्पष्ट अंतर-ब्रेकिंग पैटर्न प्रदर्शित कर सकते हैं।
गतिशील रिस्क रिटर्न सेटिंग्स: बाजार की स्थिति और अस्थिरता की गतिशीलता के आधार पर रिस्क-रिटर्न अनुपात को समायोजित किया जा सकता है, उदाहरण के लिए, प्रवृत्ति मजबूत होने पर लक्ष्य बढ़ाएं, और बाजार में लक्ष्य को कम करें।
बाजार की भावना के सूचकांक को एकीकृत करना: बाजार की व्यापकता या अस्थिरता के संकेतकों को फ़िल्टर के रूप में शामिल करने पर विचार किया जा सकता है ताकि बाजार के प्रतिकूल परिस्थितियों में व्यापार से बचा जा सके।
बहु-समय फ़्रेम पुष्टिहालांकि निष्पादन व्यापार अभी भी 1 मिनट के चार्ट पर है, लेकिन उच्च समय सीमा की पुष्टि की शर्तें जोड़ी जा सकती हैं, जैसे कि 15 मिनट या 1 घंटे के चार्ट पर प्रवृत्ति की दिशा के अनुरूपता की जांच।
FVG परिभाषा को अनुकूलित करें: वर्तमान FVG परिभाषा अपेक्षाकृत सरल है, और अधिक जटिल या अधिक सटीक असंतुलित क्षेत्र की परिभाषा पर विचार किया जा सकता है, जैसे कि केवल छाया रेखाओं के बजाय पिंडों पर विचार करना।
लेन-देन की पुष्टि जोड़ें: प्रवेश की शर्तों में लेनदेन की मात्रा की पुष्टि को शामिल करने से सिग्नल की गुणवत्ता में सुधार हो सकता है, विशेष रूप से प्रवेश के लिए।
अनुकूली रोक: बाजार की अस्थिरता की गतिशीलता के आधार पर स्टॉप लेवल को समायोजित करना, विभिन्न बाजार स्थितियों में रणनीति की अनुकूलता में सुधार कर सकता है।
एक गतिशील मूल्य सीमा तोड़-छाड़-बदल बहु-नीति व्यापार प्रणाली एक संरचित, स्पष्ट नियम वाली दिन के कारोबार की रणनीति है, जो शुरुआती मूल्य सीमा की पहचान करके और उसके बाद के ब्रेक, ट्रैप या रिवर्स पैटर्न के माध्यम से व्यापार के अवसरों की तलाश करती है। इस रणनीति का मुख्य लाभ इसकी सादगी और कई प्रवेश विधियों की लचीलापन में है, जबकि सख्त समय सीमा और जोखिम प्रबंधन सिद्धांत ट्रेडिंग अनुशासन को बनाए रखने में मदद करते हैं।
हालांकि, इस रणनीति को झूठे ब्रेकआउट, अनुचित चौड़ाई और विशिष्ट मूल्य पैटर्न पर निर्भरता जैसे जोखिमों का भी सामना करना पड़ता है। इस रणनीति की स्थिरता और अनुकूलनशीलता को और बढ़ाया जा सकता है, जैसे कि अनुकूलित चौड़ाई सेट करने की विधि, समय खिड़की को समायोजित करना, जोखिम-लाभ अनुपात को गतिशील रूप से सेट करना और बहु-समय फ्रेम विश्लेषण को एकीकृत करना।
अंततः, यह रणनीति शॉर्ट-लाइन व्यापारियों के लिए एक व्यवस्थित ढांचा प्रदान करती है, विशेष रूप से उन निवेशकों के लिए जो दैनिक खुलने के समय के दौरान कुशलता से व्यापार करना चाहते हैं। सभी व्यापारिक रणनीतियों की तरह, वास्तविक कार्यान्वयन से पहले पर्याप्त प्रतिक्रिया और उचित जोखिम प्रबंधन होना चाहिए।
/*backtest
start: 2025-07-22 00:00:00
end: 2025-08-21 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"ETH_USDT","balance":500000}]
*/
//@version=5
strategy("Three-Step 9:30 Range Scalping (Backtest)", overlay=true, calc_on_every_tick=false, process_orders_on_close=true,
initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0)
// -------------------- Inputs
enableBreak = input.bool(true, "Enable Break Entry")
enableTrap = input.bool(false, "Enable Trap Entry")
enableReversal = input.bool(true, "Enable Reversal Entry")
rr = input.float(2.0, "Take-Profit R Multiple", step=0.25, minval=0.25)
oneTradePerDay = input.bool(false, "One Trade Per Day")
showRange = input.bool(true, "Show 9:30 5m Range")
// Risk management
riskPct = input.float(1.0, "Risk % of Equity per Trade", step=0.1, minval=0.1, maxval=100.0)
sizeMode = input.string("Risk %", "Position Sizing Mode", options=["Risk %", "Fixed contracts"])
fixedContracts = input.int(1, "Fixed Contracts", minval=1)
// Optional: warn if not on 1-minute chart (execution timeframe per PRD)
onOneMinute = timeframe.isminutes and timeframe.multiplier == 1
// -------------------- Time helpers (chart is assumed New York time)
newDay = ta.change(time("D")) != 0
// Trade the first hour only: 9:30:00 to 10:29:59
inWindow = (hour == 9 and minute >= 30) or (hour == 10 and minute <= 29)
// Holiday blackout window: Do not trade Dec 15 – Jan 15
inBlackout = (month == 12 and dayofmonth >= 15) or (month == 1 and dayofmonth <= 15)
// -------------------- First 5-min range (use the actual 9:30 5m candle via security())
var float rangeHi = na
var float rangeLo = na
var bool haveRange = false
// -------------------- State for entries
var bool breakUpFound = false
var bool breakDownFound = false
var float initBreakUpLow = na // for Break/Trap long SL
var float initBreakDownHigh = na // for Break/Trap short SL
var bool trapUpRetestedInside = false
var bool trapDownRetestedInside = false
var bool tradedToday = false
// Reset daily state at midnight (chart timezone)
if newDay
rangeHi := na
rangeLo := na
haveRange := false
breakUpFound := false
breakDownFound := false
initBreakUpLow := na
initBreakDownHigh := na
trapUpRetestedInside := false
trapDownRetestedInside := false
tradedToday := false
// Pull the 5-minute bar that STARTS at 9:30 (value available on its close at 9:35)
sess0930Hi = request.security(syminfo.tickerid, "5", (hour == 9 and minute == 30) ? high : na, barmerge.gaps_off, barmerge.lookahead_off)
sess0930Lo = request.security(syminfo.tickerid, "5", (hour == 9 and minute == 30) ? low : na, barmerge.gaps_off, barmerge.lookahead_off)
// Lock the range when the 9:30 5m candle closes (value appears non-na exactly then)
if not haveRange and not na(sess0930Hi) and not na(sess0930Lo)
rangeHi := sess0930Hi
rangeLo := sess0930Lo
haveRange := true
// reset session-specific flags at start of trading window
breakUpFound := false
breakDownFound := false
initBreakUpLow := na
initBreakDownHigh := na
trapUpRetestedInside := false
trapDownRetestedInside := false
tradedToday := false
// -------------------- Visuals
plot(showRange and haveRange ? rangeHi : na, "Range High", color=color.new(color.teal, 0), style=plot.style_linebr, linewidth=2)
plot(showRange and haveRange ? rangeLo : na, "Range Low", color=color.new(color.orange, 0), style=plot.style_linebr, linewidth=2)
plotchar(not onOneMinute, title="Use 1-minute chart", char="⚠", location=location.top, color=color.new(color.red, 0), size=size.tiny)
plotchar(inBlackout, title="Holiday blackout (Dec 15–Jan 15)", char="⛔", location=location.top, color=color.new(color.red, 0), size=size.tiny)
// -------------------- Convenience conditions
closeAbove = haveRange and close > rangeHi
closeBelow = haveRange and close < rangeLo
closeInside = haveRange and close <= rangeHi and close >= rangeLo
// Track first body-close outside the range in each direction (initial break-close)
if haveRange and inWindow and not tradedToday
if not breakUpFound and closeAbove
breakUpFound := true
initBreakUpLow := low
trapUpRetestedInside := false
if not breakDownFound and closeBelow
breakDownFound := true
initBreakDownHigh := high
trapDownRetestedInside := false
// Trap retest flags (retest back inside after first break)
if haveRange and inWindow and not tradedToday
if breakUpFound and not trapUpRetestedInside and closeInside
trapUpRetestedInside := true
if breakDownFound and not trapDownRetestedInside and closeInside
trapDownRetestedInside := true
// -------------------- FVG detectors (three-candle imbalance)
// Simple wick-gap definition, preserved through the third candle
// Bullish: gap exists if Candle C low > Candle A high AND Candle B low > Candle A high
// Bearish: gap exists if Candle C high < Candle A low AND Candle B high < Candle A low
bullFVG = not na(high[2]) and (low[1] > high[2]) and (low > high[2])
bearFVG = not na(low[2]) and (high[1] < low[2]) and (high < low[2])
// -------------------- Entry gating
allowEntry = haveRange and inWindow and not inBlackout and strategy.position_size == 0 and (not oneTradePerDay or not tradedToday)
// Calculate contracts based on selected sizing mode
calcOrderQty(entryPrice, stopPrice) =>
qty = 0
if sizeMode == "Fixed contracts"
qty := fixedContracts
else
riskCash = strategy.equity * riskPct / 100.0
riskPerContract = math.abs(entryPrice - stopPrice) * syminfo.pointvalue
qty := riskPerContract > 0 ? math.floor(riskCash / riskPerContract) : 0
qty
// -------------------- BREAK Entries (needs FVG and ANY of the 3 bars closes outside)
if enableBreak and allowEntry
// Long BREAK
breakLongOk = bullFVG and (close > rangeHi or close[1] > rangeHi or close[2] > rangeHi)
if breakLongOk
// Stop at the FIRST candle that closed outside among the 3 FVG candles
float stopL = na
stopL := close[2] > rangeHi ? low[2] : stopL
stopL := na(stopL) and close[1] > rangeHi ? low[1] : stopL
stopL := na(stopL) and close > rangeHi ? low : stopL
entryL = close
if entryL > stopL
tpL = entryL + rr * (entryL - stopL)
qtyL = calcOrderQty(entryL, stopL)
if qtyL > 0
strategy.entry("LONG_BREAK", strategy.long, qty=qtyL)
strategy.exit("LONG_BREAK_TP/SL", from_entry="LONG_BREAK", stop=stopL, limit=tpL)
tradedToday := oneTradePerDay ? true : tradedToday
// Short BREAK
breakShortOk = bearFVG and (close < rangeLo or close[1] < rangeLo or close[2] < rangeLo)
if breakShortOk
// Stop at the FIRST candle that closed outside among the 3 FVG candles
float stopS = na
stopS := close[2] < rangeLo ? high[2] : stopS
stopS := na(stopS) and close[1] < rangeLo ? high[1] : stopS
stopS := na(stopS) and close < rangeLo ? high : stopS
entryS = close
if entryS < stopS
tpS = entryS - rr * (stopS - entryS)
qtyS = calcOrderQty(entryS, stopS)
if qtyS > 0
strategy.entry("SHORT_BREAK", strategy.short, qty=qtyS)
strategy.exit("SHORT_BREAK_TP/SL", from_entry="SHORT_BREAK", stop=stopS, limit=tpS)
tradedToday := oneTradePerDay ? true : tradedToday
// -------------------- TRAP Entries (Break → Retest inside → Reclose outside; FVG not required)
if enableTrap and allowEntry
// Long TRAP
if breakUpFound and trapUpRetestedInside and closeAbove
stopL = na(initBreakUpLow) ? low : initBreakUpLow
entryL = close
if entryL > stopL
tpL = entryL + rr * (entryL - stopL)
qtyL = calcOrderQty(entryL, stopL)
if qtyL > 0
strategy.entry("LONG_TRAP", strategy.long, qty=qtyL)
strategy.exit("LONG_TRAP_TP/SL", from_entry="LONG_TRAP", stop=stopL, limit=tpL)
tradedToday := oneTradePerDay ? true : tradedToday
// Short TRAP
if breakDownFound and trapDownRetestedInside and closeBelow
stopS = na(initBreakDownHigh) ? high : initBreakDownHigh
entryS = close
if entryS < stopS
tpS = entryS - rr * (stopS - entryS)
qtyS = calcOrderQty(entryS, stopS)
if qtyS > 0
strategy.entry("SHORT_TRAP", strategy.short, qty=qtyS)
strategy.exit("SHORT_TRAP_TP/SL", from_entry="SHORT_TRAP", stop=stopS, limit=tpS)
tradedToday := oneTradePerDay ? true : tradedToday
// -------------------- REVERSAL Entries (Failed break + opposite FVG back into range)
if enableReversal and allowEntry
// After bearish break, bullish FVG back into range → LONG
if breakDownFound and bullFVG and closeInside
stopL = low[2] // first candle of the FVG
entryL = close
if entryL > stopL
tpL = entryL + rr * (entryL - stopL)
qtyL = calcOrderQty(entryL, stopL)
if qtyL > 0
strategy.entry("LONG_REV", strategy.long, qty=qtyL)
strategy.exit("LONG_REV_TP/SL", from_entry="LONG_REV", stop=stopL, limit=tpL)
tradedToday := oneTradePerDay ? true : tradedToday
// After bullish break, bearish FVG back into range → SHORT
if breakUpFound and bearFVG and closeInside
stopS = high[2] // first candle of the FVG
entryS = close
if entryS < stopS
tpS = entryS - rr * (stopS - entryS)
qtyS = calcOrderQty(entryS, stopS)
if qtyS > 0
strategy.entry("SHORT_REV", strategy.short, qty=qtyS)
strategy.exit("SHORT_REV_TP/SL", from_entry="SHORT_REV", stop=stopS, limit=tpS)
tradedToday := oneTradePerDay ? true : tradedToday
// -------------------- Markers
plotshape(enableBreak and (bullFVG and (close > rangeHi or close[1] > rangeHi or close[2] > rangeHi)) and allowEntry, title="Break Long", style=shape.triangleup, color=color.new(color.teal, 0), size=size.tiny, location=location.belowbar, text="Break")
plotshape(enableBreak and (bearFVG and (close < rangeLo or close[1] < rangeLo or close[2] < rangeLo)) and allowEntry, title="Break Short", style=shape.triangledown, color=color.new(color.orange, 0), size=size.tiny, location=location.abovebar, text="Break")
plotshape(enableTrap and breakUpFound and trapUpRetestedInside and closeAbove and allowEntry, title="Trap Long", style=shape.circle, color=color.new(color.teal, 0), size=size.tiny, location=location.belowbar, text="Trap")
plotshape(enableTrap and breakDownFound and trapDownRetestedInside and closeBelow and allowEntry, title="Trap Short", style=shape.circle, color=color.new(color.orange, 0), size=size.tiny, location=location.abovebar, text="Trap")
plotshape(enableReversal and breakDownFound and bullFVG and closeInside and allowEntry, title="Reversal Long", style=shape.diamond, color=color.new(color.teal, 0), size=size.tiny, location=location.belowbar, text="Rev")
plotshape(enableReversal and breakUpFound and bearFVG and closeInside and allowEntry, title="Reversal Short", style=shape.diamond, color=color.new(color.orange, 0), size=size.tiny, location=location.abovebar, text="Rev")