ما هو Pine Script؟

Pine Script لغة صُمّمت لمهمة واحدة: تحويل بيانات السعر والحجم إلى حسابات ورسوم على شارت TradingView. وتصفها TradingView بأنها خفيفة عن قصد، ومخصصة لتطوير مؤشرات واستراتيجيات يمكن اختبارها تاريخياً بعد ذلك، وتقول إن هدفها أن تبقى في متناول أوسع جمهور ممكن. وهي ليست لغة عامة الأغراض مثل Python أو JavaScript: فهي سحابية، والسكربتات تعمل على خوادم TradingView لا على حاسوبك.

وتُكتب في محرر Pine (Pine Editor)، وهو تبويب في أسفل الشارت. وحفظ السكربت يخزّنه على خوادم TradingView ضمن حسابك، وإضافته إلى الشارت تشغّله هناك. والإصدار الحالي وقت كتابة هذا الدرس هو الإصدار 6، ويذكر السكربت إصداره في سطره الأول ليعرف المترجم أي القواعد يطبّق.

Pine Script
لغة البرمجة الخاصة بمنصة TradingView لكتابة المؤشرات والاستراتيجيات والمكتبات. تعمل السكربتات على خوادم TradingView وتعرض نتائجها على الشارت.
محرر Pine (Pine Editor)
محرر الشيفرة المدمج في TradingView، ويُفتح من تبويب في أسفل الشارت. فيه تُكتب السكربتات وتُحفظ في حسابك وتُضاف إلى الشارت.

مؤشر أم استراتيجية أم مكتبة: ما أنواع سكربتات Pine؟

كل سكربت يصرّح بنوعه، بتصريح واحد بالضبط. والأنواع ثلاثة، يلخصها الرسم أدناه والقائمة التي تليه.

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

  • المؤشر، ويُصرَّح عنه بـ indicator(): يجري حسابات ويعرضها رسوماً بيانية أو أشكالاً أو تنبيهات. وهو أكثر الأنواع شيوعاً، ومؤشر RSI المدمج مثال عليه.
  • الاستراتيجية، ويُصرَّح عنها بـ strategy(): تحاكي أوامر وصفقات على بيانات الشارت ليمكن اختبار نظام تداول تاريخياً ثم اختباره على السوق الحي. وتضيف تقريراً للاستراتيجية فيه النتائج الافتراضية.
  • المكتبة، ويُصرَّح عنها بـ library(): مجموعة دوالّ قابلة لإعادة الاستخدام تستوردها سكربتات أخرى. وهي أداة للمبرمجين، لا شيء تضيفه إلى الشارت لتحصل على إشارات.
المؤشر في Pine Script (Indicator)
سكربت يُصرَّح عنه بـ indicator()، يجري حسابات على بيانات الشارت ويعرضها رسوماً بيانية أو أشكالاً أو تنبيهات. ولا يحاكي صفقات.
الاستراتيجية في Pine Script (Strategy)
سكربت يُصرَّح عنه بـ strategy()، يحاكي أوامر وصفقات على الشموع التاريخية والحية ويعرض نتائجها الافتراضية. ويُستخدم للاختبار التاريخي والاختبار على السوق الحي.
المكتبة في Pine Script (Library)
سكربت يُصرَّح عنه بـ library()، يصدّر دوالّ وشيفرة أخرى قابلة لإعادة الاستخدام لتستوردها المؤشرات والاستراتيجيات والمكتبات الأخرى.

أدِر هاتفك أفقياً لقراءة الصورة. المس للإغلاق.

ثلاث بطاقات. مؤشر: يُصرَّح عنه بـ indicator()، وما يفعله أنه يحسب ويرسم ويستطيع إطلاق تنبيهات، وما تراه رسوم على الشارت أو في لوحة مستقلة. استراتيجية: يُصرَّح عنها بـ strategy()، وتحاكي أوامر على الشموع الماضية والحية، وما تراه تقرير بالصفقات المحاكاة. مكتبة: يُصرَّح عنها بـ library()، وتصدّر دوالّ لسكربتات أخرى، ولا ترى منها شيئاً وحدها لأن سكربتات أخرى تستوردها. وملاحظة: في كل سكربت تصريح واحد بالضبط.

كيف يبدو سكربت Pine Script؟ مثال من أربعة أسطر

السكربت في الرسم أعلى الصفحة كامل: الصقه في محرر Pine واحفظه واضغط Add to chart، فيظهر على شارت السعر متوسط متحرك بسيط على 20 شمعة. والقائمة أدناه تمرّ عليه سطراً بسطر.

