
متحرک بریکنگ ماسٹر چینل حکمت عملی ایک انکولی ٹریڈنگ سسٹم ہے جس میں مزاحمت کی حمایت کی حمایت کی جاتی ہے تاکہ مارکیٹ میں اہم معاونت اور مزاحمت کی پوزیشنوں کو متحرک طور پر شناخت کرکے ممکنہ منافع کے مواقع کو پکڑ سکے۔ اس حکمت عملی کا بنیادی مقصد ایک متحرک چینل کی تعمیر کرنا ہے جو مارکیٹ کے حالات کے مطابق خود بخود ایڈجسٹ ہوجاتا ہے ، قیمت کی نقل و حرکت کو حقیقی وقت میں ٹریک کرتا ہے اور جب اہم علاقوں میں توڑ جاتا ہے تو تجارتی سگنل جاری کرتا ہے۔ حکمت عملی معاونت اور مزاحمت کے علاقوں کی نشاندہی کرنے کے لئے محور پوائنٹس (پییوٹ پوائنٹس) الگورتھم کا استعمال کرتی ہے ، اور ان علاقوں کی طاقت اور اثر و رسوخ کے مطابق تجارتی فیصلے پیدا کرتی ہے۔
اس حکمت عملی میں بہت سارے حسب ضرورت پیرامیٹرز فراہم کیے گئے ہیں ، بشمول ٹرن آؤٹ پوائنٹ سائیکل ، ڈیٹا سورس کا انتخاب ، چینل کی چوڑائی کی حد ، کم سے کم ٹرن آؤٹ پوائنٹ کی شدت کی ضروریات اور سپورٹ / مزاحمت والے علاقوں کی نمائش کی تعداد ، تاکہ تاجر مختلف مارکیٹ کے حالات اور ذاتی ترجیحات کے مطابق لچکدار ایڈجسٹمنٹ کرسکیں۔ اس کے علاوہ ، اس حکمت عملی میں منتقل اوسط کی انضمام کی بھی حمایت کی گئی ہے ، جس سے تجارتی فیصلوں کے لئے اضافی تکنیکی تجزیاتی نقطہ نظر فراہم کیا جاسکتا ہے۔
تجارتی منطق پر ، جب قیمت اوپر کی طرف مزاحمت کے علاقے کو توڑتی ہے تو ، سسٹم خریدنے کا اشارہ کرتا ہے۔ جب قیمت نیچے کی طرف حمایت کے علاقے کو توڑتی ہے تو ، سسٹم فروخت کا اشارہ کرتا ہے۔ حقیقی تجارتی ماحول کے قریب آنے کے لئے ، حکمت عملی میں 0.1٪ کمیشن لاگت کا حساب بھی شامل ہے۔
متحرک بریکنگ ماسٹر چینل حکمت عملی کا بنیادی اصول مارکیٹ کے ڈھانچے میں معاونت اور مزاحمت کی پوزیشنوں کی شناخت اور ان کو توڑنے پر مبنی ہے۔ اس کے تکنیکی عمل میں بنیادی طور پر درج ذیل چند اہم اقدامات شامل ہیں:
ٹرانسمیشن پوائنٹ کی شناختحکمت عملی: پائن اسکرپٹpivothighاورpivotlowقیمتوں کے چارٹ میں اونچائیوں اور نچلی جگہوں کا پتہ لگانے کے لئے فنکشن۔ ان جگہوں کو امکانی معاونت اور مزاحمت کی حیثیت سے دیکھا جاتا ہے۔ صارفین کو ان ٹرننگ پوائنٹس کی نشاندہی کرنے کے لئے “اعلی / کم” یا “قریب / کھلا” ڈیٹا ماخذ کا استعمال کرنے کا انتخاب کیا جاسکتا ہے۔
متحرک چینل حساب: سسٹم نے شناخت شدہ ٹرن آؤٹ پوائنٹس کے مطابق متحرک سپورٹ مزاحمتی چینلز کی تعمیر کی۔my_channelفنکشن ، حکمت عملی ہر موڑ کے ارد گرد کے علاقوں کا حساب لگاتا ہے اور اس کی طاقت کے مطابق راستے کی اوپری حد (ceiling) اور نچلی حد (floor) کا تعین کرتا ہے۔mymaxwidthپیرامیٹرز کی حد، جو حالیہ 300 گرافوں کی قیمت کی حد پر مبنی ہے.
علاقائی شدت کا جائزہحکمت عملی نہ صرف ٹرن آؤٹ پوائنٹس کو خود ہی مدنظر رکھتی ہے بلکہ ہر سپورٹ / مزاحمت والے علاقے کی طاقت کا بھی جائزہ لیتی ہے۔ طاقت کا اسکور دو عوامل پر مبنی ہے: اس علاقے میں ٹرن آؤٹ پوائنٹس کی تعداد (ابتدائی طاقت 20 پوائنٹس فی ٹرن آؤٹ پوائنٹ) اور اس علاقے میں قیمت کی سرگرمیوں کی فریکوئنسی (ہر ٹچ پر 1 پوائنٹ) ۔
علاقائی چھانٹ اور ترتیب: سسٹم نے صارف کی مقرر کردہ حد سے زیادہ طاقت کو فلٹر کیاmystrength * 20) کے علاقوں میں ، اور شدت کے لحاظ سے اعلی سے کم ترتیب دیا گیا ہے۔ زیادہ سے زیادہ صارف کے ذریعہ متعین کردہ تعداد میں دکھائیںmymaxzones) کی حمایت کی مزاحمت کے علاقے
بریک ٹیسٹحکمت عملی: موجودہ اختتامی قیمت کا موازنہ کرکے اور پچھلے پتھر کی پوزیشن کے مقابلے میں معاونت / مزاحمت کے علاقے میں تبدیلی کا پتہ لگانے کے لئے۔ جب قیمت زون کے اندر سے زون کے باہر منتقل ہوجاتی ہے اور زون کی اوپری سرحد ((مزید مزاحمت) یا نچلی سرحد ((مزید مدد) سے گزر جاتی ہے تو ، نظام کو ایک مؤثر بریک کے طور پر پہچانا جاتا ہے۔
ٹریڈنگ سگنل کی تخلیق: مزاحمت کے خلاف ورزی کا پتہ لگانے پر ایک سے زیادہ سگنل لگائیں ((“ResBreak”) ، سپورٹ کے خلاف ورزی کا پتہ لگانے پر خالی سگنل لگائیں ((“SupBreak”)
لچکدار: متحرک بریک ماسٹر چینل حکمت عملی کا سب سے بڑا فائدہ اس کی موافقت ہے۔ متحرک طور پر حمایت کے مزاحمت کے علاقوں کی شناخت اور اپ ڈیٹ کرنے کے ذریعہ ، حکمت عملی مختلف مارکیٹ کے حالات اور قیمتوں میں اتار چڑھاؤ کے نمونوں کے مطابق ڈھال سکتی ہے ، جس سے جامد حمایت کی مزاحمت کی لائنوں کے ممکنہ پسماندہ مسائل سے بچا جاسکتا ہے۔
کثیر جہتی شدت کا جائزہحکمت عملی: موڑ کے مقامات کی تعداد اور قیمت کی سرگرمیوں کی تعدد کو مدنظر رکھتے ہوئے معاون مزاحمت والے علاقوں کی کثیر جہتی شدت کا اندازہ لگانا۔ اس طریقہ کار سے مارکیٹ میں واقعی اہم اہم علاقوں کی زیادہ درست شناخت کی جاسکتی ہے ، جس سے جعلی توڑنے کا امکان کم ہوجاتا ہے۔
اعلی مرضی کے مطابق لچکحکمت عملی: حکمت عملی میں بہت سارے پیرامیٹرز کی ترتیبات کی پیش کش کی گئی ہے ، بشمول ٹرنپوائنٹ سائیکل ، طاقت کی حد ، چینل کی چوڑائی ، وغیرہ۔ تاجر کو مختلف قسم کے تجارت ، ٹائم سائیکل اور ذاتی خطرے کی ترجیحات کے مطابق ٹھیک کرنے کی اجازت دیتا ہے۔
بصری اثراتحکمت عملی: چارٹ پر حمایت، مزاحمت اور ٹوٹ پھوٹ کے علاقوں کو بصری طور پر ظاہر کرنے کے لئے، مختلف رنگوں میں مختلف اقسام کے علاقوں کی نمائندگی کرتے ہیں (قبولیت، حمایت یا درمیانی علاقوں) ، تاجر کو مارکیٹ کی ساخت اور ممکنہ ٹریڈنگ کے مواقع کو زیادہ بصری طور پر سمجھنے میں مدد ملتی ہے.
انٹیگریٹڈ منتقل اوسطحکمت عملی: دو مختلف پیرامیٹرز کی متحرک اوسط کو شامل کرنے کی اجازت دیتا ہے ((ایس ایم اے یا ای ایم اے کا انتخاب کریں) ، جو تجارتی فیصلوں کے لئے اضافی رجحان تجزیہ نقطہ نظر فراہم کرتا ہے ، خاص طور پر ان صارفین کے لئے جو متعدد تکنیکی اشارے کے ساتھ تجارت کرنے کی عادت رکھتے ہیں۔
ٹرانزیکشن کی لاگت پر غوراسٹریٹجی نے واپسی میں تجارتی کمیشن ((0.1٪) کا حساب کتاب شامل کیا ، جس سے واپسی کے نتائج کو حقیقی تجارتی ماحول سے قریب تر کردیا گیا ، جس سے تاجروں کو زیادہ حقیقت پسندانہ توقعات کا انتظام کرنے میں مدد ملی۔
حلٹرانزیکشن سگنل کو ٹرگر کرنے کے لئے ، تصدیق کے طریقہ کار کو شامل کیا جاسکتا ہے ، جیسے کہ قیمتوں کو توڑنے کے بعد کچھ وقت یا شدت برقرار رکھنے کی ضرورت ہوتی ہے ، یا ٹرانزیکشن کی تصدیق کے لئے حجم اشارے کے ساتھ مل کر۔
حل: یہ تجویز کی جاتی ہے کہ ٹریڈنگ سے پہلے کافی پیرامیٹرز کی اصلاح اور ریٹرننگ کی جائے تاکہ مخصوص قسم کے تجارت اور وقت کی مدت کے لئے بہترین پیرامیٹرز کا مجموعہ تلاش کیا جاسکے۔
حل: مارکیٹ کے حالات کی شناخت کا طریقہ کار شامل کیا جاسکتا ہے ، مختلف مارکیٹ کے حالات میں حکمت عملی کے پیرامیٹرز کو خود بخود ایڈجسٹ کیا جاسکتا ہے یا تجارت کو معطل کیا جاسکتا ہے۔
حل: یہ تجویز کی جاتی ہے کہ اسٹاپ نقصان کی حکمت عملی کو شامل کیا جائے ، جیسے معاون مزاحمت والے علاقوں کی بنیاد پر اسٹاپ نقصان کی پوزیشنیں ، یا موبائل اسٹاپ میکانیزم کے تحفظ کا استعمال کرنا۔
حل: متحرک طور پر تاریخی اعداد و شمار کے دائرہ کار کو ایڈجسٹ کرنے پر غور کریں ، یا موافقت کو بہتر بنانے کے لئے مارکیٹ کے ڈھانچے میں تبدیلی کے دیگر پتہ لگانے کے طریقہ کار کو شامل کریں۔
انٹیگریٹڈ ٹرانسپورٹ تجزیہ: موجودہ حکمت عملی صرف قیمت کے اعداد و شمار کی بنیاد پر فیصلے کرنے کے لئے ہے ، جس میں تجویز کیا گیا ہے کہ ٹرانزیکشن تجزیہ کو مربوط کیا جائے تاکہ بریک سگنل کی وشوسنییتا کو بڑھایا جاسکے۔ ٹرانزیکشن عام طور پر حقیقی ٹرانزیکشن کے دوران نمایاں طور پر بڑھ جاتی ہے ، یہ خصوصیت بہت سے جعلی ٹرانزیکشن سگنل کو فلٹر کرنے میں مدد فراہم کرتی ہے۔
متحرک سٹاپ نقصان کا طریقہ کار متعارف کراناحکمت عملی میں ذہین اسٹاپ سسٹم شامل کریں ، جیسے اے ٹی آر پر مبنی اسٹاپ فاصلہ ، یا آس پاس کے معاون مزاحمت والے علاقوں کو اسٹاپ ریفرنس پوائنٹ کے طور پر استعمال کریں۔ اس سے نہ صرف ایک ہی تجارت کے خطرے پر قابو پایا جاسکتا ہے ، بلکہ مارکیٹ میں اتار چڑھاؤ کے مطابق خود بخود خطرے کی نالی کو بھی ایڈجسٹ کیا جاسکتا ہے۔
ٹرینڈ فلٹر شامل کریں۔: رجحانات کی شناخت کا ایک طریقہ کار متعارف کرایا گیا ہے ، جس میں مضبوط رجحانات کی سمت میں تجارت کی اجازت دی جاتی ہے ، جبکہ رجحانات کی سمت میں بریک سگنل کے بارے میں زیادہ محتاط ہوں۔ یہ طویل مدتی حرکت پذیری اوسط کی سمت کا تجزیہ کرکے یا رجحان کی طاقت کے اشارے جیسے ADX ((اوسط سمت اشارے) کا استعمال کرکے کیا جاسکتا ہے۔
ٹائم فلٹر شامل کریں: کچھ وقت کے دوران (جیسے کہ مارکیٹ کھلنے یا بند ہونے سے پہلے) بریک اپ زیادہ ناقابل اعتماد ہوسکتے ہیں۔ وقت کی فلٹرنگ کی خصوصیت کو شامل کرنے سے ، اعدادوشمار کے غیر موزوں وقت کے دوران تجارت سے بچنے سے ، مجموعی طور پر جیت کی شرح میں اضافہ ہوسکتا ہے۔
بہتر علاقائی طاقت کے الگورتھم: موجودہ طاقت کی تشخیص کے الگورتھم کو مزید بہتر بنایا جاسکتا ہے ، جیسے کہ ٹرن آؤٹ پوائنٹس کی عمر کو مدنظر رکھنا ((نئے ٹرن آؤٹ پوائنٹس زیادہ متعلقہ ہوسکتے ہیں) ، یا علاقائی بار بار ٹیسٹ کی تعداد کو متعارف کرانا ((ایک سے زیادہ بار ٹیسٹ کیا گیا ہے لیکن ناقابل شکست علاقوں میں زیادہ طاقت ہوسکتی ہے) ۔
پوزیشن مینجمنٹ منطق میں شامل ہوں: علاقائی طاقت ، مارکیٹ میں اتار چڑھاؤ یا دیگر خطرے کے عوامل کی بنیاد پر پوزیشن کا سائز متحرک طور پر ایڈجسٹ کریں ، اعلی یقین کے حالات میں پوزیشن میں اضافہ کریں ، اور جب خطرہ زیادہ ہو تو کوریج کو کم کریں۔
انکولی پیرامیٹرز کو نافذ کرنا: اہم پیرامیٹرز (جیسے ٹرننگ پوائنٹ کی مدت ، چینل کی چوڑائی ، وغیرہ) کو خود سے ڈھالنے کے لئے ڈیزائن کیا گیا ہے ، جو مارکیٹ میں اتار چڑھاؤ یا دیگر شرائط کے مطابق خود بخود ایڈجسٹ ہوسکتا ہے ، جس سے پیرامیٹرز کے انتخاب کی ذاتیت کو کم کیا جاسکتا ہے۔
متحرک بریکنگ ماسٹر چینل حکمت عملی ایک تکنیکی طور پر اعلی درجے کی ، انتہائی لچکدار تجارتی نظام ہے جس کی بنیادی خوبی یہ ہے کہ وہ مارکیٹ میں مزاحمت کے اہم معاون علاقوں کی متحرک شناخت اور تشخیص کرسکے ، اور ان علاقوں میں توڑنے پر ممکنہ تجارتی مواقع کو پکڑ سکے۔ اس حکمت عملی کو مختلف مارکیٹ کے حالات کے مطابق ڈھالنے اور نسبتا reliable قابل اعتماد انٹری سگنل فراہم کرنے کے قابل بنایا گیا ہے۔
حکمت عملی کی تخصیص پذیری اس کی ایک اور بڑی خصوصیت ہے ، پیرامیٹرز کے وسیع انتخاب سے تاجر کو ذاتی ترجیحات اور تجارت کی نوعیت کی خصوصیات کے مطابق ٹھیک سے ایڈجسٹ کرنے کی اجازت ملتی ہے۔ اس کے علاوہ ، حکمت عملی کی بصری نمائش بھی انتہائی بدیہی ہے ، جس میں مزاحمت کے علاقوں اور توڑ پھوڑ کے واضح نشانات کی حمایت کی گئی ہے جس سے تاجر کو مارکیٹ کی ساخت اور تجارتی منطق کو بہتر طور پر سمجھنے میں مدد ملتی ہے۔
تاہم ، اس حکمت عملی میں کچھ حدود بھی ہیں ، جیسے کہ جھوٹے توڑنے کا خطرہ اور بلٹ ان نقصان کے طریقہ کار کی کمی۔ حکمت عملی کی کارکردگی کو مزید بہتر بنانے کے لئے ، یہ تجویز کیا گیا ہے کہ انضمام ٹرانزیکشن تجزیہ ، ذہین نقصان کے نظام میں اضافے ، رجحان فلٹر متعارف کرانے اور علاقائی طاقت کے الگورتھم کو بہتر بنانے جیسے اصلاحات پر غور کیا جائے۔ یہ اصلاحات حکمت عملی کی وشوسنییتا اور منافع کی استحکام کو بڑھانے میں معاون ثابت ہوں گی۔
عملی استعمال میں ، تاجر کو اپنی خطرے کی برداشت اور مارکیٹ کے تجربے کے ساتھ مل کر حکمت عملی کے پیرامیٹرز سے واقف ہونا اور ان کو بہتر بنانا چاہئے ، اور سگنل ٹریڈنگ کو اندھا دھند پیروی کرنے سے گریز کرنا چاہئے۔ اس کے علاوہ ، اس حکمت عملی کو ایک مکمل ٹریڈنگ سسٹم کا حصہ بنانا ، دیگر تجزیاتی ٹولز اور رسک مینجمنٹ قواعد کے ساتھ مل کر ، زیادہ سے زیادہ مثالی تجارتی اثر حاصل ہوسکتا ہے۔
/*backtest
start: 2024-09-19 00:00:00
end: 2025-03-01 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tradingbauhaus
//@version=6
strategy("Dynamic Breakout Master by tradingbauhaus ", overlay=true, max_bars_back=501, commission_type=strategy.commission.percent, commission_value=0.1)
// My Custom Inputs
myperiod = input.int(10, "Pivot Period", minval=4, maxval=30, group="Settings", tooltip="Bars on each side for pivots")
mysource = input.string("High/Low", "Data Source", options=["High/Low", "Close/Open"], group="Settings", tooltip="Where I grab pivots from")
mychannelwidth = input.int(5, "Max Channel Width %", minval=1, maxval=8, group="Settings", tooltip="Percentage based on 300 bars")
mystrength = input.int(1, "Min Strength", minval=1, group="Settings", tooltip="Min pivots per channel")
mymaxzones = input.int(6, "Max S/R Zones", minval=1, maxval=10, group="Settings", tooltip="Max S/R zones to show") - 1
mylookback = input.int(290, "Lookback Period", minval=100, maxval=400, group="Settings", tooltip="Bars back to check pivots")
myrescolor = input.color(color.new(color.red, 75), "Resistance Tone", group="Colors")
mysupcolor = input.color(color.new(color.blue, 75), "Support Tone", group="Colors")
myincolor = input.color(color.new(color.gray, 75), "In-Channel Tone", group="Colors")
myshowpivots = input.bool(false, "Show Pivots", group="Extras")
myshowbreaks = input.bool(false, "Show Breaks", group="Extras")
myma1_on = input.bool(false, "MA1 On", group="Extras")
myma1_len = input.int(50, "MA1 Length", minval=1, group="Extras")
myma1_type = input.string("SMA", "MA1 Type", options=["SMA", "EMA"], group="Extras")
myma2_on = input.bool(false, "MA2 On", group="Extras")
myma2_len = input.int(200, "MA2 Length", minval=1, group="Extras")
myma2_type = input.string("SMA", "MA2 Type", options=["SMA", "EMA"], group="Extras")
// Define commission as a constant (for display purposes, since strategy() already uses it)
mycommission = 0.1 // Matches commission_value in strategy(); adjust here if needed
// Calculate my moving averages
myma1 = myma1_on ? myma1_type == "SMA" ? ta.sma(close, myma1_len) : ta.ema(close, myma1_len) : na
myma2 = myma2_on ? myma2_type == "SMA" ? ta.sma(close, myma2_len) : ta.ema(close, myma2_len) : na
plot(myma1, color=not na(myma1) ? color.blue : na)
plot(myma2, color=not na(myma2) ? color.red : na)
// My custom data sources
float myhigh = mysource == "High/Low" ? high : math.max(close, open)
float mylow = mysource == "High/Low" ? low : math.min(close, open)
float mypeak = ta.pivothigh(myhigh, myperiod, myperiod)
float myvalley = ta.pivotlow(mylow, myperiod, myperiod)
// Draw pivots if I want
plotshape(not na(mypeak) and myshowpivots, text="P", style=shape.labeldown, color=na, textcolor=color.new(color.red, 0), location=location.abovebar, offset=-myperiod)
plotshape(not na(myvalley) and myshowpivots, text="V", style=shape.labelup, color=na, textcolor=color.new(color.blue, 0), location=location.belowbar, offset=-myperiod)
// Calculate max channel width
mytop = ta.highest(300)
mybottom = ta.lowest(300)
mymaxwidth = (mytop - mybottom) * mychannelwidth / 100
// Store my pivots with flair
var float[] myvalues = array.new_float(0)
var float[] mypositions = array.new_float(0)
if not na(mypeak) or not na(myvalley)
array.unshift(myvalues, not na(mypeak) ? mypeak : myvalley)
array.unshift(mypositions, bar_index)
for x = array.size(myvalues) - 1 to 0
if bar_index - array.get(mypositions, x) > mylookback
array.pop(myvalues)
array.pop(mypositions)
continue
break
// My channel-making function
my_channel(ind) =>
float base = array.get(myvalues, ind)
float ceiling = base
float floor = base
int strength = 0
for y = 0 to array.size(myvalues) - 1
float level = array.get(myvalues, y)
float gap = level <= ceiling ? ceiling - level : level - floor
if gap <= mymaxwidth
if level <= ceiling
floor := math.min(floor, level)
else
ceiling := math.max(ceiling, level)
strength += 20
[ceiling, floor, strength]
// My S/R zones and swap function
var float[] sr_zones = array.new_float(20, 0)
myswap(x, y) =>
temp = array.get(sr_zones, y * 2)
array.set(sr_zones, y * 2, array.get(sr_zones, x * 2))
array.set(sr_zones, x * 2, temp)
temp := array.get(sr_zones, y * 2 + 1)
array.set(sr_zones, y * 2 + 1, array.get(sr_zones, x * 2 + 1))
array.set(sr_zones, x * 2 + 1, temp)
// Main logic with my twist
if not na(mypeak) or not na(myvalley)
float[] levels = array.new_float(0)
float[] power = array.new_float(10, 0)
for x = 0 to array.size(myvalues) - 1
[c, f, s] = my_channel(x)
array.push(levels, s)
array.push(levels, c)
array.push(levels, f)
for x = 0 to array.size(myvalues) - 1
highlvl = array.get(levels, x * 3 + 1)
lowlvl = array.get(levels, x * 3 + 2)
boost = 0
for y = 0 to mylookback
if high[y] <= highlvl and high[y] >= lowlvl or low[y] <= highlvl and low[y] >= lowlvl
boost += 1
array.set(levels, x * 3, array.get(levels, x * 3) + boost)
array.fill(sr_zones, 0)
counter = 0
for x = 0 to array.size(myvalues) - 1
maxpower = -1.
maxspot = -1
for y = 0 to array.size(myvalues) - 1
if array.get(levels, y * 3) > maxpower and array.get(levels, y * 3) >= mystrength * 20
maxpower := array.get(levels, y * 3)
maxspot := y
if maxspot >= 0
top = array.get(levels, maxspot * 3 + 1)
bottom = array.get(levels, maxspot * 3 + 2)
array.set(sr_zones, counter * 2, top)
array.set(sr_zones, counter * 2 + 1, bottom)
array.set(power, counter, array.get(levels, maxspot * 3))
for y = 0 to array.size(myvalues) - 1
if array.get(levels, y * 3 + 1) <= top and array.get(levels, y * 3 + 1) >= bottom or array.get(levels, y * 3 + 2) <= top and array.get(levels, y * 3 + 2) >= bottom
array.set(levels, y * 3, -1)
counter += 1
if counter >= 10
break
for x = 0 to 8
for y = x + 1 to 9
if array.get(power, y) > array.get(power, x)
temp = array.get(power, y)
array.set(power, y, array.get(power, x))
myswap(x, y)
// My level and color functions
mylevel(ind) =>
float result = na
if ind < array.size(sr_zones) and array.get(sr_zones, ind) != 0
result := array.get(sr_zones, ind)
result
mycolor(ind) =>
color shade = na
if ind < array.size(sr_zones) and array.get(sr_zones, ind) != 0
shade := array.get(sr_zones, ind) > close and array.get(sr_zones, ind + 1) > close ? myrescolor : array.get(sr_zones, ind) < close and array.get(sr_zones, ind + 1) < close ? mysupcolor : myincolor
shade
// Detect breaks
resistancebroken = false
supportbroken = false
outofzone = true
for x = 0 to math.min(9, mymaxzones)
if close <= array.get(sr_zones, x * 2) and close >= array.get(sr_zones, x * 2 + 1)
outofzone := false
if outofzone
for x = 0 to math.min(9, mymaxzones)
if close[1] <= array.get(sr_zones, x * 2) and close > array.get(sr_zones, x * 2)
resistancebroken := true
if close[1] >= array.get(sr_zones, x * 2 + 1) and close < array.get(sr_zones, x * 2 + 1)
supportbroken := true
// Alerts and shapes
alertcondition(resistancebroken, title="ResBreak", message="Resistance shattered!")
alertcondition(supportbroken, title="SupBreak", message="Support cracked!")
plotshape(myshowbreaks and resistancebroken, style=shape.triangleup, location=location.belowbar, color=color.new(color.blue, 0), size=size.tiny)
plotshape(myshowbreaks and supportbroken, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.tiny)
// Strategy with commissions factored in
if resistancebroken
strategy.entry("ResBreak", strategy.long)
if supportbroken
strategy.entry("SupBreak", strategy.short)