Downloading...

الجديد في Pine: التحميلات الزائدة ودوال السلسلة الجديدة والمزيد!

Dec 23, 2021

يعمل فريق برمجة Pine بجد لمواصلة تحسين Pine منذ طرح الإصدار v5 الخامس. فلنستعرض بعض الميزات التي طال انتظارها والتي أضافوها خلال الشهرين الماضيين.

زيادة أحمال الدوال

زيادة الأحمال overloads على الدوال هي اختلافات لدالة يمكن تعريفها في مكتبة أو تضمينها في برنامج نصي. تشترك الأحمال الزائدة في نفس اسم الدالة الأصلية ، ولكنها تستخدم كميات مختلفة من المعلمات أو معلمات من أنواع مختلفة. إنها مفيدة بشكل خاص في المكتبات ، حيث تكون أنواع المعلمات إلزامية.

في هذا المؤشر ، نحدد الحمل الزائد لدالة  mult() التي تقبل ثلاث حجج:

//@version=5
indicator("Function overload")

// Two parameters
mult(x1, x2) =>
    x1 * x2

// Three parameters
mult(x1, x2, x3) =>
    x1 * x2 * x3

plot(mult(7, 4))
plot(mult(7, 4, 2))
هنا ، نحدد الأحمال الزائدة التي تعمل بشكل مختلف ، اعتمادًا على نوع الوسيطات المستخدمة. عندما يكون للحمل الزائد نفس كمية المعلمات مثل الدالة الأصلية ، يجب تحديد المعلمات باستخدام أنواع مختلفة وواضحة:
//@version=5
indicator("Function overload")

// Accepts both 'int' and 'float' values because any 'int' can be automatically cast to 'float'
mult(float x1, float x2) =>
    x1 * x2

// Returns a 'bool' value instead of a number
mult(bool x1, bool x2) =>
    x1 and x2 ? true : false

mult(string x1, string x2) =>
    str.tonumber(x1) * str.tonumber(x2)

// Has three parameters, so explicit types are not required
mult(x1, x2, x3) =>
    x1 * x2 * x3

plot(mult(7, 4))
plot(mult(7.5, 4.2))
plot(mult(true, false) ? 1 : 0)
plot(mult("5", "6"))
plot(mult(7, 4, 2))

FOR…IN

يتطلب التكرار عبر مصفوفة باستخدام بنية for منع إدخال الحلقة إذا كانت المصفوفة فارغة وتحميها من فهرس مصفوفة خارج الحدود.

هيكل دالة for…in الجديد يجعل حياتك أسهل من خلال التكرار على جميع عناصر المصفوفة من أجلك. التركيب اللغوي بسيط: for array_element in array_id ، سيتكرر على عناصر array_id بدءًا من الفهرس صفر ، مع تعيين قيمة عنصر المصفوفة إلى متغير array_element في كل تكرار. لن يحدث أي تكرار أو خطأ إذا كانت المصفوفة فارغة ، ويمكن إضافة عناصر المصفوفة أو إزالتها في التكرارات الحلقية.

في البرنامج النصي أدناه ، نستخدم for…in للعثور على أكبر رقم في المصفوفة a1:

//@version=5
indicator("For...in cycle")
var int[] a1 = array.from(1, 3, 6, 3, 8, 0, -9, 5)

highest(array) =>
    var int highestNum = na
    for element in array
        if na(highestNum) or element > highestNum
            highestNum := element
    highestNum

plot(highest(a1))

دوال STRING-MANIPULATION الجديدة

توفر هذه الدوال الجديدة المزيد من الطرق لمعالجة السلاسل ، وتقديم التعبيرات النمطية إلى Pine. لاحظ أنه ، على عكس دوال السلسلة المعرفة من قبل المستخدم باستخدام المصفوفات ، يمكنهم إرجاع قيم النموذج “simple” ، والتي يمكن للمرء استخدامها لإنشاء وسيطات symbol  لـ request.security () ، على سبيل المثال.