وفيه فكرتان تنطبقان على كل سكربت. الأولى أن السكربت لا يدور على الشارت بنفسه: فمنصة TradingView تشغّل السكربت كله مرة على كل شمعة، من الأقدم إلى الأحدث، وكلمة close تعني سعر إغلاق الشمعة التي تُعالَج. والثانية أن الدوالّ ذات البادئة مثل ta. تأتي جاهزة، فيغني نداء واحد عن العملية الحسابية. أما فيمَ يُستخدم المتوسط فمشروح في درس المتوسطات المتحركة.

  1. السطر الأول، وهو //@version=6، توجيه للمترجم. يخبر TradingView بأن السكربت مكتوب بالإصدار 6 من اللغة.
  2. السطر الثاني، وهو indicator("Simple MA", overlay = true)، هو التصريح. فالسكربت مؤشر اسمه Simple MA، وعبارة overlay = true ترسمه على شارت السعر بدل لوحة مستقلة تحته.
  3. السطر الثالث، وهو length = input.int(20, "Length", minval = 1)، مُدخل. ينشئ إعداداً بعدد صحيح عنوانه Length، قيمته الافتراضية 20 وحدّه الأدنى 1، ويحفظ القيمة المختارة تحت الاسم length.
  4. السطر الرابع، وهو plot(ta.sma(close, length), color = color.blue)، هو الحساب والإخراج. فالدالة ta.sma() تحسب المتوسط المتحرك البسيط لسعر الإغلاق على عدد من الشموع يساوي length، والدالة plot() ترسمه خطاً أزرق.

كيف يقرأ غير المبرمج مُدخلات السكربت؟

تستطيع أن تعرف الكثير عن السكربت دون قراءة سطر من الشيفرة. انقر نقراً مزدوجاً على اسمه في الشارت، أو مرّر المؤشر فوق الاسم واضغط زر الإعدادات (Settings)، فتُفتح نافذة الإعدادات. وتبويب Inputs فيها يسرد كل إعداد اختار المؤلف أن يجعله قابلاً للتعديل؛ وتبويب Style يتحكم في الألوان وأنماط الخطوط؛ وتبويب Visibility يحدد الفريمات التي يظهر عليها السكربت.

وكل حقل في تلك النافذة مصدره دالة إدخال واحدة في الشيفرة. ففي المثال أعلاه، العبارة input.int(20, "Length", minval = 1) هي سبب ظهور حقل اسمه Length وقيمته 20 في تبويب Inputs. غيّره إلى 50 فيعمل السكربت من جديد على الشارت كله بالقيمة الجديدة. واحسم هذه الاختيارات قبل أن تنشئ التنبيهات، كما يقترح درس أفضل إعدادات تريدنج فيو. وهذا ما تبحث عنه:

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

ما الفرق بين السكربت المفتوح المصدر والمحمي والذي بدعوة فقط؟

حين ينشر المؤلف سكربتاً يختار من يرى الشيفرة ومن يستطيع استخدامه. وفي TradingView ثلاثة أنواع للنشر، يعرضها الرسم أدناه.

وسكربتات الدعوة هي السكربتات المنشورة الوحيدة التي يجوز لمؤلفها أن يتقاضى مقابلاً عنها؛ فالمفتوحة المصدر والمحمية مجانية الاستخدام بطبيعتها، وتذكر TradingView أنها ليست طرفاً في هذه المبيعات. و UpTickFlow، المؤشر الذي ينشره هذا الموقع، سكربت بدعوة فقط، ووصفه في صفحة المؤشر. وخطوات إضافة سكربت من هذا النوع في درس كيف تضيف سكربت Invite-only.

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

  • مفتوح المصدر (Open-source): يستطيع أي مستخدم قراءة الشيفرة وإضافة السكربت إلى الشارت. وتقول TradingView إن نحو نصف سكربتات مجتمعها التي تتجاوز 150,000 مفتوحة المصدر.
  • محمي (Protected): الشيفرة مخفية عن الجميع إلا المؤلف، لكن أي مستخدم يستطيع إضافة السكربت واستخدامه بحرية. ولا ينشر بهذه الطريقة إلا مؤلفون على خطط مدفوعة.
  • بدعوة فقط (Invite-only): الشيفرة مخفية، ولا يضيف السكربت إلا من منحهم المؤلف حق الوصول. والنشر بهذه الطريقة يتطلب خطة Premium أو أعلى.
سكربت مفتوح المصدر (Open-source script)
سكربت منشور على TradingView يستطيع أي شخص قراءة شيفرته المكتوبة بلغة Pine Script. يمكن دراسته والتحقق منه والبناء عليه ضمن قواعد إعادة الاستخدام في TradingView.
سكربت محمي (Protected script)
سكربت منشور شيفرته مخفية عن الجميع إلا مؤلفه، لكن أي مستخدم يستطيع إضافته إلى الشارت واستخدامه مجاناً.
سكربت بدعوة فقط (Invite-only script)
سكربت منشور شيفرته مخفية ولا يضيفه إلى الشارت إلا مستخدمون وافق عليهم المؤلف. وهو النوع الوحيد الذي يجوز لمؤلفه أن يتقاضى مقابلاً عنه.

