الميزات الجديدة في نصوص باين البرمجية str.format() و array.from()

May 21, 2021
يضيف هذا التحديث للغة باين Pine Script دوال للعمل مع السلاسل والمصفوفات.
تسمح لك الدالة str.format () بتحويل الوسائط التي تم تمريرها إليها إلى سلسلة بتنسيق محدد:
str.format(formatString, arg0, arg1, ...) -> string

يتضمن formatString حرف N بين قوسين “{}” لاستبدال الوسيطات المنسقة المقابلة (arg0 ، arg1..argN ، وهي سلاسل أو أرقام) ، وبعض الأنماط التي تمت مناقشتها أدناه.

لذلك ، لتحليل السلاسل ، لم تعد بحاجة إلى استخدام إنشاء باستخدام الدالة str.replace_all ():

txt := "Time to {0} some {1}!"
txt := str.replace_all(txt, "{0}", close > open ? "buy" : "sell")
txt := str.replace_all(txt, "{1}", syminfo.ticker)
ولكن يمكنك القيام بذلك بطريقة جديدة وأكثر ملاءمة وأقصر:
txt = str.format("Time to {0} some {1}!", close > open ? "buy" : "sell", syminfo.ticker)
يتم استبدال الحرفين {0} و {1} الموجودين بين قوسين بالوسيطات الترتيبية المقابلة: {0} – يتم إرجاع نتيجة تنفيذ عامل التشغيل الثلاثي ، السلسلة “شراء” أو “بيع” ، اعتمادًا على عدم المساواة في الأسعار للإغلاق وللافتتاح ، {1} – syminfo.ticker ، الرمز الحالي على الرسم البياني:
باستخدام قالب الأرقام ، يمكن تحويل الرقم المحول إلى سلسلة إلى تمثيل مختلف ، على سبيل المثال ، للحد من عدد المنازل العشرية
str.format("{0,number,#.#}", 1.34) // returns: 1.3
تجاهل الجزء الكسري من الرقم:
str.format("{0,number,integer}", 1.34) // returns: 1
الحصول على المعلومات المالية:
str.format("The cash turnover amounted to {0,number,currency}", 1340000) 
// “The cash turnover amounted to $1,340,000.00”.
الحصول على النسب المئوية:
str.format("Expected return is {0,number,percent} - {1,number,percent}", 0.1, 0.2)  
// returns: Expected return is 10% - 20%.
تدعم دالة str.format () قالب التاريخ لتنسيق التاريخ / الوقت.
يعرض هذا البرنامج النصي عدد الأشهر والأسابيع والأيام منذ بداية العام:
//@version=4
study("str_format_date")

//formatting string with date pattern
txt = str.format("Current bar date: {0,date, Y-MM-d'.' \n M 'months \n' F 'weeks \n' D 'days \n from the beginning of the year' }", timenow)

//printing label
var l1 = label.new(na, na, color = #FFFFFF00)
label.set_x(l1, bar_index)
label.set_yloc(l1, yloc.belowbar)
label.set_text(l1, txt)

plot(close)

يتم تمرير timenow متغير واحد فقط إلى الدالة str.format () ، والتي تحتوي على تمثيل وقت UNIX: التاريخ والوقت والمنطقة الزمنية الحالية لبورصة الرمز على الرسم البياني. تم تنسيق السلسلة باستخدام الأحرف Y ، M ، D ، F (السنة ، الشهر ، اليوم ، الأسبوع من الشهر) ، \ n الحرف الخاص لفواصل الأسطر وعلامات الاقتباس المفردة “” لإدراج نص بين الأحرف.

يقوم هذا البرنامج النصي بإخراج سلاسل منسقة للتسمية والنتيجة المقابلة لدالة str.format () بأحرف مختلفة:

//@version=4
study("str_format_date_time")

// creating date-time variable: 2021.05.04. 14:30:59
t = timestamp("GMT+0", 2021, 05, 04, 14, 30, 59)

// function for left side of the label
f_print_left(_text)  => var _label = label.new(bar_index, na, _text, xloc.bar_index, yloc.price, color(na), label.style_label_right, color.green, size.large, text.align_right), label.set_xy(_label, bar_index, 0), label.set_text(_label, _text)

// function for right side of the label
f_print_right(_text) => var _label = label.new(bar_index, na, _text, xloc.bar_index, yloc.price, color(na), label.style_label_left, color.red, size.large, text.align_left), label.set_xy(_label, bar_index, 0), label.set_text(_label, _text)

var string format = 
  "{0,date,y.MM.dd hh:mm:ss}\n" +
  "{1,date,short}\n" +
  "{2,date,medium}\n" +
  "{3,date,long}\n" +
  "{4,date,full}\n" +
  "{5,date,h a z (zzzz)}\n" +
  "{6,time,short}\n" +
  "{7,time,medium}\n" +
  "{8,time,long}\n" +
  "{9,time,full}\n" + 
  "{10,time,hh:mm:ss}\n" +
  "{11,time,HH:mm:ss}\n"

// printing format string 
f_print_left(format)
//printing formatted string
f_print_right(str.format(format, t, t, t, t, t, t, t, t, t, t, t, t))
يحتوي العمود الأيسر للتسمية على الأحرف المضمنة في {} ، أما العمود الأيمن فهو نتيجة الدالة str.format:

يتم تمرير المتغير t إلى الدالة str.format () ، والتي تحتوي على تمثيل وقت UNIX: التاريخ والوقت والمنطقة الزمنية الحالية.

الابتكار التالي هو الدالة array.from () ، والتي تأخذ عددًا متغيرًا من وسيطات الإدخال لأحد الأنواع التالية: float ، و int ، و bool ، و string ، و label ، و line ، و color وإرجاع مصفوفة من النوع المقابل. تسمح لك الوظيفة بتعريف مصفوفة ، وتعيين قيم أولية لها ، وإسناد النتيجة إلى أي متغير في سطر واحد فقط من التعليمات البرمجية.

في السابق ، لإنشاء مصفوفة وتعبئتها بالقيم الأولية ، كان عليك استخدام الدالة array.new () والدالات array.push () أو array.set ():

color[] plotColors = array.new_color(size=0)
array.push(plotColors, color.red)
array.push(plotColors, color.green)
array.push(plotColors, #0000FF)
الآن ، لإنشاء مصفوفة تحتوي على ألوان المخططات ، يمكنك الحصول عليها بسطر واحد فقط:
plotColors = array.from(color.red, color.green, #0000FF)
ستقوم الدالة تلقائيًا بنقل مصفوفة plotColors إلى نوع اللون [] استنادًا إلى الوسائط المتلقاة:
//@version=4
study(title="array_from")

f_arr (series1, series2, color1, color2) =>
    [ array.from(series1, series2), array.from(color1, color2) ]

[lines, colors] = f_arr(close, open, color.red, color.green)    

plot ( array.get(lines, 0), color = array.get(colors, 0))
plot ( array.get(lines, 1), color = array.get(colors, 1))

تتوفر دائمًا معلومات حول هذه الدالتين str.format () و array.from () في دليلنا المرجعي.

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

نأمل أن تجد هذه التحسينات مفيدة

 ويرجى الاستمرار في مشاركة رأيك معنا.
نحن نبني TradingView لمستخدمينا ، ونحب سماع رأيك في ابتكاراتنا.

Look first Then leap

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