
برمجة مؤشرات تريدنج فيو بلغة باين سكريبت
قد تصل إلى مرحلة لا تجد فيها بين آلاف النصوص الجاهزة مؤشراً يفعل بالضبط ما تريد، وهنا تبدأ فائدة برمجة مؤشرات تريدنج فيو بنفسك. اللغة المستخدمة اسمها باين سكريبت (Pine Script)، وهي أبسط بكثير مما يتخيله من لم يبرمج من قبل، لأنها صُممت لغرض واحد فقط وهو حساب قيم على بيانات الأسعار ورسمها على الشارت.
ما هي لغة باين سكريبت
باين سكريبت لغة برمجة خاصة بمنصة الرسوم البيانية نفسها، لا تعمل على جهازك بل على خوادم المنصة. والفكرة الأساسية أن الكود يُنفَّذ مرة واحدة على كل شمعة، من أقدم شمعة في التاريخ حتى الشمعة الحالية. فأنت لا تكتب حلقة تمر على البيانات، بل تكتب ما يجب حسابه لشمعة واحدة، والمنصة تكرّره على كل الشموع تلقائياً.
هذا الفهم وحده يحلّ نصف ارتباك المبتدئين، فعندما تكتب close فأنت لا تقصد سعر إغلاق واحداً، بل سلسلة من أسعار الإغلاق يقرأ الكود منها قيمة الشمعة التي يقف عليها الآن. ولقراءة قيمة سابقة تستخدم الأقواس المربعة، فـ close[1] هو إغلاق الشمعة السابقة وclose[5] إغلاق خمس شمعات قبلها.
لا تحتاج خبرة برمجية سابقة، لكن تحتاج أن تكون قد استخدمت المنصة فعلاً وتعرف واجهتها وإعداداتها. من لم يصل إلى هذه المرحلة بعد فليبدأ من شرح تريدنج فيو للمبتدئين خطوة بخطوة ثم يعود إلى هنا.
أين تكتب الكود وكيف تشغّله
محرر باين موجود في اللوحة السفلية أسفل الشارت، ضمن التبويبات نفسها التي تحوي التداول الورقي وسجل التنبيهات. افتحه واختر إنشاء نص جديد من نوع مؤشر لتحصل على قالب افتراضي جاهز، وبعد كتابة الكود تحفظه باسم ثم تضيفه إلى الشارت، فيظهر مباشرة فوق الشموع أو في نافذة منفصلة أسفلها.
يبقى النص في مكتبتك الخاصة ولا يراه أحد ما لم تنشره بنفسك. ويعمل على أي أداة تفتحها، فالكود لا يعرف الرمز بل يقرأ بيانات الشارت المفتوح، أي أن المؤشر نفسه يشتغل على XAU/USD وعلى EUR/USD وعلى US30 دون تعديل.
الهيكل الأساسي لأي نص باين
كل نص يبدأ بثلاثة أسطر لا غنى عنها: رقم الإصدار، ثم إعلان نوع النص واسمه، ثم أول أمر رسم. هذا أبسط مؤشر عامل يمكنك كتابته:
//@version=6
indicator("My First Indicator", overlay = true)
plot(close, color = color.blue, linewidth = 2)
- السطر الأول يخبر المنصة بإصدار اللغة. اترك الرقم الذي يضعه المحرر افتراضياً، فالإصدارات القديمة لا تقبل دوال الإصدارات الأحدث.
- السطر الثاني يعلن أن هذا مؤشر ويعطيه اسمه الظاهر على الشارت. الخيار
overlay = trueيضعه فوق الشموع، وتغييره إلىfalseينقله إلى نافذة مستقلة أسفل الشارت. - السطر الأخير يرسم خطاً بقيمة إغلاق كل شمعة. أي شيء تحسبه ولا ترسمه لن يظهر لك على الشارت.
معادلات تريدنج فيو والدوال الجاهزة
لست مضطراً لكتابة معادلة المتوسط المتحرك أو مؤشر القوة النسبية من الصفر، فاللغة تحوي مكتبة دوال جاهزة تغطي أغلب ما تحتاجه، وأسماؤها تبدأ عادة بالبادئة ta اختصاراً للتحليل الفني، أو math للعمليات الحسابية. هذه أكثرها استعمالاً:
| ما تريد فعله | الدالة | ملاحظة |
|---|---|---|
| متوسط متحرك بسيط | ta.sma | تعطيها مصدر السعر وعدد الشمعات |
| متوسط متحرك أسّي | ta.ema | وزن أكبر للشمعات الأحدث |
| مؤشر القوة النسبية | ta.rsi | القيمة الافتراضية للفترة 14 |
| تقاطع صاعد أو هابط | ta.crossover / ta.crossunder | تعيد صواباً أو خطأ لا رقماً |
| أعلى وأدنى قيمة في مدة | ta.highest / ta.lowest | مفيدة لبناء القنوات والمستويات |
| متوسط المدى الحقيقي | ta.atr | أساس حساب التذبذب ومسافات الوقف |
| مدخل يعدّله المستخدم | input.int / input.float | يظهر في نافذة إعدادات المؤشر |
| رسم خط أو شكل | plot / plotshape | الأول للقيم المستمرة والثاني للإشارات |
بجانب هذه الدوال تتوفر لك بيانات الشمعة مباشرة بأسمائها: open وhigh وlow وclose وvolume، وتستطيع بناء معادلاتك الخاصة منها بعمليات حسابية عادية. مثلاً منتصف الشمعة يُكتب ببساطة (high + low) / 2.
مثال عملي لمؤشر تقاطع متوسطين
الآن نجمع القطع في مؤشر كامل يرسم متوسطين، يضع إشارة عند كل تقاطع بينهما، ويسمح لك بتغيير الفترتين من نافذة الإعدادات دون لمس الكود:
//@version=6
indicator("SMA Cross", overlay = true)
fastLength = input.int(20, "Fast Length", minval = 1)
slowLength = input.int(50, "Slow Length", minval = 1)
fastMA = ta.sma(close, fastLength)
slowMA = ta.sma(close, slowLength)
plot(fastMA, color = color.orange, title = "Fast MA")
plot(slowMA, color = color.blue, title = "Slow MA")
bullish = ta.crossover(fastMA, slowMA)
bearish = ta.crossunder(fastMA, slowMA)
plotshape(bullish, style = shape.triangleup,
location = location.belowbar, color = color.green, title = "Bullish")
plotshape(bearish, style = shape.triangledown,
location = location.abovebar, color = color.red, title = "Bearish")
alertcondition(bullish, title = "Bullish cross",
message = "Fast MA crossed above Slow MA")
سطرا input.int هما ما يحوّل النص من كود ثابت إلى أداة قابلة للضبط، فبعد إضافته إلى الشارت تجد الفترتين في نافذة الإعدادات وتغيّرهما بلا برمجة. أما السطر الأخير فيسجّل شرط التنبيه، وبعده تنشئ التنبيه نفسه من واجهة المنصة وتختار هذا الشرط من القائمة. للتذكير، المتوسط المتحرك ومؤشر القوة النسبية شُرحا بالتفصيل في مؤشر المتوسط المتحرك ومؤشر RSI.
الفرق بين نص المؤشر ونص الاستراتيجية
في باين سكريبت يبدأ النص إما بـ indicator وإما بـ strategy، والفرق بينهما جوهري لا شكلي. نص المؤشر يحسب ويرسم ويُنبّه فقط. نص الاستراتيجية يملك أوامر افتراضية للدخول والخروج، فيسجّل صفقات وهمية على البيانات التاريخية ويُخرج تقرير أداء يقيس نتيجتها.
القاعدة العملية أن تبدأ بمؤشر حتى تتأكد أن حساباتك وإشاراتك صحيحة. بعدها تحوّله إلى استراتيجية حين تريد قياس أداء الفكرة. قراءة تقرير الأداء والفخاخ التي تجعل نتيجته كاذبة موضوع مستقل شرحناه في أفضل استراتيجيات تريدنج فيو للتحليل الفني.
تجنّب إعادة الرسم من داخل الكود
إعادة الرسم تعني أن الإشارة تظهر ثم تختفي أو تنتقل مكانها بعد إغلاق الشمعة، وسببها البرمجي الأشيع أن الشرط يُحتسب على شمعة لم تُغلق بعد، فتتغير قيمتها مع كل حركة سعر داخل الشمعة. والنتيجة مؤشر يبدو دقيقاً على التاريخ لأن كل شمعاته مغلقة، ثم يتناقض مع نفسه على السوق الحي.
أبسط علاج هو اشتراط أن تكون الشمعة مغلقة قبل اعتماد الإشارة:
//@version=6
indicator("Confirmed Signal", overlay = true)
rsiValue = ta.rsi(close, 14)
rawSignal = ta.crossover(rsiValue, 30)
confirmed = rawSignal and barstate.isconfirmed
plotshape(confirmed, style = shape.circle,
location = location.belowbar, color = color.green, title = "Confirmed")
ثمن هذا الوضوح تأخّر الإشارة إلى إغلاق الشمعة. وهو ثمن يستحق الدفع، لأن الإشارة المتذبذبة أسوأ من الإشارة المتأخرة. طريقة كشف إعادة الرسم في النصوص التي يكتبها غيرك شُرحت في أفضل مؤشرات تريدنج فيو وكيفية إضافتها.
حدود اللغة التي يجب معرفتها مسبقاً
- النص لا يرسل أوامر حقيقية إلى حسابك لدى الوسيط. أقصى ما يفعله إطلاق تنبيه، وأي تنفيذ آلي بعد ذلك يمر بأدوات وسيطة خارج المنصة وبمسؤوليتك الكاملة.
- الكود يعمل على خوادم المنصة، لذا يخضع لحدود الخطة من حيث عدد النصوص على الشارت الواحد وعدد التنبيهات النشطة. تفصيل ذلك في مقارنة الخطة المجانية بالمدفوعة.
- لا يمكنك قراءة ملفات خارجية أو الاتصال بمصادر بيانات غير المتاحة داخل المنصة نفسها.
- دقة ما تراه تعتمد على مصدر بيانات الشارت. مؤشر مكتوب بإتقان على تدفق أسعار متأخر يعطيك نتيجة متأخرة، وهي نقطة تناولناها في تفعيل البيانات اللحظية.
أخطاء شائعة عند أول نص
- نسخ كود مكتوب بإصدار قديم ولصقه في محرر يعمل بإصدار أحدث، فتظهر أخطاء بأسماء دوال غير معروفة.
- حساب قيمة ونسيان رسمها، ثم الاستغراب لأن الشارت لا يظهر شيئاً.
- كتابة الأرقام داخل الكود مباشرة بدل جعلها مدخلات، فيصير كل تعديل بسيط عودة إلى المحرر.
- الخلط بين الشرط والقيمة، مثل تمرير نتيجة
ta.crossoverإلىplotالذي يتوقع رقماً لا حالة صواب أو خطأ. - تجاهل رسالة الخطأ في أسفل المحرر مع أنها تذكر رقم السطر وسبب الرفض بدقة.
- الحكم على المؤشر من شكله على الشارت وحده، دون التحقق من قيمه على شمعات بعينها.
من الكود إلى السوق
المؤشر الذي كتبته بنفسك يبقى حساباً على شارت حتى تختبره في ظروف تنفيذ حقيقية، لأن الفارق السعري وسرعة التنفيذ يغيّران نتيجة أي إشارة. جرّب إشاراتك أولاً على حساب تجريبي مجاني يعمل بأسعار السوق الفعلية، وعندما تستقر النتيجة انتقل إلى حساب تداول حقيقي. ربط حسابك بالشارت ليصبح التحليل والتنفيذ في شاشة واحدة موضّح في صفحة التداول مع Errante على تريدنج فيو.
الأسئلة الشائعة (FAQ)
أكثر ما يسأل عنه المتداولون في الإمارات والكويت وقطر ومصر عند كتابة أول مؤشر لهم بلغة باين سكريبت.
ما هي لغة باين سكريبت وأين تعمل؟
هي لغة برمجة خاصة بمنصة الرسوم البيانية، تُكتب في محرر داخل المنصة وتُنفَّذ على خوادمها لا على جهازك، وغرضها الوحيد حساب قيم من بيانات الأسعار ورسمها على الشارت وإطلاق التنبيهات.
هل أحتاج خبرة برمجية سابقة لتعلمها؟
لا. اللغة محدودة الغرض ومفرداتها قليلة، وأول مؤشر عامل يمكن كتابته بثلاثة أسطر، وما تحتاجه فعلاً هو معرفة سابقة بواجهة المنصة وبمنطق التحليل الفني، لأن الكود ينفّذ فكرتك ولا يخترعها.
أين أفتح المحرر وأكتب أول نص؟
من اللوحة السفلية أسفل الشارت، في التبويب المخصص لمحرر باين. اختر إنشاء نص جديد من نوع مؤشر لتحصل على قالب جاهز، ثم احفظه باسم وأضفه إلى الشارت ليظهر فوراً.
ماذا يعني السطر الذي يبدأ بعلامتي شرطة مائلة ورقم الإصدار؟
هو تصريح إصدار اللغة الذي يحدد أي مجموعة من الدوال والقواعد ستُطبَّق على النص، فاترك الرقم الذي يضعه المحرر افتراضياً، لأن كوداً مكتوباً لإصدار أقدم قد يرفض العمل أو يعطي أخطاء بأسماء دوال غير معروفة.
ما الفرق بين indicator و strategy في الكود؟
الأول يحسب ويرسم ويُنبّه فقط، والثاني يملك أوامر دخول وخروج افتراضية فيسجّل صفقات وهمية على البيانات التاريخية ويخرج تقرير أداء. ابدأ بمؤشر للتأكد من صحة الحساب، وحوّله إلى استراتيجية عندما تريد قياس أداء الفكرة.
كيف أجعل المستخدم يعدّل الأرقام دون فتح الكود؟
استبدل الرقم الثابت بدالة مدخلات مثل input.int أو input.float، وأعطها قيمة افتراضية واسماً يظهر للمستخدم. بعدها يظهر الحقل في نافذة إعدادات المؤشر ويصبح قابلاً للتغيير من الواجهة مباشرة.
ما أشهر المعادلات والدوال الجاهزة في اللغة؟
أكثرها استعمالاً ta.sma وta.ema للمتوسطات، وta.rsi لمؤشر القوة النسبية، وta.crossover وta.crossunder للتقاطعات، وta.highest وta.lowest للمستويات، وta.atr للتذبذب. وبجانبها بيانات الشمعة نفسها بأسماء open وhigh وlow وclose وvolume.
كيف أضبط تنبيهاً من داخل الكود؟
سجّل الشرط في الكود بدالة alertcondition مع نص الرسالة، ثم أنشئ التنبيه من واجهة المنصة واختر شرطك من قائمة الشروط المتاحة. الكود يعرّف الشرط فقط، وإنشاء التنبيه وتفعيل قناة الإشعار يتمّان من الواجهة.
لماذا يبدو مؤشري مثالياً على التاريخ ويفشل على السوق الحي؟
لأن الشرط يُحتسب على شمعة لم تُغلق بعد، فتتغير نتيجته مع كل حركة سعر داخلها بينما تبدو كل الشمعات التاريخية مغلقة ونهائية، ولهذا اشترط إغلاق الشمعة قبل اعتماد الإشارة، وستدفع ثمن ذلك تأخّراً بسيطاً مقابل إشارة ثابتة.
هل يمكن للنص أن ينفّذ الصفقات تلقائياً على حسابي؟
لا يرسل النص أوامر حقيقية إلى حسابك لدى الوسيط. وأقصى ما يفعله إطلاق تنبيه عند تحقق شرطك. وأي ربط آلي بعد ذلك يتم عبر أدوات خارجية وبمسؤوليتك الكاملة، ويجب اختباره طويلاً قبل تشغيله على أموال حقيقية.
هل تعمل النصوص على الخطة المجانية؟
نعم، الكتابة والحفظ والتشغيل متاحة مجاناً، أما القيود فتقع على عدد النصوص التي تضيفها إلى الشارت الواحد وعدد التنبيهات النشطة في وقت واحد، وهي قيود قد تصطدم بها عند تشغيل عدة مؤشرات معاً لا عند كتابة أولها.
هل يراه الآخرون إذا حفظته؟
لا، يبقى النص خاصاً في مكتبتك ما لم تنشره بنفسك. وعند النشر تختار بين إتاحة الكود للجميع أو نشر المؤشر بكود محمي يستطيع الآخرون إضافته دون قراءة محتواه.
تظهر لي رسالة خطأ عند الحفظ، كيف أقرأها؟
تعرض الرسالة رقم السطر وسبب الرفض، وأغلب الأخطاء الأولى ثلاثة: دالة لا تنتمي إلى إصدار اللغة المعلن، أو قوس غير مغلق، أو تمرير نوع بيانات خاطئ مثل إعطاء شرط منطقي لدالة تتوقع رقماً. عالج السطر المذكور أولاً قبل النظر في بقية الرسائل.
هل يعمل المؤشر نفسه على الذهب وأزواج العملات؟
نعم، لأن الكود يقرأ بيانات الشارت المفتوح ولا يرتبط برمز بعينه، لكن الإعدادات المناسبة تختلف بين أداة وأخرى بسبب اختلاف التذبذب، فالفترة التي تناسب زوج عملات قد تكون قصيرة جداً على الذهب.
إخلاء المسؤولية: تنطوي تداولات الأدوات المالية (مثل الفوركس وعقود الفروقات CFD) على مستوى عالٍ من المخاطر وليست مناسبة لجميع المستثمرين. كُتب محتوى هذه المقالة لأغراض تعليمية فقط ولا ينبغي اعتباره نصيحة مالية أو إشارة تداولية. تُتداوَل منتجات وسيط Errante بالهامش وتحمل درجة عالية من المخاطر واحتمال خسارة رأس المال. تأكّد من فهمك الكامل لمخاطر هذا السوق قبل بدء التداول.