أدِر هاتفك أفقياً لقراءة الصورة. المس للإغلاق.

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

هل يستطيع سكربت Pine إرسال تنبيهات؟

نعم، على خطوتين. فشيفرة السكربت تعرّف أحداث التنبيه: alertcondition() في المؤشرات، و alert() في المؤشرات والاستراتيجيات، وتنفيذ الأوامر في الاستراتيجيات. لكن لا توجد شيفرة تشغّل تنبيهاً من تلقاء نفسها؛ فأنت من ينشئ التنبيه من الشارت ويختار أحد تلك الأحداث شرطاً له. ومنذ تلك اللحظة يعمل على خوادم TradingView، سواء كنت مسجّلاً دخولك أم لا.

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

ما حدود Pine Script؟

Pine Script محدودة النطاق عن قصد، ومعرفة أطرافها تمنع معظم سوء الفهم.

  • تعمل على خوادم TradingView وعلى شموع الشارت. ولأن كل سكربت يستخدم موارد حاسوبية مشتركة، تقيّد TradingView زمن التنفيذ والذاكرة وحجم السكربت والبيانات التي يستطيع طلبها. فالسكربت الواحد له 64 رسماً بيانياً كحد أقصى مثلاً، وعدد الشموع التاريخية التي يراها يتوقف على الخطة، من 5,000 إلى 40,000.
  • تتصرف على نحو مختلف على الشمعة المفتوحة. فعلى الشموع التاريخية يعمل المؤشر مرة واحدة لكل شمعة وعلى أسعار نهائية. وعلى الشمعة الحية يعمل من جديد مع كل تحديث للسعر، فقد تتغير قيمه حتى تُغلق الشمعة، كما يُظهر الرسم أدناه.
  • وهذا الفرق أصل إعادة الرسم. فوثائق TradingView تعرّف إعادة الرسم بأنها سلوك في السكربت يجعل الحسابات أو الرسوم التاريخية والحية تتصرف على نحو مختلف، وتقدّر أن أكثر من 95% من المؤشرات فيها شكل منها، وكثير منه غير مؤذٍ. ودرس إعادة الرسم في تريدنج فيو يشرح أي الأشكال مضلِّل وكيف تختبره.
  • نتائج الاستراتيجية محاكاة. فأوامرها افتراضية: ينفذها محاكي TradingView من بيانات الشارت نفسها، لا في سوق. والتقرير الجميل نقطة بداية للاختبار وليس دليلاً؛ راجع كيف تختبر استراتيجيتك على البيانات التاريخية والإفراط في ملاءمة الاختبار التاريخي.
  • لا تتداول عنك. فالسكربت يحسب ويرسم ويطلق أحداث تنبيه؛ وما تفعله بها قرارك أنت.
الشمعة التاريخية (Historical bar)
شمعة مغلقة على الشارت أسعارها نهائية. ويعمل المؤشر مرة واحدة على كل شمعة تاريخية.
الشمعة الحية (Realtime bar)
الشمعة التي ما زالت تتكوّن عند الطرف الأيمن من الشارت. يعمل السكربت من جديد مع كل تحديث لسعرها، فقد تتغير نتائجه حتى تُغلق.

أدِر هاتفك أفقياً لقراءة الصورة. المس للإغلاق.

صف من تسع شموع مغلقة تحت كلٍّ منها الرقم 1، وعنوانها: شموع تاريخية، مغلقة وقيمها نهائية، و9 شموع = 9 تنفيذات، واحد لكل شمعة. وإلى اليمين، بعد فاصل متقطع، شمعة واحدة مميَّزة تحتها خمس نقاط، وعنوانها: الشمعة الحية ما زالت مفتوحة، و5 تحديثات للسعر = 5 تنفيذات حتى الآن. وملاحظة: النتائج على الشمعة المفتوحة قد تتغير حتى تُغلق.

هل تحتاج إلى تعلّم Pine Script؟

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

وإن بدأت، فنصيحة TradingView نفسها أن تقرأ شيفرة جيدة أولاً: المؤشرات المدمجة، التي تُفتح شيفرتها من أيقونة القوسين المعقوفين بجانب اسمها، والسكربتات المفتوحة المصدر التي يختارها محرروها. ثم غيّر شيئاً واحداً في كل مرة وراقب الشارت. وتدرّب على حساب تجريبي قبل أن تمسّ أي قاعدة تبرمجها مالاً حقيقياً.