
کثیر جہتی خود کو اپنانے والی متحرک اوسط میٹرکس اور اے ٹی آر متحرک عین مطابق ٹریڈنگ حکمت عملی ایک اعلی درجے کی مقداری ٹریڈنگ سسٹم ہے جو تیزی سے بدلتے ہوئے مارکیٹ کے حالات کے لئے ڈیزائن کیا گیا ہے۔ اس حکمت عملی کا مرکز ایک انتہائی لچکدار اور خود کو اپنانے والا تجارتی میٹرکس بنانے کے لئے متعدد قسم کے متحرک اوسط اور اے ٹی آر (اوسط حقیقی طول موج) فلٹرز کو جوڑتا ہے۔ مارکیٹ کے رجحانات اور اتار چڑھاؤ کو درست طریقے سے پکڑنے کے ذریعہ ، یہ حکمت عملی اعلی تعدد والے تجارتی ماحول میں اعلی امکانات والے انٹری اور آؤٹ پٹ مقامات کی نشاندہی کرنے کے قابل ہے ، جبکہ سخت خطرے سے متعلق کنٹرول اقدامات پر عمل درآمد کرتی ہے۔ حکمت عملی کی ایک نمایاں خصوصیت اس کی کثیر سطح کی موافقت ہے - متعدد قسم کے متحرک اوسط لائنوں کے لچکدار انتخاب سے لے کر اے ٹی آر پر مبنی متحرک نقصان اور منافع کے اہداف کی ترتیب تک ، پھر متعدد ٹائم فریم ٹرینڈ فلٹرز ، جس سے اس کو مختلف مارکیٹ کے ماحول میں سمارٹ سگنل ٹریڈنگ کے طریقہ
اس حکمت عملی کا بنیادی اصول کئی اہم اجزاء کے تعاون پر مبنی ہے۔
اعلی درجے کی منتقل اوسط میٹرکس: حکمت عملی میں 11 تک مختلف قسم کی چلتی اوسط شامل ہیں ، بشمول SMA ، EMA ، SMMA ، HMA ، TEMA ، WMA ، VWMA ، ZLEMA ، ALMA ، KAMA اور DEMA۔ ہر ایک چلتی اوسط کا اپنا الگ الگ حساب کتاب اور ردعمل کی خصوصیات ہوتی ہیں ، جو مارکیٹ کے حالات کے مطابق لچکدار انتخاب کے ل.۔ نظام دو چلتی اوسطوں ((تیز اور سست) کو بطور اہم رجحانات کے اشارے استعمال کرتا ہے ، اور ان کے کراس اور متعلقہ پوزیشن بنیادی تجارتی سگنل پیدا کرنے کے لئے استعمال ہوتے ہیں۔
اے ٹی آر پر مبنی خطرے کا انتظامحکمت عملی: مارکیٹ میں اتار چڑھاؤ کی پیمائش کرنے کے لئے اے ٹی آر اشارے کا استعمال کریں اور اسے متعدد پہلوؤں پر لاگو کریں:
ملٹی ٹائم فریم رجحانات کو فلٹر کریںحکمت عملی: سگنل کی وشوسنییتا کو بڑھانے کے لئے اعلی ٹائم فریم ((15 منٹ) کے لئے منتقل اوسط رجحانات کی تلاش کے ذریعے ، اس بات کو یقینی بنائیں کہ تجارت کی سمت بڑے مارکیٹ کے رجحانات کے مطابق ہو۔
ٹرانزیکشن کی مقدار اور ٹائم ونڈو کی توثیق: صرف کم از کم ٹرانزیکشن کی مقدار کی ضروریات کو پورا کرنے کے بعد ٹرانزیکشن کی مقدار میں اضافہ ہوتا ہے اور ٹرانزیکشن ٹائم ونڈو کے اندر اندر ٹرانزیکشن کی جاتی ہے ، جس سے ٹرانزیکشن کی کیفیت میں مزید اضافہ ہوتا ہے۔
سگنل جنریشن منطق:
جامع خارج ہونے کی منطقحکمت عملی میں تین درجے کے باہر نکلنے کے طریقہ کار کا استعمال کیا گیا ہے: فکسڈ اسٹاپ (ATR کا ایک ضرب) ، ہدف منافع (ATR کا ایک ضرب) اور ٹریکنگ اسٹاپ (ATR پر مبنی متحرک ایڈجسٹمنٹ) ، ہر تجارت کے لئے مکمل خطرے سے تحفظ فراہم کرتا ہے۔
اس حکمت عملی کے کوڈ کا تجزیہ کرتے ہوئے ، مندرجہ ذیل نمایاں فوائد کا خلاصہ کیا جاسکتا ہے:
بہترین موافقت: مختلف قسم کے متحرک اوسط کی قسموں کے ساتھ جو تبدیل ہوسکتی ہے ((HMA سے KAMA وغیرہ) ، حکمت عملی مارکیٹ کے مختلف حالات کے مطابق ڈھال سکتی ہے۔ اس لچک کی وجہ سے تاجر کو موجودہ مارکیٹ کے ماحول کے مطابق بہترین اشارے کا انتخاب کرنے کی اجازت ملتی ہے ، بغیر پوری حکمت عملی کو دوبارہ لکھنے کی ضرورت ہوتی ہے۔
متحرک خطرے کے انتظاماے ٹی آر پر مبنی رسک کنٹرول میکانیزم اس بات کو یقینی بناتا ہے کہ مارکیٹ میں اتار چڑھاؤ کے مطابق اسٹاپ نقصان اور منافع کے اہداف کو خود بخود ایڈجسٹ کیا جائے گا۔ یہ طریقہ کار زیادہ اتار چڑھاؤ والی مارکیٹوں میں بہتر تحفظ فراہم کرتا ہے ، جبکہ رجحان کی منڈیوں میں زیادہ منافع حاصل کرنے کی اجازت دیتا ہے۔
کثیر پرت سگنل فلٹرنگیہ حکمت عملی مؤثر طریقے سے غلط سگنل کو کم کرتی ہے اور ٹریڈنگ کے معیار کو بہتر بناتی ہے۔ خاص طور پر 15 منٹ کے ٹائم فریم پر رجحانات کو فلٹر کرنے کی خصوصیت کے ساتھ ، اس نے منفی تجارت کے امکانات کو نمایاں طور پر کم کردیا ہے۔
داخلہ کے عین مطابق شرائطیہ حکمت عملی نہ صرف تکنیکی اشارے کی کراسنگ پر انحصار کرتی ہے بلکہ اس میں یہ بھی کہا جاتا ہے کہ قیمتوں اور سست حرکت پذیر اوسط کے مابین کافی حد تک اے ٹی آر فاصلہ برقرار رکھا جائے ، جس سے افقی منڈیوں میں بار بار تجارت سے بچنے میں مدد ملتی ہے اور جھوٹی توڑ سے ہونے والے نقصانات کو کم کیا جاتا ہے۔
شفاف کارکردگی کی نگرانی: بلٹ ان ڈیش بورڈ اہم کارکردگی کے اشارے کی ایک حقیقی وقت کی نمائش فراہم کرتا ہے ، بشمول موجودہ منافع / نقصان ، ایکویٹی ، اے ٹی آر (بنیادی اور فیصد) اور منتقل اوسط کے مابین فرق ، تاجر کو حکمت عملی کی حالت کا جائزہ لینے کے قابل بناتا ہے۔
اس حکمت عملی کے عمدہ ڈیزائن کے باوجود ، مندرجہ ذیل ممکنہ خطرات موجود ہیں:
پیرامیٹرز کو بہتر بنانے کا جال: حکمت عملی میں بہت سارے پیرامیٹرز شامل ہیں ((موبائل اوسط کی قسم اور مدت ، اے ٹی آر کی مدت اور ضرب وغیرہ) ، ضرورت سے زیادہ اصلاح سے منحنی فٹ ہونے کا سبب بن سکتا ہے ، جس کی وجہ سے حکمت عملی حقیقی وقت کی تجارت میں خراب کارکردگی کا مظاہرہ کرتی ہے۔ اس کا حل یہ ہے کہ مضبوط کراس مارکیٹ اور ٹائم فریم ٹیسٹنگ کی جائے تاکہ پیرامیٹرز کو زیادہ سے زیادہ ایڈجسٹ کرنے سے گریز کیا جاسکے۔
فوری تبدیلی کا خطرہ: اے ٹی آر کے متحرک اسٹاپ کے استعمال کے باوجود ، مارکیٹ میں اچانک الٹ آنے پر (جیسے کہ ایک اہم نیوز ریلیز کے بعد) ، قیمتیں اسٹاپ ٹرگر ہونے سے پہلے ہی چھلانگ لگا سکتی ہیں ، جس سے توقع سے زیادہ نقصان ہوتا ہے۔ رات کے وقت اضافی رسک کنٹرول کا اطلاق کرنے یا اعلی اتار چڑھاؤ کے واقعات سے پہلے تجارت کو روکنے کی سفارش کی جاتی ہے۔
سگنل میں تاخیر: تمام چلتی اوسطات فطری طور پر تاخیر کا شکار ہیں۔ یہاں تک کہ HMA یا ZLEMA جیسے کم تاخیر والے متغیرات بھی تیزی سے منڈیوں میں مثالی داخلے کے نقطہ سے محروم ہوسکتے ہیں۔ موجودہ سگنلنگ سسٹم کی تکمیل کے لئے حرکیات یا قیمت کے عمل کے اشارے کے ساتھ مل کر غور کیا جاسکتا ہے۔
حجم انحصار: حکمت عملی ٹرانزیکشن میں اضافے کے وقت سگنل دیتی ہے ، لیکن بعض مارکیٹوں یا اوقات میں ، ٹرانزیکشن گمراہ کن ہوسکتی ہے۔ ٹرانزیکشن فلٹر کو ایڈجسٹ کریں یا مخصوص مارکیٹ کے حالات میں اس خصوصیت کو غیر فعال کرنے پر غور کریں۔
ٹائم ونڈو کی حد: مخصوص ٹریڈنگ ٹائم ونڈوز میں رات کے وقت یا صبح کے وقت اہم مواقع ضائع ہوسکتے ہیں۔ یہ مشورہ دیا جاتا ہے کہ مخصوص مارکیٹوں میں سب سے زیادہ متحرک اوقات کے مطابق تجارتی اوقات کو ایڈجسٹ کیا جائے۔
کوڈ کا تجزیہ کرنے کے بعد ، یہاں کچھ ممکنہ اصلاحات ہیں:
خود کار طریقے سے پیرامیٹرز کو ایڈجسٹ: موجودہ حکمت عملی میں پیرامیٹرز کی ایک مقررہ ترتیب استعمال کی جاتی ہے۔ ایک اعلی درجے کی اصلاح یہ ہے کہ پیرامیٹرز کو مارکیٹ کی حالت ((رجحان ، اتار چڑھاؤ ، رینج) پر مبنی خود کار طریقے سے ایڈجسٹ کیا جاسکے۔ مثال کے طور پر ، اعلی اتار چڑھاؤ کے دوران اے ٹی آر ضرب کو خود بخود بڑھایا جاسکتا ہے ، یا مختلف مارکیٹ کے حالات میں منتقل اوسط کی اقسام کو تبدیل کیا جاسکتا ہے۔
مشین لرننگ ماڈل کو ضم کرنا: مشین لرننگ پرت کو متعارف کرانے کے ذریعہ یہ پیش گوئی کی جاسکتی ہے کہ موجودہ مارکیٹ کے حالات میں کون سی قسم کی اوسط اوسط بہترین کارکردگی کا مظاہرہ کرسکتی ہے ، تاکہ خود بخود اوسط اوسط کا بہترین مجموعہ منتخب کیا جاسکے۔ یہ تاریخی اعداد و شمار میں مختلف اشارے کی نسبتا کارکردگی کا تجزیہ کرکے کیا جاسکتا ہے۔
بہتری کے رجحانات کی شناخت: موجودہ 15 منٹ کے رجحان فلٹر کے علاوہ ، رجحانات کی طاقت اور تسلسل کو زیادہ درست طریقے سے طے کرنے کے لئے زیادہ پیچیدہ رجحانات کی شناخت کے الگورتھم جیسے ہرسٹ انڈیکس یا ڈائریکشنل موشن انڈیکس ((DMI) کو بھی شامل کیا جاسکتا ہے۔
انخلا کی حکمت عملی میں اضافہ: موجودہ باہر نکلنے کی حکمت عملی کو مارکیٹ کی ساخت پر مبنی باہر نکلنے کے سگنل کو شامل کرکے مزید بہتر بنایا جاسکتا ہے ، جیسے ٹرینڈ لائن ٹوٹنا ، اہم حمایت / مزاحمت کی سطح یا اتار چڑھاؤ میں تیزی سے تبدیلی۔ یہ رجحان کے اختتام سے پہلے منافع کو لاک کرنے میں مدد مل سکتی ہے۔
خطرے سے متعلق پوزیشن کا سائز: موجودہ اتار چڑھاؤ اور اکاؤنٹ فنڈز کی بنیاد پر متحرک پوزیشن کی پیمائش کو لاگو کریں ، بجائے اس کے کہ وہ ایک مقررہ تعداد میں تجارت کا استعمال کریں۔ مثال کے طور پر ، اعلی اتار چڑھاؤ کے دوران پوزیشنوں کو کم کریں اور کم اتار چڑھاؤ کے دوران پوزیشنوں میں اعتدال پسند اضافہ کریں ، تاکہ منافع کے تناسب کو بہتر بنایا جاسکے۔
متعلقہ مارکیٹ فلٹرنگ: متعلقہ منڈیوں کی نگرانی کرکے سگنل کے معیار کو بڑھانا (جیسے اسٹاک انڈیکس ٹریڈنگ میں VIX پر توجہ دینا) یا کراس اثاثہ وابستگی۔ جب متعلقہ منڈیوں میں یکساں سمت کی نقل و حرکت ظاہر ہوتی ہے تو ، تجارت کی ساکھ میں اضافہ کیا جاسکتا ہے۔
ایک کثیر جہتی موافقت پذیر منتقل اوسط میٹرکس اور اے ٹی آر متحرک عین مطابق ٹریڈنگ حکمت عملی ایک جامع اور اعلی درجے کی مقداری ٹریڈنگ کا طریقہ کار پیش کرتی ہے۔ متعدد منتقل اوسط اقسام کے فوائد کو سخت اے ٹی آر بنیادی خطرے کے کنٹرول کے ساتھ جوڑ کر ، یہ حکمت عملی مارکیٹ کے مختلف حالات کے مطابق ڈھالنے کے قابل ہے جبکہ اچھی طرح سے خطرے کا انتظام برقرار رکھتی ہے۔ اس کی کثیر سطحی سگنل فلٹرنگ میکانزم ، عین مطابق اندراج کی شرائط اور مکمل باہر نکلنے کی منطق نے مل کر ایک طاقتور نظام تشکیل دیا ہے جو اعلی امکانات والے تجارتی مواقع کی نشاندہی کرسکتا ہے۔
اس حکمت عملی کی حقیقی قدر اس کی لچک اور موافقت میں ہے ، جو تاجر کو مخصوص مارکیٹ اور ذاتی خطرے کی ترجیحات کے مطابق اپنی مرضی کے مطابق کرنے کی اجازت دیتی ہے۔ اس حکمت عملی کی کارکردگی کو مزید بہتر بنانے کی صلاحیت موجود ہے ، خاص طور پر تجویز کردہ اصلاح کی سمت ، خاص طور پر خود بخود پیرامیٹرز کی ایڈجسٹمنٹ اور مشین لرننگ انضمام کے ذریعہ۔
یہ حکمت عملی ایک مضبوط فریم ورک فراہم کرتی ہے ، جس میں تکنیکی صحت سے متعلق اور خطرے سے متعلق کنٹرول دونوں کی ضرورت ہوتی ہے۔ یہ ضروری ہے کہ تاجر اس حکمت عملی کی کارکردگی کو اپنے ہدف کی مارکیٹ میں مکمل طور پر جانچ پڑتال اور تجارت کی مشابہت کے ذریعے اس کی تصدیق کرے اور مخصوص تجارتی ماحول میں ضروری ایڈجسٹمنٹ کرے۔
/*backtest
start: 2024-04-16 00:00:00
end: 2025-04-15 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("Dskyz (DAFE) MAtrix with ATR-Powered Precision",
overlay=true,
default_qty_type=strategy.fixed,
initial_capital=1000000,
commission_value=0,
slippage=1,
pyramiding=10)
// ==================================================================
// USER-DEFINED FUNCTIONS
// ==================================================================
// Hull Moving Average (HMA)
hma(src, len) =>
halfLen = math.round(len * 0.5)
sqrtLen = math.round(math.sqrt(len))
wmaf = ta.wma(src, halfLen)
wmaFull = ta.wma(src, len)
ta.wma(2 * wmaf - wmaFull, sqrtLen)
// Triple Exponential Moving Average (TEMA)
tema(src, len) =>
ema1 = ta.ema(src, len)
ema2 = ta.ema(ema1, len)
ema3 = ta.ema(ema2, len)
3 * (ema1 - ema2) + ema3
// Double Exponential Moving Average (DEMA)
dema(src, len) =>
ema1 = ta.ema(src, len)
ema2 = ta.ema(ema1, len)
2 * ema1 - ema2
// VWMA - Volume Weighted Moving Average
vwma(src, len) =>
ta.vwma(src, len)
// ZLEMA - Zero Lag EMA
zlema(src, len) =>
lag = math.floor((len - 1) / 2)
ta.ema(2 * src - src[lag], len)
// ALMA - Arnaud Legoux Moving Average
alma(src, len, offset=0.85, sigma=6) =>
ta.alma(src, len, offset, sigma)
// Custom Kaufman Adaptive Moving Average (KAMA)
kama(src, len) =>
fastSC = 2.0 / (2 + 1)
slowSC = 2.0 / (30 + 1)
change = math.abs(src - src[len])
volatility = 0.0
for i = 0 to len - 1
volatility += math.abs(src - src[i])
er = volatility != 0 ? change / volatility : 0.0
sc = math.pow(er * (fastSC - slowSC) + slowSC, 2)
var float kama_val = na
kama_val := na(kama_val) ? ta.sma(src, len) : kama_val + sc * (src - kama_val)
kama_val
// ==================================================================
// INPUTS
// ==================================================================
fastLength = input.int(9, "[MA] Fast MA Length", minval=1)
slowLength = input.int(19, "[MA] Slow MA Length", minval=1)
fastMAType = input.string("SMA", "Fast MA Type", options=["SMA", "EMA", "SMMA", "HMA", "TEMA", "WMA", "VWMA", "ZLEMA", "ALMA", "KAMA", "DEMA"])
slowMAType = input.string("SMA", "Slow MA Type", options=["SMA", "EMA", "SMMA", "HMA", "TEMA", "WMA", "VWMA", "ZLEMA", "ALMA", "KAMA", "DEMA"])
atrPeriod = input.int(14, "ATR Period", minval=1)
atrMultiplier = input.float(1.5, "ATR Multiplier for Filter", minval=0.1, step=0.1)
useTrendFilter = input.bool(true, "[Filter Settings] Use 15m Trend Filter")
minVolume = input.int(10, "Minimum Volume", minval=1)
volatilityThreshold = input.float(1.0, "Volatility Threshold (%)", minval=0.1, step=0.1) / 100
tradingStartHour = input.int(9, "Trading Start Hour (24h)", minval=0, maxval=23)
tradingEndHour = input.int(16, "Trading End Hour (24h)", minval=0, maxval=23)
trailOffset = input.float(0.5, "[Exit Settings] Trailing Stop Offset ATR Multiplier", minval=0.01, step=0.01)
profitTargetATRMult = input.float(1.2, "Profit Target ATR Multiplier", minval=0.1, step=0.1)
fixedStopMultiplier = input.float(1.3, "Fixed Stop Multiplier", minval=0.5, step=0.1)
fixedQuantity = input.int(2, "Trade Quantity", minval=1)
resetDashboard = input.bool(false, "Reset Dashboard Stats")
// ==================================================================
// CALCULATIONS
// ==================================================================
volumeOk = volume >= minVolume
currentHour = hour(time)
timeWindow = currentHour >= tradingStartHour and currentHour <= tradingEndHour
volumeSpike = volume > 1.2 * ta.sma(volume, 10)
// ATR Calculation
atr = ta.atr(atrPeriod)
volatility = nz(atr / close, 0)
volatilityOk = volatility <= volatilityThreshold
// ==================================================================
// MOVING AVERAGES CALCULATIONS
// ==================================================================
var float fastMA = na
var float slowMA = na
// Fast MA Logic
if fastMAType == "SMA"
fastMA := ta.sma(close, fastLength)
else if fastMAType == "EMA"
fastMA := ta.ema(close, fastLength)
else if fastMAType == "SMMA"
fastMA := ta.rma(close, fastLength)
else if fastMAType == "HMA"
fastMA := hma(close, fastLength)
else if fastMAType == "TEMA"
fastMA := tema(close, fastLength)
else if fastMAType == "WMA"
fastMA := ta.wma(close, fastLength)
else if fastMAType == "VWMA"
fastMA := vwma(close, fastLength)
else if fastMAType == "ZLEMA"
fastMA := zlema(close, fastLength)
else if fastMAType == "ALMA"
fastMA := alma(close, fastLength)
else if fastMAType == "KAMA"
fastMA := kama(close, fastLength)
else if fastMAType == "DEMA"
fastMA := dema(close, fastLength)
// Slow MA Logic
if slowMAType == "SMA"
slowMA := ta.sma(close, slowLength)
else if slowMAType == "EMA"
slowMA := ta.ema(close, slowLength)
else if slowMAType == "SMMA"
slowMA := ta.rma(close, slowLength)
else if slowMAType == "HMA"
slowMA := hma(close, slowLength)
else if slowMAType == "TEMA"
slowMA := tema(close, slowLength)
else if slowMAType == "WMA"
slowMA := ta.wma(close, slowLength)
else if slowMAType == "VWMA"
slowMA := vwma(close, slowLength)
else if slowMAType == "ZLEMA"
slowMA := zlema(close, slowLength)
else if slowMAType == "ALMA"
slowMA := alma(close, slowLength)
else if slowMAType == "KAMA"
slowMA := kama(close, slowLength)
else if slowMAType == "DEMA"
slowMA := dema(close, slowLength)
// ==================================================================
// TREND FILTER & SIGNAL LOGIC
// ==================================================================
// Retrieve 15-minute MAs for trend filtering
[fastMA15m, slowMA15m] = request.security(syminfo.tickerid, "15", [ta.sma(close, fastLength), ta.sma(close, slowLength)])
trend15m = fastMA15m > slowMA15m ? 1 : fastMA15m < slowMA15m ? -1 : 0
trendLongOk = not useTrendFilter or trend15m >= 0
trendShortOk= not useTrendFilter or trend15m <= 0
// ATR-based Price Filter
atrFilterLong = close > slowMA + atr * atrMultiplier
atrFilterShort = close < slowMA - atr * atrMultiplier
// Signal Logic: MA alignment + filters
maAbove = close > fastMA and fastMA > slowMA
maBelow = close < fastMA and fastMA < slowMA
longCondition = maAbove and trendLongOk and atrFilterLong and volumeOk and volumeSpike and timeWindow and volatilityOk
shortCondition= maBelow and trendShortOk and atrFilterShort and volumeOk and volumeSpike and timeWindow and volatilityOk
// ==================================================================
// ENTRY LOGIC
// ==================================================================
if strategy.position_size == 0 and longCondition
strategy.entry("Long", strategy.long, qty=fixedQuantity)
if strategy.position_size == 0 and shortCondition
strategy.entry("Short", strategy.short, qty=fixedQuantity)
// ==================================================================
// EXIT LOGIC
// ==================================================================
if strategy.position_size > 0
strategy.exit("Long Exit", "Long",
stop = strategy.position_avg_price - atr * fixedStopMultiplier,
limit = strategy.position_avg_price + atr * profitTargetATRMult,
trail_offset = atr * trailOffset,
trail_points = atr * trailOffset)
if strategy.position_size < 0
strategy.exit("Short Exit", "Short",
stop = strategy.position_avg_price + atr * fixedStopMultiplier,
limit = strategy.position_avg_price - atr * profitTargetATRMult,
trail_offset = atr * trailOffset,
trail_points = atr * trailOffset)
// ==================================================================
// VISUALS: PLOT MAs
// ==================================================================
plot(fastMA, color=color.blue, linewidth=2, title="Fast MA")
plot(slowMA, color=color.red, linewidth=2, title="Slow MA")
// ==================================================================
// METRICS CALCULATIONS (for Dashboard)
// ==================================================================
// Additional metrics:
atrPct = close != 0 ? (atr / close) * 100 : na // ATR as percentage of Close
maGapPct = (slowMA != 0) ? (math.abs(fastMA - slowMA) / slowMA) * 100 : na // % difference between MAs
// Open PnL Calculation
currentPnL = strategy.position_size != 0 ? (close - strategy.position_avg_price) * strategy.position_size : 0
// Persistent variable for highest equity (for drawdown calculation)
var float highestEquity = strategy.equity
highestEquity := math.max(highestEquity, strategy.equity)
totalDrawdown = strategy.equity - highestEquity
// Reset dashboard metrics if reset toggle is on.
if resetDashboard
highestEquity := strategy.equity
// ==================================================================
// DASHBOARD: WATERMARK LOGO (Bottom-Right)
// ==================================================================
var table watermarkTable = table.new(position.bottom_right, 1, 1, bgcolor=color.rgb(0, 0, 0, 80), border_color=color.rgb(0, 50, 137), border_width=1)
if barstate.islast
table.cell(watermarkTable, 0, 0, "⚡ Dskyz - DAFE Trading Systems", text_color=color.rgb(159, 127, 255, 80), text_size=size.large)
// ==================================================================
// DASHBOARD: METRICS TABLE (Bottom-Left)
// ==================================================================
var table dashboard = table.new(position.middle_right, 2, 12, bgcolor=color.new(#000000, 29), border_color=color.rgb(80, 80, 80), border_width=1)
if barstate.islast
// Row 0 – Dashboard Title (duplicated in both columns to simulate spanning)
table.cell(dashboard, 0, 0, "⚡(DAFE) Trading Systems", text_color=color.rgb(135, 135, 135), text_size=size.small)
// Row 1 – Position
table.cell(dashboard, 0, 1, "Position", text_color=color.gray)
positionText = strategy.position_size > 0 ? "Long" : strategy.position_size < 0 ? "Short" : "Flat"
table.cell(dashboard, 1, 1, positionText, text_color=strategy.position_size > 0 ? color.green : strategy.position_size < 0 ? color.red : color.blue)
// Row 2 – Current PnL
table.cell(dashboard, 0, 2, "Current P/L", text_color=color.gray)
table.cell(dashboard, 1, 2, str.tostring(currentPnL, "#.##"), text_color=(currentPnL > 0 ? color.green : currentPnL < 0 ? color.red : color.gray))
// Row 3 – Equity
table.cell(dashboard, 0, 3, "Equity", text_color=color.gray)
table.cell(dashboard, 1, 3, str.tostring(strategy.equity, "#.##"), text_color=color.white)
// Row 4 – Closed Trades
table.cell(dashboard, 0, 4, "Closed Trades", text_color=color.gray)
table.cell(dashboard, 1, 4, str.tostring(strategy.closedtrades), text_color=color.white)
// Row 5 – Title Step
table.cell(dashboard, 0, 5, "Metrics", text_color=color.rgb(76, 122, 23))
// Row 6 – Fast MA
table.cell(dashboard, 0, 6, "Fast MA", text_color=color.gray)
table.cell(dashboard, 1, 6, str.tostring(fastMA, "#.##"), text_color=color.white)
// Row 7 – Slow MA
table.cell(dashboard, 0, 7, "Slow MA", text_color=color.gray)
table.cell(dashboard, 1, 7, str.tostring(slowMA, "#.##"), text_color=color.white)
// Row 8 – ATR (Raw)
table.cell(dashboard, 0, 8, "ATR", text_color=color.gray)
table.cell(dashboard, 1, 8, str.tostring(atr, "#.##"), text_color=color.white)
// Row 9 – ATR (%)
table.cell(dashboard, 0, 9, "ATR (%)", text_color=color.gray)
table.cell(dashboard, 1, 9, str.tostring(atrPct, "#.##") + "%", text_color=color.white)
// Row 10 – MA Gap (%)
table.cell(dashboard, 0, 10, "MA Gap (%)", text_color=color.gray)
table.cell(dashboard, 1, 10, na(maGapPct) ? "N/A" : str.tostring(maGapPct, "#.##") + "%", text_color=color.white)
// Row 11 – Volatility (%)
table.cell(dashboard, 0, 11, "Volatility (%)", text_color=color.gray)
table.cell(dashboard, 1, 11, str.tostring(volatility * 100, "#.##") + "%", text_color=color.white)