التصنيف: Blog

Your blog category

  • مؤشر SONO PRO

    الميزات الرئيسية للمؤشر SONO PRO


    1. المتوسط المتحرك المُنعم (SMMA)

    • تنعيم الحركة السعرية: يوفر المتوسط المتحرك المُنعم (Smoothed Moving Average – SMMA) تنعيمًا أكبر لضوضاء السوق مقارنة بالمتوسطات الأخرى (مثل SMA)، مما يجعله أكثر استجابة لتحديد الاتجاه الأساسي.
    • نظام الاتجاه المتعدد: يستخدم المؤشر ثلاثة متوسطات SMMA (بأطوال 9 و 14 و 50) يمكن استخدامها معًا لتحديد قوة الاتجاه والتقاطعات التي قد تشير إلى تغيير في الزخم (مثل استراتيجيات كروس الماكد).

    2. مستويات الدعم والمقاومة متعددة الأطر (Mxwll MTF S/R)

    • تحديد المستويات الهامة: يرسم المؤشر مستويات الدعم والمقاومة الرئيسية بناءً على قيم القمم والقيعان التاريخية عبر أطر زمنية متعددة، بدءًا من 5 دقائق وصولًا إلى الإطار الأسبوعي.
    • رؤية شاملة للسوق: هذه الميزة ضرورية للتداول، حيث تساعدك على رؤية المستويات القوية التي يحترمها المتداولون على الأطر الزمنية الأكبر، والتي غالبًا ما تكون ذات أهمية أكبر من مستويات إطارك الزمني الحالي.
    • تخصيص كامل: يمكنك التحكم في إظهار وإخفاء كل إطار زمني وتغيير لونه ونمط خطه (منقط، متقطع، صلب) لترتيب المخطط البياني حسب تفضيلك.

    3. هيكل السوق (Market Structure HH-LL)

    • تحديد القمم والقيعان: يستخدم المؤشر منطق القمم المتأرجحة (Swing Highs) و القيعان المتأرجحة (Swing Lows) لتحديد نقاط التحول الهامة في السعر.
    • رسم هيكل السوق: يقوم المؤشر تلقائيًا بوضع علامات على القمم الأعلى (HH – Higher High) والقيعان الأدنى (LL – Lower Low) عندما يخترق السعر القمم أو القيعان السابقة.
    • فهم ديناميكيات الاتجاه: يساعد هذا التحليل في تأكيد الاتجاه (مثل سلسلة HH في الاتجاه الصاعد) وتحديد نقاط كسر الهيكل (BOS) التي قد تشير إلى انعكاس الاتجاه أو تصحيحه.

    الملخص والمنفعة للمتداول

    يُعتبر هذا المؤشر أداة متكاملة (All-in-One) حيث:

    1. SMMA: يوفر مؤشر اتجاه سريعًا ومنعمًا.
    2. MTF S/R: يوفر خرائط طريق لمناطق الارتداد والصد الرئيسية من منظور الأطر الزمنية الكبيرة.
    3. Market Structure: يوفر تأكيدًا بصريًا لهيكل الاتجاه على إطارك الزمني.

    باختصار، إنه مصمم لمساعدة المتداول على اتخاذ قرارات تداول أكثر استنارة من خلال دمج الاتجاه، والمستويات الرئيسية، وديناميكيات السعر.

    رابط المؤشر

    https://www.tradingview.com/script/wL6xyfSu-SONO-PRO

    المؤشر المقترح والمناسب لدمجه لتحديد الأهداف ومناطق الدخول Imbalanced-zone

    https://www.tradingview.com/script/7GES9cXf-Imbalanced-zone

  • key level + key time

    Key Level (المستوى المفتاحي)

    • هو مستوى سعري مهم على الرسم البياني (Chart) يمثل منطقة دعم أو مقاومة قوية.
    • عند هذه المستويات عادةً يحصل:
      • انعكاس (Reversal): السعر يرتد منها.
      • أو اختراق (Breakout): السعر يكسرها ويتجه بقوة.
    • أمثلة على الـ Key Levels:
      • القمم والقيعان التاريخية.
      • مستويات نفسية مثل (100، 1000، 10,000).
      • مناطق دعم ومقاومة تكررت أكثر من مرة.
      • مستويات الفيبوناتشي المهمة (38.2%، 50%، 61.8%).
    • المتداولون يعتبرونها نقاط قرار: إما دخول، خروج، أو انتظار تأكيد.

    ثانياً: Key Time (الوقت المفتاحي)

    • هو وقت معين في اليوم/الأسبوع/الشهر يُتوقع فيه زيادة السيولة والتذبذب.
    • مهم خصوصاً في التداول اليومي (Day Trading) أو السكالبينغ (Scalping).
    • أمثلة على الـ Key Times:
      • افتتاح الأسواق: مثل افتتاح لندن، نيويورك، طوكيو.
      • إغلاق الأسواق: حيث تزداد التصفية.
      • وقت الأخبار الاقتصادية: مثل قرارات الفائدة، NFP، التضخم.
      • بداية ونهاية الشمعة الزمنية الكبيرة (مثل إغلاق شمعة الأربع ساعات أو اليومي).

    العلاقة بين Key Level و Key Time في الاستراتيجيات

    • أقوى فرص التداول تحدث عندما يتلاقى Key Level + Key Time.
    • مثال:
      • السعر عند مستوى مقاومة يومية قوي (Key Level).
      • في نفس الوقت يأتي خبر الفائدة أو افتتاح نيويورك (Key Time).
      • النتيجة: احتمال حركة قوية جداً يمكن استغلالها.

    🔑 الخلاصة:

    • Key Level = مكان مهم (على السعر).
    • Key Time = وقت مهم (في الزمن).
    • الدمج بينهم يعطي استراتيجيات تداول أقوى، خصوصاً في مناطق الانعكاس أو الاختراق.

  • مؤشر DTC

    مؤشر DTC

    مقدمة

    مؤشر DTC v1.36 مبني بلغة Pine Script® على منصة TradingView ويهدف إلى الجمع بين المتوسطات المتحركة الأسية (EMA)، تحليل متعدد الأطر الزمنية (MTF)، وإدارة المخاطر (Risk Management). المؤشر يعطي إشارات دخول (BUY/SELL)، ويحدد مستويات الستوب لوس (SL) و أهداف جني الأرباح (TP1, TP2, TP3, TP4)، مع لوحة Dashboard لعرض الاتجاه على عدة فريمات.


    مكونات الكود الأساسية

    1️⃣ المتوسطات المتحركة (EMA)

    • يعتمد على 6 متوسطات متحركة: (30, 35, 40, 45, 50, 60).
    • يعتبر الاتجاه صاعد إذا كانت المتوسطات مرتبة من الأصغر للأكبر.
    • يعتبر الاتجاه هابط إذا كانت مرتبة بالعكس.

    ➡️ الميزة: تصفية الترند بدقة.
    ➡️ العيب: قد يتأخر في الدخول لأنه يحتاج اكتمال الترتيب.


    2️⃣ تحليل متعدد الأطر الزمنية (MTF Dashboard)

    • يستخدم الفريمات: 15M, 30M, 1H, 4H, Daily.
    • يحسب EMA20 و EMA50 ويظهر إن كان الفريم صاعد أو هابط.
    • يظهر النتائج في Dashboard أعلى الشارت.

    ➡️ الميزة: يساعد في توافق الاتجاهات.
    ➡️ العيب: يعتمد فقط على EMA20/50 بدون فلترة إضافية.


    3️⃣ إدارة المخاطر (Risk Management)

    • يحدد SL بنسبة مئوية من سعر الدخول (مثلاً 0.25%).
    • يحسب 4 مستويات للـ TP مضروبة في Multiplier (مثلاً TP2 = ضعف المخاطرة).

    ➡️ الميزة: يوفر خطة واضحة للصفقة.
    ➡️ العيب: الاعتماد على النسبة المئوية فقط قد لا يناسب جميع الأصول.


    4️⃣ فلتر ATR

    • يضيف شرط أن تكون قيمة ATR أكبر من حد أدنى (0.5 مثلاً).
    • الهدف: استبعاد إشارات في الأسواق الضعيفة أو قليلة الحركة.

    ➡️ الميزة: يقلل الإشارات الوهمية.
    ➡️ العيب: إذا كان ATR عالي جدًا، قد يمنع صفقات جيدة.


    5️⃣ الرسوم البيانية (Lines, Labels, Fills)

    • يرسم خطوط Entry, SL, TP1-TP4.
    • يضيف تسميات توضيحية بالأسعار.
    • يملأ المنطقة بين Entry و TP باللون الأخضر، وبين Entry و SL باللون الأحمر.

    ➡️ الميزة: يعطي رؤية بصرية واضحة لخطة الصفقة.
    ➡️ العيب: كثرة الخطوط قد تسبب ازدحام في الشارت.


    6️⃣ الإشارات والتنبيهات (Signals & Alerts)

    • يولد إشارة BUY عند بداية اتجاه صاعد.
    • يولد إشارة SELL عند بداية اتجاه هابط.
    • يمكن تفعيل تنبيهات آلية على TradingView.

    ملاحظات ونصائح عملية

    1. تأخير الإشارة
      • الكود يعتمد على ترتيب 6 EMAs، وهذا يعطي دقة عالية لكن متأخر أحيانًا.
        نصيحة: لو تبغى سرعة أكثر، قلل عدد المتوسطات (مثلاً 3 بدلاً من 6).
    2. الستوب لوس (SL)
      • الكود يحسب SL كنسبة ثابتة.
        نصيحة: جرب ربط SL بالـ ATR (مثلاً SL = 1.5 × ATR) ليكون متكيف مع السوق.
    3. التوافق بين الفريمات
      • Dashboard يساعدك تعرف إذا الفريمات متفقة.
        نصيحة: لا تدخل صفقة عكس الفريم الأعلى (4H أو Daily).
    4. إدارة رأس المال
      • المؤشر يرسم TPs، لكن التنفيذ عندك.
        نصيحة: قسم العقود (جزء يغلق عند TP1، جزء عند TP2، إلخ).
    5. الإشارات الكاذبة
      • حتى مع الفلتر ATR ممكن تطلع إشارات وهمية في سوق عرضي.
        نصيحة: أضف فلتر إضافي مثل RSI أو MACD لتأكيد الاتجاه.
    6. الاستخدام الأمثل
      • المؤشر ممتاز للتداول Trend Following (مع الاتجاه).
      • غير مناسب للأسواق العرضية (Range).

    الخلاصة

    مؤشر DTC v1.36 أداة قوية للي يحب يدمج:

    • الاتجاه + تعدد الفريمات + خطة مخاطرة جاهزة.
      لكن مثل أي مؤشر، لا يمكن الاعتماد عليه وحده. لازم يكون جزء من استراتيجية كاملة تشمل:
    • فلتر إضافي (RSI/MACD/Volume).
    • إدارة رأس مال حقيقية.
    • متابعة حركة السعر (Price Action).

    حمل الكود

    رابط المؤشر على تريدنق فيو 

    https://www.tradingview.com/script/1c63JVp5-DTC

  • مؤشر RSI Shift Zone [ChartPrime]


    نظرة عامة

    مؤشر RSI Shift Zone [ChartPrime] هو أداة لكشف تحوّل الزخم والمشاعر في السوق، تجمع بين قوة مؤشّر الزخم وسلوك حركة السعر. حيث يقوم برسم مناطق ديناميكية على الرسم البياني للسعر مباشرةً كلما تجاوز مؤشر القوة النسبية (RSI) مستويات حرجة (افتراضيًا: 70 تشبع شرائي، 30 تشبع بيعي). هذه المناطق المرسومة تكشف أين من المحتمل أن يكون قد حدث تغير في شعور المتداولين، مما يساعد المتداولين على تحديد مناطق دعم/مقاومة قوية وفرص الاختراق في الوقت الفعلي.


    كيف يعمل

    عندما يتجاوز مؤشر RSI الحد العلوي أو السفلي:

    • يتم إنشاء قناة جديدة (Shift Zone) مباشرةً.
    • يتم تثبيت حدود القناة على أعلى وأقل سعر للشمعة عند لحظة الاختراق.
    • يتم رسم خط وسطي (متوسط بين الأعلى والأدنى) لسهولة المتابعة البصرية.
    • تظل القناة مرئية على الشارت لمدة حد أدنى يحدده المستخدم (افتراضيًا: 15 شمعة)، لضمان إبراز التحركات المهمة فقط.
    • يتم تلوين القناة بحسب نوع الشعور السائد (صعودي أو هبوطي)، ويمكن عرض قيمة RSI داخل المنطقة لإضفاء مزيد من الوضوح.

    التفاصيل الفنية

    • يستخدم حساب RSI القياسي (الطول الافتراضي: 14).
    • يكتشف الاختراقات للأعلى (قوة الاتجاه الصاعد)، والاختراقات للأسفل (تشبع بيعي).
    • يعرض القنوات على الرسم البياني الأساسي للسعر بدل نافذة المؤشر فقط، ليُظهر بوضوح المناطق التي أدت فيها تغيرات الشعور إلى ردود فعل سعرية.
    • يتم مسح القناة تلقائيًا عند استكمال عدد الشموع المحدد وظهور تحول جديد.

    الاستخدام

    يمكن الاستفادة من مناطق RSI Shift Zones كمستويات تكتيكية قوية:

    • استخدم الحدين العلوي والسفلي للقناة كمستويات ديناميكية للاختراق – راقب إغلاق الشموع خارجها لتأكيد استمرار الاتجاه.
    • استخدم الخط الوسطي كمرجع توازني عند التصحيحات داخل المنطقة.
    • تُظهر القيم المعروضة لمؤشر RSI داخل المنطقة ما إذا كان التحول ناتجًا عن حالة تشبع شرائي أو بيعي.

    الخلاصة

    مؤشر RSI Shift Zone [ChartPrime] يحوّل مجرد اختراق لـ RSI إلى أداة هيكلية فعّالة ترسم تحوّلات الشعور مباشرة على الشارت، لتُمكّن المتداول من رؤية النقاط التي يحدث فيها الانعكاس الزخمي واستغلالها لصفقات الاختراق، الانعكاس، أو تحديد مناطق دعم/مقاومة ذات ثقة عالية – وكل ذلك بنظرة واحدة.


    رابط المؤشر ..

    https://ar.tradingview.com/script/5azMGL1V-RSI-Shift-Zone-ChartPrime

  • أنماط الاختراق الكاذب

    أنماط الاختراق الكاذب
    الاختراقات الكاذبة هي بالفعل كما يوحي اسمها: اختراق لا يستمر بعد تجاوزه لمستوى معين، مما يؤدي إلى “اختراق كاذب” لذلك المستوى. تُعَد أنماط الاختراق الكاذب من أهم أنماط التداول بحركة السعر التي ينبغي تعلمها، لأن الاختراق الكاذب غالبًا ما يكون دليلاً قويًا على أن السعر قد يغير الاتجاه أو أن الاتجاه قد يستعد لاستئنافه قريبًا. يمكن اعتبار الاختراق الكاذب للمستوى بمثابة “خدعة” من السوق، لأن السعر يبدو وكأنه سيخترق، ثم ينقلب بسرعة، مخدعًا جميع من وقعوا في “فخ” الاختراق. وغالبًا ما يحدث أن يدخل المتداولون الهواة في ما يبدو كاختراق “واضح”، ثم يدفع المحترفون السوق في الاتجاه المعاكس.

    بصفتك متداولًا بحركة السعر، عليك أن تتعلم كيف تستفيد من الاختراقات الكاذبة بدلاً من أن تقع ضحية لها.


    فيما يلي مثالان واضحان على اختراقات كاذبة أعلى وأسفل المستويات المحورية. لاحظ أن الاختراقات الكاذبة يمكن أن تأخذ أشكالًا مختلفة؛ أحيانًا يظهر الاختراق الكاذب مع نموذج شمعة البن بار أو نموذج الفيكاي كنموذج للاختراق الكاذب، وأحيانًا يحدث بدون أي نموذج.

    الاختراق الكاذب هو في الأساس حركة “مخالفة” في السوق تقوم بإخراج المتداولين الذين دخلوا بدافع العاطفة وليس المنطق والتفكير المسبق.
    بشكل عام، يحدث الاختراق الكاذب لأن المتداولين الهواة أو من يُقال عنهم “أصحاب الأيدي الضعيفة” يميلون إلى دخول السوق فقط عندما “يشعرون بالأمان”. هذا يعني أنهم غالبًا ما يدخلون عندما يكون السوق قد تحرك كثيرًا في اتجاه واحد (ويكون على وشك التصحيح)، أو يحاولون التنبؤ باختراق مستوى دعم أو مقاومة رئيسي مبكرًا جدًا. المحترفون يُراقبون هذه الأخطاء من الهواة، والنتيجة النهائية هي نقطة دخول ممتازة لهم بوقف خسارة ضيق وعائد مخاطرة محتمل كبير.

    يتطلب الأمر انضباطًا وقليلًا من “الإحساس بالسوق” لمعرفة متى من المحتمل أن يحدث اختراق كاذب، ولا يمكنك أن تعرف على وجه اليقين إلا بعد أن يتكون. المهم هو أن تعرف كيف يبدو وكيف تتداول عليه، وهو ما سنناقشه لاحقًا…

    كيفية تداول أنماط الاختراق الكاذب

    تحدث الاختراقات الكاذبة في جميع ظروف السوق: الاتجاهية، المتذبذبة، أو ضد الاتجاه، لكن ربما أفضل طريقة لتداولها هي في نفس اتجاه الاتجاه الرئيسي على الرسم البياني اليومي، كما نرى في الرسم البياني أدناه.
    لاحظ أننا في الرسم أدناه لدينا اتجاه هبوطي واضح والعديد من الاختراقات الكاذبة إلى الأعلى ضمن هذا الاتجاه. عندما ترى اختراقًا كاذبًا ضد اتجاه سائد كالموضح أدناه، فعادةً ما يكون إشارة قوية على أن الاتجاه مستعد للاستمرار. المتداولون الهواة يحبون محاولة التقاط القاع في الاتجاه الهابط أو القمة في الاتجاه الصاعد، وقد يتسبب ذلك في اختراقات كاذبة عكسية كما نرى. في كل من هذه الاختراقات الكاذبة، من المرجح أن المتداولين الهواة اعتقدوا أن الاتجاه الهابط انتهى فبدؤوا بالشراء، وبمجرد بدء هذا الشراء، عاد المحترفون واستغلوا القوة المؤقتة داخل السوق الهابط ودخلوا مراكز بيع من مستويات جيدة، ثم استمر الاتجاه الهابط، مطيحًا بكل الهواة الذين حاولوا التقاط القاع.

    الاختراقات الكاذبة في الأسواق العرضية

    الاختراقات الكاذبة منتشرة في النطاقات السعرية لأن المتداولين غالبًا ما يحاولون تداول الاختراق خارج النطاق، لكن السعر عادة يبقى متذبذبًا لفترة أطول مما يظن معظمهم. معرفة أن الاختراقات الكاذبة شائعة نوعًا ما عندما يكون السوق محصورًا في نطاق معين هي معلومة قيّمة جدًا للمتداول بحركة السعر.

    يمكن أن يكون تداول السوق العرضي مربحًا بشكل كبير، إذ يمكنك انتظار إشارات حركة السعر عند حدود الدعم أو المقاومة للنطاق للتداول باتجاه الجانب الآخر من النطاق. وأفضل طريقة لضمان عدم الوقوع في اختراق كاذب من نطاق تداول، هو ببساطة الانتظار حتى يُغلق السعر خارج النطاق لمدة يومين أو أكثر، فإذا حدث ذلك، فهناك احتمال كبير أن النطاق قد انتهى وأن السعر سيبدأ في الاتجاه من جديد.

    في الرسم البياني أدناه، نرى كيف يمكن للمتداول بحركة السعر أن يستخدم إشارة شمعه البن بار كاختراق كاذب لتداول كسر كاذب لنطاق تداول. لاحظ البن بار الكاذب عند مقاومة النطاق، وكذلك لاحظ كلا الاختراقين الكاذبين عند دعم النطاق. المتداولون الأكثر خبرة يمكنهم أيضًا تداول الاختراقات الكاذبة التي لا تحتوي على نموذج بن بار. كلا الاختراقين الكاذبين للدعم في الرسم أدناه كانا إشارة شراء محتملة للمتداول الذكي بحركة السعر…

    قد تشير أنماط الاختراق الكاذب أحيانًا ببداية اتجاه جديد ونهاية الاتجاه الحالي

    في المثال أدناه، نرى مستوى مقاومة رئيسي أوقف السعر في مناسبتين، ثم في الاختبار الثالث، كون السعر شمعة بن بار اختراق كاذب كبيرة تشير إلى احتمالية هبوط قادم. وكما نرى في هذا الرسم، لم تُشر فقط إشارة الاختراق الكاذب إلى حركة هبوطية، بل أطلقت اتجاهًا هبوطيًا كاملًا…

    نصائح تداول على أنماط الاختراق الكاذب

    • تحدث الاختراقات الكاذبة في الأسواق الاتجاهية، والأسواق العرضية، وضد الاتجاه. راقبها في جميع ظروف السوق لأنها غالبًا ما تعطي دلائل قوية على اتجاه السعر القادم.
    • التداول عكس الاتجاه صعب، لكن من أفضل الطرق للتداول عكس الاتجاه هي الانتظار لاختراق كاذب واضح ضد الاتجاه من مستوى دعم أو مقاومة رئيسي، كما في المثال الأخير أعلاه.
    • تعطيك الاختراقات الكاذبة نافذة لرؤية “المعركة” بين المتداولين الهواة والمحترفين، وبالتالي تمنحك طريقة للتداول جنبًا إلى جنب مع المحترفين. تعلّم كيفية تحديد وتداول أنماط الاختراق الكاذب وستأخذ تجربتك في التداول منحى مختلفًا تمامًا.

    آمل أن تكون قد استمتعت بهذا الدرس حول أنماط الاختراق الكاذب.

  • الساعة الاقتصادية والأرباع السنوية


    دليلك الكامل لفهم السوق واتخاذ قرارات تداول ذكية

    في عالم التداول، لا يكفي الاعتماد على التحليل الفني فقط، بل من الضروري أن يكون لديك وعي بالأحداث الاقتصادية التي تحرك السوق. من هنا تأتي أهمية الساعة الاقتصادية (Economic Calendar) وتقسيم السنة إلى أرباع مالية (Quarters)، والتي تعتبر من أهم الأدوات التي يعتمد عليها المتداولون المحترفون لاتخاذ قرارات دقيقة وتحقيق أرباح مستقرة.


    أولًا: ما هي الساعة الاقتصادية؟

    الساعة الاقتصادية هي جدول يعرض مواعيد الأخبار الاقتصادية المؤثرة على السوق، مثل:

    • أسعار الفائدة
    • مؤشر التضخم (CPI)
    • بيانات التوظيف (NFP)
    • الناتج المحلي الإجمالي (GDP)
    • مبيعات التجزئة
    • قرارات البنوك المركزية

    تُعرض هذه الأخبار حسب توقيتها باليوم والساعة، مع توضيح درجة أهميتها (منخفضة، متوسطة، عالية)، وتأثيرها المحتمل على العملات والأسهم والذهب والكريبتو.


    كيف يستخدم المتداول الساعة الاقتصادية؟

    • التخطيط لتوقيت الدخول والخروج من الصفقات
    • تجنّب التداول خلال الأخبار شديدة التأثير
    • فهم سبب التحركات المفاجئة في السوق
    • الاستفادة من الأخبار المفاجئة لصالحك

    ثانيًا: ما هي الأرباع السنوية؟

    السنة تُقسم إلى أربعة أرباع مالية، وكل ربع يشمل 3 أشهر:

    الربعالأشهرالاسم
    Q1يناير – مارسالربع الأول
    Q2أبريل – يونيوالربع الثاني
    Q3يوليو – سبتمبرالربع الثالث
    Q4أكتوبر – ديسمبرالربع الرابع

    💡 لماذا تقسيم الأرباع مهم للمتداولين؟

    • 📈 الشركات تعلن أرباحها كل ربع ➤ تؤثر على الأسهم والعملات
    • 🏛️ الناتج المحلي والتضخم والفائدة تُعلن فصليًا ➤ تغيّر توجه السوق
    • 🧠 المؤسسات المالية تغير استراتيجياتها في نهاية كل ربع ➤ فرص تداول

    جدول شامل: مواعيد الأرباع السنوية والأخبار المؤثرة

    الربعالفترةأبرز الأخبارتوقيتهاتأثيرها المحتمل
    Q1يناير – مارس– تقارير أرباح Q4 السابقة
    – بيانات التضخم
    – NFP لشهري يناير وفبراير
    – قرارات الفائدة
    بداية ووسط ونهاية كل شهر🔺 تقلبات مرتفعة
    🔺 فرص سكالبينج قوية
    🔻 تصحيحات تقنية بسبب إعادة التوازن
    Q2أبريل – يونيو– أرباح Q1
    – بداية موسم السفر (طلب على النفط)
    – تقارير CPI, NFP, GDP
    منتصف كل شهر تقريبًا🔺 استقرار نسبي
    🔻 تقلبات معتدلة
    ✅ فرص تداول على النفط
    Q3يوليو – سبتمبر– أرباح Q2
    – تحركات المؤسسات بعد الإجازات
    – قرارات الفائدة
    سبتمبر عادةً قوي🔺 عودة الزخم
    🔺 كسر اتجاهات قديمة
    🔻 سيولة ضعيفة في أغسطس
    Q4أكتوبر – ديسمبر– أرباح Q3
    – تقارير نهاية السنة
    – إعادة تقييم المحافظ
    – توقعات العام الجديد
    أكتوبر وديسمبر قويان جدًا🔺 تحركات عنيفة
    🔻 تسييل مراكز
    ✅ فرص ذهب وكريبتو

    أهم تواريخ الأخبار الاقتصادية في 2025

    التاريخالحدثالتأثير المتوقع
    3 ينايرNFP (ديسمبر 2024)افتتاح قوي للسنة
    10 ينايرCPI (ديسمبر)تحديد توقعات الفائدة
    29 ينايرقرار فائدة الفيدراليتغير مفاجئ بالدولار والذهب
    5 أبريلNFP (مارس)حركة متوسطة
    30 أبريلقرار فائدة فدراليتوجه جديد محتمل
    17 سبتمبرفائدة + مؤتمر صحفيأحد أهم أحداث السنة
    11 ديسمبرآخر قرار فائدة في 2025التوقعات للسنة الجديدة تبدأ

    نصائح احترافية للمتداول:

    1. لا تدخل صفقات قبل الأخبار القوية بـ10 دقائق.
    2. استخدم أوامر معلقة بحذر حول الأخبار القوية.
    3. راقب شموع الساعة الأولى بعد الخبر لتأكيد الاتجاه.
    4. تتبع التقارير الفصلية للشركات إن كنت تتداول الأسهم.
    5. راقب نهاية كل ربع لأنها مليئة بجني الأرباح والتحولات المفاجئة.

    من أفضل المواقع لمتابعة الأخبار الاقتصادية وتأثيرها على الأسواق هو:

    موقع Forex Factory

    مميزاته:

    يعرض التقويم الاقتصادي (Economic Calendar) بشكل دقيق ومرتب حسب الوقت. يحتوي على فلترة للأخبار حسب العملة أو الأهمية. يوضح تأثير كل خبر بثلاث ألوان: 🔴 أحمر = تأثير عالي. 🟠 برتقالي = تأثير متوسط. 🟢 أخضر = تأثير ضعيف.

    طريقة استخدام الموقع بخطوات بسيطة:

    1. الدخول إلى الصفحة:

    افتح Forex Factory Calendar.

    2. ضبط التوقيت حسب منطقتك:

    اضغط على “Time” أعلى الصفحة. حدد توقيت السعودية (+3 GMT).

    3. فلترة الأخبار:

    اضغط على “Filter”. اختر الأخبار التي تهمك حسب العملة (مثل USD أو EUR) أو حسب الأهمية (High Impact فقط).

    4. قراءة تفاصيل الخبر:

    عند الضغط على اسم الخبر، يظهر لك: معنى الخبر. لماذا هو مهم. القيم الثلاث: Actual: الرقم الحقيقي بعد الإعلان. Forecast: التوقعات. Previous: القيمة السابقة.

    كيف تستفيد منه في التداول:

    تجنب فتح صفقات قبل أو أثناء الخبر بـ 30 دقيقة.

    الأخبار المؤثرة مثل CPI أو NFP

    تخلق تذبذبًا عاليًا وفرص سكالبينغ أو تداول سريع.

    مقارنة القيم (Actual vs Forecast)

    إذا جاءت القيمة الحقيقية أفضل من التوقعات = تقوية العملة.

    متابعة الأخبار الأسبوعية

    تساعدك في تحديد أيام “تداول” وأيام “تجنّب”.

    مثال عملي:

    إذا صدر خبر CPI الأمريكي وكانت النتيجة:

    Actual: 3.4% Forecast: 3.1%

    هذا يدل على ارتفاع التضخم، ما يزيد احتمال رفع الفائدة → تقوية الدولار → هبوط الذهب والعملات أمام الدولار.

    الخلاصة :

    • الساعة الاقتصادية تساعدك على قراءة حركة السوق قبل حدوثها.
    • الأرباع السنوية تكشف لك متى تكون المؤسسات نشطة، ومتى تتغير الاتجاهات.
    • بمراقبة هذين الجانبين، يمكنك تحسين قراراتك وتقليل المخاطر وزيادة احتمالية الربح.

  • مؤشر ALGoX


    ما هو مؤشر ALGoX؟

    هو مؤشر مخصص لمنصة TradingView، يهدف إلى توليد إشارات بيع وشراء دقيقة بالاعتماد على تقاطع متوسطات متحركة محسّنة مثل ALMA وLSMA وEMA وWMA، مع إمكانية تفعيل إشارات شموع Heikin Ashi وتلوين الشموع لتوضيح الاتجاه. يستخدم المؤشر عادة في التداول قصير المدى مثل السكالبينغ، لكنه مرن ويصلح أيضًا للفريمات المتوسطة والطويلة.


    مكونات المؤشر الرئيسية:

    1. نوع المتوسط المتحرك (MA Type):
      • ALMA: متوسط موزون بالانحراف القياسي، يفلتر الضجيج ويقلل التأخير.
      • EMA: متوسط أسي سريع الاستجابة، مثالي للأسواق المتقلبة.
      • WMA: متوسط موزون يعطي أولوية للأسعار الحديثة.
      • LSMA: متوسط يعتمد على الانحدار الخطي، جيد لرصد الزخم.
    2. الفترة الزمنية للمتوسط (MA Period):
      • تحدد مدى سرعة استجابة المؤشر. القيم الصغيرة تعطي إشارات أسرع، ولكنها أكثر عرضة للإشارات الكاذبة.
      • القيم الأكبر تزيد من تأخير الإشارة ولكن تعطي موثوقية أكبر.
    3. الإزاحة والانحراف (Offset & Sigma) – خاص بـ ALMA:
      • Offset: يتحكم بموقع المتوسط داخل البيانات. القيم الأقرب إلى 1 تجعل الإشارة أكثر تأخرًا وسلاسة.
      • Sigma: يتحكم بدرجة التنعيم (Smoothness). القيم الأعلى تعني خطوط أكثر سلاسة.
    4. الخيارات الإضافية:
      • تفعيل إشارات الشراء والبيع (Buy/Sell Signals).
      • تلوين الشموع حسب الاتجاه (Coloured Bars).
      • تفعيل إشارات Heikin Ashi لمزيد من النقاء البصري على الفريمات الأعلى.
      • إشارات بديلة (Alternate Signals) لتحديد الانعكاسات المبكرة.

    كيفية استخدام ALGoX:

    1. السكالبينغ (1m – 5m):
      يتم استخدام إعدادات سريعة جدًا، وتُفضل مع الأسواق ذات الحركة النشطة كـ الذهب والـ SPX500.
      • يفضل ALMA أو EMA بفترة 10–14.
      • تفعيل الإشارات البديلة وتلوين الشموع ضروري للتفاعل السريع.
    2. التداول اليومي (15m – 1h):
      يمكن زيادة فترة المتوسط لـ 20–50.
      • تفعيل Heikin Ashi اختياري حسب نمطك.
      • دمج المؤشر مع مستويات دعم ومقاومة يعطي إشارات أدق.
    3. التداول متوسط – طويل المدى (4h – Daily):
      تستخدم فترات أطول مثل 100–200 مع EMA أو ALMA.
      • يفضل تفعيل شموع Heikin Ashi لتحسين تصفية الإشارات.
      • المؤشر يكون مرجعيًا وليس تنفيذ مباشر.

    جدول الإعدادات المقترحة حسب السوق والفريم:

    الأصلالفريم الزمنينوع MAفترة MAOffset (ALMA)Sigma (ALMA)Heikin AshiAlternate Signalsملاحظات
    الذهب (XAUUSD)1 دقيقةALMA100.856لانعممناسب للسكالبينغ السريع
    SPX5001 دقيقةALMA140.856لانعمسكالب سريع وحاد
    العملات الرقمية (BTC/ETH)1 دقيقةEMA9لانعمتقلبات عالية
    الفوركس (EURUSD)5 دقائقALMA140.856لانعمأكثر استقرارًا
    الذهب15 دقيقةALMA200.856نعملاتداول يومي متوسط
    SPX5001 ساعةALMA500.906نعملاترندات موثوقة
    الفوركس4 ساعاتEMA100نعملاتحليل الاتجاه العام
    العملات الرقميةيوميEMA200نعملاتحديد الترند طويل المدى

    نصائح مهمة لاستخدام مؤشر ALGoX بفعالية:

    • لا تستخدم ALGoX بشكل منفصل؛ أضف مؤشرات داعمة مثل RSI أو MACD.
    • راقب الأخبار الاقتصادية لأنها قد تخلق إشارات كاذبة.
    • راقب الفريم الأعلى (مثل 15m عند استخدام 1m) لتأكيد الاتجاه العام.
    • لا تُبالغ في الدخول في كل إشارة؛ الجودة أهم من الكمية.

    الخلاصة:

    يُعد مؤشر ALGoX أداة مرنة وفعالة للسكالبينغ والتداول السريع إذا تم ضبطه بإعدادات مناسبة لكل سوق وفريم. يُنصح بالاعتماد عليه كمساعد ذكي لتحديد بداية الاتجاه، بشرط وجود خطة إدارة مخاطر دقيقة وعدم الاعتماد عليه كإشارة دخول وخروج وحيدة.


    النسخة المطورة لايعيد الرسم

    اذا واجهتك مشاكل بالملف انسخ الكود التالي :

    //@version=5
    VERSION  = ' V6.1.24'
    strategy('ALGOX', shorttitle = 'ALGOX V6.1.24 NONREPAINT', overlay = true, explicit_plot_zorder = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, initial_capital = 20, default_qty_value = 20, calc_on_every_tick = false, process_orders_on_close = true) 
    
    G_SCRIPT01   = '■ ' + 'SAIYAN OCC'
    //#region ———— <↓↓↓ G_SCRIPT01 ↓↓↓> {
    
    // === INPUTS ===
    res                       = input.timeframe('1',  'TIMEFRAME', group ="NON REPAINT")
    useRes                    = input(true,            'Use Alternate Signals')
    intRes                    = input(8,               'Multiplier for Alernate Signals')
    basisType                 = input.string('ALMA',   'MA Type: ', options=['TEMA', 'HullMA', 'ALMA'])
    basisLen                  = input.int(2,           'MA Period', minval=1)
    offsetSigma               = input.int(5,           'Offset for LSMA / Sigma for ALMA', minval=0)
    offsetALMA                = input.float(0.85,      'Offset for ALMA', minval=0, step=0.01)
    scolor                    = input(false,           'Show coloured Bars to indicate Trend?')
    delayOffset               = input.int(0,           'Delay Open/Close MA', minval=0, step=1,
                      tooltip = 'Forces Non-Repainting')
    tradeType                 = input.string('BOTH',   'What trades should be taken : ',
                      options = ['LONG', 'SHORT', 'BOTH', 'NONE'])
    //=== /INPUTS ===
    h                         = input(false,           'Signals for Heikin Ashi Candles')
    //INDICATOR SETTINGS
    swing_length              = input.int(10,          'Swing High/Low Length', group = 'Settings', minval = 1, maxval = 50)
    history_of_demand_to_keep = input.int(20,          'History To Keep', minval = 5, maxval = 50)
    box_width                 = input.float(2.5,       'Supply/Demand Box Width', group = 'Settings', minval = 1, maxval = 10, step = 0.5)
    
    //INDICATOR VISUAL SETTINGS
    show_zigzag               = input.bool(false,      'Show Zig Zag', group = 'Visual Settings', inline = '1')
    show_price_action_labels  = input.bool(false,      'Show Price Action Labels', group = 'Visual Settings', inline = '2')
    
    supply_color              = input.color(#00000000, 'Supply', group = 'Visual Settings', inline = '3')
    supply_outline_color      = input.color(#00000000, 'Outline', group = 'Visual Settings', inline = '3')
    
    demand_color              = input.color(#00000000, 'Demand', group = 'Visual Settings', inline = '4')
    demand_outline_color      = input.color(#00000000, 'Outline', group = 'Visual Settings', inline = '4')
    
    bos_label_color           = input.color(#00000000, 'BOS Label', group = 'Visual Settings', inline = '5')
    poi_label_color           = input.color(#00000000, 'POI Label', group = 'Visual Settings', inline = '7')
    poi_border_color          = input.color(#00000000, 'POI border', group = 'Visual Settings', inline = '7')
    swing_type_color          = input.color(#00000000, 'Price Action Label', group = 'Visual Settings', inline = '8')
    zigzag_color              = input.color(#00000000, 'Zig Zag', group = 'Visual Settings', inline = '9')
    
    //END SETTINGS
    
    
    //      FUNCTION TO ADD NEW AND REMOVE LAST IN ARRAY
    f_array_add_pop(array, new_value_to_add) =>
        array.unshift(array, new_value_to_add)
        array.pop(array)
    
    //      FUNCTION SWING H & L LABELS
    f_sh_sl_labels(array, swing_type) =>
    
        var string label_text = na
        if swing_type == 1
            if array.get(array, 0) >= array.get(array, 1)
                label_text := 'HH'
            else
                label_text := 'LH'
            label.new(
              bar_index - swing_length,
              array.get(array,0),
              text = label_text,
              style = label.style_label_down,
              textcolor = swing_type_color,
              color = swing_type_color,
              size = size.tiny)
        
        else if swing_type == -1
            if array.get(array, 0) >= array.get(array, 1)
                label_text := 'HL'
            else
                label_text := 'LL'
            label.new(
              bar_index - swing_length,
              array.get(array,0),
              text = label_text,
              style = label.style_label_up,
              textcolor = swing_type_color,
              color = swing_type_color,
              size = size.tiny)
    
    //      FUNCTION MAKE SURE SUPPLY ISNT OVERLAPPING
    f_check_overlapping(new_poi, box_array, atrValue) =>
    
        atr_threshold = atrValue * 2
        okay_to_draw = true
    
        for i = 0 to array.size(box_array) - 1
            top = box.get_top(array.get(box_array, i))
            bottom = box.get_bottom(array.get(box_array, i))
            poi = (top + bottom) / 2
    
            upper_boundary = poi + atr_threshold
            lower_boundary = poi - atr_threshold
    
            if new_poi >= lower_boundary and new_poi <= upper_boundary
                okay_to_draw := false
                break
            else 
                okay_to_draw := true
        okay_to_draw
    
    
    //      FUNCTION TO DRAW SUPPLY OR DEMAND ZONE
    f_supply_demand(value_array, bn_array, box_array, label_array, box_type, atrValue) =>
        atr_buffer = atrValue * (box_width / 10)
        box_left   = array.get(bn_array, 0)
        box_right  = bar_index
        var float box_top = 0.00
        var float box_bottom = 0.00
        var float poi = 0.00
        if box_type == 1
            box_top := array.get(value_array, 0)
            box_bottom := box_top - atr_buffer
            poi := (box_top + box_bottom) / 2
        else if box_type == -1
            box_bottom := array.get(value_array, 0)
            box_top := box_bottom + atr_buffer
            poi := (box_top + box_bottom) / 2
        okay_to_draw = f_check_overlapping(poi, box_array, atrValue)
        // okay_to_draw = true
        //delete oldest box, and then create a new box and add it to the array
        if box_type == 1 and okay_to_draw
            box.delete( array.get(box_array, array.size(box_array) - 1) )
            f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = supply_outline_color,
                 bgcolor = supply_color, extend = extend.right, text = 'SUPPLY', text_halign = text.align_center, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
            
            box.delete( array.get(label_array, array.size(label_array) - 1) )
            f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = poi_border_color,
                 bgcolor = poi_border_color, extend = extend.right, text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
        else if box_type == -1 and okay_to_draw
            box.delete( array.get(box_array, array.size(box_array) - 1) )
            f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = demand_outline_color,
                 bgcolor = demand_color, extend = extend.right,  text = 'DEMAND', text_halign = text.align_center, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
            
            box.delete( array.get(label_array, array.size(label_array) - 1) )
            f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = poi_border_color,
                 bgcolor = poi_border_color, extend = extend.right,  text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
    
    
    //      FUNCTION TO CHANGE SUPPLY/DEMAND TO A BOS IF BROKEN
    f_sd_to_bos(box_array, bos_array, label_array, zone_type) =>
    
        if zone_type == 1
            for i = 0 to array.size(box_array) - 1
                level_to_break = box.get_top(array.get(box_array,i))
                // if ta.crossover(close, level_to_break)
                if close >= level_to_break
                    copied_box = box.copy(array.get(box_array,i))
                    f_array_add_pop(bos_array, copied_box)
                    mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
                    box.set_top(array.get(bos_array,0), mid)
                    box.set_bottom(array.get(bos_array,0), mid)
                    box.set_extend( array.get(bos_array,0), extend.none)
                    box.set_right( array.get(bos_array,0), bar_index)
                    box.set_text( array.get(bos_array,0), 'BOS' )
                    box.set_text_color( array.get(bos_array,0), bos_label_color)
                    box.set_text_size( array.get(bos_array,0), size.small)
                    box.set_text_halign( array.get(bos_array,0), text.align_center)
                    box.set_text_valign( array.get(bos_array,0), text.align_center)
                    box.delete(array.get(box_array, i))
                    box.delete(array.get(label_array, i))
    
    
        if zone_type == -1
            for i = 0 to array.size(box_array) - 1
                level_to_break = box.get_bottom(array.get(box_array,i))
                // if ta.crossunder(close, level_to_break)
                if close <= level_to_break
                    copied_box = box.copy(array.get(box_array,i))
                    f_array_add_pop(bos_array, copied_box)
                    mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
                    box.set_top(array.get(bos_array,0), mid)
                    box.set_bottom(array.get(bos_array,0), mid)
                    box.set_extend( array.get(bos_array,0), extend.none)
                    box.set_right( array.get(bos_array,0), bar_index)
                    box.set_text( array.get(bos_array,0), 'BOS' )
                    box.set_text_color( array.get(bos_array,0), bos_label_color)
                    box.set_text_size( array.get(bos_array,0), size.small)
                    box.set_text_halign( array.get(bos_array,0), text.align_center)
                    box.set_text_valign( array.get(bos_array,0), text.align_center)
                    box.delete(array.get(box_array, i))
                    box.delete(array.get(label_array, i))
    
    
    
    //      FUNCTION MANAGE CURRENT BOXES BY CHANGING ENDPOINT
    f_extend_box_endpoint(box_array) =>
    
        for i = 0 to array.size(box_array) - 1
            box.set_right(array.get(box_array, i), bar_index + 100)
    
    
    //
    //END FUNCTIONS
    //  
    
    
    //
    //CALCULATIONS
    //
    stratRes = timeframe.ismonthly  ? str.tostring(timeframe.multiplier * intRes, '###M') :
               timeframe.isweekly   ? str.tostring(timeframe.multiplier * intRes, '###W') :
               timeframe.isdaily    ? str.tostring(timeframe.multiplier * intRes, '###D') :
               timeframe.isintraday ? str.tostring(timeframe.multiplier * intRes, '####') :
               '60'
    src      = h ? request.security(ticker.heikinashi(syminfo.tickerid),
               timeframe.period, close, lookahead = barmerge.lookahead_off) : close
    
    //      CALCULATE ATR 
    atrValue = ta.atr(50)
    
    //      CALCULATE SWING HIGHS & SWING LOWS
    swing_high = ta.pivothigh(high, swing_length, swing_length)
    swing_low  = ta.pivotlow(low,   swing_length, swing_length)
    
    //      ARRAYS FOR SWING H/L & BN 
    var swing_high_values  = array.new_float(5,0.00)
    var swing_low_values   = array.new_float(5,0.00)
    
    var swing_high_bns     = array.new_int(5,0)
    var swing_low_bns      = array.new_int(5,0)
    
    //      ARRAYS FOR SUPPLY / DEMAND
    var current_supply_box = array.new_box(history_of_demand_to_keep, na)
    var current_demand_box = array.new_box(history_of_demand_to_keep, na)
    
    //      ARRAYS FOR SUPPLY / DEMAND POI LABELS
    var current_supply_poi = array.new_box(history_of_demand_to_keep, na)
    var current_demand_poi = array.new_box(history_of_demand_to_keep, na)
    
    //      ARRAYS FOR BOS
    var supply_bos         = array.new_box(5, na)
    var demand_bos         = array.new_box(5, na)
    //
    //END CALCULATIONS
    //
    
    //      NEW SWING HIGH
    if not na(swing_high)
    
        //MANAGE SWING HIGH VALUES
        f_array_add_pop(swing_high_values, swing_high)
        f_array_add_pop(swing_high_bns, bar_index[swing_length])
        if show_price_action_labels
            f_sh_sl_labels(swing_high_values, 1)
    
        f_supply_demand(swing_high_values, swing_high_bns, current_supply_box, current_supply_poi, 1, atrValue)
    
    //      NEW SWING LOW
    else if not na(swing_low)
    
        //MANAGE SWING LOW VALUES
        f_array_add_pop(swing_low_values, swing_low)
        f_array_add_pop(swing_low_bns, bar_index[swing_length])
        if show_price_action_labels
            f_sh_sl_labels(swing_low_values, -1)
        
        f_supply_demand(swing_low_values, swing_low_bns, current_demand_box, current_demand_poi, -1, atrValue)
    
    
    f_sd_to_bos(current_supply_box, supply_bos, current_supply_poi, 1)
    f_sd_to_bos(current_demand_box, demand_bos, current_demand_poi, -1)
    
    f_extend_box_endpoint(current_supply_box)
    f_extend_box_endpoint(current_demand_box)
    
    // if barstate.islast
        // label.new(x = bar_index + 10, y = close[1], text = str.tostring( array.size(current_supply_poi) ))
    //     label.new(x = bar_index + 20, y = close[1], text = str.tostring( box.get_bottom( array.get(current_supply_box, 0))))
    //     label.new(x = bar_index + 30, y = close[1], text = str.tostring( box.get_bottom( array.get(current_supply_box, 1))))
    //     label.new(x = bar_index + 40, y = close[1], text = str.tostring( box.get_bottom( array.get(current_supply_box, 2))))
    //     label.new(x = bar_index + 50, y = close[1], text = str.tostring( box.get_bottom( array.get(current_supply_box, 3))))
    //     label.new(x = bar_index + 60, y = close[1], text = str.tostring( box.get_bottom( array.get(current_supply_box, 4))))
    
    // Get user input
    
    channelBal     = input.bool(false, "Channel Balance", group = "CHART")
    
    
    
    // // Functions
    // supertrend(_src, factor, atrLen) =>
        // atr = ta.atr(atrLen)
        // upperBand = _src + factor * atr
        // lowerBand = _src - factor * atr
        // prevLowerBand = nz(lowerBand[1])
        // prevUpperBand = nz(upperBand[1])
        // lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand
        // upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand
        // int direction = na
        // float superTrend = na
        // prevSuperTrend = superTrend[1]
        // if na(atr[1])
            // direction := 1
        // else if prevSuperTrend == prevUpperBand
            // direction := close > upperBand ? -1 : 1
        // else
            // direction := close < lowerBand ? 1 : -1
        // superTrend := direction == -1 ? lowerBand : upperBand
        // [superTrend, direction]
    lr_slope(_src, _len) =>
        x = 0.0, y = 0.0, x2 = 0.0, xy = 0.0
        for i = 0 to _len - 1
            val = _src[i]
            per = i + 1
            x += per
            y += val
            x2 += per * per
            xy += val * per
        _slp = (_len * xy - x * y) / (_len * x2 - x * x)
        _avg = y / _len
        _int = _avg - _slp * x / _len + _slp
        [_slp, _avg, _int]
    lr_dev(_src, _len, _slp, _avg, _int) =>
        upDev = 0.0, dnDev = 0.0
        val = _int
        for j = 0 to _len - 1
            price = high[j] - val
            if price > upDev
                upDev := price
            price := val - low[j]
            if price > dnDev
                dnDev := price
            price := _src[j]
            val += _slp
        [upDev, dnDev]
    
    
    // // Get Components
    // ocAvg       = math.avg(open, close)
    // sma1        = ta.sma(close, 5)
    // sma2        = ta.sma(close, 6)
    // sma3        = ta.sma(close, 7)
    // sma4        = ta.sma(close, 8)
    // sma5        = ta.sma(close, 9)
    // sma6        = ta.sma(close, 10)
    // sma7        = ta.sma(close, 11)
    // sma8        = ta.sma(close, 12)
    // sma9        = ta.sma(close, 13)
    // sma10       = ta.sma(close, 14)
    // sma11       = ta.sma(close, 15)
    // sma12       = ta.sma(close, 16)
    // sma13       = ta.sma(close, 17)
    // sma14       = ta.sma(close, 18)
    // sma15       = ta.sma(close, 19)
    // sma16       = ta.sma(close, 20)
    // psar        = ta.sar(0.02, 0.02, 0.2)
    [_, upperKC1, lowerKC1] = ta.kc(close, 80, 10.5)
    [_, upperKC2, lowerKC2] = ta.kc(close, 80, 9.5)
    [_, upperKC3, lowerKC3] = ta.kc(close, 80, 8)
    [_, upperKC4, lowerKC4] = ta.kc(close, 80, 3)
    
    barsL          = 10
    barsR          = 10
    pivotHigh      = fixnan(ta.pivothigh(barsL, barsR)[1])
    pivotLow       = fixnan(ta.pivotlow(barsL, barsR)[1])
    source         = close, period = 150
    [s, a, i]      = lr_slope(source, period)
    [upDev, dnDev] = lr_dev(source, period, s, a, i)
    
    // // Colors
    // green       = #00d9ff, green2   = #00d9ff
    // red         = #ff0090, red2     = #ff0090
    
    // // Plots
    // k1 = plot(ta.ema(upperKC1, 50), "k1", na,             editable = false)
    // k2 = plot(ta.ema(upperKC2, 50), "k2", na,             editable = false)
    // k3 = plot(ta.ema(upperKC3, 50), "k3", na,             editable = false)
    // k4 = plot(ta.ema(upperKC4, 50), "k4", na,             editable = false)
    // k5 = plot(ta.ema(lowerKC4, 50), "k5", na,             editable = false)
    // k6 = plot(ta.ema(lowerKC3, 50), "k6", na,             editable = false)
    // k7 = plot(ta.ema(lowerKC2, 50), "k7", na,             editable = false)
    // k8 = plot(ta.ema(lowerKC1, 50), "k8", na,             editable = false)
    // fill(k1, k2, channelBal ? color.new(red2,   40) : na, editable = false)
    // fill(k2, k3, channelBal ? color.new(red2,   65) : na, editable = false)
    // fill(k3, k4, channelBal ? color.new(red2,   90) : na, editable = false)
    // fill(k5, k6, channelBal ? color.new(green2, 90) : na, editable = false)
    // fill(k6, k7, channelBal ? color.new(green2, 65) : na, editable = false)
    // fill(k7, k8, channelBal ? color.new(green2, 40) : na, editable = false)
    
    y1 = low  - (ta.atr(30) * 2), y1B = low  - ta.atr(30)
    y2 = high + (ta.atr(30) * 2), y2B = high + ta.atr(30)
    x1 = bar_index - period + 1, _y1 = i + s * (period - 1), x2 = bar_index, _y2 = i
    
    //Functions
    //Line Style function
    get_line_style(style) =>
        out = switch style
            '???'  => line.style_solid
            '----' => line.style_dashed
            '    ' => line.style_dotted
    
    //Function to get order block coordinates
    get_coordinates(condition, top, btm, ob_val)=>
        var ob_top  = array.new_float(0)
        var ob_btm  = array.new_float(0)
        var ob_avg  = array.new_float(0)
        var ob_left = array.new_int(0)
    
        float ob = na
    
        //Append coordinates to arrays
        if condition
            avg = math.avg(top, btm)
            
            array.unshift(ob_top, top)
            array.unshift(ob_btm, btm)
            array.unshift(ob_avg, avg)
    
            
            ob := ob_val
        
        [ob_top, ob_btm, ob_avg, ob_left, ob]
    
    //Function to remove mitigated order blocks from coordinate arrays
    remove_mitigated(ob_top, ob_btm, ob_left, ob_avg, target, bull)=>
        mitigated = false
        target_array = bull ? ob_btm : ob_top
    
        for element in target_array
            idx = array.indexof(target_array, element)
    
            if (bull ? target < element : target > element)
                mitigated := true
    
                array.remove(ob_top, idx)
                array.remove(ob_btm, idx)
                array.remove(ob_avg, idx)
                array.remove(ob_left, idx)
        
        mitigated
    
    //Function to set order blocks
    set_order_blocks(ob_top, ob_btm, ob_left, ob_avg, ext_last, bg_css, border_css, lvl_css)=>
        var ob_box = array.new_box(0)
        var ob_lvl = array.new_line(0)
    
    //Global elements 
    var os = 0
    var target_bull = 0.
    var target_bear = 0.
    
    // // Constants colours that include fully non-transparent option.
    // green100   = #008000FF
    // lime100    = #00FF00FF
    // red100     = #FF0000FF
    // blue100    = #0000FFFF
    // aqua100    = #00FFFFFF
    // darkred100 = #8B0000FF
    // gray100    = #808080FF
    
    /////////////////////////////////////////////
    // Create non-repainting security function
    rp_security(_symbol, _res, _src) =>
        request.security(_symbol, _res, _src[barstate.isrealtime ? 1 : 0])
    
    htfHigh = rp_security(syminfo.tickerid, res, high)
    htfLow  = rp_security(syminfo.tickerid, res, low)
    
    // Main Indicator
    // Functions
    smoothrng(x, t, m) =>
        wper = t * 2 - 1
        avrng = ta.ema(math.abs(x - x[1]), t)
        smoothrng = ta.ema(avrng, wper) * m
    rngfilt(x, r) =>
        rngfilt = x
        rngfilt := x > nz(rngfilt[1]) ? x - r < nz(rngfilt[1]) ? nz(rngfilt[1]) : x - r : x + r > nz(rngfilt[1]) ? nz(rngfilt[1]) : x + r
    percWidth(len, perc) => (ta.highest(len) - ta.lowest(len)) * perc / 100
    securityNoRep(sym, res, src) => request.security(sym, res, src, barmerge.gaps_off, barmerge.lookahead_off)
    swingPoints(prd) =>
        pivHi = ta.pivothigh(prd, prd)
        pivLo = ta.pivotlow (prd, prd)
        last_pivHi = ta.valuewhen(pivHi, pivHi, 1)
        last_pivLo = ta.valuewhen(pivLo, pivLo, 1)
        hh = pivHi and pivHi > last_pivHi ? pivHi : na
        lh = pivHi and pivHi < last_pivHi ? pivHi : na
        hl = pivLo and pivLo > last_pivLo ? pivLo : na
        ll = pivLo and pivLo < last_pivLo ? pivLo : na
        [hh, lh, hl, ll]
    f_chartTfInMinutes() =>
        float _resInMinutes = timeframe.multiplier * (
          timeframe.isseconds ? 1                   :
          timeframe.isminutes ? 1.                  :
          timeframe.isdaily   ? 60. * 24            :
          timeframe.isweekly  ? 60. * 24 * 7        :
          timeframe.ismonthly ? 60. * 24 * 30.4375  : na)
    f_kc(src, len, sensitivity) =>
        basis = ta.sma(src, len)
        span  = ta.atr(len)
        [basis + span * sensitivity, basis - span * sensitivity]
    wavetrend(src, chlLen, avgLen) =>
        esa = ta.ema(src, chlLen)
        d = ta.ema(math.abs(src - esa), chlLen)
        ci = (src - esa) / (0.015 * d)
        wt1 = ta.ema(ci, avgLen)
        wt2 = ta.sma(wt1, 3)
        [wt1, wt2]
    f_top_fractal(_src) => _src[4] < _src[2] and _src[3] < _src[2] and _src[2] > _src[1] and _src[2] > _src[0]
    f_bot_fractal(_src) => _src[4] > _src[2] and _src[3] > _src[2] and _src[2] < _src[1] and _src[2] < _src[0]
    top_fractal    = f_top_fractal(src)
    bot_fractal    = f_bot_fractal(src)
    f_fractalize (_src) => top_fractal ? 1 : bot_fractal ? -1 : 0
    f_findDivs(src, topLimit, botLimit) =>
        fractalTop = f_fractalize(src) > 0 and src[2] >= topLimit ? src[2] : na
        fractalBot = f_fractalize(src) < 0 and src[2] <= botLimit ? src[2] : na
        highPrev   = ta.valuewhen(fractalTop, src[2], 0)[2]
        highPrice  = ta.valuewhen(fractalTop, high[2], 0)[2]
        lowPrev    = ta.valuewhen(fractalBot, src[2], 0)[2]
        lowPrice   = ta.valuewhen(fractalBot, low[2], 0)[2]
        bearSignal = fractalTop and high[1] > highPrice and src[1] < highPrev
        bullSignal = fractalBot and low[1] < lowPrice and src[1] > lowPrev
        [bearSignal, bullSignal]
        // Get user input
    enableSR   = input(false          , "SR On/Off", group="SR")
    colorSup   = input(#00000000        , "Support Color", group="SR")
    colorRes   = input(#00000000        , "Resistance Color", group="SR")
    strengthSR = input.int(2          , "S/R Strength", 1, group="SR")
    lineStyle  = input.string("Dotted", "Line Style", ["Solid", "Dotted", "Dashed"], group="SR")
    lineWidth  = input.int(2          , "S/R Line Width", 1, group="SR")
    useZones   = input(true           , "Zones On/Off", group="SR")
    useHLZones = input(true           , "High Low Zones On/Off", group="SR")
    zoneWidth  = input.int(2          , "Zone Width %", 0,
       tooltip = "it's calculated using % of the distance between highest/lowest in last 300 bars", group="SR")
    expandSR   = input(true           , "Expand SR")
    // Get components
    rb         = 10
    prd        = 284
    ChannelW   = 10
    label_loc  = 55
    style      = lineStyle == "Solid"  ? line.style_solid  :
                 lineStyle == "Dotted" ? line.style_dotted : line.style_dashed
    ph         = ta.pivothigh(rb, rb)
    pl         = ta.pivotlow (rb, rb)
    sr_levels  = array.new_float(21, na)
    prdhighest = ta.highest(prd)
    prdlowest  = ta.lowest(prd)
    cwidth     = percWidth(prd, ChannelW)
    zonePerc   = percWidth(300, zoneWidth)
    aas        = array.new_bool(41, true)
    u1         = 0.0, u1 := nz(u1[1])
    d1         = 0.0, d1 := nz(d1[1])
    highestph  = 0.0, highestph := highestph[1]
    lowestpl   = 0.0, lowestpl := lowestpl[1]
    
    var sr_levs   = array.new_float(21, na)
    label hlabel  = na, label.delete(hlabel[1])
    label llabel  = na, label.delete(llabel[1])
    var sr_lines  = array.new_line(21, na)
    var sr_linesH = array.new_line(21, na)
    var sr_linesL = array.new_line(21, na)
    var sr_linesF = array.new_linefill(21, na)
    var sr_labels = array.new_label(21, na)
    if ph or pl
        for x = 0 to array.size(sr_levels) - 1
            array.set(sr_levels, x, na)
        highestph := prdlowest
        lowestpl := prdhighest
        countpp = 0
        for x = 0 to prd
            if na(close[x])
                break
            if not na(ph[x]) or not na(pl[x])
                highestph := math.max(highestph, nz(ph[x], prdlowest), nz(pl[x], prdlowest))
                lowestpl := math.min(lowestpl, nz(ph[x], prdhighest), nz(pl[x], prdhighest))
                countpp += 1
                if countpp > 40
                    break
                if array.get(aas, countpp)
                    upl = (ph[x] ? high[x + rb] : low[x + rb]) + cwidth
                    dnl = (ph[x] ? high[x + rb] : low[x + rb]) - cwidth
                    u1 := countpp == 1 ? upl : u1
                    d1 := countpp == 1 ? dnl : d1
                    tmp = array.new_bool(41, true)
                    cnt = 0
                    tpoint = 0
                    for xx = 0 to prd
                        if na(close[xx])
                            break
                        if not na(ph[xx]) or not na(pl[xx])
                            chg = false
                            cnt += 1
                            if cnt > 40
                                break
                            if array.get(aas, cnt)
                                if not na(ph[xx])
                                    if high[xx + rb] <= upl and high[xx + rb] >= dnl
                                        tpoint += 1
                                        chg := true
                                if not na(pl[xx])
                                    if low[xx + rb] <= upl and low[xx + rb] >= dnl
                                        tpoint += 1
                                        chg := true
                            if chg and cnt < 41
                                array.set(tmp, cnt, false)
                    if tpoint >= strengthSR
                        for g = 0 to 40 by 1
                            if not array.get(tmp, g)
                                array.set(aas, g, false)
                        if ph[x] and countpp < 21
                            array.set(sr_levels, countpp, high[x + rb])
                        if pl[x] and countpp < 21
                            array.set(sr_levels, countpp, low[x + rb])
    // Plot
    var line highest_      = na, line.delete(highest_)
    var line lowest_       = na, line.delete(lowest_)
    var line highest_fill1 = na, line.delete(highest_fill1)
    var line highest_fill2 = na, line.delete(highest_fill2)
    var line lowest_fill1  = na, line.delete(lowest_fill1)
    var line lowest_fill2  = na, line.delete(lowest_fill2)
    hi_col = close >= highestph ? colorSup : colorRes
    lo_col = close >= lowestpl  ? colorSup : colorRes
    if enableSR
        highest_ := line.new(bar_index - 311, highestph, bar_index, highestph, xloc.bar_index, expandSR ? extend.both : extend.right, hi_col, style, lineWidth)
        lowest_  := line.new(bar_index - 311, lowestpl , bar_index, lowestpl , xloc.bar_index, expandSR ? extend.both : extend.right, lo_col, style, lineWidth)
        if useHLZones
            highest_fill1 := line.new(bar_index - 311, highestph + zonePerc, bar_index, highestph + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
            highest_fill2 := line.new(bar_index - 311, highestph - zonePerc, bar_index, highestph - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
            lowest_fill1  := line.new(bar_index - 311, lowestpl + zonePerc , bar_index, lowestpl + zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
            lowest_fill2  := line.new(bar_index - 311, lowestpl - zonePerc , bar_index, lowestpl - zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
            linefill.new(highest_fill1, highest_fill2, hi_col)
            linefill.new(lowest_fill1 , lowest_fill2 , lo_col)
    if ph or pl
        for x = 0 to array.size(sr_lines) - 1
            array.set(sr_levs, x, array.get(sr_levels, x))
    for x = 0 to array.size(sr_lines) - 1
        line.delete(array.get(sr_lines, x))
        line.delete(array.get(sr_linesH, x))
        line.delete(array.get(sr_linesL, x))
        linefill.delete(array.get(sr_linesF, x))
        if array.get(sr_levs, x) and enableSR
            line_col = close >= array.get(sr_levs, x) ? colorSup : colorRes
            array.set(sr_lines, x, line.new(bar_index - 355, array.get(sr_levs, x), bar_index, array.get(sr_levs, x), xloc.bar_index, expandSR ? extend.both : extend.right, line_col, style, lineWidth))
            if useZones
                array.set(sr_linesH, x, line.new(bar_index - 355, array.get(sr_levs, x) + zonePerc, bar_index, array.get(sr_levs, x) + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
                array.set(sr_linesL, x, line.new(bar_index - 355, array.get(sr_levs, x) - zonePerc, bar_index, array.get(sr_levs, x) - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
                array.set(sr_linesF, x, linefill.new(array.get(sr_linesH, x), array.get(sr_linesL, x), line_col))
    for x = 0 to array.size(sr_labels) - 1
        label.delete(array.get(sr_labels, x))
        if array.get(sr_levs, x) and enableSR
            lab_loc = close >= array.get(sr_levs, x) ? label.style_label_up : label.style_label_down
            lab_col = close >= array.get(sr_levs, x) ? colorSup             : colorRes
            array.set(sr_labels, x, label.new(bar_index + label_loc, array.get(sr_levs, x), str.tostring(math.round_to_mintick(array.get(sr_levs, x))), color=lab_col , textcolor=#000000, style=lab_loc))
    hlabel := enableSR ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, highestph, "High Level : " + str.tostring(highestph), color=hi_col, textcolor=#000000, style=label.style_label_down) : na
    llabel := enableSR ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, lowestpl , "Low  Level : " + str.tostring(lowestpl) , color=lo_col, textcolor=#000000, style=label.style_label_up  ) : na
    
    
    // Get components
    rsi       = ta.rsi(close, 28)
    //rsiOb     = rsi > 78 and rsi > ta.ema(rsi, 10)
    //rsiOs     = rsi < 27 and rsi < ta.ema(rsi, 10)
    rsiOb     = rsi > 65 and rsi > ta.ema(rsi, 10)
    rsiOs     = rsi < 35 and rsi < ta.ema(rsi, 10)
    dHigh     = securityNoRep(syminfo.tickerid, "D", high [1])
    dLow      = securityNoRep(syminfo.tickerid, "D", low  [1])
    dClose    = securityNoRep(syminfo.tickerid, "D", close[1])
    ema = ta.ema(close, 144)
    emaBull = close > ema
    equal_tf(res) => str.tonumber(res) == f_chartTfInMinutes() and not timeframe.isseconds
    higher_tf(res) => str.tonumber(res) > f_chartTfInMinutes() or timeframe.isseconds
    too_small_tf(res) => (timeframe.isweekly and res=="1") or (timeframe.ismonthly and str.tonumber(res) < 10)
    securityNoRep1(sym, res, src) =>
        bool bull_ = na
        bull_ := equal_tf(res) ? src : bull_
        bull_ := higher_tf(res) ? request.security(sym, res, src, barmerge.gaps_off, barmerge.lookahead_off) : bull_
        bull_array = request.security_lower_tf(syminfo.tickerid, higher_tf(res) ? str.tostring(f_chartTfInMinutes()) + (timeframe.isseconds ? "S" : "") : too_small_tf(res) ? (timeframe.isweekly ? "3" : "10") : res, src)
        if array.size(bull_array) > 1 and not equal_tf(res) and not higher_tf(res)
            bull_ := array.pop(bull_array)
        array.clear(bull_array)
        bull_
    // TF1Bull   = securityNoRep1(syminfo.tickerid, "1"   , emaBull)
    // TF3Bull   = securityNoRep1(syminfo.tickerid, "3"   , emaBull)
    // TF5Bull   = securityNoRep1(syminfo.tickerid, "5"   , emaBull)
    // TF15Bull  = securityNoRep1(syminfo.tickerid, "15"  , emaBull)
    // TF30Bull  = securityNoRep1(syminfo.tickerid, "30"  , emaBull)
    // TF60Bull  = securityNoRep1(syminfo.tickerid, "60"  , emaBull)
    // TF120Bull = securityNoRep1(syminfo.tickerid, "120" , emaBull)
    // TF240Bull = securityNoRep1(syminfo.tickerid, "240" , emaBull)
    // TF480Bull = securityNoRep1(syminfo.tickerid, "480" , emaBull)
    // TFDBull   = securityNoRep1(syminfo.tickerid, "1440", emaBull)
    // [wt1, wt2] = wavetrend(close, 5, 10)
    // [wtDivBear1, wtDivBull1] = f_findDivs(wt2, 15, -40)
    // [wtDivBear2, wtDivBull2] = f_findDivs(wt2, 45, -65)
    // wtDivBull = wtDivBull1 or wtDivBull2
    // wtDivBear = wtDivBear1 or wtDivBear2
    ////////////////////////////////////////////////////////
    // === BASE FUNCTIONS ===
    // Returns MA input selection variant, default to SMA if blank or typo.
    variant(type, src, len, offSig, offALMA) =>
        v1    = ta.sma(src, len)  // Simple
        v2    = ta.ema(src, len)  // Exponential
        v3    = 2 * v2 - ta.ema(v2, len)  // Double Exponential
        v4    = 3 * (v2 - ta.ema(v2, len)) + ta.ema(ta.ema(v2, len), len)  // Triple Exponential
        v5    = ta.wma(src, len)  // Weighted
        v6    = ta.vwma(src, len)  // Volume Weighted
        v7    = 0.0
        sma_1 = ta.sma(src, len)  // Smoothed
        v7   := na(v7[1]) ? sma_1 : (v7[1] * (len - 1) + src) / len
        v8    = ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len)))  // Hull
        v9    = ta.linreg(src, len, offSig)  // Least Squares
        v10   = ta.alma(src, len, offALMA, offSig)  // Arnaud Legoux
        v11   = ta.sma(v1, len)  // Triangular (extreme smooth)
        // SuperSmoother filter
        //   2013  John F. Ehlers
        a1    = math.exp(-1.414 * 3.14159 / len)
        b1    = 2 * a1 * math.cos(1.414 * 3.14159 / len)
        c2    = b1
        c3    = -a1 * a1
        c1    = 1 - c2 - c3
        v12   = 0.0
        v12  := c1 * (src + nz(src[1])) / 2 + c2 * nz(v12[1]) + c3 * nz(v12[2])
        type == 'EMA' ? v2 : type == 'DEMA' ? v3 : type == 'TEMA' ? v4 : type == 'WMA' ? v5 : type == 'VWMA' ? v6 : type == 'SMMA' ? v7 : type == 'HullMA' ? v8 : type == 'LSMA' ? v9 : type == 'ALMA' ? v10 : type == 'TMA' ? v11 : type == 'SSMA' ? v12 : v1
    
    // security wrapper for repeat calls
    reso(exp, use, res) =>
        security_1 = request.security(syminfo.tickerid, res, exp, gaps = barmerge.gaps_off, lookahead = barmerge.lookahead_off)
        use ? security_1 : exp
    
    // === /BASE FUNCTIONS ===
    // === SERIES SETUP ===
    closeSeries = variant(basisType, close[delayOffset], basisLen, offsetSigma, offsetALMA)
    openSeries  = variant(basisType, open[delayOffset],  basisLen, offsetSigma, offsetALMA)
    // === /SERIES ===
    
    // Get Alternate resolution Series if selected.
    closeSeriesAlt = reso(closeSeries, useRes, stratRes)
    openSeriesAlt  = reso(openSeries, useRes, stratRes)
    //
    // // === ALERT conditions
    // xlong     = ta.crossover(closeSeriesAlt, openSeriesAlt)
    // xshort    = ta.crossunder(closeSeriesAlt, openSeriesAlt)
    // // longCond  = xlong  // alternative: longCond[1]? false : (xlong or xlong[1]) and close>closeSeriesAlt and close>=open
    // // shortCond = xshort  // alternative: shortCond[1]? false : (xshort or xshort[1]) and close<closeSeriesAlt and close<=open
    // // // === /ALERT conditions.
    // buy       = ta.crossover(closeSeriesAlt, openSeriesAlt)
    // sell      = ta.crossunder(closeSeriesAlt, openSeriesAlt)
    
    // plotshape(buy,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= #00DBFF, textcolor = #FFFFFF, transp = 0, size = size.tiny)
    // plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= #E91E63, textcolor = #FFFFFF, transp = 0, size = size.tiny)
    
    // plotcandle(
      // open, high, low, close,
      // title     = 'plotcandle',
      // color     = close > open ? color.rgb(120, 9, 139) : color.rgb(69, 155, 225),
      // wickcolor = close > open ? color.rgb(120, 9, 139) : color.rgb(69, 155, 225))
    
    
    // // === STRATEGY ===
    // // stop loss
    // slPoints = input.int(defval=0, title = 'Initial Stop Loss Points (zero to disable)', minval=0)
    // tpPoints = input.int(defval=0, title = 'Initial Target Profit Points (zero for disable)', minval=0)
    // // Include bar limiting algorithm
    // ebar     = input.int(defval=4000, title = 'Number of Bars for Back Testing', minval=0)
    // dummy    = input    (false, title = '- SET to ZERO for Daily or Longer Timeframes')
    // //
    // // Calculate how many mars since last bar
    // tdays    = (timenow - time) / 60000.0  // number of minutes since last bar
    // tdays   := timeframe.ismonthly ? tdays / 1440.0 / 5.0 / 4.3 / timeframe.multiplier :
               // timeframe.isweekly  ? tdays / 1440.0 / 5.0 / timeframe.multiplier       :
               // timeframe.isdaily   ? tdays / 1440.0 / timeframe.multiplier             :
               // tdays / timeframe.multiplier  // number of bars since last bar
    // //
    // //set up exit parameters
    // TP = tpPoints > 0 ? tpPoints : na
    // SL = slPoints > 0 ? slPoints : na
    
    // // === /STRATEGY ===
    // ////////////////////////////////////////////////////////////////////////////////
    // // to automate put this in trendinview message:     {{strategy.order.alert_message}}
    // i_alert_txt_entry_long  = input.text_area(defval = "", title = "Long Entry Message",  group = "Alerts")
    // i_alert_txt_entry_short = input.text_area(defval = "", title = "Short Entry Message", group = "Alerts")
    
    // // Entries and Exits with TP/SL
    // if buy
        // //strategy.close("Short" , alert_message = i_alert_txt_exit_short)
        // strategy.entry("Long" , strategy.long , alert_message = i_alert_txt_entry_long)
        // alert(message = "Long position")
    
    // if sell
        // //strategy.close("Long" , alert_message = i_alert_txt_exit_long)
        // strategy.entry("Short" , strategy.short, alert_message = i_alert_txt_entry_short)
        // alert(message = "SHort position")
    
    
    //#endregion }
    // ——————————— <↑↑↑ G_SCRIPT01 ↑↑↑>
    
    //<triggers>
    lxTrigger    = false
    sxTrigger    = false
    leTrigger    = ta.crossover (closeSeriesAlt, openSeriesAlt)
    seTrigger    = ta.crossunder(closeSeriesAlt, openSeriesAlt)
    
    G_RISK       = '■ ' + 'Risk Management'
    //#region ———— <↓↓↓ G_RISK ↓↓↓> {
    
    // ——————————— <constant_declarations>
    //Tooltip
    T_LVL        = '(%) Exit Level'
    T_QTY        = '(%) Adjust trade exit volume'
    T_MSG        = 'Paste JSON message for your bot'
    
    //Webhook Message
    O_LEMSG      = 'Long'
    O_LXMSGSL    = 'Long SL'
    O_LXMSGTP1   = 'Long TP1'
    O_LXMSGTP2   = 'Long TP2'
    O_LXMSGTP3   = 'Long TP3'
    O_LXMSG      = 'Long Exit'
    O_SEMSG      = 'Short'
    O_SXMSGSL    = 'Short SL'
    O_SXMSGA     = 'Short TP1'
    O_SXMSGB     = 'Short TP2'
    O_SXMSGC     = 'Short TP3'
    O_SXMSGX     = 'Short Exit'
    
    // ——————————— <input>          |           |                               |                        Line length guide |
    i_lxLvlTP1   = input.float      (0.5,         'Level TP1'                     , group = G_RISK,
         tooltip =                   T_LVL)
    i_lxQtyTP1   = input.float      (80,        'Qty   TP1'                     , group = G_RISK,
         tooltip =                   T_QTY)
    i_lxLvlTP2   = input.float      (1.0,       'Level TP2'                     , group = G_RISK,
         tooltip =                   T_LVL)
    i_lxQtyTP2   = input.float      (10,        'Qty   TP2'                     , group = G_RISK,
         tooltip =                   T_QTY)
    i_lxLvlTP3   = input.float      (4,         'Level TP3'                     , group = G_RISK,
         tooltip =                   T_LVL)
    i_lxQtyTP3   = input.float      (10,        'Qty   TP3'                     , group = G_RISK,
         tooltip =                   T_QTY)
    i_lxLvlSL    = input.float      (0.5,       'Stop Loss'                     , group = G_RISK,
         tooltip =                   T_LVL)
    i_sxLvlTP1   = i_lxLvlTP1
    i_sxQtyTP1   = i_lxQtyTP1
    i_sxLvlTP2   = i_lxLvlTP2
    i_sxQtyTP2   = i_lxQtyTP2
    i_sxLvlTP3   = i_lxLvlTP3
    i_sxQtyTP3   = i_lxQtyTP3
    i_sxLvlSL    = i_lxLvlSL
    
    G_MSG        = '■ ' + 'Webhook Message'
    i_leMsg      = input.string     (O_LEMSG   ,'long'                         , group = G_MSG, tooltip = T_MSG)
    i_lxMsgSL    = input.string     (O_LXMSGSL ,'Long SL'                      , group = G_MSG, tooltip = T_MSG)
    i_lxMsgTP1   = input.string     (O_LXMSGTP1,'Long TP1'                     , group = G_MSG, tooltip = T_MSG)
    i_lxMsgTP2   = input.string     (O_LXMSGTP2,'Long TP2'                     , group = G_MSG, tooltip = T_MSG)
    i_lxMsgTP3   = input.string     (O_LXMSGTP3,'Long TP3'                     , group = G_MSG, tooltip = T_MSG)
    i_lxMsg      = input.string     (O_LXMSG   ,'Long Exit'                    , group = G_MSG, tooltip = T_MSG)
    i_seMsg      = input.string     (O_SEMSG   ,'Short'                        , group = G_MSG, tooltip = T_MSG)
    i_sxMsgSL    = input.string     (O_SXMSGSL ,'Short SL'                     , group = G_MSG, tooltip = T_MSG)
    i_sxMsgTP1   = input.string     (O_SXMSGA  ,'Short TP1'                    , group = G_MSG, tooltip = T_MSG)
    i_sxMsgTP2   = input.string     (O_SXMSGB  ,'Short TP2'                    , group = G_MSG, tooltip = T_MSG)
    i_sxMsgTP3   = input.string     (O_SXMSGC  ,'Short TP3'                    , group = G_MSG, tooltip = T_MSG)
    i_sxMsg      = input.string     (O_SXMSGX  ,'Short Exit'                   , group = G_MSG, tooltip = T_MSG)
    i_src        = close
    
    G_DISPLAY    = 'Display'
    //<display>
    i_alertOn    = input.bool       (true,      'Alert Labels On/Off'          , group = G_DISPLAY)
    i_barColOn   = input.bool       (true,      'Bar Color On/Off'             , group = G_DISPLAY)
    
    // ——————————— <function_declarations>
    // @function        Calculate the Take Profit line, and the crossover or crossunder
    f_tp(_condition, _conditionValue, _leTrigger, _seTrigger, _src, _lxLvlTP, _sxLvlTP)=>
        var float _tpLine = 0.0
        _topLvl     = _src + (_src * (_lxLvlTP / 100))
        _botLvl     = _src - (_src * (_sxLvlTP / 100))
        _tpLine    := _condition[1] !=  _conditionValue and _leTrigger ? _topLvl :
                      _condition[1] != -_conditionValue and _seTrigger ? _botLvl :
                      nz(_tpLine[1])
        [_tpLine]
    
    // @function        Similar to "ta.crossover" or "ta.crossunder"
    f_cross(_scr1, _scr2, _over)=>
        _cross   = _over ? _scr1 > _scr2 and _scr1[1] < _scr2[1] :
                           _scr1 < _scr2 and _scr1[1] > _scr2[1]
    
    // ——————————— <calculations>
    //<set initial values>
    var float condition = 0.0
    var float slLine    = 0.0
    var float entryLine = 0.0
    
    //<entry & exit orders>
    entryLine   := leTrigger and condition[1] <=  0.0 ? close :
                   seTrigger and condition[1] >=  0.0 ? close : nz(entryLine[1])
    //<SL>
    slTopLvl    = i_src + (i_src * (i_lxLvlSL / 100))
    slBotLvl    = i_src - (i_src * (i_sxLvlSL / 100))
    slLine     := condition[1] <=  0.0 and leTrigger ? slBotLvl :
                  condition[1] >=  0.0 and seTrigger ? slTopLvl : nz(slLine[1])
    slLong      = f_cross(low,  slLine, false)
    slShort     = f_cross(high, slLine, true )
    //<TP1, TP2 & TP3>
    [tp3Line]    = f_tp(condition, 1.2,leTrigger, seTrigger, i_src, i_lxLvlTP3, i_sxLvlTP3)
    [tp2Line]    = f_tp(condition, 1.1,leTrigger, seTrigger, i_src, i_lxLvlTP2, i_sxLvlTP2)
    [tp1Line]    = f_tp(condition, 1.0,leTrigger, seTrigger, i_src, i_lxLvlTP1, i_sxLvlTP1)
    tp3Long      = f_cross(high, tp3Line, true )
    tp3Short     = f_cross(low,  tp3Line, false)
    tp2Long      = f_cross(high, tp2Line, true )
    tp2Short     = f_cross(low,  tp2Line, false)
    tp1Long      = f_cross(high, tp1Line, true )
    tp1Short     = f_cross(low,  tp1Line, false)
    
    switch
        leTrigger and condition[1] <=  0.0 => condition :=  1.0
        seTrigger and condition[1] >=  0.0 => condition := -1.0
        tp3Long   and condition[1] ==  1.2 => condition :=  1.3
        tp3Short  and condition[1] == -1.2 => condition := -1.3
        tp2Long   and condition[1] ==  1.1 => condition :=  1.2
        tp2Short  and condition[1] == -1.1 => condition := -1.2
        tp1Long   and condition[1] ==  1.0 => condition :=  1.1
        tp1Short  and condition[1] == -1.0 => condition := -1.1
        slLong    and condition[1] >=  1.0 => condition :=  0.0
        slShort   and condition[1] <= -1.0 => condition :=  0.0
        lxTrigger and condition[1] >=  1.0 => condition :=  0.0
        sxTrigger and condition[1] <= -1.0 => condition :=  0.0
    
    longE        = leTrigger and condition[1] <=  0.0 and condition ==  1.0
    shortE       = seTrigger and condition[1] >=  0.0 and condition == -1.0
    longX        = lxTrigger and condition[1] >=  1.0 and condition ==  0.0
    shortX       = sxTrigger and condition[1] <= -1.0 and condition ==  0.0
    longSL       = slLong    and condition[1] >=  1.0 and condition ==  0.0
    shortSL      = slShort   and condition[1] <= -1.0 and condition ==  0.0
    longTP3      = tp3Long   and condition[1] ==  1.2 and condition ==  1.3
    shortTP3     = tp3Short  and condition[1] == -1.2 and condition == -1.3
    longTP2      = tp2Long   and condition[1] ==  1.1 and condition ==  1.2
    shortTP2     = tp2Short  and condition[1] == -1.1 and condition == -1.2
    longTP1      = tp1Long   and condition[1] ==  1.0 and condition ==  1.1
    shortTP1     = tp1Short  and condition[1] == -1.0 and condition == -1.1
    
    // ——————————— <strategy_calls> {
    //<long orders>
    if strategy.position_size <= 0 and longE and barstate.isconfirmed
        strategy.entry(
          'Long',
          strategy.long,
          alert_message    = i_leMsg,
          comment          = 'LE')
    if strategy.position_size > 0 and condition ==  1.0
        strategy.exit(
          id               = 'LXTP1',
          from_entry       = 'Long',
          qty_percent      = i_lxQtyTP1,
          limit            = tp1Line,
          stop             = slLine,
          comment_profit   = 'LXTP1',
          comment_loss     = 'SL',
          alert_profit     = i_lxMsgTP1,
          alert_loss       = i_lxMsgSL)
    if strategy.position_size > 0 and condition ==  1.1
        strategy.exit(
          id               = 'LXTP2',
          from_entry       = 'Long',
          qty_percent      = i_lxQtyTP2,
          limit            = tp2Line,
          stop             = slLine,
          comment_profit   = 'LXTP2',
          comment_loss     = 'SL',
          alert_profit     = i_lxMsgTP2,
          alert_loss       = i_lxMsgSL)
    if strategy.position_size > 0 and condition ==  1.2
        strategy.exit(
          id               = 'LXTP3',
          from_entry       = 'Long',
          qty_percent      = i_lxQtyTP3,
          limit            = tp3Line,
          stop             = slLine,
          comment_profit   = 'LXTP3',
          comment_loss     = 'SL',
          alert_profit     = i_lxMsgTP3,
          alert_loss       = i_lxMsgSL)
    if longX
        strategy.close(
          'Long',
          alert_message    = i_lxMsg,
          comment          = 'LX')
    //<short orders>
    if strategy.position_size >= 0 and shortE and barstate.isconfirmed
        strategy.entry(
          'Short',
          strategy.short,
          alert_message    = i_leMsg,
          comment          = 'SE')
    if strategy.position_size < 0 and condition == -1.0
        strategy.exit(
          id               = 'SXTP1',
          from_entry       = 'Short',
          qty_percent      = i_sxQtyTP1,
          limit            = tp1Line,
          stop             = slLine,
          comment_profit   = 'SXTP1',
          comment_loss     = 'SL',
          alert_profit     = i_sxMsgTP1,
          alert_loss       = i_sxMsgSL)
    if strategy.position_size < 0 and condition == -1.1
        strategy.exit(
          id               = 'SXTP2',
          from_entry       = 'Short',
          qty_percent      = i_sxQtyTP2,
          limit            = tp2Line,
          stop             = slLine,
          comment_profit   = 'SXTP2',
          comment_loss     = 'SL',
          alert_profit     = i_sxMsgTP2,
          alert_loss       = i_sxMsgSL)
    if strategy.position_size < 0 and condition == -1.2
        strategy.exit(
          id               = 'SXTP3',
          from_entry       = 'Short',
          qty_percent      = i_sxQtyTP3,
          limit            = tp3Line,
          stop             = slLine,
          comment_profit   = 'SXTP3',
          comment_loss     = 'SL',
          alert_profit     = i_sxMsgTP3,
          alert_loss       = i_sxMsgSL)
    if shortX
        strategy.close(
          'Short',
          alert_message    = i_sxMsg,
          comment          = 'SX')
    
    // ——————————— <visuals>
    c_tp         = leTrigger or seTrigger ? na :
                   condition == 0.0       ? na : color.green
    c_entry      = leTrigger or seTrigger ? na :
                   condition == 0.0       ? na : color.blue
    c_sl         = leTrigger or seTrigger ? na :
                   condition == 0.0       ? na : color.red
    p_tp1Line    = plot (
      condition ==  1.0 or
      condition == -1.0 ? tp1Line : na,
      title      = "TP Line 1",
      color      = c_tp,
      linewidth  = 1,
      style      = plot.style_linebr)
    p_tp2Line    = plot (
      condition ==  1.0 or
      condition == -1.0 or
      condition ==  1.1 or
      condition == -1.1 ? tp2Line : na,
      title      = "TP Line 2",
      color      = c_tp,
      linewidth  = 1,
      style      = plot.style_linebr)
    p_tp3Line    = plot (
      condition ==  1.0 or
      condition == -1.0 or
      condition ==  1.1 or
      condition == -1.1 or
      condition ==  1.2 or
      condition == -1.2 ? tp3Line : na,
      title      = "TP Line 3",
      color      = c_tp,
      linewidth  = 1,
      style      = plot.style_linebr)
    p_entryLine  = plot (
      condition >=  1.0 or
      condition <= -1.0 ? entryLine : na,
      title      = "Entry Line",
      color      = c_entry,
      linewidth  = 1,
      style      = plot.style_linebr)
    p_slLine     = plot (
      condition ==  1.0 or
      condition == -1.0 or
      condition ==  1.1 or
      condition == -1.1 or
      condition ==  1.2 or
      condition == -1.2 ? slLine : na,
      title      = "SL Line",
      color      = c_sl,
      linewidth  = 1,
      style      = plot.style_linebr)
    fill(
      p_tp3Line, p_entryLine,
      color      = leTrigger or seTrigger ? na :color.new(color.green, 90))
    fill(
      p_entryLine, p_slLine,
      color      = leTrigger or seTrigger ? na :color.new(color.red, 90))
    
    //<alerts labels>
    plotshape(
      i_alertOn and longE,
      title      = 'Long',
      text       = 'Long',
      textcolor  = color.white,
      color      = color.green,
      style      = shape.labelup,
      size       = size.tiny,
      location   = location.belowbar)
    plotshape(
      i_alertOn and shortE,
      title      = 'Short',
      text       = 'Short',
      textcolor  = color.white,
      color      = color.red,
      style      = shape.labeldown,
      size       = size.tiny,
      location   = location.abovebar)
    plotshape(
      i_alertOn and (longX or shortX) ? close : na,
      title      = 'Close',
      text       = 'Close',
      textcolor  = color.white,
      color      = color.gray,
      style      = shape.square,
      size       = size.tiny,
      location   = location.absolute)
    l_tp         = i_alertOn and (longTP1 or shortTP1) ? close : na
    plotshape(
      l_tp,
      title      = "TP1 Cross",
      text       = "TP1",
      textcolor  = color.white,
      color      = color.olive,
      style      = shape.square,
      size       = size.tiny,
      location   = location.abovebar)
    plotshape(
      i_alertOn and (longTP2 or shortTP2) ? close : na,
      title      = "TP2 Cross",
      text       = "TP2",
      textcolor  = color.white,
      color      = color.olive,
      style      = shape.square,
      size       = size.tiny,
      location   = location.abovebar)
    plotshape(
      i_alertOn and (longTP3 or shortTP3) ? close : na,
      title      = "TP3 Cross",
      text       = "TP3",
      textcolor  = color.white,
      color      = color.olive,
      style      = shape.square,
      size       = size.tiny,
      location   = location.abovebar)
    plotshape(
      i_alertOn and (longSL or shortSL) ? close : na,
      title      = "SL Cross",
      text       = "SL",
      textcolor  = color.white,
      color      = color.maroon,
      style      = shape.square,
      size       = size.tiny,
      location   = location.abovebar)
    
    //<debug>
    plot(
      na,
      title      = "─── <debug> ───",
      editable   = false,
      display    = display.data_window)
    plot(
      condition,
      title      = "condition",
      editable   = false,
      display    = display.data_window)
    plot(
      strategy.position_size * 100,
      title      = ".position_size",
      editable   = false,
      display    = display.data_window)
    //#endregion }
    // ——————————— <↑↑↑ G_RISK ↑↑↑>
    
    //#region ———— <↓↓↓ G_SCRIPT02 ↓↓↓> {
    // @function        Queues a new element in an array and de-queues its first element.
    f_qDq(_array, _val) =>
        array.push(_array, _val)
        _return = array.shift(_array)
        _return
    
    var line[]  a_slLine     = array.new_line(1)
    var line[]  a_entryLine  = array.new_line(1)
    var line[]  a_tp3Line    = array.new_line(1)
    var line[]  a_tp2Line    = array.new_line(1)
    var line[]  a_tp1Line    = array.new_line(1)
    var label[] a_slLabel    = array.new_label(1)
    var label[] a_tp3label   = array.new_label(1)
    var label[] a_tp2label   = array.new_label(1)
    var label[] a_tp1label   = array.new_label(1)
    var label[] a_entryLabel = array.new_label(1)
    
    newEntry     = longE or shortE
    entryIndex   = 1
    entryIndex  := newEntry ? bar_index : nz(entryIndex[1])
    lasTrade     = bar_index >= entryIndex
    l_right      = 10
    
    line.delete(
      f_qDq(a_slLine,
      line.new(
       entryIndex,
       slLine,
       last_bar_index + l_right,
       slLine,
       style = line.style_dotted,
       color = c_sl)))
    line.delete(
      f_qDq(a_entryLine,
      line.new(
       entryIndex,
       entryLine,
       last_bar_index + l_right,
       entryLine,
       style = line.style_dotted,
       color = color.blue)))
    line.delete(
      f_qDq(a_tp3Line,
      line.new(
       entryIndex,
       tp3Line,
       last_bar_index + l_right,
       tp3Line,
       style = line.style_dotted,
       color = c_tp)))
    line.delete(
      f_qDq(a_tp2Line,
      line.new(
       entryIndex,
       tp2Line,
       last_bar_index + l_right,
       tp2Line,
       style = line.style_dotted,
       color = c_tp)))
    line.delete(
      f_qDq(a_tp1Line,
      line.new(
       entryIndex,
       tp1Line,
       last_bar_index + l_right,
       tp1Line,
       style = line.style_dotted,
       color = c_tp)))
    
    label.delete(
      f_qDq(a_slLabel,
      label.new(
       last_bar_index + l_right,
       slLine,
       'SL: ' + str.tostring(slLine, '##.#####'),
       style = label.style_label_left,
       textcolor  = color.white,
       color = c_sl)))
    label.delete(
      f_qDq(a_entryLabel,
      label.new(
       last_bar_index + l_right,
       entryLine,
       'Entry: ' + str.tostring(entryLine, '##.#####'),
       style = label.style_label_left,
       textcolor  = color.white,
       color = color.blue)))
    label.delete(
      f_qDq(a_tp3label,
      label.new(
       last_bar_index + l_right,
       tp3Line,
       'TP3: ' + str.tostring(tp3Line, '##.#####'),
       style = label.style_label_left,
       textcolor  = color.white,
       color = c_tp)))
    label.delete(
      f_qDq(a_tp2label,
      label.new(
       last_bar_index + l_right,
       tp2Line,
       'TP2: ' + str.tostring(tp2Line, '##.#####'),
       style = label.style_label_left,
       textcolor  = color.white,
       color = c_tp)))
    label.delete(
      f_qDq(a_tp1label,
      label.new(
       last_bar_index + l_right,
       tp1Line,
       'TP1: ' + str.tostring(tp1Line, '##.#####'),
       style = label.style_label_left,
       textcolor  = color.white,
       color = c_tp)))
    
    //#endregion }
    // ——————————— <↑↑↑ G_SCRIPT02 ↑↑↑>
    
    //#region ———— <↓↓↓ G_SCRIPT03 ↓↓↓> {
    c_barCol = close > open ? color.rgb(120, 9, 139) : color.rgb(69, 155, 225)
    barcolor(
      i_barColOn ? c_barCol : na)
    
    // ——————————— <alerts>
    //<any_alert_function_call>
    if longE
        alert(message = 'Long Entry',  freq = alert.freq_once_per_bar_close)
    if longTP1
        alert(message = 'Long TP1',  freq = alert.freq_once_per_bar)
    if longTP2
        alert(message = 'Long TP2',  freq = alert.freq_once_per_bar)
    if longTP3
        alert(message = 'Long TP3',  freq = alert.freq_once_per_bar)
    if longSL
        alert(message = 'Long SL',  freq = alert.freq_once_per_bar)
    if longX
        alert(message = 'Long Exit',   freq = alert.freq_once_per_bar_close)
    
    if shortE
        alert(message = 'Short Entry', freq = alert.freq_once_per_bar_close)
    if shortTP1
        alert(message = 'Short TP1', freq = alert.freq_once_per_bar)
    if shortTP2
        alert(message = 'Short TP2', freq = alert.freq_once_per_bar)
    if shortTP3
        alert(message = 'Short TP3', freq = alert.freq_once_per_bar)
    if shortSL
        alert(message = 'Short SL', freq = alert.freq_once_per_bar)
    if shortX
        alert(message = 'Short Exit',  freq = alert.freq_once_per_bar_close)
    //#endregion }
    // ——————————— <↑↑↑ G_SCRIPT03 ↑↑↑>

    شرح اضافة المؤشر بالتريدنق فيو

    https://vt.tiktok.com/ZSHpjfpaWJ6Vs-HSHrQ/

  • حكم التداول في الأسواق المالية (الفوركس) من منظور الشريعة الإسلامية


    حكم التداول في الأسواق المالية (الفوركس) من منظور الشريعة الإسلامية

    ١. ✅ السياق الشرعي للتداول

    • الذكوريات: الإسلام يجيز التجارة وفقًا للعرض والطلب، ويحرّم “الربا (الفائدة)”، و”الغرر (الشك وعدم الوضوح)”، و”القمار (الميسر)” (primexbt.com).
    • تطبيق التداول: في التداول اليومي كسوق الفوركس أو المعادن، إذا توفرت شروط الشريعة، يصبح حلالاً.

    ٢. ⚠️ المشكلات الرئيسية في التداول المعاصِر

    • الربا (Riba): تنتج عمومًا عن دفع أو تلقّي فوائد عند التبييت (الـSwap) (investing.com).
    • الغرر (Gharar): تتمثل في الغموض في الصفقة، خاصة عند استخدام المشتقات مثل العقود مقابل الفرق CFD أو عند استخدام الرافعة المالية العالية .
    • الميسر (Maisir): يظهر عند التداول المضارب قصير الأمد بدون دراسة أو تخطيط، بربط الربح والخسارة بالحظ وليس بالتحليل (primexbt.com).

    ٣. ✅ متى يكون التداول حلالاً؟

    (أ) البيع والتسليم الفوري

    • يجب أن يتم تبادل العملات أو المعادن فوريًا (بمعنى قبض نقدي أو إلكتروني فور الصفقة) – وهو ما يُعرف بـ(بىل Sarf الفوري) .

    (ب) تجنّب الربا والـ Swap

    • تداول بدون فوائد عند التبييت يُممكن تحقيقه عبر “حسابات إسلامية” أو “swap‑free” (primexbt.com).
    • رغم أن الحسابات الإسلامية تُلغي الفوائد، يجب فحص الرسوم الأخرى (مثل الزيادة في السبريد أو عمولات إضافية) مع الحذر من أي شكل من الربا الخفي (fxempire.com).

    (ج) استخدام رافعة مالية 1:1 فقط

    • الرافعة المالية تعني قرض من الوسيط، فإذا كانت تسمح برافعة بدون فوائد وبدون دين، فقد تُعد مقبولة.
    • أما الرافعة التقليدية (بتكلفة فائدة أو ضمن قرض)، فهي محرّمة .

    (د) تجنب المشتقات والخيارات والتداول من دون ملكية

    • استخدام CFD أو الخيارات (Options/Futures) غالبًا يُشبه القمار والربح من دون تملك شيء ملموس .

    ٤. 🕌 الأصول المباحة للتداول

    يمكن أن تكون الأصول التالية مشروعة إذا اتبعت الشروط:

    • العملات الأجنبية: بشرط أنك تمتلكها فورًا ولا تستخدم فوائد أو رافعة مالية محرمة .
    • الذهب والفضة: مسموح بالتداول الفوري خاصة عند وجود تسليم إلكتروني ﹣ مع الاحتفاظ بالشروط الشرعية .
    • المؤشرات والأسهم: مسموح بها إذا كانت الأسهم في شركات حلال (لا تدخل في الربا أو المحرمات) .
    • النفط والسلع الأخرى: يجوز التداول بها بشرط عدم وجود فوائد أو غموض في العقد (reddit.com).
    • العملات الرقمية: الخلاف قائم وقد يُعتبر غالبًا غير جائز بسبب الشبهات الكثيرة .

    ٥. 🔍 الشركات التي توفر حسابات “حلال”

    عدد من الوسطاء العالميين يعرضون حسابات إسلامية مُعدّة خصيصًا:

    الوسيطالتراخيصملاحظات
    AvaTradeFSCA, CBIيقدم حساب Swap‑Free ويسمح بالتداول في العملات والذهب والنفط بدون سبريد Swap (avatrade.com).
    FXEmpire (توصيات 2025)CySEC, ASIC إلخ.حسابات إسلامية مع فترة سماح ورسوم إدارية محدودة .
    FxViewيوفر حسابات خالية من الفوائد حتى 1000× رافعة، لكن لا بد من مراجعة رسوم إضافية .

    تذكّر: التأكد من دعم الشركة لشروط الشريعة (لا فوائد خفية، تسليم فوري، رافعة قانونية) من مسؤول الشريعة أو خدمة العملاء.


    ٦. 🧭 خلاصة تطبيقية

    • تحاشى كل ما فيه فوائد أو رافعة مالية تقليدية.
    • استخدم حساب إسلامي بنسبة رافعة 1:1.
    • تداول فقط بأصول مباحة وتجنب المضاربة المكشوفة.
    • احرص على التحقق المستمر من شفافية الوسطاء.

    جدولًا منسقًا يوضح أفضل الوسطاء الإسلاميين (حسابات إسلامية بدون فائدة)، بالإضافة إلى العملات الرقمية، المعادن، الأسهم الحلال، وأزواج العملات الرئيسية المحرمة شرعًا أو الجائزة:


    🏦 الوسطاء الإسلاميون (حسابات بدون فوائد)

    استنادًا إلى أحدث التقييمات لعام 2025 :

    الوسيطالترخيصالحد الأدنى للإيداعمنصات التداولملاحظات شرعية
    FP MarketsCySEC، ASIC$100MT4, MT5, cTraderحسابات Islamic Standard وRaw؛ رسوم إدارية خفيفة بعد 10 أيام (fxempire.com)
    IC MarketsCySEC، ASIC$200MT4, MT5, cTraderرافعة قصوى عالية، إلغاء السواب، رسوم إدارية ثابتة حسب الصك
    Octa(ليس واضح في الترخيص)$25غير محددأفضل حساب Islamic مجمع
    eToroFINRA، SEC (للولايات المتحدة) + تراخيص عالمية$1,000منصة خاصةيقدم 55 زوج FX إسلامي دون فوائد أو سبريد إضافي
    AvaTradeFSCA، CBI$100MT4, MT5حسابات Swap‑Free؛ بعض الأزواج محدودة وجب التأكد من السبريد

    💱 العملات الرقمية المتوافقة مع الشريعة

    استنادًا إلى مصادر متخصصة :

    • Bitcoin (BTC)، Ethereum (ETH): جائزة كأصول رقمية حقيقية إذا لم تُستخدم في المضاربة أو المقامرة .
    • OneGram (OGC)، HelloGold (HGT)، X8X Token: مثبتة شرعيًا (مدعومة بذهب أو سلال عملات) (coinranking.com).
    • شبكات شرعية: مثل Haqq chain التي صدرت بشأن شرعي بالاستناد إلى صناديق إسلامية (nasdaq.com).

    🛑 ملاحظة: العملات الأخرى يُحتمل وجود شبهة بسبب الغرر أو الاستخدام في الأنشطة المحرمة، ومستحسن استشارة أهل العلم.


    🪙 المعادن (الذهب والفضة)

    • الذهب والفضة جائزان إذا كان التداول يتم فوريًا (تسليم إلكتروني أو قبض لحظي).
    • ممنوع تأجيل التسليم؛ كما يُفضل أن تكون العقود بدون فوائد أو طرف ثالث.

    📈 الأسهم الحلال

    • يُسمح بشراء أسهم شركات حلال تتبع ضوابط الشريعة (مثل تقييد الدخل من الفوائد لا يتجاوز 5٪ ونسبة الدين لا تتجاوز 33٪).
    • يجب تلافي الشركات العاملة في الربا أو الخمور أو القمار أو التبغ.

    💹 أزواج العملات الرئيسية (Major Pairs)

    • EUR/USD
    • USD/JPY
    • GBP/USD
    • USD/CHF
    • AUD/USD
    • NZD/USD

    تُعتبر هذه الأزواج شرعيّة إذا تم التداول:

    1. بدون فائدة تبييت (swap-free).
    2. بشراء وبيع مباشر (لا Short دون تملك).
    3. بضوابط رافعة مالية شرعية (1:1 إن أمكن، أو swap-free).

    ✅ ملخص شرعي سريع

    • وسطاء مثل FP Markets، IC Markets، Octa، eToro، AvaTrade يقدمون حسابات إسلامية بدون فائدة، مع ضرورة التحقق من السبريد والرسوم (fxempire.com).
    • العملات الرقمية مسموح بها مثل BTC وETH ومدعومة بذهب مثل OGC، لكن يجب تجنب المضاربة بل يُفضل التملك الحقيقي .
    • المعادن: ذهب وفضة مع التسليم الفوري مشروع.
    • الأسهم: شركات مختارة حلال وفق معايير الشريعة.
    • الأزواج الرئيسية: جائزة بشرط التداول الفوري بدون فوائد.

    🧠 نصيحة شرعية للمستثمر المسلم

    قال رسول الله ﷺ:

    “الحلال بيّن، والحرام بيّن، وبينهما أمور مشتبهات، فمن اتقى الشبهات فقد استبرأ لدينه وعرضه”
    📚 متفق عليه

    لذا، كن حريصًا على:

    • اختيار شركة شفافة
    • التداول بأموالك فقط
    • الابتعاد عن الربا والغرر

    ٧. ✨ الختام

    إذا التزمت بالشروط الشرعية التالية:

    1. التداول بأموالك فقط (رافعة 1:1 أو بدون رافعة).
    2. الحساب خالٍ تمامًا من الفوائد.
    3. تملك فوري للأصل المتداول.
    4. تجنّب العملات الرقمية والمشتقات المشبوهة.
    5. اختيار الأصول الحلال.

    فيمكن القول بإباحة التداول وفق معايير الشريعة، وهو رأي يذهب إليه عدد من العلماء المعاصرين .


    التداول ليس حرامًا في ذاته، بل وسيلة مالية يمكن أن تكون حلالًا أو حرامًا حسب طريقة استخدامها. فإذا التزم المتداول بالشروط الشرعية، وتجنب المحظورات كالفوائد والاقتراض من الوسيط، صار التداول مباحًا بإجماع الكثير من العلماء المعاصرين.

    💡 إن كنت جادًا في التداول الحلال، فابدأ بحساب إسلامي برافعة مالية 1:1، وتجنب كل ما فيه ربا أو بيع ما لا تملك.

  • مؤشر الإيشيموكو Ichimoku

    🔍 ما هو مؤشر الإيشيموكو Ichimoku؟

    إيشيموكو كينكو هيو تعني باليابانية “نظرة واحدة على التوازن”، وهو نظام فني متكامل يجمع بين عدة مؤشرات في أداة واحدة لرصد:

    الاتجاه (Trend) مستويات الدعم والمقاومة إشارات الدخول والخروج قوة الزخم

    🧩 مكونات مؤشر الإيشيموكو

    المؤشر يتكوّن من 5 خطوط رئيسية:

    1. تينكان سين (Tenkan-sen)

    📏 يُحسب كمتوسط أعلى وأدنى سعر خلال آخر 9 فترات.

    🔹 يعتبر خطًا سريعًا ويستخدم للإشارات السريعة.

    الوظيفة: يحدد الاتجاه قصير المدى.

    2. كيجون سين (Kijun-sen)

    📏 يُحسب كمتوسط أعلى وأدنى سعر خلال آخر 26 فترة.

    🔹 خط أبطأ من التينكان.

    الوظيفة: يحدد الاتجاه المتوسط ويعمل كمستوى دعم/مقاومة.

    3. شينكو سبان (Chikou Span)

    📏 سعر الإغلاق الحالي، لكن يُرسم متأخرًا بـ 26 شمعة للخلف.

    الوظيفة: يوضح العلاقة بين السعر الحالي والسعر السابق (التأكيد على الاتجاه).

    4. سينكو سبان A (Senkou Span A)

    📏 متوسط التينكان والكيجون، يُرسم 26 شمعة للأمام.

    الوظيفة: أحد حدود السحابة.

    5. سينكو سبان B (Senkou Span B)

    📏 يُحسب كمتوسط أعلى وأدنى سعر خلال آخر 52 فترة، ويُرسم أيضًا 26 شمعة للأمام.

    الوظيفة: الحد الثاني للسحابة.

    ☁️ السحابة (Kumo Cloud)

    تتكوّن من المنطقتين بين Span A وSpan B. كلما كانت السحابة عريضة، دلّ ذلك على قوة الاتجاه. السحابة تمثّل الدعم والمقاومة المستقبلية. اللون يوضح الاتجاه: ✅ سحابة خضراء: الاتجاه صاعد. 🔴 سحابة حمراء: الاتجاه هابط.

    ✅ إشارات التداول

    دخول شراء (Buy):

    السعر أعلى من السحابة. تقاطع تينكان فوق كيجون. الشينكو فوق السعر.

    دخول بيع (Sell):

    السعر تحت السحابة. تقاطع تينكان أسفل كيجون. الشينكو تحت السعر.

    ⚠️ نقاط مهمة

    السحابة تحدد الاتجاه العام، فلا تدخل شراء والسعر تحتها (إلا في حالات متقدمة). كلما اجتمعت إشارات متعددة (مثل التقاطع + اختراق السحابة + موقع الشينكو)، زادت قوة الصفقة. يفضل استخدامه على فريمات متوسطة وطويلة (ساعة، 4 ساعات، يومي).

    📊 مثال عملي (ببساطة):

    الحالة

    الشرح

    السعر فوق السحابة + تقاطع صعودي للتينكان والكيجون

    إشارة قوية للشراء

    السعر تحت السحابة + تقاطع هبوطي

    إشارة قوية للبيع

    السعر داخل السحابة

    السوق متذبذب – تجنب الدخول

    🧠 ملخص

    مؤشر الإيشيموكو:

    نظام متكامل يجمع بين الاتجاه، الزخم، والدعم/المقاومة. يوفّر إشارات واضحة وموثوقة. يتطلب تدريبًا بصريًا على قراءة مكوناته.

  • استراتيجية التداول اليومي باستخدام مؤشري RSI وVWAP

    استراتيجية التداول اليومي باستخدام مؤشري RSI وVWAP

    في عالم التداول اليومي، يعتمد المتداولون الناجحون على مؤشرات فنية فعالة تساعدهم في اتخاذ قرارات مدروسة وسريعة. ومن بين هذه المؤشرات، نجد أن مؤشر القوة النسبية (RSI) ومؤشر متوسط السعر المرجح بالحجم (VWAP) يجتمعان في استراتيجية قوية تهدف إلى تحقيق صفقات مربحة وتقليل المخاطر.

    في هذا المقال، سنستعرض بالتفصيل استراتيجية تعتمد على دمج هذين المؤشرين لتحقيق أفضل نتائج في التداول اليومي.

    أولاً: التعريف بالمؤشرين

    🔹 مؤشر القوة النسبية RSI:

    هو مؤشر زخم يستخدم لقياس سرعة وقوة تحركات السعر، ويتراوح عادة بين 0 و100.

    مستويات فوق 70 تعتبر منطقة تشبع شرائي (overbought). مستويات تحت 30 تعتبر منطقة تشبع بيعي (oversold). وفي هذه الاستراتيجية نركز على مستويات فوق 60 للشراء وتحت 40 للبيع.

    🔹 مؤشر VWAP (متوسط السعر المرجح بالحجم):

    هو مؤشر يقيس متوسط السعر الذي تم التداول عليه خلال اليوم بناءً على الحجم.

    يستخدمه المتداولون لتحديد اتجاه السعر الحقيقي بالنسبة للتدفقات المالية الكبيرة.

    ثانياً: شروط الدخول في الصفقة

    ✳️ صفقة شراء (LONG POSITION)

    شروط الدخول:

    مؤشر RSI يكون فوق مستوى 60. السعر يكون أعلى من خط VWAP.

    مستوى وقف الخسارة (Stop Loss):

    يتم تحديده أسفل أدنى سعر لشمعة الدخول.

    الخروج (Exit):

    بعد أن يحقق السعر الهدف، أو تظهر إشارات انعكاس.

    🔻 صفقة بيع (SHORT POSITION)

    شروط الدخول:

    مؤشر RSI يكون تحت مستوى 40. السعر يكون أسفل خط VWAP.

    مستوى وقف الخسارة (Stop Loss):

    يكون فوق أعلى سعر لشمعة الدخول.

    الخروج (Exit):

    بعد تحقيق الهدف السعري، أو ظهور إشارات انعكاسية.

    ثالثاً: مميزات هذه الاستراتيجية

    ✅ دقة عالية بفضل تأكيد من مؤشرين مختلفين (الزخم والموقع السعري).

    ✅ وضوح مناطق الدخول والخروج مما يسهل اتخاذ القرار.

    ✅ إدارة مخاطرة محكمة عبر وضع وقف خسارة واضح.

    ✅ تصلح للتداول اليومي (Intraday) على الفريمات القصيرة مثل 5 دقائق أو 15 دقيقة.

    نصائح إضافية

    استخدم هذه الاستراتيجية على الأصول ذات السيولة العالية (مثل الذهب، العملات، المؤشرات). لا تدخل الصفقة إلا بعد تأكيد الشروط بدقة. لا تغفل عن الأخبار المؤثرة التي قد تؤدي إلى تحركات عنيفة في السوق.

    الخلاصة

    استراتيجية RSI + VWAP تعد من الاستراتيجيات البسيطة والفعالة في التداول اليومي، حيث تعتمد على تحليل الزخم ومكان السعر بالنسبة للمتوسط المرجح بالحجم، مما يمنح المتداول رؤية متكاملة لفرص الدخول والخروج بدقة عالية.

    جرّب هذه الاستراتيجية أولًا على حساب تجريبي، وابدأ بتطبيقها تدريجيًا مع الانضباط في إدارة رأس المال.