Downloading...

Pine Script® v6  כאן

Dec 10, 2024

אנו שמחים לעדכן אתכם היום על שחרורו של ,Pine Script® v6! גרסה משודרגת זו של שפת התכנות ממוקדת הסוחר שלנו כוללת מגוון אופטימיזציות ושיפורי תכונות שביקשתם מזה תקופה, ואשר מציעה יעילות ושימושיות רבה יותר למתכנתי ,Pine Script® מה שמכשיר את הבמה לקחת את השפה לשיאים חדשים.

פוסט זה מתאר כמה מהשדרוגים הבולטים ביותר ב- Pine v6. עיין בהערות עדכוני הגרסה שלנו כדי ללמוד עוד מה חדש ב-v6 ועל מנת להישאר מעודכן לגבי שיפורים עתידיים.

כלי המרה  v6

כמו בשינויים קודמים בגרסה, השדרוגים הכלולים ב- Pine v6 לא משפיעים על סקריפטים אישיים או כאלה שנכתבו ופורסמו בגרסאות Pine קודמות. כל התכונות החדשות מנקודה זו והלאה יוטמעו אך ורק בגרסה העדכנית ביותר של Pine לכן אם אתה רוצה  לגשת לתכונות חדשות, אנו ממליצים להמיר את הסקריפטים שלך ל-v6. השיטה הקלה ביותר היא להשתמש בכלי ההמרה החדש שלנו ,v6 אותו תוכל להפעיל על ידי בחירת “המר קוד ל- v6 מתפריט “ניהול סקריפט” של עורך. Pine

שים לב שאי אפשר להמיר את כל הסקריפטים ל- v6 באופן אוטומטי, ובמקרים מסוימים, יש צורך בעריכות ידניות כדי להבטיח שהסקריפט שהומר עובד כמצופה. אם אתה נתקל בבעיות עם המרה אוטומטית או מעדיף להמיר את הסקריפטים שלך ל- v6 באופן ידני, עיין במדריך ההעברה השימושי שלנו.

בקשות דינמיות

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

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

ב- Pine Script® v6 הסרנו את המגבלות אלה. עכשיו, סקריפטים יכולים להשתמש בערכי “מחרוזת סדרה” כדי להגדיר את ההקשר של כל בקשה.*() קריאה. בנוסף, בקשה.*() קריאות מותרות כעת בתוך היקפים מקומיים. עם השינויים האלה, אתה יכול לחשב או לשנות סימולים בכל בר היסטורי ולבקש את הנתונים שלהם באופן דינמי, ליצור אוספים של סימולים ולאחזר את הנתונים שלהם בתוך לולאות ולעשות דברים רבים אחרים עם פונקציות request.*() שלא היו אפשריות בעבר. עיין בסעיף בקשות דינמיות במדריך למשתמש שלנו למידע נוסף.

דוגמא של מה תוכל לעשות עם בקשות דינמיות, בדוק את הפעולה הפנימית של אינדיקטור הביצועים המובנה. הוא מפצל רשימות מופרדות בפסיקים של מחרוזות סימולים ומסגרת זמן למערכים, ולאחר מכן קורא request.security() באופן דינמי בתוך לולאות כדי להביא ערכים מכל מערך נתונים. בעבר, סקריפט כזה היה מצריך קריאות input.symbol() ו–input.timeframe()  מרובות, וכל שילוב של symbol-timeframe היה דורש קריאה נפרדת request.security() בקוד:

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

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

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

LibraryCOT,  בעבר, ספריה זו סיפקה רק כלים ליצירת מזהי טיקרים לבקשת נתוני CFTC Commitment of Traders (COT)  משום שספריות לא יכלו לייצא פונקציות המכילות קריאות request.*(). עם בקשות דינמיות, מגבלה זו לא קיימת יותר. עכשיו הספרייה מייצאת פונקציה requestCommitmentOfTraders() הקוראת ל- request.security() באופן פנימי כדי לאחזר נתוני COT ישירות, מה שמספק יותר נוחות ורבגוניות למתכנתים.

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

אופטימיזציה בוליאנית

אחד השיפורים הבולטים ביותר ב-Pine Script® v6 אולי לא נראה על פני השטח, אבל סביר להניח שתבחין בהבדל בקוד efficiency. עיבדנו מחדש את היישום הפנימי של ערכי “בול” ב-Pine, והכנסנו הערכה של קצר חשמלי (או “Lazy”), המאפשרת ‘ו’ ו- או פעולות להפסיק להעריך ביטויים נוספים כאשר הם אינם נדרשים כדי לקבוע את התוצאה .

שינויים אלה משפרים את הביצועים של רוב הסקריפטים ב- TradingView. ההבדל ביעילות בולט במיוחד עם סקריפטים גדולים יחסית שמסתמכים במידה רבה על תנאים ומשתמשים בערכי “בול” רבים, כפי שאישרנו בבדיקות שלנו על כמה מהסקריפטים הפופולריים ביותר של קהילת קוד פתוח.

כבונוס, הערכת “בול” עצלנית מאפשרת לעתים קרובות קוד נקי ותמציתי יותר. לדוגמה, אם יש לך מצב שמסתמך על פריטים ממערך, ייתכן שיהיה עליך לבדוק את גודל המערך כדי לוודא שהאינדקס של הפריט קיים, מכיוון שהסקריפט יעצור ויעלה שגיאה אם ​​האינדקס הוא מחוץ לתחום. 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* שרירותי. כגון size.large (24) ו- size.huge (36). כעת, עם מפרט הנקודות הטיפוגרפי החדש, אתה יכול להבטיח שגודל הטקסט הוא בדיוק כמו שאתה רוצה. אתה יכול אפילו ליצור גדלי טקסט מסיביים שאי אפשר היה להשיג בגרסאות קודמות של Pine.

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

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

ב-Pine Script® v6, אסטרטגיות כבר לא מפסיקות לחשב או להעלות שגיאה לאחר שהגיעו למגבלת הסחר של 9000. במקום זאת, האסטרטגיה חותכת את הפקודות הישנות ביותר כדי לפנות מקום לחדשות. הפקודות שנחתכו לא מופיעות בבוחן האסטרטגיות (Strategy Tester), אך האסטרטגיה ממשיכה בחישובים שלה ללא בעיה. כדי לבדוק את מדד המסחר של הפקודה הישנה ביותר שאינה חתוכה, תוכל להשתמש במשתנה 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

Look first Then leap

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