एसआर ब्रेकआउट रणनीति एक समर्थन और प्रतिरोध ब्रेकआउट रणनीति है जिसे लोनसम दब्लू के ब्रेकआउट फाइंडर संकेतक के आधार पर विकसित किया गया है। इस रणनीति का मुख्य विचार यह तय करके लंबे या छोटे संकेत उत्पन्न करना है कि क्या समापन मूल्य समर्थन या प्रतिरोध स्तर को तोड़ता है। डिफ़ॉल्ट सेटिंग्स 8 घंटे के कैंडलस्टिक चार्ट पर आधारित हैं, लेकिन 4 घंटे के कैंडलस्टिक चार्ट पर अधिक इष्टतम पैरामीटर सेटिंग्स हैं। यह रणनीति समर्थन और प्रतिरोध स्तरों को निर्धारित करने के लिए पिवोटहाई और पिवोटलो फंक्शन का उपयोग करती है, और ब्रेकआउट निर्धारित करने के लिए उच्चतम और निम्नतम कीमतों का उपयोग करती है। साथ ही, यह रणनीति स्टॉप लॉस और लाभ लेने की भी स्थापना करती है।
एसआर ब्रेकआउट रणनीति समर्थन और प्रतिरोध ब्रेकआउट के क्लासिक विचार पर आधारित एक ट्रेडिंग रणनीति है। समर्थन और प्रतिरोध स्तरों की गणना करने के लिए पिवोटहाइ और पिवोटलो फ़ंक्शन का उपयोग करके, और यह आंकने के द्वारा कि क्या समापन मूल्य व्यापार संकेत उत्पन्न करने के लिए इन स्तरों के माध्यम से टूटता है। इस रणनीति का लाभ यह है कि विचार स्पष्ट और लागू करने और अनुकूलित करने में आसान है; साथ ही, कुछ जोखिम भी हैं, जैसे कि अस्थिर बाजारों में खराब प्रदर्शन, और जोखिम जो निश्चित स्टॉप लॉस और लाभ लेने के अनुपात से पैदा हो सकते हैं। भविष्य में, हम अपनी स्थिरता और लाभप्रदता में सुधार के लिए तकनीकी संकेतकों, स्टॉप लॉस और लाभ लेने, फ़िल्टरिंग स्थितियों, समर्थन और प्रतिरोध अनुकूलन आदि जैसे पहलुओं से इस रणनीति को अनुकूलित करने और सुधारने पर विचार कर सकते हैं।
/*backtest start: 2024-05-07 00:00:00 end: 2024-05-14 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © LonesomeTheBlue © chanu_lev10k //@version=5 strategy('SR Breakout Strategy', overlay=true, max_bars_back=500, max_lines_count=400) prd = input.int(defval=5, title='Period', minval=2) bo_len = input.int(defval=71, title='Max Breakout Length', minval=30, maxval=300) cwidthu = input.float(defval=3., title='Threshold Rate %', minval=1., maxval=10) / 100 mintest = input.int(defval=2, title='Minimum Number of Tests', minval=1) bocolorup = input.color(defval=color.blue, title='Breakout Colors', inline='bocol') bocolordown = input.color(defval=color.red, title='', inline='bocol') // lstyle = input.string(defval=line.style_solid, title='Line Style') issl = input.bool(title='SL', inline='linesl1', group='Stop Loss / Take Profit:', defval=false) slpercent = input.float(title=', %', inline='linesl1', group='Stop Loss / Take Profit:', defval=18.0, minval=0.0, step=0.1) istp = input.bool(title='TP', inline='linetp1', group='Stop Loss / Take Profit:', defval=false) tppercent = input.float(title=', %', inline='linetp1', group='Stop Loss / Take Profit:', defval=18.0, minval=0.0, step=0.1) //width lll = math.max(math.min(bar_index, 300), 1) float h_ = ta.highest(lll) float l_ = ta.lowest(lll) float chwidth = (h_ - l_) * cwidthu // check if PH/PL ph = ta.pivothigh(prd, prd) pl = ta.pivotlow(prd, prd) //keep Pivot Points and their locations in the arrays var phval = array.new_float(0) var phloc = array.new_int(0) var plval = array.new_float(0) var plloc = array.new_int(0) // keep PH/PL levels and locations if bool(ph) array.unshift(phval, ph) array.unshift(phloc, bar_index - prd) if array.size(phval) > 1 // cleanup old ones for x = array.size(phloc) - 1 to 1 by 1 if bar_index - array.get(phloc, x) > bo_len array.pop(phloc) array.pop(phval) if bool(pl) array.unshift(plval, pl) array.unshift(plloc, bar_index - prd) if array.size(plval) > 1 // cleanup old ones for x = array.size(plloc) - 1 to 1 by 1 if bar_index - array.get(plloc, x) > bo_len array.pop(plloc) array.pop(plval) // check bullish cup float bomax = na int bostart = bar_index num = 0 hgst = ta.highest(prd)[1] if array.size(phval) >= mintest and close > open and close > hgst bomax := array.get(phval, 0) xx = 0 for x = 0 to array.size(phval) - 1 by 1 if array.get(phval, x) >= close break xx := x bomax := math.max(bomax, array.get(phval, x)) bomax if xx >= mintest and open <= bomax for x = 0 to xx by 1 if array.get(phval, x) <= bomax and array.get(phval, x) >= bomax - chwidth num += 1 bostart := array.get(phloc, x) bostart if num < mintest or hgst >= bomax bomax := na bomax // if not na(bomax) and num >= mintest // line.new(x1=bar_index, y1=bomax, x2=bostart, y2=bomax, color=bocolorup) // line.new(x1=bar_index, y1=bomax - chwidth, x2=bostart, y2=bomax - chwidth, color=bocolorup) // line.new(x1=bostart, y1=bomax - chwidth, x2=bostart, y2=bomax, color=bocolorup) // line.new(x1=bar_index, y1=bomax - chwidth, x2=bar_index, y2=bomax, color=bocolorup) plotshape(not na(bomax) and num >= mintest, location=location.belowbar, style=shape.triangleup, color=bocolorup, size=size.small) //alertcondition(not na(bomax) and num >= mintest, title='Breakout', message='Breakout') // check bearish cup float bomin = na bostart := bar_index num1 = 0 lwst = ta.lowest(prd)[1] if array.size(plval) >= mintest and close < open and close < lwst bomin := array.get(plval, 0) xx = 0 for x = 0 to array.size(plval) - 1 by 1 if array.get(plval, x) <= close break xx := x bomin := math.min(bomin, array.get(plval, x)) bomin if xx >= mintest and open >= bomin for x = 0 to xx by 1 if array.get(plval, x) >= bomin and array.get(plval, x) <= bomin + chwidth num1 += 1 bostart := array.get(plloc, x) bostart if num1 < mintest or lwst <= bomin bomin := na bomin // if not na(bomin) and num1 >= mintest // line.new(x1=bar_index, y1=bomin, x2=bostart, y2=bomin, color=bocolordown) // line.new(x1=bar_index, y1=bomin + chwidth, x2=bostart, y2=bomin + chwidth, color=bocolordown) // line.new(x1=bostart, y1=bomin + chwidth, x2=bostart, y2=bomin, color=bocolordown) // line.new(x1=bar_index, y1=bomin + chwidth, x2=bar_index, y2=bomin, color=bocolordown) plotshape(not na(bomin) and num1 >= mintest, location=location.abovebar, style=shape.triangledown, color=bocolordown, size=size.small) //alertcondition(not na(bomin) and num1 >= mintest, title='Breakdown', message='Breakdown') //alertcondition(not na(bomax) and num >= mintest or not na(bomin) and num1 >= mintest, title='Breakout or Breakdown', message='Breakout or Breakdown') // Long Short conditions longCondition = not na(bomax) and num >= mintest if longCondition strategy.entry('Long', strategy.long) shortCondition = not na(bomin) and num1 >= mintest if shortCondition strategy.entry('Short', strategy.short) // Entry price / Take Profit / Stop Loss //entryprice = strategy.position_avg_price entryprice = ta.valuewhen(condition=longCondition or shortCondition, source=close, occurrence=0) pm = longCondition ? 1 : shortCondition ? -1 : 1 / math.sign(strategy.position_size) takeprofit = entryprice * (1 + pm * tppercent * 0.01) stoploss = entryprice * (1 - pm * slpercent * 0.01) strategy.exit(id='Exit Long', from_entry='Long', stop=issl ? stoploss : na, limit=istp ? takeprofit : na, alert_message='Exit Long') strategy.exit(id='Exit Short', from_entry='Short', stop=issl ? stoploss : na, limit=istp ? takeprofit : na, alert_message='Exit Short')