str.contains(source, str)

تحديد ما إذا كانت السلسلة source تحتوي على سلسلة str فرعية. على سبيل المثال ، يمكننا تحديد ما إذا كان الرسم البياني الحالي هو مخطط مستمر للعقود الآجلة من خلال البحث عن “!” السلسلة الفرعية في المتغير المدمج syminfo.tickerid:
var isContinuous = str.contains(syminfo.tickerid, "!")  
plot(isContinuous ? 1 : 0)
إرجاع موضع سلسلة str في السلسلة source .
يستخرج سلسلة فرعية من سلسلة source . في هذا المثال نستخدم str.substring () و str.pos () لجلب السلسلة الفرعية “AAPL” من سلسلة الإدخال s:
s = input.string("Time to sell some NASDAQ:AAPL") 
pos = str.pos(s, ":")  // Get the position of the ":" character
tkr = str.substring(s, pos + 1) // "AAPL"
على عكس دالة str.replace_all () الحالية ، يسمح str.replace() بالاستبدال الانتقائي لسلسلة فرعية متطابقة بسلسلة بديلة. في هذا المثال ، نستبدل بادئة “FTX” بـ “BINANCE” للرمز الأول في سلسلة الانتشار:
var source = "FTX:BTCUSD / FTX:BTCEUR"
// Replace the first occurrence of "FTX" with the "BINANCE" replacement string
var newSource = str.replace(source, "FTX",  "BINANCE", 0)
يحول جميع أحرف السلسلة source إلى أحرف صغيرة أو كبيرة:
s = str.lower("Time to Sell Some AAPL") // time to sell some aapl!
s = str.upper("Time to Sell Some AAPL!") // TIME TO SELL SOME AAPL!
تحدد ما إذا كانت السلسلة source تبدأ أو تنتهي بسلسلة str الفرعية.
استخرج السلسلة الفرعية المطابقة للتعبير العادي المحدد. على سبيل المثال ، باستخدام regex [\\w]+:[\\w]+ ، من الممكن العثور على اسم الرمز وإعادته من “حان الوقت لبيع بعض NASDAQ: AAPL!” سلسلة source :
s = "It's time to sell some NASDAQ:AAPL!"
var string tickerId = str.match(s, "[\\w]+:[\\w]+") //"NASDAQ:AAPL"

تحويل العملات CURRENCY CONVERSION

يمكن لمعظم الدوال في  request.*  الآن تحويل القيم التي ترجعها بعملة أخرى. إذا تم تحديد وسيطة currency في استدعاء الدالة ، فسيتم تحويل قيم السعر التي تُرجعها الدالة من العملة المصدر إلى العملة الهدف. تمت إضافة معلمة currency إلى الدوال التالية:

TEXTBOXES

يدعم الرسم المربع في Pine النص الآن! ما عليك سوى إضافة وسيطة text إلى دالة  box.new() كلما قمت برسم المربع وسيتم عرض النص بداخله. يمكنك ضبط سلوك النص عن طريق تعيين قيم معلمات text_size, text_color, text_valign, and text_halign عند إنشاء المربع ، أو بالإشارة إلى المربع بإحدى الدوال الجديدة التالية:
كمثال على هذه الميزة ، إليك مؤشر المخططات الزمنية متعددة الأوقات المدمج الذي تم تعديله لعرض الرقم وأعلى / أدنى مستوى للأسبوع الذي يبرزه:

للبقاء على اطلاع بميزات Pine الجديدة ، راقب ملاحظات إصدار دليل مستخدم Pine. تبث PineCoders أيضًا تحديثات على قناة Squawk Box Telegram و Twitter ومن الدردشة العامة Pine Script على TradingView.

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

Look first Then leap

تم إنشاء TradingView خصيصًا لك، لذا تأكد من حصولك على أقصى استفادة من خدماتنا الرائعة