
فبونیکی نمونہ اعداد و شمار تجزیہ کی حکمت عملی ایک اعلی درجے کی مقداری تجارتی طریقہ ہے جو فبونیکی واپسی کی سطح ، نمونہ کی شناخت کے الگورتھم اور اعداد و شمار کے تجزیے کی تین بنیادی تکنیکوں کو ہوشیار طریقے سے جوڑتی ہے۔ اس حکمت عملی میں بنیادی طور پر 19٪ اور 82.56% فبونیکی واپسی کی سطح کو ٹریڈنگ سگنل کی بنیاد کے طور پر استعمال کیا جاتا ہے ، جبکہ نمونہ میچنگ الگورتھم کے ذریعہ اعلی امکانات کی تجارتی ترتیب کی شناخت کی جاتی ہے ، اور اس کی تصدیق اعداد و شمار کے تجزیے کے ذریعہ کی جاتی ہے۔ اس کثیر جہتی سگنل کی تصدیق کے طریقہ کار سے حکمت عملی کی وشوسنییتا اور درستگی میں بہتری آتی ہے۔ اس حکمت عملی میں واضح داخلہ اور باہر نکلنے کے قواعد فراہم کیے جاتے ہیں ، بشمول سبز رنگ کے تیر کے اشارے کے لئے ایک مضبوط کثیر سگنل ، سرخ رنگ کے نیچے تیر کے اشارے کے لئے ایک مضبوط خالی سگنل ، سبز رنگ کے پس منظر کے اشارے کے لئے ایک سے زیادہ ٹرگر شرائط ، سرخ پس منظر کے لئے خالی شرائط۔ اس کے علاوہ ،
فیبونیکی ماڈل کے اعداد و شمار کے تجزیہ کی حکمت عملی کا بنیادی اصول تین اہم اجزاء پر مبنی ہے:
فیبونیکی ریڈونگ کی سطح: حکمت عملی نے 93 ادوار میں اعلی ترین اور کم سے کم 19٪ اور 82.56% فبونیکی ریٹرننگ لیول کا حساب لگایا۔ یہ غیر معمولی فبونیکی سطح حکمت عملی کی ایک خصوصیت ہے ، جو مارکیٹ کے مخصوص طرز عمل کے اعدادوشمار کے تجزیے پر مبنی ہوسکتی ہے۔ جب قیمت ان سطحوں کو چھوتی ہے یا اس سے تجاوز کرتی ہے تو ابتدائی تجارتی سگنل تیار کیے جاتے ہیں۔
پیٹرن کی شناخت: حکمت عملی ایک پیچیدہ پیٹرن میچنگ الگورتھم کو لاگو کرتی ہے جو ماضی کے قیمتوں کے نمونوں کا تجزیہ کرکے اور موجودہ نمونوں کی مماثلت کا حساب لگاتی ہے۔ یہ ایک مخصوص لمبائی کے گرافک پیٹرن (ڈیفالٹ 5) کا استعمال کرتا ہے اور تاریخی اعداد و شمار (ڈیفالٹ 93 ادوار) میں بہترین میچ تلاش کرتا ہے۔ اگر پایا گیا پیٹرن مماثلت سیٹ کی حد سے زیادہ ہے (ڈیفالٹ 0.7) ، حکمت عملی اس تاریخی پیٹرن کے بعد قیمت کی نقل و حرکت کی بنیاد پر موجودہ پیٹرن کے بعد ممکنہ نقل و حرکت کی پیش گوئی کرتی ہے۔
شماریاتی تجزیہ: حکمت عملی میں اعدادوشمار کی توثیق کا طریقہ کار متعارف کرایا گیا ہے ، جس میں قیمتوں کی اعدادوشمار کی تقسیم کا تعین میڈین ، کوارٹج اور کوارٹج فاصلہ (IQR) کے حساب سے کیا جاتا ہے۔ جب قیمت میڈین ، اوپری کوارٹج یا اوپری اور نچلی حدود (Q3 + 1.5 * IQR اور Q1 - 1.5 * IQR کے طور پر بیان کی جاتی ہے) سے تجاوز کرتی ہے تو ، اعدادوشمار کے اشارے پیدا ہوتے ہیں۔ ان اشاروں کی طاقت کو توڑنے کی سطح اور صارف کے ذریعہ طے شدہ اعدادوشمار کے اختیارات کے مطابق دوبارہ شمار کیا جاتا ہے۔
ٹریڈنگ سگنل کی تخلیق تین اجزاء کے مجموعی نتائج ہیں:
حکمت عملی میں پیچیدہ خطرے کے انتظام کے طریقہ کار کو بھی شامل کیا گیا ہے، بشمول:
کثیر جہتی سگنل کی تصدیقاس حکمت عملی میں تکنیکی تجزیہ (فبونیکی) ، پیٹرن کی شناخت اور اعداد و شمار کے تجزیہ کے تین جہتوں کو شامل کیا گیا ہے ، جس سے ایک مضبوط متعدد تصدیق کا طریقہ کار تشکیل دیا گیا ہے ، جس سے جعلی سگنل کا امکان بہت کم ہوگیا ہے۔
انتہائی موافقت پذیر: حکمت عملی میں وسیع پیمانے پر پیرامیٹرز کی ترتیبات فراہم کی جاتی ہیں ، بشمول وقت کی مدت کا انتخاب ، نمونہ کی لمبائی ، مماثلت کی حد ، تاریخی ریورس ونڈو ، اعدادوشمار کی مدت وغیرہ ، جس سے یہ مختلف مارکیٹ کے حالات اور تجارت کی اقسام کے مطابق ہوجاتا ہے۔
انٹیلجنٹ پیٹرن کی شناخت: حکمت عملی کے ماڈل میچنگ الگورتھم نے نہ صرف ماڈل کی شکل کو مدنظر رکھا ، بلکہ مماثلت کی حد کو بھی مدنظر رکھا ، اس بات کو یقینی بنایا کہ صرف انتہائی مماثلت والے ماڈل ہی پیش گوئی کے لئے استعمال ہوں گے ، جس سے پیش گوئی کی درستگی میں اضافہ ہوگا۔
شماریاتی تصدیق: چار اعشاریہ اور آئی کیو آر کے اعدادوشمار کے طریقوں کو متعارف کرانے کے ذریعہ ، حکمت عملی اس بات کی نشاندہی کرنے کے قابل ہے کہ قیمتیں اعدادوشمار کی تقسیم میں کہاں ہیں ، جو تجارتی فیصلوں کے لئے اضافی معروضی بنیاد فراہم کرتی ہیں۔
اچھی طرح سے خطرے کا انتظاماس حکمت عملی میں متعدد اسٹاپ نقصان کے اختیارات (فکسڈ فی صد ، اے ٹی آر ضرب ، ٹریکنگ اسٹاپ) اور سات درجے کے بیچ منافع کا طریقہ کار پیش کیا گیا ہے ، جس سے لچکدار اور منظم خطرے کا انتظام ہوتا ہے۔
بصری بصیرت: حکمت عملی میں پس منظر کے رنگ ، تیر ، نشان اور لیبل سمیت بصری عناصر کی ایک وسیع رینج ہے جو تاجروں کو موجودہ مارکیٹ کی صورتحال اور سگنل کی طاقت کو بصری طور پر سمجھنے میں مدد کرتی ہے۔
ریئل ٹائم اسٹیٹس پینل: حکمت عملی چارٹ پر ایک حقیقی وقت اپ ڈیٹ کی حیثیت پینل دکھاتا ہے، واضح طور پر فیبونیکی، پیٹرن اور اعداد و شمار کے تین اجزاء کی موجودہ حالت، اور ان کے مجموعی نتائج کو ظاہر کرتا ہے.
پیرامیٹر کی حساسیت: حکمت عملی میں متعدد پیرامیٹرز استعمال کیے جاتے ہیں ، جیسے نمونہ کی لمبائی ، مماثلت کی حد ، شماریاتی دورانیہ وغیرہ۔ ان پیرامیٹرز کی ترتیبات حکمت عملی کی کارکردگی کو نمایاں طور پر متاثر کرتی ہیں۔ غلط پیرامیٹرز کی ترتیبات سے زیادہ فٹ ہونے یا سگنل کی کمی ہوسکتی ہے۔ یہ تجویز کی جاتی ہے کہ پیرامیٹرز کا مجموعہ تلاش کریں جو کسی خاص مارکیٹ کے لئے موزوں ہے۔
مارکیٹ کے ماحول پر انحصار: کچھ مارکیٹ کے حالات میں ، فبونیکی سطح کا اثر ختم ہوسکتا ہے ، خاص طور پر ایک مضبوط رجحان یا انتہائی اتار چڑھاؤ والی مارکیٹ میں۔ حکمت عملی کی تاثیر مارکیٹ کے حالات کے ساتھ مختلف ہوسکتی ہے۔ اس کا حل مارکیٹ کے ماحول کے لئے ایک ٹیسٹنگ میکانزم متعارف کرانا ہے ، جس میں مختلف مارکیٹ کے حالات میں مختلف پیرامیٹرز کی ترتیبات کا استعمال کیا جاتا ہے۔
حساب کی پیچیدگی: حکمت عملی کے ماڈل میچنگ الگورتھم کو ہر سائیکل کے اندر تاریخی اعداد و شمار کا دورہ کرنے اور مماثلت کا حساب لگانے کی ضرورت ہوتی ہے ، جس سے کم وقت کے فریم پر حساب کتاب کا بوجھ پڑ سکتا ہے۔ اس مسئلے کو کم کرنے کے لئے ، الگورتھم کو بہتر بنانے یا حساب کتاب کی تعدد کو کم کرنے پر غور کیا جاسکتا ہے۔
زیادہ تجارت کا خطرہ: ایک سے زیادہ سگنل میکانزم سے بار بار ٹریڈنگ سگنل پیدا ہوسکتے ہیں ، خاص طور پر مختصر وقت کے فریموں پر۔ یہ تجویز کی جاتی ہے کہ صرف اعلی ترین معیار کے سگنل پر عملدرآمد کرنے کے لئے ٹریڈنگ فریکوئنسی کی حد یا سگنل کی طاقت کا فلٹر شامل کیا جائے۔
سٹاپ نقصان سیٹ اپ چیلنج: اگرچہ حکمت عملی میں متعدد اسٹاپ آپشنز پیش کیے گئے ہیں ، لیکن بہترین اسٹاپ کی سطح کا تعین کرنا ایک چیلنج ہے۔ بہت تنگ اسٹاپ بار بار اسٹاپ کا سبب بن سکتا ہے ، اور بہت وسیع بہت زیادہ نقصان کا سبب بن سکتا ہے۔ اسٹاپ کی سطح کو مارکیٹ کی اتار چڑھاؤ کی حرکیات کے مطابق ایڈجسٹ کرنے کی سفارش کی گئی ہے۔
بنیادی سوچ کا فقدان: حکمت عملی مکمل طور پر تکنیکی اور اعدادوشمار کے تجزیے پر مبنی ہے ، بنیادی عوامل کو مدنظر نہیں رکھا گیا ہے۔ اہم خبروں یا واقعات کی صورت میں ، خالص تکنیکی حکمت عملی کو چیلنج کیا جاسکتا ہے۔ اس کا حل یہ ہے کہ نیوز فلٹرز کو شامل کیا جائے یا اہم واقعات سے پہلے یا بعد میں تجارت کو روک دیا جائے۔
متحرک پیرامیٹرز ایڈجسٹمنٹ: ایک موافقت کا طریقہ کار متعارف کرایا جاسکتا ہے ، جس میں مارکیٹ میں اتار چڑھاؤ یا رجحان کی طاقت کے مطابق متحرک طور پر پیرامیٹرز کو ایڈجسٹ کیا جاسکتا ہے ، جیسے نمونہ کی لمبائی ، مماثلت کی کمی اور شماریاتی دورانیہ۔ اس سے مختلف مارکیٹ کے حالات میں حکمت عملی کی موافقت میں اضافہ ہوگا۔
اعلی درجے کی ماڈل میچنگ الگورتھم: موجودہ ماڈل میچنگ بنیادی طور پر اختتامی قیمتوں اور کھلنے والی قیمتوں کے تعلقات پر مبنی ہے ((عروج ، زوال یا فلیٹ) ۔ ماڈل کی شناخت کی درستگی کو بہتر بنانے کے لئے زیادہ پیچیدہ ماڈل کی خصوصیات ، جیسے اونچائی اور کم نقطہ تعلقات ، ٹرانزیکشن ماڈل یا اتار چڑھاؤ کی شرح کے ماڈل کو متعارف کرانے پر غور کیا جاسکتا ہے۔
مارکیٹ کے ماحول کی درجہ بندی: مارکیٹ کے ماحول کی درجہ بندی کے طریقہ کار کو متعارف کروائیں ، جیسے رجحان / رینج / افراتفری کی درجہ بندی ، اور مختلف مارکیٹ کے ماحول میں مختلف تجارتی قواعد یا پیرامیٹرز کی ترتیبات کا استعمال کریں۔ اس سے حکمت عملی کو مختلف مارکیٹ کے حالات میں بہتر طور پر ڈھالنے میں مدد ملے گی۔
اعداد و شمار کے تجزیہ کے حصے کو بہتر بنائیں: زیادہ پیچیدہ اعدادوشمار کے طریقوں کا استعمال ، جیسے زیڈ اسکور یا فیصد کی درجہ بندی ، یا متحرک اعدادوشمار کے دورانیے کو متعارف کرانے پر غور کیا جاسکتا ہے تاکہ اعدادوشمار کے اشارے کو بہتر بنایا جاسکے۔
مشین لرننگ کا انضمام: مشین لرننگ الگورتھم کو پیٹرن کی شناخت اور اعداد و شمار کے وزن کی تقسیم کو بہتر بنانے کے لئے استعمال کرنے پر غور کیا جاسکتا ہے ، یا کسی خاص پیٹرن کے بعد قیمتوں کی نقل و حرکت کی امکانات کی تقسیم کی پیش گوئی کی جاسکتی ہے۔
خطرے کے انتظام میں بہتری: متحرک پوزیشن مینجمنٹ حکمت عملی کو لاگو کرنا ، سگنل کی طاقت ، مارکیٹ کی اتار چڑھاؤ اور اکاؤنٹ کے خطرے کے مطابق پوزیشن کا سائز ایڈجسٹ کرنا۔ اس کے علاوہ ، منافع بخش حصول کے طریقہ کار کو بہتر بنانا ، منافع بخش اہداف کو مارکیٹ کے حالات کے مطابق متحرک طور پر ایڈجسٹ کرنا۔
فلٹر شامل کریں: مختلف فلٹرز متعارف کروائیں ، جیسے رجحان فلٹر ، اتار چڑھاؤ کی شرح فلٹر یا ٹرانزیکشن حجم فلٹر ، سگنل کے معیار کو مزید بہتر بنانے اور جعلی سگنل کو کم کرنے کے لئے۔
فبونیکی ماڈل کی شماریاتی تجزیہ حکمت عملی ایک اچھی طرح سے تشکیل شدہ ، فنکشنل اور مقدار سے متعلق تجارتی حکمت عملی ہے جو فبونیکی ریڈیکشن لیول ، پیٹرن کی شناخت اور شماریاتی تجزیہ کو جدید انداز میں جوڑ کر ایک طاقتور کثیر جہتی سگنلنگ سسٹم بناتی ہے۔ حکمت عملی کی بنیادی طاقت اس کے کثیر پرتوں کی تصدیق کے طریقہ کار ، انکولی ڈیزائن اور بہتر خطرے کے انتظام کی خصوصیات میں ہے جو اسے مختلف مارکیٹ کے ماحول میں اعلی امکان کے تجارتی مواقع تلاش کرنے کی اجازت دیتی ہے۔
تاہم ، حکمت عملی کو پیرامیٹرز کی حساسیت ، مارکیٹ کے ماحول پر انحصار اور کمپیوٹنگ کی پیچیدگی جیسے چیلنجوں کا بھی سامنا کرنا پڑتا ہے۔ متحرک پیرامیٹر ایڈجسٹمنٹ ، بڑھا ہوا ماڈل میچنگ الگورتھم ، مارکیٹ کے ماحول کی درجہ بندی اور مشین لرننگ جیسے اصلاحی سمتوں کو متعارف کرانے کے ذریعہ حکمت عملی میں بہتری کی گنجائش ہے۔
اس حکمت عملی کو استعمال کرنے کے خواہشمند تاجروں کے لئے ، یہ مشورہ دیا جاتا ہے کہ وہ پہلے حکمت عملی کی کارکردگی کو مختلف مارکیٹوں اور پیرامیٹرز کی ترتیبات کے تحت جائزہ لیں ، اور پھر اس کی صلاحیت کو زیادہ سے زیادہ کرنے کے لئے حکمت عملی کو ٹریڈنگ ٹول کٹ میں ایک ٹول کے طور پر دیکھیں ، نہ کہ الگ تھلگ نظام کے طور پر ، جو تجزیہ کے دیگر طریقوں اور خطرے کے انتظام کے اصولوں کے ساتھ مل کر استعمال کیا جاسکتا ہے۔
/*backtest
start: 2024-03-03 00:00:00
end: 2024-05-01 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("Fibonacci-Only Strategi V2", overlay=true)
timeframe = input.timeframe("15", "Select Timeframe", options=["1", "5", "15", "30", "60", "240", "D"])
use_break_strategy = input(true, "Use Break Strategy")
stop_loss_percent = input.float(1.0, "Stop Loss %", minval=0.1, maxval=2.0, step=0.1)
use_atr_for_sl = input(true, "Use ATR for Stop Loss")
atr_multiplier = input.float(2.0, "ATR Multiplier for SL", minval=0.5, maxval=5.0, step=0.1)
use_trailing_stop = input(true, "Use Trailing Stop")
trailing_stop_percent = input.float(1.5, "Trailing Stop %", minval=0.1, maxval=5.0, step=0.1)
pattern_length = input.int(5, "Candle Pattern Length", minval=3, maxval=10)
similarity_threshold = input.float(0.7, "Pattern Similarity Threshold", minval=0.6, maxval=0.95)
lookback_window = input.int(93, "Historical Lookback Window", minval=10, maxval=93)
stat_period = input.int(50, "Statistical Period", minval=20, maxval=200)
stat_weight = input.float(0.5, "Statistical Confirmation Weight", minval=0.1, maxval=1.0, step=0.1)
fib_high = ta.highest(high, 93)
fib_low = ta.lowest(low, 93)
fib_diff = fib_high - fib_low
fib_19 = fib_high - fib_diff * 0.19
fib_8256 = fib_high - fib_diff * 0.8256
fib_19_reverse = fib_low + fib_diff * 0.19
plot(fib_8256, color=color.purple, style=plot.style_line, title="82.56% Fib")
plot(fib_19_reverse, color=color.orange, style=plot.style_line, title="19% Fib (Low to High)")
fib_19_touch = low[1] > fib_19 and low <= fib_19
fib_8256_touch = high[1] < fib_8256 and high >= fib_8256
fib_19_break = close < fib_19 and open > fib_19
fib_8256_break = close > fib_8256 and open < fib_8256
fib_19_reverse_touch = high[1] < fib_19_reverse and high >= fib_19_reverse
fib_19_reverse_break = close > fib_19_reverse and open < fib_19_reverse
bull_confirmation = close > open
bear_confirmation = close < open
getMedianAndQuartiles(src, len) =>
values = array.new_float(0)
for i = 0 to len - 1
array.push(values, src[i])
array.sort(values)
size = array.size(values)
median = size % 2 == 1 ? array.get(values, math.floor(size / 2)) : (array.get(values, size / 2 - 1) + array.get(values, size / 2)) / 2
q1_idx = math.floor(size / 4)
q3_idx = math.floor(3 * size / 4)
q1 = array.get(values, q1_idx)
q3 = array.get(values, q3_idx)
[median, q1, q3]
[price_median, price_q1, price_q3] = getMedianAndQuartiles(close, stat_period)
iqr = price_q3 - price_q1
upper_bound = price_q3 + 1.5 * iqr
lower_bound = price_q1 - 1.5 * iqr
stat_bull_signal = close > price_median and close[1] <= price_median
stat_bear_signal = close < price_median and close[1] >= price_median
stat_strong_bull = close > price_q3 and close[1] <= price_q3
stat_strong_bear = close < price_q1 and close[1] >= price_q1
stat_extreme_bull = close > upper_bound
stat_extreme_bear = close < lower_bound
long_condition_fib_touch = (fib_19_touch or fib_19_reverse_touch) and bull_confirmation
long_condition_fib_break = use_break_strategy and (fib_19_break or fib_19_reverse_break) and bull_confirmation
short_condition_fib_touch = fib_19_touch and bear_confirmation
short_condition_fib_break = use_break_strategy and fib_19_break and bear_confirmation
getPatternSignature(start_idx, len) =>
pattern = array.new_float(len)
for i = 0 to len - 1
if close[start_idx + i] > open[start_idx + i]
array.set(pattern, i, 1.0)
else if close[start_idx + i] < open[start_idx + i]
array.set(pattern, i, -1.0)
else
array.set(pattern, i, 0.0)
pattern
calcSimilarity(current_pattern, hist_pattern) =>
matches = 0.0
for i = 0 to array.size(current_pattern) - 1
if array.get(current_pattern, i) == array.get(hist_pattern, i)
matches := matches + 1.0
matches / array.size(current_pattern)
findBestMatch() =>
curr_pattern = getPatternSignature(1, pattern_length)
best_idx = -1
best_sim = 0.0
direction = 0
for i = pattern_length + 2 to lookback_window + 1
if i < pattern_length * 2
continue
hist_pattern = getPatternSignature(i, pattern_length)
sim = calcSimilarity(curr_pattern, hist_pattern)
if sim > best_sim and sim >= similarity_threshold
best_sim := sim
best_idx := i
next_close = close[i - pattern_length - 1]
curr_close = close[i - pattern_length]
if next_close > curr_close
direction := 1
else if next_close < curr_close
direction := -1
[best_idx, best_sim, direction]
var latest_pattern_sim = 0.0
var pattern_direction = 0
if barstate.isconfirmed
[idx, sim, dir] = findBestMatch()
if sim >= similarity_threshold
latest_pattern_sim := sim
pattern_direction := dir
calculateStatWeight(stat_signal, stat_strong, stat_extreme) =>
weight = 0.0
if stat_signal
weight := stat_weight * 0.5
if stat_strong
weight := weight + stat_weight * 0.3
if stat_extreme
weight := weight + stat_weight * 0.2
weight
stat_bull_weight = calculateStatWeight(stat_bull_signal, stat_strong_bull, stat_extreme_bull)
stat_bear_weight = calculateStatWeight(stat_bear_signal, stat_strong_bear, stat_extreme_bear)
long_condition = (long_condition_fib_touch or long_condition_fib_break) and
(pattern_direction == 1 or pattern_direction == 0)
short_condition = (short_condition_fib_touch or short_condition_fib_break) and
(pattern_direction == -1 or pattern_direction == 0) and
stat_bear_weight > 0
atr = ta.atr(14)
if long_condition
strategy.entry("Long", strategy.long)
if short_condition
strategy.entry("Short", strategy.short)
var float long_stop_loss = na
var float short_stop_loss = na
if strategy.position_size > 0
long_stop_loss := use_atr_for_sl ? strategy.position_avg_price - atr * atr_multiplier : strategy.position_avg_price * (1 - stop_loss_percent / 100)
if strategy.position_size < 0
short_stop_loss := use_atr_for_sl ? strategy.position_avg_price + atr * atr_multiplier : strategy.position_avg_price * (1 + stop_loss_percent / 100)
take_profit_levels = array.new_float(7)
for i = 0 to 6
tp_percent = 1 + (i + 1) * 0.5 / 100
array.set(take_profit_levels, i, tp_percent * strategy.position_avg_price)
if strategy.position_size > 0
if use_trailing_stop
trail_price = high - (high - strategy.position_avg_price) * trailing_stop_percent / 100
strategy.exit("Long TS", "Long", stop=math.max(trail_price, long_stop_loss))
else
strategy.exit("Long SL", "Long", stop=long_stop_loss)
for i = 0 to 6
long_tp_price = array.get(take_profit_levels, i)
strategy.exit("Long TP" + str.tostring(i+1), "Long", limit=long_tp_price, qty_percent=14.28)
if strategy.position_size < 0
if use_trailing_stop
trail_price = low + (strategy.position_avg_price - low) * trailing_stop_percent / 100
strategy.exit("Short TS", "Short", stop=math.min(trail_price, short_stop_loss))
else
strategy.exit("Short SL", "Short", stop=short_stop_loss)
for i = 0 to 6
short_tp_price = array.get(take_profit_levels, i)
strategy.exit("Short TP" + str.tostring(i+1), "Short", limit=short_tp_price, qty_percent=14.28)
bgcolor(long_condition ? color.new(color.green, 80) : short_condition ? color.new(color.red, 80) : na)
plotarrow(long_condition ? 1 : short_condition ? -1 : 0, title="Signal Direction", colorup=color.green, colordown=color.red, minheight=10, maxheight=20)
long_touch_marker = long_condition and long_condition_fib_touch ? low - atr : na
long_break_marker = long_condition and long_condition_fib_break ? low - atr * 1.5 : na
short_touch_marker = short_condition and short_condition_fib_touch ? high + atr : na
short_break_marker = short_condition and short_condition_fib_break ? high + atr * 1.5 : na
plotshape(long_touch_marker, style=shape.circle, color=color.green, size=size.normal, title="Long Touch Marker", location=location.absolute)
plotshape(long_break_marker, style=shape.xcross, color=color.green, size=size.normal, title="Long Break Marker", location=location.absolute)
plotshape(short_touch_marker, style=shape.circle, color=color.red, size=size.normal, title="Short Touch Marker", location=location.absolute)
plotshape(short_break_marker, style=shape.xcross, color=color.red, size=size.normal, title="Short Break Marker", location=location.absolute)
plotshape(stat_bear_signal, style=shape.triangledown, color=color.red, size=size.tiny, title="Statistical Bear Signal", location=location.abovebar)
if barstate.islast
var table info = table.new(position.top_right, 4, 5, color.black, color.white, 2, color.gray, 2)
table.clear(info, 0, 0, 3, 4)
table.cell(info, 0, 0, "Fibonacci-Pattern with Stats", bgcolor=color.blue, text_color=color.white)
table.cell(info, 0, 1, "Fib Status", bgcolor=color.blue, text_color=color.white)
fib_status = "NEUTRAL"
fib_color = color.gray
if long_condition_fib_touch or long_condition_fib_break
fib_status := "LONG"
fib_color := color.green
else if short_condition_fib_touch or short_condition_fib_break
fib_status := "SHORT"
fib_color := color.red
table.cell(info, 1, 1, fib_status, bgcolor=fib_color, text_color=color.white)
table.cell(info, 0, 2, "Pattern", bgcolor=color.blue, text_color=color.white)
pattern_status = "NEUTRAL"
pattern_color = color.gray
if pattern_direction == 1
pattern_status := "LONG"
pattern_color := color.green
else if pattern_direction == -1
pattern_status := "SHORT"
pattern_color := color.red
table.cell(info, 1, 2, pattern_status, bgcolor=pattern_color, text_color=color.white)
table.cell(info, 2, 2, pattern_direction != 0 ? str.tostring(math.round(latest_pattern_sim * 100)) + "%" : "N/A", bgcolor=color.gray, text_color=color.white)
table.cell(info, 0, 3, "Statistics", bgcolor=color.blue, text_color=color.white)
stat_status = "NEUTRAL"
stat_color = color.gray
if stat_bull_weight > 0
stat_status := "BULL"
stat_color := color.green
else if stat_bear_weight > 0
stat_status := "BEAR"
stat_color := color.red
table.cell(info, 1, 3, stat_status, bgcolor=stat_color, text_color=color.white)
table.cell(info, 2, 3, stat_bull_weight > 0 ? str.tostring(math.round(stat_bull_weight * 100)) + "%" :
stat_bear_weight > 0 ? str.tostring(math.round(stat_bear_weight * 100)) + "%" : "0%",
bgcolor=color.gray, text_color=color.white)
table.cell(info, 0, 4, "Combined", bgcolor=color.blue, text_color=color.white)
combined_status = "NEUTRAL"
combined_color = color.gray
if long_condition
combined_status := "LONG"
combined_color := color.green
else if short_condition
combined_status := "SHORT"
combined_color := color.red
table.cell(info, 1, 4, combined_status, bgcolor=combined_color, text_color=color.white)
var label_id = label.new(na, na, "", color=color.gray, style=label.style_label_down, textcolor=color.white)
if long_condition and barstate.isconfirmed
label.set_xy(label_id, bar_index, high)
label.set_text(label_id, "LONG\n" +
(long_condition_fib_touch ? "Touch" : "Break") +
(pattern_direction == 1 ? " + Pattern " + str.tostring(math.round(latest_pattern_sim * 100)) + "%" : "") +
"\nStat: " + str.tostring(math.round(stat_bull_weight * 100)) + "%")
label.set_color(label_id, color.green)
label.set_style(label_id, label.style_label_down)
if short_condition and barstate.isconfirmed
label.set_xy(label_id, bar_index, low)
label.set_text(label_id, "SHORT\n" +
(short_condition_fib_touch ? "Touch" : "Break") +
(pattern_direction == -1 ? " + Pattern " + str.tostring(math.round(latest_pattern_sim * 100)) + "%" : "") +
"\nStat: " + str.tostring(math.round(stat_bear_weight * 100)) + "%")
label.set_color(label_id, color.red)
label.set_style(label_id, label.style_label_up)
alertcondition(long_condition, title="Long Entry", message="Long entry signal detected")
alertcondition(short_condition, title="Short Entry", message="Short entry signal detected")