نیورل نیٹ ورک فرق قیمت کے اتار چڑھاو کی اصلاح مقداری تجارتی حکمت عملی

ATR ANN TANH OHLC4 volatility TIMEFRAME NEURAL NETWORK MACHINE LEARNING
تخلیق کی تاریخ: 2025-06-23 11:39:44 آخر میں ترمیم کریں: 2025-06-23 11:39:44
کاپی: 5 کلکس کی تعداد: 306
2
پر توجہ دیں
319
پیروکار

نیورل نیٹ ورک فرق قیمت کے اتار چڑھاو کی اصلاح مقداری تجارتی حکمت عملی نیورل نیٹ ورک فرق قیمت کے اتار چڑھاو کی اصلاح مقداری تجارتی حکمت عملی

جائزہ

نیورل نیٹ ورک فرق قیمت میں اتار چڑھاو کو بہتر بنانے کی مقدار میں تجارت کی حکمت عملی ایک مصنوعی نیورل نیٹ ورک پر مبنی ہائی فریکوئنسی ٹریڈنگ سسٹم ہے جو 1 سیکنڈ کی سطح کے لئے ٹائم فریم کو بہتر بنانے کے لئے ڈیزائن کیا گیا ہے۔ یہ حکمت عملی نیورل نیٹ ورک کا استعمال کرتے ہوئے مختصر مدت کی قیمت میں تبدیلی کے اختلافات کا تجزیہ کرتی ہے ، فارورڈ ٹرانسمیشن الگورتھم کے ذریعہ قیمت کی سمت کی پیش گوئی کرتی ہے ، اور اتار چڑھاؤ کی شرح فلٹرنگ اور سیشن ٹائم کنٹرول کے ساتھ مل کر ٹریڈنگ کے فیصلوں کو بہتر بناتی ہے۔ حکمت عملی کا مرکز قیمتوں میں چھوٹے تبدیلی کے نمونوں کو پکڑنے میں ہے ، جس سے اعلی تعدد ماحول میں اعلی منافع بخش عنصر 3.754 کی مستحکم تجارتی کارکردگی کو حاصل کیا جاسکتا ہے۔

حکمت عملی کا اصول

