يسعدنا أن نعلن اليوم عن إصدار Pine Script® v6! تتضمن هذه النسخة المطورة من لغة البرمجة التي تركز على المتداول مجموعة متنوعة من التحسينات وتحسينات الميزات المطلوبة منذ فترة طويلة، مما يوفر قدرًا أكبر من الكفاءة والفائدة لمبرمجي Pine Script®، مما يمهد الطريق لنقل اللغة إلى آفاق جديدة.
يوضح هذا المنشور بعضًا من أبرز الترقيات في Pine v6. راجع ملاحظات الإصدار الخاصة بنا لمعرفة المزيد حول الجديد في الإصدار 6 وللبقاء على اطلاع دائم بالتحسينات المستقبلية.
أداة تحويل v6
كما هو الحال مع تغييرات الإصدار السابق، لا تؤثر الترقيات المضمنة في Pine v6 على النصوص الشخصية أو المنشورة المكتوبة في إصدارات Pine السابقة. سيتم تنفيذ جميع الميزات الجديدة من هذه النقطة فصاعدًا حصريًا في أحدث إصدار من Pine، لذلك نوصي بتحويل النصوص البرمجية إلى v6 إذا كنت ترغب في الوصول إلى ميزات جديدة. أسهل طريقة هي استخدام أداة تحويل v6 الجديدة الخاصة بنا، والتي يمكنك تمكينها عن طريق تحديد «تحويل الكود إلى v6″ من قائمة «إدارة البرنامج النصي» في Pine Editor.
لاحظ أنه لا يمكن تحويل جميع النصوص البرمجية إلى v6 تلقائيًا، وفي بعض الحالات، تكون التعديلات اليدوية ضرورية لضمان عمل البرنامج النصي المحول كما هو متوقع. إذا واجهت مشكلات في التحويل التلقائي أو تفضل تحويل النصوص البرمجية إلى الإصدار 6 يدويًا، فراجع دليل الترحيلالمفيد الخاص بنا.
طلبات ديناميكية
توفر TradingView الوصول إلى عشرات الآلاف من الرموز للأدوات القابلة للتداول والمقاييس المالية والمؤشرات الاقتصادية من جميع أنحاء العالم. تسمح مجموعة وظائف request.* () لنصوص Pine باسترداد البيانات لأي رمز متاح في أطر زمنية مختلفة، بغض النظر عن الرمز والإطار الزمني المستخدم في الرسم البياني.
هذه الوظائف هي أدوات مساعدة قوية مع العديد من حالات الاستخدام. ومع ذلك، كان لديهم سابقًا قيود كبيرة: فقد طلبوا استخدام قيم «السلسلة البسيطة» لتحديد الرمز والإطار الزمني للطلب، مما يعني أنه يجب معرفة السياق في الشريط الأول ولا يمكن تغييره بعد ذلك. بالإضافة إلى ذلك، تم إجبار جميع مكالمات request.* () على التنفيذ الصارم في النطاق العالمي للبرنامج النصي. بمعنى آخر، يمكن لأي مثيل request.* () في الكود جلب البيانات لرمز وإطار زمني واحد فقط، ولا يُسمح بأي مكالمات request.* () داخل الحلقات أو الهياكل الشرطية أو وظائف المكتبة المصدرة.
لقد أزلنا هذه القيود في Pine Script® v6. الآن، يمكن للبرامج النصية استخدام قيم «سلسلة السلسلة» لتحديد سياق أي مكالمة طلب.* () . بالإضافة إلى ذلك، request.*() الآن أصبح مسموحًا بالمكالمات داخل النطاقات المحلية. باستخدام هذه التغييرات، يمكنك حساب الرموز أو تعديلها على أي شريط تاريخي وطلب بياناتها ديناميكيًا، وإنشاء مجموعات من الرموز وجلب بياناتها داخل الحلقات، والقيام بالعديد من الأشياء الأخرى باستخدام وظائف request.* () التي لم تكن ممكنة من قبل. راجع قسم الطلبات الديناميكية في دليل المستخدم الخاص بنا لمعرفة المزيد.
للحصول على مثال لما يمكنك القيام به مع الطلبات الديناميكية، راجع الأعمال الداخلية لمؤشر الأداء المدمج. يقوم بتقسيم القوائم المنفصلة بفواصل من الرموز وسلاسل الإطار الزمني إلى مصفوفات، ثم يقوم باستدعاء request.security() بشكل ديناميكي داخل الحلقات لجلب القيم من كل مجموعة بيانات. في الماضي، كان النص مثل هذا يتطلب عدة input.symbol() و input.timeframe() المكالمات، وكان من المفترض أن تتطلب كل مجموعة رمز-إطار زمني طلب request.security() :
للحصول على مرجع إضافي، تحقق من هذه النصوص البرمجية المنشورة بواسطة حساب TradingView، والتي تستخدم أيضًا الطلبات الديناميكية لجلب البيانات من سياقات أخرى.
خريطة حرارة الفوركس. يقوم هذا المؤشر بإنشاء معرفات المؤشرات لمجموعات أزواج العملات بناءً على قائمة رموز العملات المحددة من قبل المستخدم. يطلب البيانات ديناميكيًا لكل مجموعة أزواج داخل الحلقات، ثم يستخدم البيانات لملء جدول مرمز بالألوان.
شريط التيكر. يقوم هذا المؤشر بإنشاء مجموعة من معرفات المؤشرات من قائمة الرموز المحددة من قبل المستخدم. يطلب بشكل ديناميكي معلومات السعر والتغيير اليومي لكل معرف مؤشر من المصفوفة داخل حلقة، ثم يستخدم البيانات لتحديث عرض “الشريط” الدوار.
LibraryCOT. في السابق، كانت هذه المكتبة توفر فقط أدوات لإنشاء معرفات الأسهم لطلب بيانات التزام المتداولين (COT) لدى CFTC لأن المكتبات لم تتمكن من تصدير الوظائف التي تحتوي على مكالمات request.* ( ). مع الطلبات الديناميكية، لم يعد هذا القيد ساريًا. تقوم المكتبة الآن بتصدير وظيفة requestCommityofTraders () التي تستدعي request.security () داخليًا لاسترداد بيانات COT مباشرة، مما يوفر مزيدًا من الراحة والتنوع للمبرمجين.
بالإضافة إلى ذلك، تم الاحتفاظ بجميع رموز تقارير CFTC مسبقًا داخل عبارات التبديل لإرجاع القيم «البسيطة»، مما حد بشكل كبير من المؤشرات المتاحة للطلب. مع الطلبات الديناميكية، لم تعد معرفات مؤشر «السلسلة البسيطة» مطلوبة، مما يسمح للمكتبة بتخزين رموز التقارير في الخريطة، وتوفير الدعم لمزيد من الرموز.
التحسين المنطقي
قد لا يكون أحد التحسينات الأكثر أهمية في Pine Script® v6 واضحًا على السطح، ولكن من المحتمل أن تلاحظ فرقًا في كفاءة الكود. لقد أعدنا صياغة التنفيذ الداخلي لقيم “bool” في Pine، وقمنا بتقديم تقييم الدائرة القصيرة (أو “الكسول”)، مما يسمح بـ و و أو عمليات لإيقاف تقييم التعبيرات الإضافية عندما لا تكون مطلوبة لتحديد النتيجة.
تعمل هذه التغييرات على تحسين أداء معظم النصوص البرمجية على TradingView. يمكن ملاحظة الفرق في الكفاءة بشكل خاص مع النصوص البرمجية الكبيرة نسبيًا التي تعتمد بشكل كبير على الشروط وتستخدم العديد من قيم «bool»، كما أكدنا في اختباراتنا على بعض النصوص البرمجية المجتمعية مفتوحة المصدر الأكثر شيوعًا.
على سبيل المكافأة، غالبًا ما يسمح تقييم «bool» البطيء برمز أنظف وأكثر إيجازًا. على سبيل المثال، إذا كان لديك شرط يعتمد على عناصر من مصفوفة، فقد تضطر إلى التحقق من حجم المصفوفة للتأكد من وجود فهرس العنصر، حيث سيتوقف البرنامج النصي ويظهر خطأ إذا كان الفهرس خارج الحدود. يسمح لك Pine v6، بتقييمه البطيء، بإنشاء تعبير شرطي واحد يتحقق من المصفوفة قبل محاولة الوصول إلى عنصر، وهو ما لم يكن ممكنًا في v5.
//@version=6 indicator("Lazy evaluation demo") //@variable A "bool" array without a fixed size. array<bool> myArray = array.new<bool>() // Push a new value into `myArray` when the `close` is above the `open`. if close > open myArray.push(true) // Line 13 causes an error in v5 because `myArray.first()` always executes, even if the first expression is `false`. // It works in v6 though because `myArray.first()` executes only if the first expression evaluates to `true`. if myArray.size() != 0 and myArray.first() label.new(bar_index, high, "Test")
حجم النص وتنسيقه
يمكن الآن لجميع أنواع الرسومات التي تعرض النص (المربعات والتسميات والجداول) استخدام أحجام النص المحددة في نقاط الطباعة – وهي نفس النقاط المستخدمة في برامج تحرير النصوص القياسية. في السابق، كان عليك الاختيار بين حجم عشوائي.* الثوابت، مثل size.large (24) و الحجم.ضخم (36). الآن، مع مواصفات النقطة المطبعية الجديدة، يمكنك التأكد من أن حجم النص هو بالضبط ما تريده. يمكنك أيضًا إنشاء أحجام نصوص ضخمة كان من المستحيل تحقيقها في إصدارات Pine السابقة.
بالإضافة إلى ذلك، قدمنا معلمة text_formating جديدة لأنواع الرسومات هذه، والتي يمكنك استخدامها لجعل النص مائلًا أو غامقًا أو كليهما.
//@version=6 indicator("Text size showcase", overlay = true) var t = table.new(position.bottom_center, 1, 2, bgcolor = color.yellow, frame_color = color.black, frame_width = 1) if barstate.islastconfirmedhistory t.cell(0, 0, "text_size = size.huge", text_size = size.huge) t.cell(0, 1, "text_size = 60, bold & italicized", text_size = 60, text_formatting = text.format_bold + text.format_italic)
تقليم ترتيب الإستراتيجية
قد يعرف مستخدمو البرنامج النصي للاستراتيجية النشطة أنه في Pine v5، يمكن للاستراتيجية محاكاة ما يصل إلى 9000 صفقة قبل إيقاف حساباتها وإثارة الخطأ، إلا إذا كنت تستخدم وضع Deep Backtesting. هذا القيد غير ملائم بشكل خاص للاستراتيجيات التي تحاكي الصفقات المتكررة وتخلق محفزات التنبيه.
في Pine Script® v6، لم تعد الاستراتيجيات تتوقف عن الحساب أو تثير الخطأ بعد الوصول إلى حد التجارة 9000. وبدلاً من ذلك، تقوم الاستراتيجية بتقليص الطلبيات الأقدم لإفساح المجال للطلبيات الجديدة. لا تظهر الطلبات المقتطعة في اختبار الاستراتيجية، ولكن الاستراتيجية تواصل حساباتها دون مشكلة. للتحقق من مؤشر التداول الخاص بأقدم طلب غير مقصوص، يمكنك استخدام متغير strategy.closedtrades.first_index الجديد. يمكن استخدام الفهرس كوسيطة trade_num في استدعاءات الدالة strategy.closedtrades.* ().
مؤشرات المصفوفة السلبية
في Pine v6، يمكن الآن لدوال array.get ()و array.set ()و array.insert ()و array.remove () قبول وسيطات الفهرس السلبية للعناصر المرجعية بدءًا من نهاية المصفوفة، مما يوفر طريقة أكثر إيجازًا وملاءمة للإشارة إلى عناصر المصفوفة بترتيب عكسي. على سبيل المثال، تقوم المكالمة array.get (myArray، -2) باسترداد العنصر الثاني إلى الأخير في myArray، وهو ما يعادل array.get ( myArray، array.size (myArray) – 2).
للبقاء على اطلاع بأحدث التحسينات على تجربة Pine Script®، راقب ملاحظات الإصدار في دليل المستخدم – حتى أن قسم v6 يتضمن بعض التغييرات الإضافية التي لم تدخل في منشور المدونة هذا.
نأمل أن تجد هذه الميزة المطلوبة بشدة مفيدة لك، كما يرجى الاستمرار في إرسال ملاحظاتك واقتراحاتك إلينا حتى نتمكن من جعل منصتنا أفضل. صممنا TradingView لتفيدك، ونحن حريصون دائمًا على الاستماع إليك.
فريق TradingView