
کثیر ٹائم سائیکل ٹرینڈ متحرک ٹریڈنگ حکمت عملی ایک جامع تجارتی نظام ہے جو کثیر ٹائم سائیکل ٹرینڈ تجزیہ ، متحرک سگنل ، ٹرانزیکشن کی تصدیق اور ذہین فنڈز کے تصورات کو مربوط کرکے تاجروں کو ایک طاقتور ٹول مہیا کرتا ہے جو مارکیٹ کے رجحانات کو پکڑنے اور جعلی سگنل کو کم سے کم کرنے میں مدد کرتا ہے۔ حکمت عملی کا انوکھا “اے آئی” جزو متعدد ٹائم سائیکلوں کے رجحانات کا تجزیہ کرتا ہے ، جس میں واضح اور قابل عمل ڈیش بورڈ فراہم کیا جاتا ہے ، جس سے یہ نوسکھئیے اور تجربہ کار تاجروں کے لئے استعمال میں آسان ہے۔ یہ حکمت عملی مکمل طور پر مرضی کے مطابق ہے ، جس سے صارف اپنے فلٹر کو اپنے تجارتی انداز کے مطابق ایڈجسٹ کرسکتا ہے۔
یہ حکمت عملی ایک مربوط تجارتی نظام ہے جو متعدد اجزاء کو یکجا کرکے تشکیل دی گئی ہے:
ملٹی ٹائم سائیکل ٹرینڈ تجزیہحکمت عملی: تین ٹائم فریموں کا استعمال کرتے ہوئے رجحانات کی جانچ پڑتال کریں ((1 گھنٹہ ، 4 گھنٹے ، دن کی لائن) ، انڈیکس کی حرکت پذیری اوسط ((ای ایم اے) اور ٹرانزیکشن ویٹڈ اوسط قیمت ((وی ڈبلیو اے پی)) کا استعمال کریں۔ جب قیمت ای ایم اے اور وی ڈبلیو اے پی سے اوپر ہوتی ہے تو ، رجحان کو بائسن سمجھا جاتا ہے۔ جب قیمت نیچے ہوتی ہے تو ، اسے بائسن سمجھا جاتا ہے۔ دوسری صورت میں ، غیر جانبدار۔ سگنل صرف اس وقت پیدا ہوتا ہے جب صارف کا انتخاب اعلی ٹائم فریم کا رجحان ہوتا ہے جس میں تجارت کی سمت سے مطابقت رکھتا ہے (مثال کے طور پر ، خریداری کے اشارے کو اعلی ٹائم فریم کا بیس رجحان درکار ہوتا ہے) ۔ اس سے شور کم ہوجاتا ہے اور اس بات کو یقینی بناتا ہے کہ تجارت وسیع تر مارکیٹ کے پس منظر پر عمل پیرا ہے۔
طاقت فلٹر: لگاتار کالموں کے درمیان فی صد قیمت میں تبدیلی کی پیمائش کریں اور اس کو اتار چڑھاؤ کی شرح کے ساتھ ایڈجسٹ کریں[ATR) ۔ اس سے یہ یقینی بنایا جاتا ہے کہ تجارت صرف قیمتوں میں نمایاں تبدیلی کے دوران ہوتی ہے ، اور کم حرکت پذیری کی شرائط کو فلٹر کرتی ہے۔
منتقلی فلٹر (اختیاری): چیک کریں کہ آیا موجودہ ٹرانزیکشن حجم طویل مدتی اوسط سے زیادہ ہے اور مثبت قلیل مدتی ٹرانزیکشن حجم میں تبدیلی کو ظاہر کرتا ہے۔ اس سے مارکیٹ میں مضبوط شرکت کی تصدیق ہوتی ہے ، جس سے جعلی بریک آؤٹ کا خطرہ کم ہوتا ہے۔
فلٹر کو توڑنا (اختیاری): قیمتوں کو توڑنے (خریدنے) یا توڑنے (فروخت) کی ضرورت ہے حالیہ اونچائی / کم ، اس بات کو یقینی بنائیں کہ سگنل مارکیٹ کے ڈھانچے میں تبدیلی کے مطابق ہو۔
سمارٹ فنڈز کا تصور (CHoCH/BOS):
AI رجحانات کا ڈیش بورڈ: مختلف ٹائم فریموں کے رجحانات کی سمت ، حرکیات اور اتار چڑھاؤ کی شرح کو ملا کر ٹرینڈ اسکور کا حساب لگایا گیا ہے۔ اسکور 0.5 سے زیادہ کا مطلب ہے “اوپر” کا رجحان ، -0.5 سے کم کا مطلب ہے “نیچے” کا رجحان ، بصورت دیگر “غیر جانبدار” ہے۔ مارکیٹ کے پس منظر کا ایک مجموعہ جس میں رجحان کی طاقت (فی صد) ، AI اعتماد (جیسے رجحانات کی مستقل مزاجی پر مبنی) اور ٹریفک میں فرق (جیسے سی وی ڈی) کی جمع ہے۔ دوسرا ٹیبل (اختیاری) 1 گھنٹہ ، 4 گھنٹہ اور ڈے لائن ٹائم فریم کے رجحانات کی پیش گوئی دکھاتا ہے ، تاجر کو مستقبل کی مارکیٹ کی سمت کی پیش گوئی کرنے میں مدد کرتا ہے۔
متحرک رجحان لائن: صارف کی وضاحت کے مطابق مدت کے اندر اندر ((مختصر ٹرینڈ پیریڈ، طویل ٹرینڈ پیریڈ) کی تازہ ترین اتار چڑھاؤ کی کم اور اونچائی کی حمایت اور مزاحمت کی لائنوں کو ڈرائنگ۔ یہ لائنیں مارکیٹ کے حالات کے مطابق خود کو اپنانے اور رجحان کی شدت کے مطابق رنگین ہیں۔
ایک سے زیادہ ٹائم سائیکل رجحان متحرک حجم ٹریڈنگ کی حکمت عملی میں مندرجہ ذیل نمایاں فوائد ہیں:
جعلی سگنل کو کم کرنایہ حکمت عملی رجحانات ، رفتار ، حجم اور توڑنے والے فلٹرز کی مستقل مزاجی کی ضرورت کے ذریعہ اتار چڑھاؤ یا کم اعتماد والے بازاروں میں تجارت کو کم سے کم کرتی ہے۔
مارکیٹ کے تناظر میں موافقت: اے ٹی آر پر مبنی متحرک تھرویلز کو اتار چڑھاؤ کی متحرک حالت کے مطابق ایڈجسٹ کیا جاسکتا ہے ، تاکہ اس بات کو یقینی بنایا جاسکے کہ سگنل رجحان ساز مارکیٹ اور بینچ مارک میں متعلقہ رہے۔
فیصلہ سازی کو آسان بناناAI ڈیش بورڈ پیچیدہ کثیر وقت کی مدت کے اعداد و شمار کو صارف دوست ٹیبل میں ضم کرتا ہے ، جس سے دستی تجزیہ کی ضرورت ختم ہوجاتی ہے۔
اسمارٹ فنڈز کا استعمال:CHoCH اور BOS سگنل کی گرفتاری ایجنسیوں کی قیمت کی کارروائی کے ماڈل ، تاجروں کو الٹ اور تسلسل کی شناخت کا فائدہ فراہم کرتے ہیں۔
بصری وضاحتحکمت عملی: مارکیٹ کی ساخت کو اہم سطحوں ، سگنلز اور رجحان لائنوں کی نشاندہی کرکے واضح طور پر ظاہر کرنا ، تاجروں کو قیمت کے عمل کو بہتر طور پر سمجھنے میں مدد کرنا۔
خطرے کا انتظام بلٹ ان: پہلے سے طے شدہ اسٹاپ اور نقصان کی سطح نے نظم و ضبط کے ساتھ خطرے کے انتظام کو فروغ دیا ، جو طویل مدتی تجارت کی کامیابی کے لئے ضروری ہے۔
پہلے سے خبردار: “تیار” سگنل کے ذریعے ، تاجروں کو سیٹ اپ مکمل ہونے سے پہلے ہی آگاہ کیا جاسکتا ہے ، جس سے زیادہ تیاری اور منصوبہ بندی کا وقت ملتا ہے۔
اگرچہ اس حکمت عملی کے بہت سے فوائد ہیں ، اس میں کچھ ممکنہ خطرات بھی ہیں:
پیرامیٹرز کو بہتر بنانے کا جال: حد سے زیادہ اصلاح کی حکمت عملی کے پیرامیٹرز ممکنہ طور پر منحنی فٹ ہونے کا سبب بن سکتے ہیں اور مستقبل کی مارکیٹ کے حالات میں خراب کارکردگی کا مظاہرہ کرسکتے ہیں۔ اس کا حل متعدد مارکیٹوں اور وقت کے دورانیوں پر وسیع پیمانے پر ریٹرننگ کرنا ہے تاکہ پیرامیٹرز کا ایک مستحکم سیٹ مل سکے۔
تاخیر کا اشارہ: متعدد فلٹرز کے استعمال سے سگنل میں قیمت کی حرکت کے سلسلے میں تاخیر ہوسکتی ہے ، اور بعض اوقات مثالی داخلے کے نقطہ نظر سے محروم ہوجاتے ہیں۔ اس کا حل مارکیٹ کی رفتار سے زیادہ حساس پیرامیٹرز کو ایڈجسٹ کرنا ہے ، جیسے محور کی لمبائی اور حرکیات کی حد۔
غلط رجحانات کی شناخت: اعلی اتار چڑھاؤ یا غیر جانبدار مارکیٹوں میں ، رجحانات کی تشخیص غیر درست ہوسکتی ہے۔ حل یہ ہے کہ ان حالات میں تجارت کو کم کیا جائے یا فلٹر کی سخت ضرورتوں کو شامل کیا جائے۔
فنڈ مینجمنٹ کی خرابی: فکسڈ اسٹاپ اور اسٹاپ لاسٹ پوائنٹس تمام مارکیٹ کے حالات کے لئے موزوں نہیں ہوسکتے ہیں۔ اس کا حل یہ ہے کہ انہیں موجودہ اتار چڑھاؤ کے مطابق اے ٹی آر پر مبنی اقدار میں ایڈجسٹ کیا جائے۔
کمپیوٹر کی گہرائی: حکمت عملی کی پیچیدگی کچھ پلیٹ فارمز پر کارکردگی کے مسائل کا سبب بن سکتی ہے ، خاص طور پر جب بڑے پیمانے پر تاریخی اعداد و شمار کا تجزیہ کیا جائے۔ اس کا حل یہ ہے کہ ریٹرننگ ٹائم رینج کو محدود کیا جائے یا غیر اہم حساب کو آسان بنایا جائے۔
ڈیٹا انحصار: حکمت عملی کا انحصار درست ملٹی ٹائم پیکیج ڈیٹا پر ہوتا ہے ، جو تمام تجارتی ماحول میں دستیاب نہیں ہوسکتا ہے۔ اس کا حل قابل اعتماد متبادل اختیارات کو نافذ کرنا ہے ، جیسا کہ کوڈ میں دکھایا گیا ہے کہ مقامی قدر کا حساب لگائیں۔
ہائی لیکویڈیٹی مارکیٹوں کا انتخابحکمت عملی: کم لیکویڈیٹی والے بازاروں میں زیادہ غلط سگنل پیدا ہوسکتے ہیں۔ اس کا حل اہم کرنسی کے جوڑوں ، بڑے پیمانے پر رکھے ہوئے اسٹاک اور اہم کریپٹو کرنسیوں پر توجہ مرکوز کرنا ہے۔
اس حکمت عملی کو مزید بہتر بنانے کے لیے مندرجہ ذیل اقدامات کیے جاسکتے ہیں۔
موافقت کے پیرامیٹرز: خودکار ایڈجسٹمنٹ پیرامیٹرز کو لاگو کرنا ، جیسے تاریخی اتار چڑھاؤ کے اعداد و شمار پر مبنی متحرک قیمتوں کا تعین کرنا۔ اس سے حکمت عملی کو مختلف مارکیٹ کے حالات میں موافقت پیدا ہوسکتی ہے۔
مشین لرننگ انٹیگریشن: مشین لرننگ الگورتھم کا اطلاق بہترین پیرامیٹرز کے مجموعے کی نشاندہی کرنے یا مارکیٹ کے مخصوص حالات میں حکمت عملی کی کارکردگی کی پیش گوئی کرنے کے لئے۔ یہ حکمت عملی کے “AI” پہلو کو مزید بڑھانے کے لئے تاریخی کارکردگی کے اعداد و شمار کا تجزیہ کرکے کیا جاسکتا ہے۔
مارکیٹ کے جذبات کے اشارے: بیرونی مارکیٹ کے جذبات کے اعداد و شمار کو شامل کریں ، جیسے VIX انڈیکس یا سوشل میڈیا کے جذبات کا تجزیہ ، تاکہ تجارتی فیصلوں کے لئے وسیع تر پس منظر فراہم کیا جاسکے۔ یہ حکمت عملی کو مارکیٹ کے انتہائی حالات میں تجارت سے بچنے میں مدد فراہم کرسکتا ہے۔
وقت فلٹر: مارکیٹ میں اتار چڑھاؤ کے وقت کے ماڈل پر مبنی فلٹرز شامل کریں اور معلوم کم اتار چڑھاؤ کے دوران (جیسے ایشیائی سیشن کے وسط میں) تجارت سے گریز کریں۔ اس سے کم معیار کے سگنل کی تعداد کم ہوسکتی ہے۔
ارتباط کا تجزیہ: اثاثوں کے مابین مطابقت کی جانچ پڑتال شامل کریں ، اس بات کو یقینی بنائیں کہ تجارت متعلقہ مارکیٹوں کے ساتھ مطابقت رکھتی ہے (مثال کے طور پر: یورو / امریکی ڈالر کی تجارت کرتے وقت امریکی ڈالر کا اشاریہ) ۔ یہ اضافی سگنل کی تصدیق فراہم کرسکتا ہے۔
فنڈ مینجمنٹ کی اصلاح: اتار چڑھاؤ پر مبنی متحرک اسٹاپ / نقصان کی سطح کو نافذ کریں ، اور فنڈ مینجمنٹ کے قواعد کو شامل کریں ، جیسے کہ اکاؤنٹ میں اضافے کے ساتھ پوزیشن کا سائز ایڈجسٹ کریں۔ اس سے طویل مدتی رسک ایڈجسٹمنٹ کے بعد منافع میں اضافہ ہوگا۔
کارکردگی کی اصلاح: کوڈ کو آسان بنانا ، غیر ضروری حساب کتاب کو کم کرنا ، خاص طور پر رجحان لائنوں اور ٹیبل ڈسپلے کے معاملے میں ، تاکہ حکمت عملی کو حقیقی وقت کی تجارت میں جواب دہی میں اضافہ کیا جاسکے۔
ڈیٹا غیر متعلقہ: بہتر حکمت عملی جو ڈیٹا کے وقفے یا کھوئے ہوئے اقدار کو زیادہ خوبصورت طریقے سے سنبھالتی ہے ، اور غیر مطلوبہ حالات میں استحکام کو یقینی بناتی ہے۔
کثیر ٹائم سائیکل رجحان متحرک ٹریڈنگ حکمت عملی ایک جامع ٹریڈنگ سسٹم پیش کرتی ہے جو روایتی تکنیکی تجزیہ ، سمارٹ فنڈز کے تصورات اور منفرد AI سے چلنے والے رجحانات کے تجزیے کو جوڑتی ہے۔ اس کی طاقت کثیر سطحی فلٹرنگ اور تصدیق کے میکانزم میں ہے ، جو اس بات کو یقینی بناتی ہے کہ صرف اعلی امکان کے حالات میں ہی ٹریڈنگ سگنل تیار کیے جائیں۔
اس حکمت عملی کا ایک خاص طور پر جدید پہلو یہ ہے کہ ملٹی ٹائم فریم ٹرینڈ کی معلومات کو ایک بدیہی بصری ٹریک ڈیش بورڈ میں ضم کیا گیا ہے ، جس سے تاجروں کو پیچیدہ دستی تجزیہ کے بغیر مارکیٹ کی صورتحال کا فوری اندازہ لگانے کی اجازت ملتی ہے۔ متحرک معاون مزاحمت لائنوں اور اہم ڈھانچے کی سطح کی نمائش اس آسانی کو مزید بڑھا دیتی ہے۔
ذہانت سے CHoCH اور BOS کے تصورات کو جوڑ کر ، حکمت عملی مارکیٹ کی نفسیات میں ٹھیک ٹھیک تبدیلیوں کو پکڑنے کے قابل ہے ، جو عام طور پر رجحان کے تسلسل یا ممکنہ الٹ کی نشاندہی کرتی ہے۔ اے ٹی آر ایڈجسٹمنٹ تھریڈ کا استعمال اس بات کو یقینی بناتا ہے کہ حکمت عملی مختلف اتار چڑھاؤ کے حالات کے مطابق ڈھال سکتی ہے ، جس سے یہ متعدد مارکیٹ کے ماحول کے لئے موزوں ہے۔
اگرچہ کچھ خطرات اور حدود موجود ہیں ، لیکن تجویز کردہ اصلاحاتی اقدامات کے ذریعہ پہلے سے ہی مضبوط نظام کو مزید تقویت دی جاسکتی ہے۔ حکمت عملی میں کسی بھی تاجر کے ٹول باکس میں ایک قیمتی آلہ بننے کی صلاحیت موجود ہے ، جو خطرہ کے انتظام کے اصولوں کو سمجھداری سے لاگو کرتی ہے اور پیرامیٹرز کو مخصوص تجارتی اہداف اور خطرے کی برداشت کے مطابق ایڈجسٹ کرتی ہے۔
آخر کار ، تمام تجارتی حکمت عملیوں کی طرح ، کامیابی مناسب پیرامیٹرز کی اصلاح ، نظم و ضبط کے نفاذ ، ٹھوس خطرے کے انتظام اور مارکیٹ کی حرکیات کی گہری تفہیم پر منحصر ہوگی۔
/*backtest
start: 2024-05-15 00:00:00
end: 2025-05-13 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("PowerHouse SwiftEdge AI v2.10 Strategy", overlay=true, calc_on_every_tick=true)
// Inputs med fleksible indstillinger
length = input.int(5, "Pivot Length", minval=1, maxval=20, step=1, tooltip="Number of bars to identify pivot highs and lows.")
momentum_threshold_base = input.float(0.01, "Base Momentum Threshold (%)", minval=0.001, maxval=1.0, step=0.001, tooltip="Base percentage change for signals.")
tp_points = input.int(10, "Take Profit (points)", minval=5, maxval=500, step=5)
sl_points = input.int(10, "Stop Loss (points)", minval=5, maxval=500, step=5)
min_signal_distance = input.int(5, "Min Signal Distance (bars)", minval=1, maxval=50, step=1)
tp_box_height = input.float(0.5, "TP Box Height % (Optional)", minval=0.1, maxval=2.0, step=0.1)
pre_momentum_factor_base = input.float(0.5, "Base Pre-Momentum Factor", minval=0.1, maxval=1.0, step=0.1, tooltip="Base factor for Get Ready signals.")
shortTrendPeriod = input.int(30, title="Short Trend Period", minval=10, maxval=100)
longTrendPeriod = input.int(100, title="Long Trend Period", minval=50, maxval=200)
// Brugerdefinerede filtre
use_momentum_filter = input.bool(true, "Use Momentum Filter", group="Signal Filters", tooltip="Require price change to exceed momentum threshold.")
use_trend_filter = input.bool(true, "Use Higher Timeframe Trend Filter", group="Signal Filters", tooltip="Require alignment with the selected higher timeframe trend.")
higher_tf_choice = input.string("60", "Higher Timeframe", options=["60", "240", "D"], group="Signal Filters", tooltip="Choose the timeframe for the higher timeframe filter.")
use_lower_tf_filter = input.bool(true, "Use Lower Timeframe Filter", group="Signal Filters", tooltip="Prevent signals against the selected lower timeframe trend.")
lower_tf_choice = input.string("60", "Lower Timeframe", options=["60", "240", "D"], group="Signal Filters", tooltip="Choose the timeframe for the lower timeframe filter.")
use_volume_filter = input.bool(false, "Use Volume Filter", group="Signal Filters", tooltip="Require volume above average (optional).")
use_breakout_filter = input.bool(false, "Use Breakout Filter", group="Signal Filters", tooltip="Require price to break previous high/low (optional).")
show_get_ready = input.bool(true, "Show Get Ready Signals", group="Signal Filters", tooltip="Enable or disable Get Ready signals.")
restrict_repeated_signals = input.bool(false, "Restrict Repeated Signals", group="Signal Filters", tooltip="Prevent multiple signals in the same trend direction until trend changes.")
restrict_trend_tf_choice = input.string("60", "Restrict Trend Timeframe", options=["60", "240", "D"], group="Signal Filters", tooltip="Choose the timeframe to check trend for restricting repeated signals.")
enable_ai_analysis = input.bool(true, "Enable AI Market Analysis", group="AI Market Analysis", tooltip="Show AI predictions for future trends across timeframes.")
ai_table_position = input.string("Bottom Center", "AI Market Analysis Table Position", options=["Top Left", "Top Center", "Top Right", "Middle Left", "Middle Center", "Middle Right", "Bottom Left", "Bottom Center", "Bottom Right"], group="AI Market Analysis", tooltip="Choose the position of the AI Market Analysis table.")
// Ekstra inputs til valgfrie filtre
volumeLongPeriod = input.int(50, "Long Volume Period", minval=10, maxval=100, group="Volume Filter Settings")
volumeShortPeriod = input.int(5, "Short Volume Period", minval=1, maxval=20, group="Volume Filter Settings")
breakoutPeriod = input.int(5, "Breakout Period", minval=1, maxval=50, group="Breakout Filter Settings")
// Funktion til at konvertere streng til position
f_getTablePosition(position_string) =>
switch position_string
"Top Left" => position.top_left
"Top Center" => position.top_center
"Top Right" => position.top_right
"Middle Left" => position.middle_left
"Middle Center" => position.middle_center
"Middle Right" => position.middle_right
"Bottom Left" => position.bottom_left
"Bottom Center" => position.bottom_center
"Bottom Right" => position.bottom_right
=> position.middle_right // Standard fallback
// AI-drevet adaptiv signaljustering med ATR
atr_raw = ta.atr(14)
atr = na(atr_raw) and bar_index > 0 ? (high - low) : atr_raw
volatility_factor = atr / close
momentum_threshold = momentum_threshold_base * (1 + volatility_factor * 2)
pre_momentum_factor = pre_momentum_factor_base * (1 - volatility_factor * 0.5)
pre_momentum_threshold = momentum_threshold * pre_momentum_factor
// Raw CVD-beregning
var float raw_cvd = 0.0
delta_volume = close > close[1] ? volume : close < close[1] ? -volume : 0
raw_cvd := raw_cvd + delta_volume
// Volatility Context baseret på absolut CVD
cvd_level = math.abs(raw_cvd) < 10000 ? "Low" : math.abs(raw_cvd) < 50000 ? "Medium" : "High"
cvd_color = raw_cvd > 0 ? color.lime : raw_cvd < 0 ? color.red : color.yellow
// Beregn prisændring (momentum)
price_change = ((close - close[1]) / close[1]) * 100
// Find højder og lavpunkter
pivot_high = ta.pivothigh(high, length, length)
pivot_low = ta.pivotlow(low, length, length)
// Variabler til at gemme seneste højder og lavpunkter
var float last_high = na
var float last_low = na
if not na(pivot_high)
last_high := pivot_high
if not na(pivot_low)
last_low := pivot_low
// Variabler til signalstyring
var float choch_sell_level = na
var float choch_buy_level = na
var float bos_sell_level = na
var float bos_buy_level = na
var float tp_sell_level = na
var float tp_buy_level = na
var int last_signal_bar = -min_signal_distance - 1
var string last_signal = "Neutral"
var int last_trend = 0 // Sporer den sidste trendretning for restrict_repeated_signals
// Multi-tidsramme trendanalyse med robust fallback
// Beregn EMA og VWAP for hver tidsramme
ema60_raw = request.security(syminfo.tickerid, "60", ta.ema(close, 20), lookahead=barmerge.lookahead_on)
vwap60_raw = request.security(syminfo.tickerid, "60", ta.vwap(hlc3), lookahead=barmerge.lookahead_on)
ema240_raw = request.security(syminfo.tickerid, "240", ta.ema(close, 20), lookahead=barmerge.lookahead_on)
vwap240_raw = request.security(syminfo.tickerid, "240", ta.vwap(hlc3), lookahead=barmerge.lookahead_on)
emaD_raw = request.security(syminfo.tickerid, "D", ta.ema(close, 20), lookahead=barmerge.lookahead_on)
vwapD_raw = request.security(syminfo.tickerid, "D", ta.vwap(hlc3), lookahead=barmerge.lookahead_on)
// Lokale EMA og VWAP som fallback
local_ema = ta.ema(close, 20)
local_vwap = ta.vwap(hlc3)
// Fallback for manglende data
ema60 = na(ema60_raw) ? local_ema : ema60_raw
vwap60 = na(vwap60_raw) ? local_vwap : vwap60_raw
ema240 = na(ema240_raw) ? local_ema : ema240_raw
vwap240 = na(vwap240_raw) ? local_vwap : vwap240_raw
emaD = na(emaD_raw) ? local_ema : emaD_raw
vwapD = na(vwapD_raw) ? local_vwap : vwapD_raw
// Trendbestemmelse (1 = op, -1 = ned, 0 = neutral)
trend60 = close > ema60 and close > vwap60 ? 1 : close < ema60 and close < vwap60 ? -1 : 0
trend240 = close > ema240 and close > vwap240 ? 1 : close < ema240 and close < vwap240 ? -1 : 0
trendD = close > emaD and close > vwapD ? 1 : close < emaD and close < vwapD ? -1 : 0
// AI-Trend Strength (-100 til +100)
trend_strength_raw = trend60 + trend240 + trendD
trend_strength = (trend_strength_raw / 3) * 100
// AI Confidence (simuleret succesrate)
var float ai_confidence = 50.0
if trend_strength_raw == 3 or trend_strength_raw == -3
ai_confidence := 90.0
else if trend_strength_raw >= 2 or trend_strength_raw <= -2
ai_confidence := 75.0
else
ai_confidence := 60.0
// Filterbetingelser
// Dynamisk valg af higher timeframe trend (til signalfiltrering)
var int higher_tf_trend = 0
switch higher_tf_choice
"60" => higher_tf_trend := trend60
"240" => higher_tf_trend := trend240
"D" => higher_tf_trend := trendD
bullish_trend_ok = higher_tf_trend == 1
bearish_trend_ok = higher_tf_trend == -1
// Dynamisk valg af lower timeframe trend (til signalfiltrering)
var int lower_tf_trend = 0
switch lower_tf_choice
"60" => lower_tf_trend := trend60
"240" => lower_tf_trend := trend240
"D" => lower_tf_trend := trendD
lower_tf_bullish = lower_tf_trend == 1
lower_tf_bearish = lower_tf_trend == -1
lower_tf_not_neutral = lower_tf_trend != 0
// Dynamisk valg af trend-tidsramme til restrict_repeated_signals
var int restrict_tf_trend = 0
switch restrict_trend_tf_choice
"60" => restrict_tf_trend := trend60
"240" => restrict_tf_trend := trend240
"D" => restrict_tf_trend := trendD
volAvg50 = ta.sma(volume, volumeLongPeriod)
volShort = ta.sma(volume, volumeShortPeriod)
volCondition = volume > volAvg50 and ta.change(volShort) > 0
highestBreakout = ta.highest(high, breakoutPeriod)
lowestBreakout = ta.lowest(low, breakoutPeriod)
// CHoCH og BOS definitioner
choch_sell = ta.crossunder(low, last_high) and close < open
choch_buy = ta.crossover(high, last_low) and close > open
bos_sell = ta.crossunder(low, last_low[1]) and low < last_low[1] and close < open
bos_buy = ta.crossover(high, last_high[1]) and high > last_high[1] and close > open
// Signalbetingelser med valgbare filtre
early_sell_signal = use_momentum_filter ? price_change < -momentum_threshold : true
early_buy_signal = use_momentum_filter ? price_change > momentum_threshold : true
sell_trend_ok = use_trend_filter ? bearish_trend_ok : true
buy_trend_ok = use_trend_filter ? bullish_trend_ok : true
sell_lower_tf_ok = use_lower_tf_filter ? (not lower_tf_bullish and lower_tf_not_neutral) : true
buy_lower_tf_ok = use_lower_tf_filter ? (not lower_tf_bearish and lower_tf_not_neutral) : true
sell_volume_ok = use_volume_filter ? volCondition : true
buy_volume_ok = use_volume_filter ? volCondition : true
sell_breakout_ok = use_breakout_filter ? close < lowestBreakout[1] : true
buy_breakout_ok = use_breakout_filter ? close > highestBreakout[1] : true
// Logik for at begrænse gentagne signaler baseret på restrict_tf_trend
sell_allowed = not restrict_repeated_signals or (last_signal != "Sell" or (last_signal == "Sell" and restrict_tf_trend != last_trend and restrict_tf_trend != -1))
buy_allowed = not restrict_repeated_signals or (last_signal != "Buy" or (last_signal == "Buy" and restrict_tf_trend != last_trend and restrict_tf_trend != 1))
sell_condition = early_sell_signal and (bar_index - last_signal_bar >= min_signal_distance) and sell_trend_ok and sell_lower_tf_ok and sell_volume_ok and sell_breakout_ok and sell_allowed
buy_condition = early_buy_signal and (bar_index - last_signal_bar >= min_signal_distance) and buy_trend_ok and buy_lower_tf_ok and buy_volume_ok and buy_breakout_ok and buy_allowed
get_ready_sell = use_momentum_filter ? (price_change < -pre_momentum_threshold and price_change > -momentum_threshold) : true and (bar_index - last_signal_bar >= min_signal_distance) and sell_trend_ok and sell_lower_tf_ok and sell_volume_ok and sell_breakout_ok
get_ready_buy = use_momentum_filter ? (price_change > pre_momentum_threshold and price_change < momentum_threshold) : true and (bar_index - last_signal_bar >= min_signal_distance) and buy_trend_ok and buy_lower_tf_ok and buy_volume_ok and buy_breakout_ok
// Strategy logic
if buy_condition
strategy.entry("Long", strategy.long)
strategy.exit("TP/SL Long", "Long", limit=close + tp_points, stop=close - sl_points)
label.new(bar_index, low, "Buy", color=color.green, style=label.style_label_up, textcolor=color.white)
tp_buy_level := high + tp_points
last_signal := "Buy"
last_signal_bar := bar_index
last_trend := restrict_tf_trend
if sell_condition
strategy.entry("Short", strategy.short)
strategy.exit("TP/SL Short", "Short", limit=close - tp_points, stop=close + sl_points)
label.new(bar_index, high, "Sell", color=color.red, style=label.style_label_down, textcolor=color.white)
tp_sell_level := low - tp_points
last_signal := "Sell"
last_signal_bar := bar_index
last_trend := restrict_tf_trend
// Plot Get Ready signals
if show_get_ready and get_ready_sell
label.new(bar_index, high, "Get Ready SELL", color=color.orange, style=label.style_label_down, textcolor=color.black, size=size.small)
if show_get_ready and get_ready_buy
label.new(bar_index, low, "Get Ready BUY", color=color.yellow, style=label.style_label_up, textcolor=color.black, size=size.small)
// Plot CHoCH og BOS som fulde linjer med AI-agtige farver
var line choch_sell_line = na
var line choch_buy_line = na
var line bos_sell_line = na
var line bos_buy_line = na
// Trendlinjer med bufferkontrol og AI-laser-look
var line sup = na
var line res = na
if barstate.islast
float lowest_y2 = 60000
int lowest_x2 = 0
float highest_y2 = 0
int highest_x2 = 0
// Begræns lookback til max 2000 bars for at undgå bufferfejl
int maxShortBars = math.min(math.min(shortTrendPeriod, bar_index), 2000)
for i = 1 to maxShortBars
if low[i] < lowest_y2
lowest_y2 := low[i]
lowest_x2 := i
if high[i] > highest_y2
highest_y2 := high[i]
highest_x2 := i
float lowest_y1 = 60000
int lowest_x1 = 0
float highest_y1 = 0
int highest_x1 = 0
// Begræns lookback til max 2000 bars for at undgå bufferfejl
int maxLongBars = math.min(math.min(longTrendPeriod, bar_index), 2000)
for j = shortTrendPeriod + 1 to maxLongBars
if low[j] < lowest_y1
lowest_y1 := low[j]
lowest_x1 := j
if high[j] > highest_y1
highest_y1 := high[j]
highest_x1 := j
int trendStrength = trend_strength_raw
// Plot niveauer
plot(choch_sell_level, title="Last High at CHoCH", color=color.aqua, style=plot.style_circles, linewidth=1, trackprice=false)
plot(choch_buy_level, title="Last Low at CHoCH", color=color.lime, style=plot.style_circles, linewidth=1, trackprice=false)
plot(bos_sell_level, title="Last Low at BOS", color=color.fuchsia, style=plot.style_circles, linewidth=1, trackprice=false)
plot(bos_buy_level, title="Last High at BOS", color=color.teal, style=plot.style_circles, linewidth=1, trackprice=false)
plot(tp_sell_level, title="TP Sell", color=color.red, style=plot.style_circles, linewidth=1, trackprice=false)
plot(tp_buy_level, title="TP Buy", color=color.green, style=plot.style_circles, linewidth=1, trackprice=false)
plot(last_high, title="Last High", color=color.red, style=plot.style_histogram, linewidth=1, trackprice=true)
plot(last_low, title="Last Low", color=color.green, style=plot.style_histogram, linewidth=1, trackprice=true)
// AI Markedsanalyse - Beregn data uanset betingelse
momentum_1h = request.security(syminfo.tickerid, "60", close - close[3], lookahead=barmerge.lookahead_on)
momentum_4h = request.security(syminfo.tickerid, "240", close - close[3], lookahead=barmerge.lookahead_on)
momentum_d = request.security(syminfo.tickerid, "D", close - close[3], lookahead=barmerge.lookahead_on)
// Beregn ATR og SMA(ATR) for hver tidsramme
atr_1h = request.security(syminfo.tickerid, "60", ta.atr(14), lookahead=barmerge.lookahead_on)
atr_4h = request.security(syminfo.tickerid, "240", ta.atr(14), lookahead=barmerge.lookahead_on)
atr_d = request.security(syminfo.tickerid, "D", ta.atr(14), lookahead=barmerge.lookahead_on)
sma_atr_1h = request.security(syminfo.tickerid, "60", ta.sma(ta.atr(14), 20), lookahead=barmerge.lookahead_on)
sma_atr_4h = request.security(syminfo.tickerid, "240", ta.sma(ta.atr(14), 20), lookahead=barmerge.lookahead_on)
sma_atr_d = request.security(syminfo.tickerid, "D", ta.sma(ta.atr(14), 20), lookahead=barmerge.lookahead_on)
// Lokale ATR og SMA(ATR) som fallback
local_atr = ta.atr(14)
local_sma_atr = ta.sma(ta.atr(14), 20)
// Fallback for manglende data
volatility_1h = na(atr_1h) ? local_atr : atr_1h
volatility_4h = na(atr_4h) ? local_atr : atr_4h
volatility_d = na(atr_d) ? local_atr : atr_d
volatility_avg_1h = na(sma_atr_1h) ? local_sma_atr : sma_atr_1h
volatility_avg_4h = na(sma_atr_4h) ? local_sma_atr : sma_atr_4h
volatility_avg_d = na(sma_atr_d) ? local_sma_atr : sma_atr_d
momentum_1h := na(momentum_1h) ? 0 : momentum_1h
momentum_4h := na(momentum_4h) ? 0 : momentum_4h
momentum_d := na(momentum_d) ? 0 : momentum_d
// Analyse baseret på trend, momentum og volatilitet
score_1h = trend60 + (momentum_1h > 0 ? 0.5 : momentum_1h < 0 ? -0.5 : 0) + (volatility_1h > volatility_avg_1h ? 0.5 : 0)
score_4h = trend240 + (momentum_4h > 0 ? 0.5 : momentum_4h < 0 ? -0.5 : 0) + (volatility_4h > volatility_avg_4h ? 0.5 : 0)
score_d = trendD + (momentum_d > 0 ? 0.5 : momentum_d < 0 ? -0.5 : 0) + (volatility_d > volatility_avg_d ? 0.5 : 0)
// Forudsigelser
pred_1h = score_1h > 0.5 ? "Up" : score_1h < -0.5 ? "Down" : "Neutral"
pred_4h = score_4h > 0.5 ? "Up" : score_4h < -0.5 ? "Down" : "Neutral"
pred_d = score_d > 0.5 ? "Up" : score_d < -0.5 ? "Down" : "Neutral"
// Futuristisk AI-Trend Dashboard
var table trendTable = table.new(position.top_right, columns=2, rows=6, bgcolor=color.new(color.black, 50), border_width=2, border_color=color.new(color.teal, 20))
table.cell(trendTable, 0, 0, "AI-Trend Matrix v2.10", text_color=color.new(color.aqua, 0), bgcolor=color.new(color.navy, 60))
table.cell(trendTable, 1, 0, "", bgcolor=color.new(color.navy, 60))
table.merge_cells(trendTable, 0, 0, 1, 0)
table.cell(trendTable, 0, 1, "Trend Strength", text_color=color.white)
table.cell(trendTable, 1, 1, str.tostring(math.round(trend_strength)), text_color=trend_strength > 0 ? color.rgb(0, math.min(255, trend_strength * 2.55), 0) : color.rgb(math.min(255, math.abs(trend_strength) * 2.55), 0, 0))
table.cell(trendTable, 0, 2, "AI Confidence", text_color=color.white)
table.cell(trendTable, 1, 2, str.tostring(ai_confidence) + "%", text_color=color.teal)
table.cell(trendTable, 0, 3, "AI Calibration", text_color=color.white)
table.cell(trendTable, 1, 3, "CVD: " + str.tostring(math.round(raw_cvd)) + " (" + cvd_level + ")", text_color=cvd_color)
table.cell(trendTable, 0, 4, "1H", text_color=color.white)
table.cell(trendTable, 1, 4, trend60 == 1 ? "Up" : trend60 == -1 ? "Down" : "Neutral", text_color=trend60 == 1 ? color.lime : trend60 == -1 ? color.fuchsia : color.yellow)
table.cell(trendTable, 0, 5, "4H", text_color=color.white)
table.cell(trendTable, 1, 5, trend240 == 1 ? "Up" : trend240 == -1 ? "Down" : "Neutral", text_color=trend240 == 1 ? color.lime : trend240 == -1 ? color.fuchsia : color.yellow)
// Tabel for AI Markedsanalyse
if enable_ai_analysis
var table ai_table = table.new(f_getTablePosition(ai_table_position), columns=4, rows=2, bgcolor=color.new(color.black, 50), border_width=2, border_color=color.new(color.teal, 20))
table.cell(ai_table, 0, 0, "AI Market Analysis", text_color=color.new(color.aqua, 0), bgcolor=color.new(color.navy, 60))
table.cell(ai_table, 1, 0, "1H", text_color=color.white)
table.cell(ai_table, 2, 0, "4H", text_color=color.white)
table.cell(ai_table, 3, 0, "1D", text_color=color.white)
table.cell(ai_table, 0, 1, "Prediction", text_color=color.white)
table.cell(ai_table, 1, 1, pred_1h, text_color=pred_1h == "Up" ? color.lime : pred_1h == "Down" ? color.fuchsia : color.yellow)
table.cell(ai_table, 2, 1, pred_4h, text_color=pred_4h == "Up" ? color.lime : pred_4h == "Down" ? color.fuchsia : color.yellow)
table.cell(ai_table, 3, 1, pred_d, text_color=pred_d == "Up" ? color.lime : pred_d == "Down" ? color.fuchsia : color.yellow)
// Debug alerts for null data
if na(ema60) or na(vwap60)
alert("Warning: 60-minute timeframe data is null!", alert.freq_once_per_bar)
if na(ema240) or na(vwap240)
alert("Warning: 240-minute timeframe data is null!", alert.freq_once_per_bar)
if na(emaD) or na(vwapD)
alert("Warning: Daily timeframe data is null!", alert.freq_once_per_bar)