تیم پاین به طور مداوم در حال کار برای بهبود پاین از زمان رونمایی نسخه ۵ بوده است. بیایید به برخی از ویژگیهای مورد انتظار که در دو ماه گذشته اضافه شدهاند، نگاهی بیندازیم.
بارگذاری تابع
بارگذاری تابع به معنی ایجاد واریانتهایی از یک تابع است که میتوانند در یک کتابخانه یا اسکریپت تعریف شوند. بارگذاریها نام یکسانی با تابع اصلی دارند، اما از مقادیر مختلف پارامترها یا پارامترهای با نوعهای مختلف استفاده میکنند. این ویژگی به خصوص در کتابخانهها که نیاز به نوعهای پارامتر هستند، بسیار مفید است.
در این نشانگر، بارگذاری تابع mult() که سه آرگومان دریافت میکند را تعریف میکنیم:
//@version=5 indicator("بارگذاری تابع") // دو پارامتر mult(x1, x2) => x1 * x2 // سه پارامتر mult(x1, x2, x3) => x1 * x2 * x3 plot(mult(7, 4)) plot(mult(7, 4, 2))
در اینجا، بارگذاریهایی را تعریف میکنیم که بسته به نوع آرگومانهای استفاده شده، به شیوههای متفاوتی عمل میکنند. زمانی که بارگذاریها همان تعداد پارامتر را دارند، پارامترها باید با نوعهای مختلف و مشخص تعریف شوند:
//@version=5 indicator("بارگذاری تابع") // هر دو مقدار 'int' و 'float' را میپذیرد، زیرا هر 'int' میتواند به طور خودکار به 'float' تبدیل شود mult(float x1, float x2) => x1 * x2 // یک مقدار 'bool' به جای عدد برمیگرداند mult(bool x1, bool x2) => x1 and x2 ? true : false mult(string x1, string x2) => str.tonumber(x1) * str.tonumber(x2) // دارای سه پارامتر است، بنابراین نوعهای مشخص لازم نیستند 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))
توابع جدید پردازش رشته
این توابع جدید امکان پردازش بیشتری برای رشتهها فراهم میکنند و عبارات منظم را به Pine معرفی میکنند. توجه داشته باشید که برخلاف توابع رشتهای تعریف شده توسط کاربر که از آرایهها استفاده میکنند، این توابع میتوانند مقادیر “ساده” بازگردانند که میتوان از آنها برای ایجاد آرگومانهای symbol برای request.security() استفاده کرد.
str.contains(source, str)
تعیین میکند که آیا رشته source شامل زیررشته str میباشد یا نه. به عنوان مثال، میتوانیم تعیین کنیم که آیا چارت جاری یک چارت آینده پیوسته است با جستجوی زیررشته “!” در متغیر داخلی syminfo.tickerid:
var isContinuous = str.contains(syminfo.tickerid, "!") plot(isContinuous ? 1 : 0)
str.pos(source, str)
موقعیت رشته str را در رشته source برمیگرداند.
str.substring(source, begin_pos, end_pos)
یک زیررشته از رشته source استخراج میکند.
برای استفاده رایگان از تریدینگ ویو پرمیوم از چارت آتو تی کریپتو استفاده کنید.با استفاده از str.pos() برای به دست آوردن زیررشته “AAPL” از رشته ورودی s استفاده میکنیم:
s = input.string("وقت فروش مقداری از NASDAQ:AAPL") pos = str.pos(s, ":") // موقعیت کاراکتر ":" را به دست آورید 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" // اولین وقوع "FTX" را با رشته جایگزین "BINANCE" جایگزین کنید var newSource = str.replace(source, "FTX", "BINANCE", 0)
str.lower(source) و str.upper(source)
تمام حروف رشته source را به صورت حروف کوچک یا بزرگ تبدیل میکند:
s = str.lower("وقت فروش مقداری AAPL") // وقت فروش مقداری aapl! s = str.upper("وقت فروش مقداری AAPL!") // وقت فروش مقداری AAPL!
str.startswith(source, str) و str.endswith(source, str)
مشخص میکند که آیا رشته source با زیررشته str آغاز یا پایان مییابد.
str.match(source, regex)
زیررشتهای را که مطابق با عبارت منظم تعیینشده است استخراج میکند. به عنوان مثال، با regex [w]+:[w]+ میتوان نام نماد را از رشته “وقت فروش مقداری از NASDAQ:AAPL!” استخراج کرد:
s = "وقت فروش مقداری از NASDAQ:AAPL!" var string tickerId = str.match(s, "[w]+:[w]+") //"NASDAQ:AAPL"
برای استفاده رایگان از تریدینگ ویو پرمیوم از چارت آتو تی کریپتو استفاده کنید.
تبدیل ارز
اکنون اکثر توابع در فضای نام request.* توانایی تبدیل مقادیر دریافتی به ارز دیگر را دارند. اگر در فراخوانی تابع، آرگومان currency مشخص شود، مقادیر قیمتی که تابع باز میگرداند، از ارز مبدا به ارز مقصد تبدیل خواهند شد. پارامتر currency به توابع زیر اضافه شده است:
جعبههای متنی
اکنون رسم جعبه در Pine از متن پشتیبانی میکند! کافی است آرگومان text را به تابع box.new() اضافه کنید و متن را درون جعبه نشان دهید. شما میتوانید رفتار متن را با تنظیم مقادیر برای پارامترهای text_size, text_color, text_valign, و text_halign به هنگام ایجاد جعبه، یا با مراجعه به جعبه با یکی از توابع جدید زیر، تنظیم کنید:
به عنوان نمونهای از این قابلیت، در اینجا نشانگری با نام Multi-Time Period Charts موجود است که بهروز شده تا تعداد و بالاترین/پایینترین مقدار هفته را که هایلایت میکند، نشان دهد:
برای آگاهی از ویژگیهای جدید Pine، به یادداشتهای انتشار در راهنمای کاربری Pine توجه کنید. PineCoders ما همچنین بهروزرسانیها را در کانال تلگرامی Squawk Box، توییتر و چت عمومی Pine Script در TradingView منتشر میکنند.
امیدواریم این ویژگیهای پرطرفدار برای شما مفید باشد. لطفاً به ارائه نظرات و پیشنهادات خود ادامه دهید. ما TradingView را برای شما میسازیم و همیشه مشتاق شنیدن از شما هستیم.
برای استفاده رایگان از تریدینگ ویو پرمیوم از چارت آتو تی کریپتو استفاده کنید