امروز با خوشحالی اعلام میکنیم که نسخه جدید Pine Script® v6 منتشر شده است! این نسخه بهبود یافته از زبان برنامهنویسی که برای تریدرها طراحی شده، شامل بهینهسازیها و بهبودهای مورد درخواست فراوان است که کارآیی و کاربرد بیشتری به برنامهنویسان Pine Script® ارائه میدهد و افقهای جدیدی را برای این زبان فراهم میآورد.
این مطلب به بررسی چند مورد از مهمترین بهبودهای نسخه v6 میپردازد. برای آشنایی بیشتر با ویژگیهای جدید v6 و حفظ بهروزرسانیها، لطفاً یادداشتهای انتشار ما را مشاهده کنید.
ابزار تبدیل v6
مانند تغییرات نسخههای قبلی، بهبودهای موجود در Pine v6 بر روی اسکریپتهای شخصی یا منتشرشده نوشتهشده در نسخههای قبلی تأثیر نمیگذارد. تمام ویژگیهای جدید از این پس بهصورت انحصاری در آخرین نسخه Pine پیادهسازی خواهد شد، بنابراین اگر میخواهید به ویژگیهای جدید دسترسی پیدا کنید، توصیه میکنیم اسکریپتهای خود را به v6 تبدیل کنید. سادهترین روش استفاده از ابزار تبدیل جدید v6 است که میتوانید با انتخاب گزینه “Convert code to v6” از منوی “Manage script” در ویرایشگر Pine نیروی لازم را فراوان آورد.
توجه داشته باشید که همه اسکریپتها نمیتوانند بهطور خودکار به v6 تبدیل شوند و در بعضی موارد، ویرایشهای دستی لازم است تا اطمینان حاصل شود که اسکریپت تبدیل شده به درستی کار میکند. اگر با تبدیل خودکار مشکلاتی دارید یا ترجیح میدهید که اسکریپتهای خود را بهصورت دستی به v6 تبدیل کنید، لطفاً راهنمای مهاجرت ما را مشاهده کنید.
دریافتهای پویا
TradingView دسترسی به دهها هزار نماد برای ابزارهای قابل معامله، معیارهای مالی و شاخصهای اقتصادی از سراسر جهان را فراهم میکند. خانواده توابع request.*() به اسکریپتهای Pine این امکان را میدهد که دادهها را برای هر نماد قابل دسترس در زمانهای مختلف دریافت کنند، بدون توجه به نماد و زمان استفادهشده در چارت.
این توابع ابزارهای قدرتمندی با استفادههای متنوع هستند. با این حال، قبلاً یک محدودیت قابلتوجه داشتند: آنها ملزم بودند تا از مقادیر “رشته ساده” برای تعیین نماد و زمان درخواست استفاده کنند، به این معنی که زمینه بایستی در بار اول مشخص باشد و پس از آن نمیتوانست تغییر کند. علاوه بر این، تمام درخواستهای request.*() مجبور به اجرا در فضای کلی اسکریپت بودند. به عبارت دیگر، هر نمونه request.*() در کد فقط میتوانست دادهها را برای یک نماد و زمان خاص دریافت کند و هیچ تماس request.*() درون حلقهها، ساختارهای شرطی یا توابع کتابخانهای صادرشده مجاز نبود.
در Pine Script® v6، ما این محدودیتها را برطرف کردهایم. اکنون، اسکریپتها میتوانند از مقادیر “رشته سری” برای تعریف زمینه هر تماس request.*() استفاده کنند.
برای استفاده رایگان از تریدینگ ویو پرمیوم از چارت آتو تی کریپتو استفاده کنید.
در این راستا، درخواستهای request.*() اکنون در حوزههای محلی مجاز شدهاند. با این تغییرات، شما قادر خواهید بود که نمادها را در هر بار تاریخی محاسبه یا تغییر دهید و به طور پویا دادههای آنها را درخواست کنید. همچنین میتوانید مجموعههایی از نمادها ایجاد کرده و دادههای آنها را درون حلقهها فراخوانی کنید و کارهای متنوع دیگری با توابع request.*() که قبل از این ممکن نبود، انجام دهید. برای اطلاعات بیشتر، بخش درخواستهای پویا در دفترچه راهنمای کاربر ما را مشاهده کنید.
برای مشاهده یک نمونه از عملکرد درخواستهای پویا، میتوانید به نحوه کارکرد شاخص عملکرد داخلی مراجعه کنید. این شاخص لیستهای جدا شده با ویرگول از نمادها و زمانبندیها را به آرایهها تقسیم میکند و سپس به صورت پویا در داخل حلقهها از request.security() استفاده میکند تا مقادیر را از هر مجموعه داده دریافت کند. در گذشته، یک اسکریپت مشابه نیاز به چندین بار فراخوانی input.symbol() و input.timeframe() داشت و هر ترکیب نماد-زمانبندی نیاز به یک فراخوانی جداگانه از request.security() در کد داشت:
برای اطلاعات بیشتر، به این اسکریپتهایی که توسط حساب کاربری TradingView منتشر شدهاند و همچنین از درخواستهای پویا برای دریافت دادهها از زمینههای دیگر استفاده میکنند، مراجعه کنید.
- نقشه حرارتی فارکس. این شاخص شناسههای تیکری برای ترکیبهای جفت ارزی بر اساس لیست مشخص شده کاربر از کدهای ارزی ایجاد میکند. این شاخص به طور پویا دادهها را برای هر ترکیب جفت درون حلقهها درخواست میکند و سپس از دادهها برای پر کردن یک جدول با رنگهای کدگذاری شده استفاده میکند.
برای استفاده رایگان از تریدینگ ویو پرمیوم از چارت آتو تی کریپتو استفاده کنید.
برای استفاده رایگان از تریدینگ ویو پرمیوم از چارت آتو تی کریپتو استفاده کنید
علاوه بر این، تمامی کدهای گزارش CFTC که قبلاً داخل عبارات switch برای بازگشت مقادیر “ساده” قرار داشتند، بسیار محدود کننده بودند و باعث کاهش تیکرهای قابل درخواست میشدند. با درخواستهای پویا، دیگر نیازی به شناسههای تیکر “رشته ساده” نیست، و این امکان را به کتابخانه میدهد که کدهای گزارش را در یک نقشه ذخیره کند و از نمادهای بیشتری پشتیبانی کند.
بهینهسازی بولین
یکی از مهمترین بهبودهای موجود در Pine Script® v6 ممکن است به ظاهر مشخص نباشد، اما احتمالاً تفاوتی در کارایی کد خواهید دید. ما پیادهسازی داخلی مقادیر “bool” در Pine را بازنویسی کردهایم و ارزیابی کوتاهمدت (یا “تنبل”) را معرفی کردهایم که به عملیات and و or اجازه میدهد به محض اینکه دیگر نیاز به ارزیابی عبارات بیشتر نباشد، متوقف شوند.
این تغییرات عملکرد بیشتر اسکریپتها در TradingView را بهبود میبخشد. تفاوت در کارایی به ویژه با اسکریپتهای نسبتاً بزرگ که به طور جدی به شرایط وابسته هستند و از مقادیر “bool” زیادی استفاده میکنند، قابل توجه است. این مورد را در آزمایشات خود بر روی برخی از محبوبترین اسکریپتهای متنباز تأیید کردیم.
بهعلاوه، ارزیابی “bool” تنبل معمولاً اجازه میدهد کد تمیزتر و مختصرتر بنویسید. به عنوان مثال، اگر شرایطی دارید که به مواردی از یک آرایه وابسته است، ممکن است لازم باشد اندازه آرایه را بررسی کنید تا از موجود بودن ایندکس مورد نظر اطمینان حاصل کنید؛ زیرا اگر ایندکس خارج از محدوده باشد، اسکریپت متوقف شده و خطا میدهد. در Pine v6 با ارزیابی تنبل، میتوانید یک عبارت شرطی تک ایجاد کنید که آرایه را قبل از تلاش برای دسترسی به یک عنصر بررسی کند؛ امری که در v5 ممکن نبود.
//@version=6 indicator("نمایش ارزیابی تنبل") //@متغیر A آرایه "bool" بدون اندازه ثابت. arraymyArray = array.new () // افزایش یک مقدار جدید به `myArray` زمانی که `close` بالاتر از `open` باشد. if close > open myArray.push(true) // خط 13 در v5 باعث ایجاد خطا میشود، زیرا `myArray.first()` همیشه اجرا میشود، حتی اگر اولین عبارت `false` باشد. // اما در v6 اینگونه نیست، زیرا `myArray.first()` فقط در صورتی اجرا میشود که اولین عبارت به `true` ارزیابی شود. if myArray.size() != 0 and myArray.first() label.new(bar_index, high, "آزمون")
اندازه و فرمت متن
همه انواع رسم که متن را نمایش میدهند (جعبهها، برچسبها، و جدولها) اکنون میتوانند از اندازه متنهای مشخص شده به واحد امتیاز تایپوگرافی استفاده کنند — همان امتیازهایی که در ویرایشگرهای متنی استاندارد استفاده میشود. قبلاً باید بین ثابتهای سفارشی size.* انتخاب میکردید.
برای استفاده رایگان از تریدینگ ویو پرمیوم از چارت آتو تی کریپتو استفاده کنید
size.large (24) و size.huge (36) معرفی شده است. حالا با مشخصات جدید اندازهی متن، شما میتوانید اندازهی متن را به صورت کاملاً دقیق مطابق خواستهی خود تنظیم کنید. حتی میتوانید اندازههای بسیار بزرگ متنی بسازید که در نسخههای قبلی Pine غیرممکن بود.
علاوه بر این، ما یک پارامتر جدید text_formatting برای این نوع ترسیمها معرفی کردهایم که میتوانید از آن برای ایتالیک کردن، بولد کردن، یا هر دو استفاده کنید.
//@version=6 indicator("نمونه اندازه متن", 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, بولد و ایتالیک", text_size = 60, text_formatting = text.format_bold + text.format_italic)
کاهش سفارشات استراتژی
کاربران فعال اسکریپتهای استراتژی ممکن است بدانند که در Pine v5، یک استراتژی میتواند تا 9000 معامله شبیهسازی کند قبل از اینکه محاسبات خود را متوقف کرده و ارور بدهد، مگر اینکه از حالت بررسی عمیق استفاده کنید. این محدودیت به ویژه برای استراتژیهایی که معاملات مکرر شبیهسازی میکنند و محرکهای هشدار ایجاد میکنند، ناخواسته است.
در Pine Script® v6، استراتژیها دیگر محاسبات خود را بعد از رسیدن به محدودیت 9000 معامله متوقف نمیکنند و یا اروری نشان نمیدهند. در عوض، استراتژی قدیمیترین سفارشات را کاهش میدهد تا فضای لازم برای سفارشات جدید ایجاد شود. سفارشات کاهشیافته در تستر استراتژی ظاهر نمیشوند، اما استراتژی محاسبات خود را بدون مشکل ادامه میدهد. برای بررسی ایندکس معامله قدیمیترین سفارش کاهشنیافته، میتوانید از متغیر جدید 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 را برای شما ایجاد کردهایم و همیشه مشتاق شنیدن نظرات شما هستیم.
— تیم تریدینگ ویو
برای استفاده رایگان از تریدینگ ویو پرمیوم از چارت آتو تی کریپتو استفاده کنید