Pine Script v6 هو الإصدار الحالي من لغة TradingView لكتابة المؤشرات والاستراتيجيات المخصصة؛ ويبدأ كل سكربت بالتوجيه //@version=6 يليه إعلان indicator(). ومقارنةً بـv5، يفرض نظام أنواع أكثر صرامة، ويعمل بسرعة أكبر، ويتعامل مع request.security() بأمان أكبر، ويضيف دوال مدمجة جديدة، لذا فإن معظم أخطاء الترحيل هي عدم تطابق في الأنواع يُصلَح بتحويلات int() أو float().
ما هو Pine Script؟
Pine Script هي لغة TradingView المتخصصة لكتابة المؤشرات الفنية والاستراتيجيات المخصصة التي تعمل داخل محرّك الشارت في TradingView. وهي ليست لغة برمجة عامة الأغراض — فكل سكربت يُنفَّذ مرة واحدة لكل شمعة عبر تاريخ الشارت، مع إدارة الحالة ضمنيًا عبر سلسلة الشموع. إذا لم تستخدمها من قبل، فإن استيعاب النموذج الذهني يستغرق نحو يوم؛ أما المطبّات فتستغرق نحو عام.
الإصدار 6، الذي صدر في نوفمبر 2024، هو إصدار الإنتاج الحالي. لا يزال الإصداران 4 و5 يعملان، لكنهما لم يعودا الافتراضيين للسكربتات الجديدة.
كيف تكتب أول سكربت لك بالإصدار v6؟
يبدأ كل سكربت Pine Script بتوجيه الإصدار في السطر 1. لإنشاء مؤشر v6:
//@version=6 indicator("My First v6 Indicator", overlay=true) // ارسم سعر الإغلاق كخط على الشارت plot(close, color=color.new(color.aqua, 0), linewidth=2)
احفظ هذا في Pine Editor في TradingView وأضفه إلى الشارت. سترى سعر الإغلاق مرسومًا كخط بلون سماوي. ثلاثة أمور يجب ملاحظتها: التوجيه //@version=6 إلزامي ويجب أن يكون أول سطر غير فارغ؛ وindicator() هو الإعلان الذي يحدد ما إذا كان السكربت مؤشرًا (فوق الشارت أو في لوحة منفصلة) أو استراتيجية (بصفقات محاكاة)؛ وoverlay=true تعني أن السكربت يرسم فوق شارت السعر بدلًا من لوحة منفصلة أسفله.
ما الذي تغيّر من v5 إلى v6
1. نظام أنواع أكثر صرامة
التغيير الأكبر على الإطلاق. يفرض v6 تحققًا من الأنواع كان v5 إما يتجاهله أو يتعامل معه بصمت. الحالة الأكثر شيوعًا: كان v5 يسمح لك بتمرير series int حيث يُتوقَّع simple int ويخفّض نوعه بصمت. أما v6 فسيطلق خطأً عند الترجمة.
النتيجة العملية: عندما ترحّل سكربت v5 ويتوقف فجأة عن الترجمة، فإن الخطأ يكاد يكون دائمًا عدم تطابق في نوع أحد وسائط الدالة. والحل عادةً هو تغليف القيمة بـint() أو float()، أو استخدام الدالة المدمجة المناسبة لتحويل الأنواع صراحةً.
2. تنفيذ أسرع
قدّم v6 تحسينات في المترجم ترفع سرعة التنفيذ بشكل ملموس لمعظم السكربتات. وتظهر التحسينات أكثر في السكربتات التي تعتمد بكثافة على request.security() (التحليل متعدد الأطر الزمنية)، أو معالجة المصفوفات، أو عمليات المصفوفات ثنائية الأبعاد. أما السكربتات البسيطة للرسم والتلوين فلن تشهد فرقًا يُذكر.
3. سلوك محسّن لـrequest.security()
حصلت الدالة المخصصة لطلب البيانات من إطار زمني مختلف على معالجة أوضح للوسائط وحماية أفضل من فخ «انحياز الاستباق» المعروف تاريخيًا. فالخطأ الكلاسيكي في v4/v5 — استخدام lookahead=barmerge.lookahead_on دون فهم عواقبه — يُطلق الآن تحذيرًا أوضح عند نشر السكربت.
4. دوال مدمجة جديدة
أصبحت عدة دوال مساعدة كانت تتطلب سابقًا تنفيذًا يدويًا مدمجةً الآن. ومن أبرز الإضافات: تنسيق محسّن للنصوص، وتقطيع أفضل للمصفوفات ثنائية الأبعاد، وطرق مريحة على نوع array تقلّل الكود المتكرر.
ما أنماط Pine Script المهمة لمؤشرات SMC؟
إذا كنت تكتب مؤشرات مفاهيم الأموال الذكية (كتل الأوامر، وFVG، وكشف BOS، واكتساحات السيولة)، فإن ثلاثة أنماط في Pine Script تتكرر باستمرار. أتقنها وستتمكن من بناء معظم ما تحتويه حزم SMC التجارية.
النمط 1: كيف تكشف قمم التأرجح وقيعانه؟
هذا أساس كل مؤشر لهيكل السوق. استخدم ta.pivothigh() وta.pivotlow() مع نافذة شموع يسار/يمين:
//@version=6 indicator("Swing Detection", overlay=true) length = input.int(5, "Pivot Length", minval=1) ph = ta.pivothigh(high, length, length) pl = ta.pivotlow(low, length, length) // ارسم دوائر عند نقاط التأرجح المؤكَّدة plotshape(not na(ph), location=location.abovebar, style=shape.circle, color=color.red, size=size.tiny) plotshape(not na(pl), location=location.belowbar, style=shape.circle, color=color.green, size=size.tiny)
ملاحظة: تتأكد نقاط الارتكاز بعد length شمعة من تشكّلها. وهذا تأكيد لا يعيد الرسم — فبمجرد ظهور نقطة الارتكاز لا تتحرك. والمقابل هو التأخر: لا تعرف بوجود نقطة الارتكاز إلا بعد 5 شموع (مع length=5).
النمط 2: كيف ترسم مربعات لكتل الأوامر وFVG؟
استخدم الدالة المدمجة box.new() لرسم المستطيلات. يمكن تحديث المربعات، أو مدّها إلى اليمين مع ظهور شموع جديدة، أو حذفها عند إبطالها:
//@version=6 indicator("Bullish FVG Detector", overlay=true, max_boxes_count=500) // FVG صاعدة: قاع الشمعة الحالية > قمة الشمعة قبل 2 fvg_top = low fvg_bot = high[2] isFVG = fvg_top > fvg_bot if isFVG box.new(left=bar_index[2], top=fvg_top, right=bar_index, bottom=fvg_bot, bgcolor=color.new(color.green, 80), border_color=color.new(color.green, 50))
أمران يوقعان المطوّرين المبتدئين هنا. أولًا، القيمة الافتراضية لـmax_boxes_count هي 50 — ارفعها لأي مؤشر يرسم مناطق عبر تاريخ طويل. ثانيًا، تُرسم المربعات عند التنفيذ لكل شمعة؛ فإذا رسمت مربعًا على كل شمعة دون منطق شرطي، فستستنفد الحد بسرعة.
النمط 3: تتبّع الحالة عبر الشموع (الكلمة المفتاحية var)
ينفّذ Pine Script الكود مرة واحدة لكل شمعة، لكنك كثيرًا ما تحتاج إلى حالة تستمر. تعلن الكلمة المفتاحية var عن متغير يُهيَّأ مرة واحدة ويستمر عبر عمليات التنفيذ على الشموع:
//@version=6 indicator("BOS Tracker", overlay=true) // حالة مستمرة: تتبّع آخر قمة تأرجح مؤكَّدة var float lastSwingHigh = na // حدّث عند تأكيد قمة ارتكاز جديدة ph = ta.pivothigh(high, 5, 5) if not na(ph) lastSwingHigh := ph // اكشف BOS: إغلاق فوق آخر قمة تأرجح isBOS = not na(lastSwingHigh) and close > lastSwingHigh if isBOS label.new(bar_index, high, "BOS", color=color.new(color.green, 0), textcolor=color.white)
بدون var، سيُعاد تعيين المتغير في كل شمعة. ومع var، تستمر القيمة. هذا هو النمط التأسيسي لأي مؤشر يحتاج إلى تذكّر أحداث سابقة — فكل كاشف BOS، وكاشف MSS، ومتتبّع للتخفيف، ونظام لتقادم كتل الأوامر يستخدم هذا النمط في الخلفية.
ما المطبّات التي يقع فيها مطوّرو Pine Script المبتدئون؟
lookahead=barmerge.lookahead_on في استدعاءات request.security() أو استخدام بُنى تنظر إلى المستقبل مثل ta.pivothigh() دون احتساب تأخير تأكيد الشمعة. إذا بدت إشارات مؤشرك مثالية على البيانات التاريخية، فاشتبه في إعادة الرسم أولًا.
format.mintick لوسوم الأسعار. الدقة العشرية المثبّتة يدويًا تتعطل عند تطبيق السكربت على أدوات ذات أحجام تيك مختلفة (BTC مقابل EURUSD مقابل ES). استخدم str.tostring(price, format.mintick) لأي سعر يُعرض في الوسوم أو التنبيهات.
max_lines_count وmax_boxes_count وغيرها صراحةً في إعلان indicator() عندما تحتاج إلى المزيد.
= للإسناد الأول و:= لإعادة الإسناد. كتابة x = 5 في موضعين تُنشئ متغيرين لكلٍّ منهما نطاقه. أما x := 5 فتعيد إسناد متغير موجود. اخلط بينهما وستقضي ساعة في تصحيح قيم لا تتحدّث.
اللبنات الأساسية لـPine Script v6 بنظرة سريعة
| المهمة | الدالة المدمجة | ما تفعله | انتبه إلى |
|---|---|---|---|
| قمم التأرجح وقيعانه | ta.pivothigh() / ta.pivotlow() | تؤكد نقاط الارتكاز باستخدام نافذة شموع يسار/يمين | لا تتأكد إلا بعد «length» شمعة من نقطة الارتكاز |
| مناطق كتل الأوامر وFVG | box.new() | ترسم مستطيلات يمكنك مدّها أو حذفها | الافتراضي 50 مربعًا؛ ارفع max_boxes_count (الحد الأقصى 500) |
| الحالة عبر الشموع | الكلمة المفتاحية var | يُهيَّأ مرة واحدة ويحتفظ بقيمته | أعد الإسناد بـ:= لا بـ= |
| بيانات الإطار الزمني الأعلى | request.security() | تطلب البيانات من إطار زمني آخر | قد تسرّب lookahead_on بيانات مستقبلية وتعيد الرسم |
| وسوم الأسعار | str.tostring(price, format.mintick) | تنسّق الأسعار وفق حجم التيك للرمز | الكسور العشرية المثبّتة يدويًا تتعطل بين الأدوات المختلفة |
◆يجب أن يبدأ كل سكربت بالتوجيه //@version=6 في أول سطر غير فارغ منه.
كيف تنشر سكربتًا على TradingView؟
بمجرد أن يعمل سكربتك، يمكنك نشره في المكتبة العامة لـTradingView — إما مفتوح المصدر (يستطيع أي شخص قراءة الكود ونسخه) أو بالدعوة فقط (تتحكم أنت في الوصول). كلا الخيارين يصل إلى قاعدة مستخدمي TradingView؛ وتُراجَع المنشورات مفتوحة المصدر وفق House Rules، وتُرشَّح ضمن مسار Editors' Picks إذا كانت الجودة عالية.
ثلاث من House Rules توقع المؤلفين الجدد في أغلب الأحيان: لا تضع روابط ترويجية خارجية في عناوين السكربتات أو أوصافها، ولا تستخدم تقنيات إعادة الرسم دون الإفصاح عنها، ولا تُشر إلى علامتك التجارية داخل مخرجات الشارت (لا شعارات ولا وسوم علامة مائية). القاعدتان الأوليان تقنيتان؛ أما الثالثة فتركّز على التطبيق الصارم وكثيرًا ما توقع الناشرين التجاريين.
الأسئلة الشائعة
هل أحتاج إلى ترحيل سكربتات v5 إلى v6؟
تستمر سكربتات v5 الحالية في العمل على TradingView إلى أجل غير مسمّى — فلا يوجد إيقاف إجباري. ويُنصح بالترحيل فقط عندما تحتاج إلى ميزة خاصة بـv6 (نظام أنواع محسّن، أو أداء أفضل، أو دوال مدمجة جديدة) أو عند بدء سكربت جديد من الصفر. وبالنسبة للمؤشرات المنشورة، نادرًا ما تستحق تكلفة الترحيل الفائدة ما لم تكن تصون السكربت بنشاط.
ما أكبر تغيير يكسر التوافق في Pine Script v6؟
نظام الأنواع المعزَّز. يفرض v6 تحققًا أكثر صرامة من الأنواع — فالتحويلات الضمنية التي كانت تعمل بصمت في v5 ستطلق الآن أخطاء. والمشكلة الأكثر شيوعًا في الترحيل هي عدم تطابق النوعين series وsimple في وسائط الدوال، والذي كان يمرّ سابقًا دون اكتشاف.
هل Pine Script v6 أسرع من v5؟
نعم، في المتوسط. يجري مترجم v6 تحسينات أكثر جرأة ويتمتع ببيئة تنفيذ أسرع لمعظم الأنماط الشائعة. ويظهر التحسّن أكثر في السكربتات التي تعتمد بكثافة على معالجة المصفوفات أو على استدعاءات كثيرة لـrequest.security.
هل يمكنني استخدام v5 وv6 في السكربت نفسه؟
لا. يُعلَن عن الإصدار في أعلى السكربت (//@version=6 أو //@version=5) وينطبق على السكربت بأكمله. لا يمكنك الخلط بين الإصدارات داخل مؤشر أو استراتيجية واحدة.
أين يمكنني نشر مؤشرات Pine Script v6؟
تقبل المكتبة العامة في TradingView سكربتات v5 وv6 على حد سواء. ويراجع مشرفو TradingView السكربتات مفتوحة المصدر وفق House Rules — والقواعد نفسها تنطبق بغض النظر عن الإصدار. أما السكربتات مغلقة المصدر (بالدعوة فقط) فتخضع لمراجعة أخف لكن لا يمكن الترويج لها في المكتبة العامة.
شاهد مؤشرات v6 احترافية وهي تعمل
مؤشر Neural Confluence Engine المجاني من Quantum Algo ومجموعة Zeno الكاملة مكتوبة بـPine Script v6. والسكربت المجاني مفتوح المصدر — انسخه، وادرسه، وعدّله كمرجع للتعلّم.
شاهده على TradingView →