overloads חדש בפיין: פונקציות, מחרוזות חדשות!

Dec 23, 2021

בואו נעבור על כמה מהתכונות המיוחלות שהם הוסיפו במהלך .v5 צוות פיין עבד קשה כדי להמשיך ולשפר את פיין מאז השקת
.החודשיים האחרונים

Overloads פונקציות

חולקים את אותו שם  ,overloads .הן וריאציות של פונקציה שניתן להגדיר בספריה או לכלול בסקריפט 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))

יש אותה כמות overloads הפועלים בצורה שונה, בהתאם לסוג הארגומנטים המשמשים. כאשר overloads כאן, אנו מגדירים
:של פרמטרים כמו הפונקציה המקורית, יש להגדיר פרמטרים באמצעות סוגים שונים ומפורשים

//@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 החדש של
החל מאינדקס אפס, ויקצה את הערך של האלמנט של array_id יעבור על האלמנטים של array_element ב-array_id
.בכל איטרציה array_element המערך למשתנה
לא יתרחשו איטרציה או שגיאה אם המערך ריק, וניתן להוסיף או להסיר רכיבי מערך באיטרציות לולאה. בסקריפט למטה אנו
:a1 כדי למצוא את המספר הגבוה ביותר במערך for…in -משתמשים ב

//@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))

פונקציות חדשות של מניפולציה של מחרוזת

פונקציות חדשות אלו מספקות דרכים נוספות לעיבוד מחרוזות, ומציגות ביטויים רגולריים לפיין. שימו לב שבניגוד לפונקציות
מחרוזות המוגדרות על ידי המשתמש באמצעות מערכים, הן יכולות להחזיר ערכים בצורה “פשוטה”, שבה ניתן להשתמש כדי
קובע אם מחרוזת המקור ,למשל equest.security(), ליצור ארגומנטים של סימול עבור

str.contains(source, str)

לדוגמה, אנו יכולים לקבוע אם הגרף הנוכחי הוא גרף עתידי רציף על ידי str קובע אם מחרוזת המקור מכילה את תת המחרוזת
חיפוש ה”!” מחרוזת משנה במשתנה המובנה
syminfo.tickerid

var isContinuous = str.contains(syminfo.tickerid, "!")  
plot(isContinuous ? 1 : 0)

str.pos(source, str)

.במחרוזת המקור str מחזירה את המיקום של מחרוזת

str.substring(source, begin_pos, end_pos)

כדי להביא את המחרוזת str.substring() וב-str.pos() מחלץ מחרוזת משנה ממחרוזת המקור. בדוגמה זו אנו משתמשים ב
:s ממחרוזת הקלט “AAPL”

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 (source, target, replacement, occurrence)

מאפשרת החלפה סלקטיבית של מחרוזת משנה מותאמת  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)

str.lower(source) -ו str.upper(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!

str.startswith(source, str) -ו str.endswith(source, str)

.str קובע אם מחרוזת המקור מתחילה או מסתיימת במחרוזת המשנה

str.match(source, regex)

אפשר למצוא ולהחזיר את regex [\\w]+:[\\w]+ מחלץ את המחרוזת המשנה התואמת לביטוי הרגולרי שצוין. לדוגמה, עם
:מחרוזת מקור NASDAQ:AAPL!” שם הסימול מהכתובת “הגיע הזמן למכור קצת

s = "It's time to sell some NASDAQ:AAPL!"
var string tickerId = str.match(s, "[\\w]+:[\\w]+") //"NASDAQ:AAPL"

המרת מטבע

רוב הפונקציות בבקשה.* מרחב השמות יכולים כעת להמיר את הערכים שהם מחזירים במטבע אחר. אם ארגומנט המטבע צוין
בקריאה לפונקציה, ערכי המחיר המוחזרים על ידי הפונקציה יומרו ממטבע המקור למטבע היעד. פרמטר המטבע נוסף
:לפונקציות הבאות

request.dividends()

request.earnings()

request.financial()

request.security()

תיבות טקסט

בכל פעם שאתה מצייר את box.new() שרטוט התיבה בפיין תומך כעת בטקסט! פשוט הוסף את ארגומנט הטקסט לפונקציה
התיבה והטקסט יוצג בתוכה. ניתן לכוונן את התנהגות הטקסט על ידי הגדרת הערכים עבור הפרמטרי
text_size, text_color, text_valign ו-text_halign
:בעת יצירת התיבה, או על ידי התייחסות לתיבה עם אחת מהפונקציות החדשות הבאות

box.set_text()

box.set_text_color()

box.set_text_size()

box.set_text_valign()

box.set_text_halign()

כדוגמה לתכונה זו, הנה המחוון המובנה של תרשימי תקופות מרובות זמן ששונתה כדי להציג את המספר והגבוה/הנמוך של
:השבוע שהוא מדגיש

 

כדי להישאר מעודכן לגבי תכונות חדשות של פיין, עקוב אחר הערות העדכון של מדריך למשתמש של
בטוויטר וצ’אט הציבורי Squawk Box ,Telegram הם משדרים עדכונים גם בערוץ Pine. PineCoders
.TradingView-ב Pine Script

אנו מקווים שתמצא את התכונות המבוקשות הללו שימושיות. אנא המשיכו לתת לנו משוב והצעות לשיפור
.ותמיד נשמח לשמוע ממך TradingView אנו בונים עבורך

Look first Then leap

TradingView נבנית עבורך, אז וודא שאתה מפיק את המקסימום מהתכונות המצויינות שלנו
פתח גרף