یہ حکمت عملی قیمت کی کارروائی میں آرڈر بلاکس کی نشاندہی کرتی ہے تاکہ رفتار کے دھماکوں کا پتہ لگایا جاسکے اور جب خرید / فروخت کے سگنل سامنے آتے ہیں تو وہ مارکیٹ میں داخل ہوجاتا ہے۔ آرڈر بلاکس ادارہ جاتی شرکت اور اہم مارکیٹ فورسز کی نمائندگی کرتے ہیں۔ اس طرح آرڈر بلاک سگنلز میں قیمت کی کارروائی کا باعث بننے کا زیادہ امکان ہوتا ہے۔
آرڈر بلاکس کی دو اقسام ہیں - تیزی اور کمی۔ تیزی کے آرڈر بلاک کی تعریف آخری سرخ موم بتی کے بعد لگاتار سبز موم بتیوں کے طور پر کی جاتی ہے۔ کمی کا آرڈر بلاک آخری سبز موم بتی ہے جس کے بعد لگاتار سرخ موم بتیاں ہیں۔
آرڈر بلاک کی نشاندہی کرنے کے لئے، مندرجہ ذیل معیار کو بیک وقت پورا کیا جانا چاہئے:
موم بتی کا رنگ تبدیل - موم بتی کا رنگ پچھلی موم بتی سے موجودہ رنگ میں تبدیل ہوجاتا ہے (مثال کے طور پر سرخ سے سبز ، یا سبز سے سرخ) ۔ اس سے پتہ چلتا ہے کہ ادارے پچھلے رجحان کو ختم کر رہے ہیں اور ایک نیا ممکنہ رجحان شروع کر رہے ہیں۔
بعد میں مستقل سمت - مندرجہ ذیل موم بتیاں پیرامیٹرز میں بیان کردہ ادوار کی تعداد کے لئے ایک ہی رنگ کی سمت برقرار رکھتی ہیں (جیسے ممکنہ تیزی کے بلاک کے بعد تمام سبز موم بتیاں) ۔ اس سے نئے رجحان کی تصدیق ہوتی ہے۔
بریک آؤٹ حد سے تجاوز کرتا ہے - آرڈر بلاک موم بتی کے افتتاح سے حتمی تصدیق موم بتی کے اختتام تک فیصد قیمت میں تبدیلی حد کے پیرامیٹر (ڈیفالٹ 0) سے تجاوز کرتی ہے۔ اس سے کافی مضبوط رفتار کو یقینی بنایا جاتا ہے۔
جب تینوں معیار درست ہوں تو ، آرڈر بلاک سگنل کی نشاندہی کی جاتی ہے۔
ایک خریدنے کا اشارہ ایک تیزی سے آرڈر بلاک کا پتہ لگانے پر تیار کیا جاتا ہے۔ ایک فروخت کا اشارہ اس وقت ظاہر ہوتا ہے جب ایک bearish آرڈر بلاک کی نشاندہی کی جاتی ہے۔
آرڈر فلو سگنلز کی غیر یقینی صورتحال پر غور کرتے ہوئے ، یہ حکمت عملی فوری طور پر مارکیٹ میں داخل نہیں ہوتی ہے۔ یہ تاجر کو متنبہ کرتی ہے اور اس کی بجائے آرڈر بلاک کی سطح کے قریب قیمت کی حد کے احکامات کی اجازت دیتی ہے۔ اس سے کنٹرول شدہ اندراجات اور رسک مینجمنٹ فراہم ہوتی ہے۔
آرڈر بلاکس ادارہ جاتی رقم کے بہاؤ اور کافی حجم کی نمائندگی کرتے ہیں۔ وہ مارکیٹ کی قوتوں میں تبدیلیوں کی نشاندہی کرتے ہیں اور ممکنہ بریک آؤٹ کی سمت کے بارے میں ابتدائی اشارے فراہم کرتے ہیں۔ اس سے ٹرینڈ کو صحیح وقت پر پیروی کرنے میں آسانی ہوتی ہے۔
موم بتیوں کی تعداد ، بریک آؤٹ فی صد وغیرہ کو کنٹرول کرنے والے پیرامیٹرز کو مارکیٹ کے بدلتے حالات اور تجارتی انداز کے مطابق بہتر بنانے کے لئے ایڈجسٹ کیا جاسکتا ہے۔ اس سے موافقت میں اضافہ ہوتا ہے۔
سگنلز پر خودکار اندراج نہ کرکے اور اس کے بجائے حد کے احکامات کا استعمال کرتے ہوئے ، تاجر اندراج کی سطح اور خطرے کو کنٹرول کرسکتے ہیں۔ ناکام سگنل صرف غیر مکمل حد کے احکامات کا باعث بنتے ہیں۔ خطرات پر قابو پایا جاتا ہے۔
جیسا کہ آرڈر بلاکس زون کی نشاندہی کرتے ہیں ، قیمتوں میں سطح پر نظر ثانی کرنا عام بات ہے۔ سگنل کو براہ راست اندراجات کے طور پر نہیں دیکھا جانا چاہئے۔ مزید ٹائمنگ فیصلے کی ضرورت ہے۔
اگر پیرامیٹرز کو صحیح طریقے سے ترتیب نہیں دیا جاتا ہے تو ، رینج سے منسلک مارکیٹوں میں جعلی سگنل سامنے آسکتے ہیں۔ تاجروں کو سگنلز کو لاگو کرنے میں صوابدیدی استعمال کرنے کی ضرورت ہے۔ اندھے اصلاح سے گریز کرنا چاہئے۔
ہر سگنل کے ساتھ مزید توثیق کی ضرورت ہوتی ہے ، جس میں دستی کوشش شامل ہوتی ہے۔ سگنل کی کوالٹی پر انسانی امتیاز میں عدم استحکام کارکردگی میں فرق کا باعث بن سکتا ہے۔
جب سگنل مارکیٹ کے حالات کی پیمائش کرنے لگتے ہیں تو MACD اور RSI جیسے اضافی اشارے شامل کریں۔ اس سے خراب پیرامیٹر کی ترتیبات سے خراب سگنل فلٹر ہوجاتے ہیں۔
پیرامیٹرز کی جانچ کی جاسکتی ہے اور بہتر فٹ کے ل different مختلف مارکیٹوں اور آلات کو فٹ کرنے کے ل adjust ایڈجسٹ کیا جاسکتا ہے۔ اتار چڑھاؤ اور رسک رواداری کی بنیاد پر آٹو ایڈجسٹ کرنے کے لئے موافقت پذیر ترتیبات کو بھی نافذ کیا جاسکتا ہے۔
فی الحال یہ حکمت عملی صرف سگنل الرٹس کی حیثیت سے کام کرتی ہے۔ سگنلز پر حد آرڈر اندراجات کو خودکار بنانے اور باہر نکلنے کے لئے رکنے کو نافذ کرنے کے لئے منطق شامل کی جاسکتی ہے۔ اس سے آٹومیشن میں اضافہ ہوتا ہے اور انسانی فیصلے پر انحصار کم ہوتا ہے۔
آرڈر فلو کنورجنس کا پتہ لگانے سے ، یہ حکمت عملی سطح کے نیچے چھپی ہوئی رفتار کی حرکت کو ظاہر کرتی ہے۔ سادہ رجحان کی پیروی کے مقابلے میں ، اس میں موڑ کے مقامات کا پتہ لگانے میں پیش گوئی کی صلاحیتیں ہیں۔ جب اصلاح اور رسک کنٹرول کی تکنیک کے ساتھ مل کر ، یہ ایک موثر رجحان ٹریڈنگ سسٹم بن سکتا ہے۔ اس کے باوجود ، تاجروں کو خراب سگنلز سے محتاط رہنا چاہئے اور ہر سگنل کی کیفیت کا اندازہ کرنا چاہئے۔ مزید کوششوں کو ذہنی صوابدید سے تعصب کو کم سے کم کرنے کے لئے آٹومیشن کو بڑھانے پر توجہ دینی چاہئے۔
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m 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/ // © TradingSecrets and wugamlo // This experimental Indicator helps identifying instituational Order Blocks. // Often these blocks signal the beginning of a strong move, but there is a significant probability that these price levels will be revisited at a later point in time again. // Therefore these are interesting levels to place limit orders (Buy Orders for Bullish OB / Sell Orders for Bearish OB). // // A Bullish Order block is defined as the last down candle before a sequence of up candles. (Relevant price range "Open" to "Low" is marked) / Optionally full range "High" to "Low" // A Bearish Order Block is defined as the last up candle before a sequence of down candles. (Relevant price range "Open" to "High" is marked) / Optionally full range "High" to "Low" // // In the settings the number of required sequential candles can be adjusted. // Furthermore a %-threshold can be entered. It defines which %-change the sequential move needs to achieve in order to identify a relevant Order Block. // Channels for the last Bullish/Bearish Block can be shown/hidden. // // In addition to the upper/lower limits of each Order Block, also the equlibrium (average value) is marked as this is an interesting area for price interaction. // // Alerts added: Alerts fire when an Order Block is detected. The delay is based on the "Relevant Periods" input. Means with the default setting "5" the alert will trigger after the // number of consecutive candles is reached. //@version=4 strategy("[Backtest] Order Block Finder", overlay = true) colors = input(title = "Color Scheme", defval="DARK", options=["DARK", "BRIGHT"]) periods = input(5, "Relevant Periods to identify OB") // Required number of subsequent candles in the same direction to identify Order Block threshold = input(0.0, "Min. Percent move to identify OB", step = 0.1) // Required minimum % move (from potential OB close to last subsequent candle to identify Order Block) usewicks = input(false, "Use whole range [High/Low] for OB marking?" ) // Display High/Low range for each OB instead of Open/Low for Bullish / Open/High for Bearish showbull = input(false, "Show latest Bullish Channel?") // Show Channel for latest Bullish OB? showbear = input(false, "Show latest Bearish Channel?") // Show Channel for latest Bearish OB? showdocu = input(false, "Show Label for documentation tooltip?") // Show Label which shows documentation as tooltip? info_pan = input(false, "Show Latest OB Panel?") // Show Info Panel with latest OB Stats //strategy inputs plot_offset = input( type=input.bool,defval = false, title = 'Plot Offset?') stoploss_percent = input(type=input.float, defval = 1, title = 'Stop Loss [%]') takeprofit_percent = input(type=input.float, defval = 2, title = 'Take Profit [%]') pyramiding = input( type=input.bool,defval = true, title = 'Pyramiding') ob_period = periods + 1 // Identify location of relevant Order Block candle absmove = ((abs(close[ob_period] - close[1]))/close[ob_period]) * 100 // Calculate absolute percent move from potential OB to last candle of subsequent candles relmove = absmove >= threshold // Identify "Relevant move" by comparing the absolute move to the threshold // Color Scheme bullcolor = colors == "DARK"? color.white : color.green bearcolor = colors == "DARK"? color.blue : color.red // Bullish Order Block Identification bullishOB = close[ob_period] < open[ob_period] // Determine potential Bullish OB candle (red candle) int upcandles = 0 for i = 1 to periods upcandles := upcandles + (close[i] > open[i]? 1 : 0) // Determine color of subsequent candles (must all be green to identify a valid Bearish OB) OB_bull = bullishOB and (upcandles == (periods)) and relmove // Identification logic (red OB candle & subsequent green candles) OB_bull_high = OB_bull? usewicks? high[ob_period] : open[ob_period] : na // Determine OB upper limit (Open or High depending on input) OB_bull_low = OB_bull? low[ob_period] : na // Determine OB lower limit (Low) OB_bull_avg = (OB_bull_high + OB_bull_low)/2 // Determine OB middle line // Bearish Order Block Identification bearishOB = close[ob_period] > open[ob_period] // Determine potential Bearish OB candle (green candle) int downcandles = 0 for i = 1 to periods downcandles := downcandles + (close[i] < open[i]? 1 : 0) // Determine color of subsequent candles (must all be red to identify a valid Bearish OB) OB_bear = bearishOB and (downcandles == (periods)) and relmove // Identification logic (green OB candle & subsequent green candles) OB_bear_high = OB_bear? high[ob_period] : na // Determine OB upper limit (High) OB_bear_low = OB_bear? usewicks? low[ob_period] : open[ob_period] : na // Determine OB lower limit (Open or Low depending on input) OB_bear_avg = (OB_bear_low + OB_bear_high)/2 // Determine OB middle line //@TradingSecrets: Option to disable the offset in order to allign signals with Backtest if not plot_offset ob_period := 0 // Plotting plotshape(OB_bull, title="Bullish OB", style = shape.triangleup, color = bullcolor, textcolor = bullcolor, size = size.tiny, location = location.belowbar, offset = -ob_period, text = "Bullish OB") // Bullish OB Indicator bull1 = plot(OB_bull_high, title="Bullish OB High", style = plot.style_linebr, color = bullcolor, offset = -ob_period, linewidth = 3) // Bullish OB Upper Limit bull2 = plot(OB_bull_low, title="Bullish OB Low", style = plot.style_linebr, color = bullcolor, offset = -ob_period, linewidth = 3) // Bullish OB Lower Limit fill(bull1, bull2, color=bullcolor, transp = 0, title = "Bullish OB fill") // Fill Bullish OB plotshape(OB_bull_avg, title="Bullish OB Average", style = shape.cross, color = bullcolor, size = size.normal, location = location.absolute, offset = -ob_period) // Bullish OB Average plotshape(OB_bear, title="Bearish OB", style = shape.triangledown, color = bearcolor, textcolor = bearcolor, size = size.tiny, location = location.abovebar, offset = -ob_period, text = "Bearish OB") // Bearish OB Indicator bear1 = plot(OB_bear_low, title="Bearish OB Low", style = plot.style_linebr, color = bearcolor, offset = -ob_period, linewidth = 3) // Bearish OB Lower Limit bear2 = plot(OB_bear_high, title="Bearish OB High", style = plot.style_linebr, color = bearcolor, offset = -ob_period, linewidth = 3) // Bearish OB Upper Limit fill(bear1, bear2, color=bearcolor, transp = 0, title = "Bearish OB fill") // Fill Bearish OB plotshape(OB_bear_avg, title="Bearish OB Average", style = shape.cross, color = bearcolor, size = size.normal, location = location.absolute, offset = -ob_period) // Bullish OB Average var line linebull1 = na // Bullish OB average var line linebull2 = na // Bullish OB open var line linebull3 = na // Bullish OB low var line linebear1 = na // Bearish OB average var line linebear2 = na // Bearish OB high var line linebear3 = na // Bearish OB open if OB_bull and showbull line.delete(linebull1) linebull1 := line.new(x1 = bar_index, y1 = OB_bull_avg, x2 = bar_index - 1, y2 = OB_bull_avg, extend = extend.left, color = bullcolor, style = line.style_solid, width = 1) line.delete(linebull2) linebull2 := line.new(x1 = bar_index, y1 = OB_bull_high, x2 = bar_index - 1, y2 = OB_bull_high, extend = extend.left, color = bullcolor, style = line.style_dashed, width = 1) line.delete(linebull3) linebull3 := line.new(x1 = bar_index, y1 = OB_bull_low, x2 = bar_index - 1, y2 = OB_bull_low, extend = extend.left, color = bullcolor, style = line.style_dashed, width = 1) if OB_bear and showbear line.delete(linebear1) linebear1 := line.new(x1 = bar_index, y1 = OB_bear_avg, x2 = bar_index - 1, y2 = OB_bear_avg, extend = extend.left, color = bearcolor, style = line.style_solid, width = 1) line.delete(linebear2) linebear2 := line.new(x1 = bar_index, y1 = OB_bear_high, x2 = bar_index - 1, y2 = OB_bear_high, extend = extend.left, color = bearcolor, style = line.style_dashed, width = 1) line.delete(linebear3) linebear3 := line.new(x1 = bar_index, y1 = OB_bear_low, x2 = bar_index - 1, y2 = OB_bear_low, extend = extend.left, color = bearcolor, style = line.style_dashed, width = 1) // Alerts for Order Blocks Detection alertcondition(OB_bull, title='New Bullish OB detected', message='New Bullish OB detected - This is NOT a BUY signal!') alertcondition(OB_bear, title='New Bearish OB detected', message='New Bearish OB detected - This is NOT a SELL signal!') // Print latest Order Blocks in Data Window var latest_bull_high = 0.0 // Variable to keep latest Bull OB high var latest_bull_avg = 0.0 // Variable to keep latest Bull OB average var latest_bull_low = 0.0 // Variable to keep latest Bull OB low var latest_bear_high = 0.0 // Variable to keep latest Bear OB high var latest_bear_avg = 0.0 // Variable to keep latest Bear OB average var latest_bear_low = 0.0 // Variable to keep latest Bear OB low // Assign latest values to variables if OB_bull_high > 0 latest_bull_high := OB_bull_high if OB_bull_avg > 0 latest_bull_avg := OB_bull_avg if OB_bull_low > 0 latest_bull_low := OB_bull_low if OB_bear_high > 0 latest_bear_high := OB_bear_high if OB_bear_avg > 0 latest_bear_avg := OB_bear_avg if OB_bear_low > 0 latest_bear_low := OB_bear_low // Plot invisible characters to be able to show the values in the Data Window plotchar(latest_bull_high, char = ' ', location = location.abovebar, color = #777777, transp = 100, size = size.tiny, title = "Latest Bull High") plotchar(latest_bull_avg, char = ' ', location = location.abovebar, color = #777777, transp = 100, size = size.tiny, title = "Latest Bull Avg") plotchar(latest_bull_low, char = ' ', location = location.abovebar, color = #777777, transp = 100, size = size.tiny, title = "Latest Bull Low") plotchar(latest_bear_high, char = ' ', location = location.abovebar, color = #777777, transp = 100, size = size.tiny, title = "Latest Bear High") plotchar(latest_bear_avg, char = ' ', location = location.abovebar, color = #777777, transp = 100, size = size.tiny, title = "Latest Bear Avg") plotchar(latest_bear_low, char = ' ', location = location.abovebar, color = #777777, transp = 100, size = size.tiny, title = "Latest Bear Low") //InfoPanel for latest Order Blocks draw_InfoPanel(_text, _x, _y, font_size)=> var label la_panel = na label.delete(la_panel) la_panel := label.new( x=_x, y=_y, text=_text, xloc=xloc.bar_time, yloc=yloc.price, color=color.new(#383838, 5), style=label.style_label_left, textcolor=color.white, size=font_size) info_panel_x = time_close + round(change(time) * 100) info_panel_y = close title = "LATEST ORDER BLOCKS" row0 = "-----------------------------------------------------" row1 = ' Bullish - High: ' + tostring(latest_bull_high, '#.##') row2 = ' Bullish - Avg: ' + tostring(latest_bull_avg, '#.##') row3 = ' Bullish - Low: ' + tostring(latest_bull_low, '#.##') row4 = "-----------------------------------------------------" row5 = ' Bearish - High: ' + tostring(latest_bear_high, '#.##') row6 = ' Bearish - Avg: ' + tostring(latest_bear_avg, '#.##') row7 = ' Bearish - Low: ' + tostring(latest_bear_low, '#.##') panel_text = '\n' + title + '\n' + row0 + '\n' + row1 + '\n' + row2 + '\n' + row3 + '\n' + row4 + '\n\n' + row5 + '\n' + row6 + '\n' + row7 + '\n' if info_pan draw_InfoPanel(panel_text, info_panel_x, info_panel_y, size.normal) // === Label for Documentation/Tooltip === chper = time - time[1] chper := change(chper) > 0 ? chper[1] : chper // === Tooltip text === var vartooltip = "Indicator to help identifying instituational Order Blocks. Often these blocks signal the beginning of a strong move, but there is a high probability, that these prices will be revisited at a later point in time again and therefore are interesting levels to place limit orders. \nBullish Order block is the last down candle before a sequence of up candles. \nBearish Order Block is the last up candle before a sequence of down candles. \nIn the settings the number of required sequential candles can be adjusted. \nFurthermore a %-threshold can be entered which the sequential move needs to achieve in order to validate a relevant Order Block. \nChannels for the last Bullish/Bearish Block can be shown/hidden." // === Print Label === var label l_docu = na label.delete(l_docu) if showdocu l_docu := label.new(x = time + chper * 35, y = close, text = "DOCU OB", color=color.gray, textcolor=color.white, style=label.style_label_center, xloc = xloc.bar_time, yloc=yloc.price, size=size.tiny, textalign = text.align_left, tooltip = vartooltip) // @TradingSecrets: Generate entry and exit orders based on the signals entryLongSignal = OB_bull entryShortSignal = OB_bear if not pyramiding entryLongSignal := entryLongSignal and not strategy.position_size entryShortSignal := entryShortSignal and not strategy.position_size if entryLongSignal strategy.entry("Long Entry", strategy.long) //strategy.exit("Long Exit Loss", "Long Entry", stop = close * (1 - stoploss_percent*0.01)) if entryShortSignal strategy.entry("Short Entry", strategy.short) //strategy.exit("Short Exit Loss", "Short Entry", stop = close * (1 + stoploss_percent*0.01)) strategy.initial_capital = 50000 //Close Position by market order if strategy.position_size > 0 and strategy.openprofit/nz(strategy.initial_capital + strategy.netprofit) >= takeprofit_percent*0.01 //If I m in a long position and my take profit got hit close it by market order strategy.close("Long Entry", comment = "Long Exit Profit") if strategy.position_size < 0 and strategy.openprofit/nz(strategy.initial_capital + strategy.netprofit) >= takeprofit_percent*0.01 strategy.close("Short Entry", comment = "Short Exit Profit") if strategy.position_size > 0 and strategy.openprofit/nz(strategy.initial_capital + strategy.netprofit) <= -stoploss_percent*0.01 //If I m in a long position and my take profit got hit close it by market order strategy.close("Long Entry", comment = "Long Exit Loss") if strategy.position_size < 0 and strategy.openprofit/nz(strategy.initial_capital + strategy.netprofit) <= -stoploss_percent*0.01 strategy.close("Short Entry", comment = "Short Exit Loss")