اس حکمت عملی میں قیمتوں میں فرق کے اعداد و شمار کو آگے کی طرف پھیلانے والے الگورتھم کے ذریعہ تین پرتوں والے نیورل نیٹ ورک کے فن تعمیر کا استعمال کیا گیا ہے۔

  1. ان پٹ پرت ((L0): وصول موجودہ OHLC4 ((اوپر اور نیچے حاصل اوسط قیمت) اور ریفرنس ٹائم فریم ((پہلے سے طے شدہ 15 سیکنڈ) تاریخی OHLC4 کے فی صد فرق کے طور پر ایک واحد ان پٹ نیورون.

  2. پہلی پوشیدہ پرت (L1): 5 نیورونز پر مشتمل ہے ، جو ان پٹ ڈیٹا کو غیر لکیری تبدیلی کے ل activation ایکٹیویشن فنکشن کے طور پر ڈبل وکر کاٹ (((tanh) کا استعمال کرتا ہے۔ ہر نیورون میں قیمت کے فرق کو پکڑنے کے لئے ایک مخصوص ماڈل کے لئے پہلے سے تربیت یافتہ وزن ہوتا ہے۔

  3. دوسری پوشیدہ پرت (L2): 33 نیورونز پر مشتمل ہے ، جس میں تانھ ایکٹیویشن فنکشن بھی استعمال کیا جاتا ہے ، جو پہلے پوشیدہ پرت کی پیداوار کو مزید پیچیدہ وزن والے میٹرکس کے ذریعہ مزید کارروائی کرتا ہے۔

  4. آؤٹ پٹ پرت (L3): ایک نیورون ایک حتمی پیش گوئی سگنل کی پیداوار کرتا ہے ، جس کی قدر کو سگنل کی سمت میں ترمیم کرنے کے لئے الٹ دیا جاتا ہے۔

ٹرانزیکشن منطق نیورل نیٹ ورک آؤٹ پٹ ویلیو ((L3_0) کے گرد گھومتی ہے:

  • جب L3_0 ان پٹ کی حد سے زیادہ ہے ((ڈیفالٹ 0.003) ، ایک سے زیادہ سگنل کو متحرک کریں
  • جب L3_0 منفی انٹری کی حد سے کم ہو ((-0.003) ، خالی جگہ کا اشارہ کریں
  • جب L3_0 باہر نکلنے کی حد سے کم ہے (ڈیفالٹ 0.001) ، مٹانے والے کثیر سر
  • جب L3_0 منفی باہر نکلنے کی حد سے زیادہ ہے ((-0.001) ، خالی پوزیشن

اس حکمت عملی میں تین فلٹرز بھی شامل ہیں:

  • ٹھنڈک دورانیہ فلٹر: ٹرانزیکشن کے عمل کے بعد ، سسٹم کو مخصوص ٹھنڈک کی مدت کا انتظار کرنے پر مجبور کیا گیا ((ڈیفالٹ 60 سیکنڈ)
  • اتار چڑھاؤ کی شرح فلٹر: اے ٹی آر (Average True Range) اشارے کے ذریعہ ، صرف اس وقت تجارت کریں جب مارکیٹ میں اتار چڑھاؤ کم سے کم حد سے زیادہ ہو (ڈیفالٹ 0.02)
  • ٹرانزیکشن ٹائم فیلٹر: صرف مخصوص مارکیٹ کے اوقات پر تجارت کو منتخب طور پر محدود کریں (پہلے سے طے شدہ 9: 00 سے 16: 00)

اسٹریٹجک فوائد

  1. اعلی صحت سے متعلق پیش گوئی کی صلاحیت: نیورل نیٹ ورک کی کثیر پرتوں کی ساخت قیمتوں کی نقل و حرکت میں پیچیدہ غیر لکیری تعلقات کو پکڑنے کے قابل ہے ، جو روایتی تکنیکی اشارے کے لئے مشکل ہے۔ خاص طور پر اعلی تعدد ماحول میں ، یہ ڈھانچہ قلیل مدتی قیمتوں کے نمونوں کو پہچان سکتا ہے ، اور زیادہ درست اندراج اور خارجی سگنل فراہم کرسکتا ہے۔

  2. بہترین رسک ٹو ریٹ: حکمت عملی نے 3.754 کا منافع بخش عنصر حاصل کیا ، جس کا مطلب ہے کہ منافع بخش تجارت کی کل رقم 3.754 گنا نقصان دہ تجارت کی کل رقم ہے ، جو ایک مقدار کی حکمت عملی میں بہت عمدہ کارکردگی ہے۔

  3. لچکدار پیرامیٹرز کی اصلاح کی جگہ: حکمت عملی میں متعدد ایڈجسٹ پیرامیٹرز پیش کیے گئے ہیں جن میں داخلہ / باہر نکلنے کی حد ، ٹھنڈک کی مدت ، حوالہ وقت کے فریم ورک اور کم سے کم اتار چڑھاؤ کی ضروریات شامل ہیں ، تاکہ تاجر مختلف مارکیٹ کے حالات اور تجارت کی اقسام کے مطابق اصلاح کرسکیں۔

  4. ملٹی فلٹرنگ میکانزمٹھنڈک کی مدت، اتار چڑھاؤ اور ٹریڈنگ کے اوقات کے لئے ٹرپل فلٹرنگ کو ضم کرنے کے ذریعہ ، حکمت عملی نے غیر ضروری تجارت اور جعلی سگنل کو مؤثر طریقے سے کم کیا ، جس سے تجارت کے معیار میں اضافہ ہوا۔

  5. ہائی فریکوئینسی ٹریڈنگ ماحول کو اپنانا: 1 سیکنڈ کی سطح کے ٹائم فریم کے لئے خصوصی طور پر بہتر بنایا گیا ہے ، جو مختصر مدت کی قیمتوں میں اتار چڑھاو سے پیدا ہونے والے منافع کے مواقع کو پکڑنے کے لئے اعلی تعدد کی تجارت کی خصوصیات کا بھرپور استعمال کرسکتا ہے۔

  6. کم تاخیر سے عمل درآمد: حکمت عملی کے کوڈ کی ساخت واضح اور موثر ہے ، نیورل نیٹ ورک کا حصہ براہ راست حساب کتاب کے لئے پری ٹریننگ ویٹ کا استعمال کرتا ہے ، جس میں ریئل ٹائم ٹریننگ کی ضرورت نہیں ہوتی ہے ، جس سے ہائی فریکوئنسی ماحول میں کم تاخیر کی کارکردگی کو یقینی بنایا جاتا ہے۔

اسٹریٹجک رسک

  1. ملاپ کا خطرہ: نیورل نیٹ ورک کے ماڈل میں بہت سارے پہلے سے طے شدہ وزنی پیرامیٹرز شامل ہیں ، جس میں تاریخی اعداد و شمار کے زیادہ فٹ ہونے کا خطرہ ہے۔ اس سے حکمت عملی کا عملی تجارت میں ناقص کارکردگی کا مظاہرہ ہوسکتا ہے ، خاص طور پر جب مارکیٹ کے حالات میں نمایاں تبدیلی آتی ہے۔ اس سے نمٹنے کے طریقوں میں شامل ہیں: نیورل نیٹ ورک کو باقاعدگی سے دوبارہ تربیت دینا ، طویل عرصے سے اعداد و شمار کے ساتھ جانچ پڑتال کرنا ، اور ٹھوس خطرے کے انتظام کے اقدامات پر عمل درآمد کرنا۔

  2. پیرامیٹر کی حساسیت: حکمت عملی کی کارکردگی متعدد پیرامیٹرز کی ترتیبات پر بہت زیادہ انحصار کرتی ہے ، جیسے داخلے / باہر نکلنے کی حد ، ٹھنڈک کی مدت وغیرہ۔ پیرامیٹرز میں معمولی تبدیلیاں حکمت عملی کی کارکردگی میں بڑے پیمانے پر اتار چڑھاؤ کا سبب بن سکتی ہیں۔ پیرامیٹر اسکیننگ اور قدم بہ قدم جانچ کے ذریعہ مستحکم پیرامیٹرز کا مجموعہ تلاش کرنے اور ضرورت سے زیادہ اصلاح سے بچنے کی سفارش کی جاتی ہے۔

  3. ہائی فریکوئینسی ٹریڈنگ کے خطرات: 1 سیکنڈ کی سطح کے ٹائم فریم پر ، ٹرانزیکشن لاگت (جیسے پوائنٹ ڈیفینس اور سلائڈ پوائنٹ) حکمت عملی کی منافع بخش صلاحیت کو نمایاں طور پر متاثر کرسکتی ہے۔ حقیقی تجارت سے پہلے ان اخراجات کو پوری طرح سے مدنظر رکھا جانا چاہئے ، اور ریٹرننگ میں حقیقی تجارتی لاگت کے حالات کی تقلید کی جانی چاہئے۔

  4. تکنیکی چیلنجزہائی فریکوئینسی حکمت عملی کے لئے ٹریڈنگ سسٹم کی انتہائی کم تاخیر اور اعلی وشوسنییتا کی ضرورت ہوتی ہے۔ کسی بھی نیٹ ورک کی تاخیر ، ڈیٹا کی تاخیر یا عملدرآمد میں تاخیر سے حکمت عملی ناکام ہوسکتی ہے۔ پیشہ ورانہ سطح کے تجارتی انفراسٹرکچر اور کم تاخیر والے ڈیٹا کے ذرائع کا استعمال یقینی بنائیں۔

  5. مارکیٹ میں اتار چڑھاؤ کا خطرہ: مارکیٹ کے انتہائی حالات میں (جیسے اچانک خبریں یا لیکویڈیٹی کی کمی) ، نیورل نیٹ ورک کے ماڈل قیمتوں کی نقل و حرکت کی درست پیش گوئی نہیں کرسکتے ہیں ، جس سے بڑے پیمانے پر نقصان ہوتا ہے۔ اسٹاپ نقصانات اور زیادہ سے زیادہ یومیہ نقصان کی حد مقرر کرنے اور انتہائی اتار چڑھاؤ کے دوران حکمت عملی کو روکنے کی سفارش کی جاتی ہے۔

حکمت عملی کی اصلاح کی سمت

  1. نیورل نیٹ ورکس کی تعمیر کو بہتر بنانا:

    • ماڈل کی پیشن گوئی کو بڑھانے کے لئے زیادہ سے زیادہ ان پٹ کی خصوصیات ، جیسے تجارت کا حجم ، اتار چڑھاؤ کے اشارے اور قیمت کی نقل و حرکت کے اشارے متعارف کرانے پر غور کریں
    • مختلف پوشیدہ پرتوں کی ساخت اور نیورونوں کی تعداد کو آزمائیں تاکہ پیچیدگی اور عمومی صلاحیت کے درمیان بہترین توازن تلاش کیا جاسکے
    • دوسرے ایکٹیویشن فنکشنز (جیسے ReLU یا Leaky ReLU) کے اثرات کو دریافت کریں ، جو کچھ نیورل نیٹ ورک ایپلی کیشنز میں tanh سے بہتر کارکردگی کا مظاہرہ کرتے ہیں
  2. متحرک پیرامیٹرز ایڈجسٹمنٹ میکانزم:

    • مارکیٹ کی حالت پر مبنی انٹری/آؤٹ ٹریولز کے لیے انٹرا/آؤٹ ٹریولز کے لیے انٹری/آؤٹ ٹریولز کے لیے انٹری/آؤٹ ٹریولز کے لیے انٹری/آؤٹ ٹریولز کے لیے انٹری/آؤٹ ٹریولز کے لیے انٹری/آؤٹ ٹریولز کے لیے انٹری/آؤٹ ٹریولز کے لیے انٹری/آؤٹ ٹریولز کے لیے انٹری/آؤٹ ٹریولز کے لیے انٹری/آؤٹ ٹریولز کے لیے انٹری/آؤٹ ٹریولز
    • اتار چڑھاؤ کے احساس کے لئے ٹھنڈک مدت ایڈجسٹمنٹ الگورتھم تیار کریں تاکہ حکمت عملی مارکیٹ کے مختلف مراحل میں بہترین تجارتی تعدد کو برقرار رکھ سکے
  3. انٹیگریٹڈ پیشن گوئی کا فریم ورک:

    • ایک سے زیادہ ٹائم فریموں کے ساتھ نیورل نیٹ ورک ماڈل کو یکجا کر کے ایک جامع پیش گوئی سگنل بنانا
    • مشین لرننگ میٹا ماڈل متعارف کروانا ، مختلف پیشن گوئی کرنے والے ماڈلز کو متحرک طور پر ایڈجسٹ کرنا
    • یہ طریقہ کار ایک ماڈل کی حدود کو کم کرنے اور پیشن گوئی کی استحکام کو بڑھانے میں مدد کرتا ہے.
  4. خطرے کے انتظام میں بہتری:

    • متحرک پوزیشن مینجمنٹ سسٹم تیار کریں جو ماڈل کی ساکھ اور مارکیٹ کے حالات کے مطابق تجارت کے پیمانے کو ایڈجسٹ کرے
    • مشین لرننگ پر مبنی اسٹاپ نقصان کی حکمت عملی متعارف کرانے کے لئے ، ہر تجارت کے لئے خطرہ اور منافع کے تناسب کو بہتر بنانا
    • دن کے اوقات کی اصلاح کے لئے حکمت عملی کو دن کے بہترین اوقات میں پہچاننا
  5. ریئل ٹائم سیکھنے اور موافقت:

    • آن لائن سیکھنے کے طریقہ کار کو ڈیزائن کرنا تاکہ نیورل نیٹ ورکس کو نئے اعداد و شمار سے سیکھنے اور مارکیٹ میں تبدیلیوں کے مطابق ڈھالنے کی اجازت دی جاسکے
    • کارکردگی کی نگرانی پر مبنی خودکار ری ٹریننگ ٹرگرز کو لاگو کرنا ، حکمت عملی کی کارکردگی کم ہونے پر ماڈل کو فعال طور پر اپ ڈیٹ کرنا
    • اس طرح کی حکمت عملی کی زندگی اور استحکام میں نمایاں اضافہ ہوسکتا ہے

خلاصہ کریں۔

نیورل نیٹ ورک کی قیمتوں میں اتار چڑھاو کو بہتر بنانے کے لئے کوانٹم ٹریڈنگ کی حکمت عملی جدید کوانٹم ٹریڈنگ کے جدید طریقوں کی نمائندگی کرتی ہے ، جس میں مصنوعی نیورل نیٹ ورک ٹکنالوجی کو اعلی تعدد ٹریڈنگ کے شعبے میں کامیابی کے ساتھ لاگو کیا گیا ہے۔ اس حکمت عملی کو اچھی طرح سے ڈیزائن کردہ کثیر پرتوں والے نیورل نیٹ ورک ڈھانچے کے ذریعہ مختصر مدت کی قیمتوں میں تبدیلی میں ٹھیک ٹھیک نمونوں کو پکڑنے اور متعدد فلٹرنگ میکانزم کے ذریعہ تجارت کے معیار کو بہتر بنانے کے قابل بنایا گیا ہے۔

3.754 کا منافع بخش عنصر اس حکمت عملی کو ٹیسٹ ماحول میں عمدہ کارکردگی کا مظاہرہ کرتا ہے ، لیکن عملی طور پر لاگو ہونے پر اب بھی ضرورت سے زیادہ فٹ ہونے ، پیرامیٹرز کی حساسیت اور ہائی فریکوئینسی ٹریڈنگ کے مخصوص خطرات کو محتاط طور پر مدنظر رکھنا ہوگا۔ نیورل نیٹ ورک کے ڈھانچے کو مستقل طور پر بہتر بنانے ، متحرک پیرامیٹرز کی ایڈجسٹمنٹ کو نافذ کرنے اور خطرے کے انتظام کو بڑھانے کے ذریعے ، اس حکمت عملی میں انتہائی مسابقتی مقداری ٹریڈنگ کے شعبے میں طویل مدتی مسابقت برقرار رکھنے کی صلاحیت ہے۔

حکمت عملی کی کلیدی کامیابی کا عنصر پیچیدہ نیورل نیٹ ورک ٹکنالوجی کو عملی ٹریڈنگ منطق کے ساتھ جوڑنا ہے ، جس میں مشین لرننگ کی پیش گوئی کی صلاحیتوں کا فائدہ اٹھایا گیا ہے اور عملی تجارت کی قابل عملیت کو مدنظر رکھا گیا ہے۔ تجربہ کار کوانٹم ٹریڈر کے لئے ، یہ ایک توسیع پذیر فریم ورک فراہم کرتا ہے ، جس کو مختلف مارکیٹوں اور ذاتی خطرے کی ترجیحات کے مطابق مزید تخصیص اور اصلاح کی جاسکتی ہے۔

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2024-06-23 00:00:00
end: 2025-06-21 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("ANN Strategy v2 (Optimized for 1s)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// === INPUTS ===
entryThreshold = input.float(0.003, title="Entry Threshold")
exitThreshold  = input.float(0.001, title="Exit Threshold")
cooldownBars   = input.int(60, title="Cooldown (bars)")  // 60 seconds cooldown
timeframe      = input.timeframe("1", title="Reference Timeframe")  // 1-minute diff reference
minVolatility  = input.float(0.02, title="Min ATR (Volatility Filter)")
useSession     = input.bool(true, title="Use Session Filter")

// === UTILITY FUNCTIONS ===
getDiff() =>
    prev = request.security(syminfo.tickerid, timeframe, ohlc4[1])
    now = ohlc4
    (now - prev) / prev

linear(v) => v
tanh(v) => (math.exp(v) - math.exp(-v)) / (math.exp(v) + math.exp(-v))

// === ANN FORWARD PROPAGATION ===
l0_0 = linear(getDiff())

l1 = array.new_float()
array.push(l1, tanh(l0_0 * 0.8446488687))
array.push(l1, tanh(l0_0 * -0.5674069006))
array.push(l1, tanh(l0_0 * 0.8676766445))
array.push(l1, tanh(l0_0 * 0.5200611473))
array.push(l1, tanh(l0_0 * -0.2215499554))

// === Layer 2 weights ===
w2 = array.from(    0.3341657935, -2.0060003664, 0.8606354375, 0.9184846912, -0.8531172267,    -0.0394076437, -0.4720374911, 0.2900968524, 1.0653326022, 0.3000188806,    -0.559307785, -0.9353655177, 1.2133832962, 0.1952686024, 0.8552068166,    -0.4293220754, 0.8484259409, -0.7154087313, 0.1102971055, 0.2279392724,    0.9111779155, 0.2801691115, 0.0039982713, -0.5648257117, 0.3281705155,    -0.2963954503, 0.4046532178, 0.2460580977, 0.6608675819, -0.8732022547,    0.8810811932, 0.6903706878, -0.5953059103, -0.3084040686, -0.4038498853,    -0.5687101164, 0.2736758588, -0.2217360382, 0.8742950972, 0.2997583987,    0.0708459913, 0.8221730616, -0.7213265567, -0.3810462836, 0.0503867753,    0.4880140595, 0.9466627196, 1.0163097961, -0.9500386514, -0.6341709382,    1.3402207103, 0.0013395288, 3.4813009133, -0.8636814677, 41.3171047132,    1.2388217292, -0.6520886912, 0.3508321737, 0.6640560714, 1.5936220597,    -0.1800525171, -0.2620989752, 0.056675277, -0.5045395315, 0.2732553554,    -0.7776331454, 0.1895231137, 0.5384918862, 0.093711904, -0.3725627758,    -0.3181583022, 0.2467979854, 0.4341718676, -0.7277619935, 0.1799381758,    -0.5558227731, 0.3666152536, 0.1538243225, -0.8915928174, -0.7659355684,    0.6111516061, -0.5459495224, -0.5724238425, -0.8553500765, -0.8696190472,    0.6843667454, 0.408652181, -0.8830470112, -0.8602324935, 0.1135462621,    -0.1569048216, -1.4643247888, 0.5557152813, 1.0482791924, 1.4523116833,    0.5207514017, -0.2734444192, -0.3328660936, -0.7941515963, -0.3536051491,    -0.4097807954, 0.3198619826, 0.461681627, -0.1135575498, 0.7103339851,    -0.8725014237, -1.0312091401, 0.2267643037, -0.6814258121, 0.7524828703,    -0.3986855003, 0.4962556631, -0.7330224516, 0.7355772164, 0.3180141739,    -1.083080442, 1.8752543187, 0.3623326265, -0.348145191, 0.1977935038,    -0.0291290625, 0.0612906199, 0.1219696687, -1.0273685429, 0.0872219768,    0.931791094, -0.313753684, -0.3028724837, 0.7387076712, 0.3806140391,    0.2630619402, -1.9827996702, -0.7741413496, 0.1262957444, 0.2248777886,    -0.2666322362, -1.124654664, 0.7288282621, -0.1384289204, 0.2395966188,    0.6611845175, 0.0466048937, -0.1980999993, 0.8152350927, 0.0032723211,    -0.3150344751, 0.1391754608, 0.5462816249, -0.7952302364, -0.7520712378,    -0.0576916066, 0.3678415302, 0.6802537378, 1.1437036331, -0.8637405666,    0.7016273068, 0.3978601709, 0.3157049654, -0.2528455662, -0.8614146703,    1.1741126834, -1.4046408959, 1.2914477803, 0.9904052964, -0.6980155826)


l2 = array.new_float()
for i = 0 to 32
    sum = 0.0
    for j = 0 to 4
        weight = array.get(w2, i * 5 + j)
        sum += weight * array.get(l1, j)
    array.push(l2, tanh(sum))

// === Output layer weights ===
weights_out = array.from(    -0.1366382003, 0.8161960822, -0.9458773183, 0.4692969576, 0.0126710629,    -0.0403001012, -0.0116244898, -0.4874816289, -0.6392241448, -0.410338398,    -0.1181027081, 0.1075562037, -0.5948728252, 0.5593677345, -0.3642935247,    -0.2867603217, 0.142250271, -0.0535698019, -0.034007685, -0.3594532426,    0.2551095195, 0.4214344983, 0.8941621336, 0.6283377368, -0.7138020667,    -0.1426738249, 0.172671223, 0.0714824385, -0.3268182144, -0.0078989755,    -0.2032828145, -0.0260631534, 0.4918037012)


sum_out = 0.0
for i = 0 to array.size(l2) - 1
    sum_out += array.get(weights_out, i) * array.get(l2, i)

// === Final ANN output (inverted for signal correction) ===
l3_0 = -tanh(sum_out)

// === TRADE FILTERS ===
volatility = ta.atr(14)
isVolOkay = volatility > minVolatility

isSession = (hour >= 9 and hour < 16)  // Adjust to your market hours
sessionOkay = useSession ? isSession : true

// === SIGNAL LOGIC ===
var string activeTrade = "none"
var int lastTradeBar = na
canTrade = (na(lastTradeBar) or (bar_index - lastTradeBar > cooldownBars)) and isVolOkay and sessionOkay

enterLong  = l3_0 > entryThreshold  and activeTrade != "long"  and canTrade
exitLong   = l3_0 < exitThreshold   and activeTrade == "long"
enterShort = l3_0 < -entryThreshold and activeTrade != "short" and canTrade
exitShort  = l3_0 > -exitThreshold  and activeTrade == "short"

// === STRATEGY EXECUTION ===
if barstate.isrealtime
    if enterLong
        strategy.entry("Long", strategy.short)
        activeTrade := "long"
        lastTradeBar := bar_index

    if exitLong
        strategy.close("Long")
        activeTrade := "none"

    if enterShort
        strategy.entry("Short", strategy.long)
        activeTrade := "short"
        lastTradeBar := bar_index

    if exitShort
        strategy.close("Short")
        activeTrade := "none"

// === PLOTTING ===
bgcolor(activeTrade == "long" ? color.new(color.green, 85) : activeTrade == "short" ? color.new(color.red, 85) : na)
plot(l3_0, title="ANN Output (Inverted)", color=color.aqua, linewidth=2)