پاین اسکریپت چیست؟ آموزش ساخت اولین اندیکاتور با Pine v6

پاین اسکریپت زبان ساخت اندیکاتور و استراتژی در تریدینگ ویو است. ساختار کد، دو مثال کامل Pine v6، تغییرات نسخه ۶ و خطاهای رایج را یاد بگیرید.

پاین اسکریپت (Pine Script) زبان برنامه‌نویسی ساده‌ای است که TradingView برای ساخت اندیکاتور، استراتژی و هشدار روی چارت طراحی کرده است. با چند خط کد می‌توانید یک اندیکاتور شخصی بسازید، سیگنال‌ها را روی نمودار علامت بزنید یا یک استراتژی را روی داده گذشته تست کنید. آخرین نسخه آن، Pine v6، در دسامبر ۲۰۲۴ منتشر شد.

برای یادگیری پاین اسکریپت لازم نیست برنامه‌نویس حرفه‌ای باشید. در این مطلب ساختار یک اسکریپت را می‌بینید، دو اندیکاتور کامل را خط به خط می‌نویسید، با تغییرات مهم نسخه ۶ آشنا می‌شوید و خطاهای رایج مبتدی‌ها را یاد می‌گیرید.

نکات کلیدی این مقاله

  • هر اسکریپت با //@version=6 شروع می‌شود و با indicator() یا strategy() نوعش را اعلام می‌کند.
  • اسکریپت یک بار روی هر کندل تاریخی اجرا می‌شود و روی کندل زنده با هر تغییر قیمت دوباره محاسبه می‌شود.
  • توابع آماده‌ای مثل ta.ema و ta.rsi کار محاسبه را تقریبا به یک خط کاهش می‌دهند.
  • در Pine v6 مقدار بولی دیگر نمی‌تواند na باشد و عدد به‌صورت خودکار به درست یا نادرست تبدیل نمی‌شود.
  • کد ساخته‌شده با هوش مصنوعی را همیشه پیش از استفاده بخوانید و روی چارت آزمایش کنید.

پاین اسکریپت چیست و چه کاری انجام می‌دهد؟

پاین اسکریپت زبان اختصاصی TradingView است و فقط برای یک کار ساخته شده: محاسبه روی داده قیمت و نمایش نتیجه روی چارت. همین تمرکز باعث شده بسیار ساده‌تر از زبان‌هایی مثل پایتون باشد. لازم نیست داده قیمت را دانلود کنید یا نمودار رسم کنید؛ قیمت باز شدن، بسته شدن، سقف، کف و حجم هر کندل از قبل در دسترس است.

با پاین اسکریپت سه نوع اسکریپت می‌توان نوشت:

نوع تابع اعلام کاربرد
اندیکاتور indicator() محاسبه و نمایش خط، هیستوگرام، برچسب و سیگنال روی چارت
استراتژی strategy() شبیه‌سازی ورود و خروج روی داده گذشته و گزارش نتیجه
کتابخانه library() مجموعه توابع قابل استفاده دوباره در اسکریپت‌های دیگر

اگر با محیط TradingView آشنا نیستید، پیش از ادامه، راهنمای کامل تریدینگ ویو را ببینید. چارت بایتیکل هم در پنل کناری خود ویرایشگر Pine نسخه ۶ دارد.

مدل اجرای اسکریپت

مهم‌ترین مفهومی که مبتدی‌ها باید بفهمند این است که اسکریپت روی هر کندل جداگانه اجرا می‌شود؛ از قدیمی‌ترین کندل تا جدیدترین. وقتی می‌نویسید close، یعنی قیمت بسته شدن همان کندلی که اسکریپت در حال اجرا روی آن است. close[1] یعنی بسته شدن کندل قبلی. روی کندل زنده، اسکریپت با هر تغییر قیمت دوباره اجرا می‌شود تا کندل بسته شود.

ساختار یک اسکریپت Pine v6

هر اسکریپت چهار بخش اصلی دارد:

چهار بخش یک اسکریپت پاین شامل اعلام نسخه، تابع indicator، ورودی‌ها و محاسبه و خروجی plot
ترتیب پیشنهادی بخش‌ها در یک اسکریپت ساده Pine v6
  1. اعلام نسخه: خط //@version=6 به کامپایلر می‌گوید با قواعد کدام نسخه کار کند.
  2. اعلام نوع اسکریپت: مثلا indicator("نام", overlay = true). پارامتر overlay تعیین می‌کند اسکریپت روی نمودار قیمت رسم شود یا در پنجره جداگانه پایین آن.
  3. ورودی‌ها و محاسبه: با input.int() یا input.float() تنظیماتی می‌سازید که کاربر بتواند تغییر دهد. سپس با توابع ta.* محاسبه را انجام می‌دهید.
  4. خروجی: plot() خط می‌کشد، plotshape() علامت می‌گذارد و hline() خط افقی ثابت رسم می‌کند.

اولین اندیکاتور با پاین اسکریپت: RSI ساده

با این اسکریپت یک اسیلاتور RSI با دو خط ۷۰ و ۳۰ در پنجره پایین چارت می‌سازید:

//@version=6
indicator("My RSI", overlay = false)
len = input.int(14, "RSI Length", minval = 1)
r = ta.rsi(close, len)
plot(r, "RSI", color = color.teal)
hline(70, "Overbought")
hline(30, "Oversold")
خط معنا
input.int(14, ...) ورودی عدد صحیح با پیش‌فرض ۱۴ که کاربر می‌تواند در تنظیمات عوض کند
ta.rsi(close, len) محاسبه RSI از قیمت بسته شدن با دوره len
plot(r, ...) رسم مقدار RSI به شکل خط
hline(70) و hline(30) دو خط افقی ثابت برای ناحیه اشباع خرید و فروش

اندیکاتور تقاطع میانگین متحرک با سیگنال روی چارت

مثال دوم کمی کامل‌تر است: دو میانگین متحرک نمایی رسم می‌کند، تقاطع‌ها را با مثلث علامت می‌زند و برای هر تقاطع شرط هشدار تعریف می‌کند.

//@version=6
indicator("EMA Cross", overlay = true)
fastLen = input.int(9, "Fast EMA", minval = 1)
slowLen = input.int(21, "Slow EMA", minval = 1)
fast = ta.ema(close, fastLen)
slow = ta.ema(close, slowLen)
plot(fast, "Fast", color = color.teal)
plot(slow, "Slow", color = color.orange)
bull = ta.crossover(fast, slow)
bear = ta.crossunder(fast, slow)
plotshape(bull, "Bull cross", shape.triangleup, location.belowbar, color.green)
plotshape(bear, "Bear cross", shape.triangledown, location.abovebar, color.red)
alertcondition(bull, "Bull cross", "Fast EMA crossed above Slow EMA")
alertcondition(bear, "Bear cross", "Fast EMA crossed below Slow EMA")

توضیح خط به خط

  • ta.crossover(fast, slow) فقط روی کندلی درست است که خط سریع از زیر به بالای خط کند عبور کند. ta.crossunder برعکس آن است.
  • plotshape روی همان کندل‌ها مثلث سبز زیر کندل یا مثلث قرمز بالای کندل می‌گذارد.
  • alertcondition شرط هشدار می‌سازد. بعد از افزودن اسکریپت به چارت، در پنجره ساخت هشدار TradingView می‌توانید این شرط را انتخاب کنید.

یادتان باشد علامت تقاطع روی کندل زنده ممکن است ظاهر و دوباره ناپدید شود؛ چون تقاطع تا بسته شدن کندل قطعی نیست. اگر فقط سیگنال کندل بسته‌شده را می‌خواهید، شرط را با barstate.isconfirmed ترکیب کنید.

تفاوت indicator و strategy در پاین اسکریپت

اندیکاتور فقط محاسبه و نمایش می‌دهد. استراتژی با توابعی مثل strategy.entry() و strategy.close() ورود و خروج فرضی ثبت می‌کند و در پایان گزارشی از سود و زیان، تعداد معاملات و افت سرمایه نشان می‌دهد. برای همین، استراتژی ابزار اصلی تست یک ایده روی داده گذشته است. اگر می‌خواهید بک‌تست را درست اجرا و تفسیر کنید، بک تست در تریدینگ ویو را بخوانید.

نتیجه بک‌تست به کارمزد، لغزش قیمت و بازه زمانی انتخابی بستگی دارد. استراتژی‌ای که روی گذشته خوب جواب داده، تضمینی برای آینده نیست؛ به‌خصوص اگر پارامترها آن‌قدر تنظیم شده باشند که فقط با همان داده جور شوند.

تغییرات مهم Pine v6 نسبت به نسخه ۵

TradingView نسخه ۶ را در ۱۰ دسامبر ۲۰۲۴ منتشر کرد. طبق مستندات رسمی مهاجرت به Pine v6، مهم‌ترین تغییرها این‌هاست:

مقایسه رفتار Pine v5 و Pine v6 در درخواست داده، مقدار بولی و تبدیل عدد به بولی
چهار تغییر مهم نسخه ۶ که روی اسکریپت‌های قدیمی اثر می‌گذارند
موضوع Pine v5 Pine v6
درخواست داده از نماد یا تایم‌فریم دیگر نماد و تایم‌فریم باید از اول ثابت باشد درخواست پویا به‌صورت پیش‌فرض فعال است و داخل حلقه و شرط هم مجاز است
مقدار بولی می‌توانست true، false یا na باشد فقط true یا false
تبدیل عدد به بولی خودکار؛ صفر یعنی نادرست ممنوع؛ باید مقایسه صریح بنویسید
عملگرهای and و or هر دو طرف ارزیابی می‌شد ارزیابی کوتاه؛ اگر طرف اول کافی باشد، طرف دوم اجرا نمی‌شود

اگر اسکریپت قدیمی نسخه ۵ دارید، ویرایشگر TradingView ابزار تبدیل خودکار به نسخه ۶ دارد، اما بعد از تبدیل باید خروجی را با نسخه قبلی مقایسه کنید.

خطاهای رایج در نوشتن پاین اسکریپت

  • اشتباه گرفتن = و :=: با = متغیر تعریف می‌شود و با := مقدار متغیر موجود عوض می‌شود.
  • فراموش کردن var: متغیر معمولی روی هر کندل از نو مقداردهی می‌شود. اگر می‌خواهید مقدار بین کندل‌ها حفظ شود، آن را با var تعریف کنید.
  • ریپینت (Repaint): اسکریپتی که روی داده گذشته از اطلاعاتی استفاده کند که آن زمان وجود نداشته، روی تاریخچه عالی و در زمان واقعی ضعیف به نظر می‌رسد. استفاده از request.security با lookahead = barmerge.lookahead_on بدون جابه‌جایی داده، یکی از رایج‌ترین دلایل آن است.
  • اعتماد به سیگنال کندل باز: همان‌طور که گفته شد، سیگنال تا بسته شدن کندل قطعی نیست.
  • کپی بدون فهم: اسکریپت‌های عمومی زیادی وجود دارد، اما بدون فهم منطق آن نمی‌دانید کجا خطا می‌دهد.

نوشتن پاین اسکریپت با هوش مصنوعی بایتیکل

در چارت بایتیکل، پنل «هوش مصنوعی بایتیکل» می‌تواند بر اساس توضیح فارسی شما کد Pine v6 بنویسد. مثلا اگر بنویسید «یک اندیکاتور ساده کراس دو میانگین متحرک با Pine Script برایم بنویس»، کدی شبیه مثال دوم همین مقاله تحویل می‌گیرد که می‌توانید در ویرایشگر Pine کپی و روی چارت اجرا کنید. پشتیبانی از Pine v6 یکی از معیارهایی است که در مقایسه جایگزین تریدینگ ویو بررسی کرده‌ایم.

پنل هوش مصنوعی بایتیکل در حال نوشتن کد Pine v6 برای تقاطع دو میانگین متحرک کنار چارت بیت کوین
نمای واقعی چارت بایتیکل؛ کد با //@version=6 شروع شده و ورودی دوره‌ها قابل تغییر است

هوش مصنوعی هم ممکن است اشتباه کند. پیش از استفاده، کد را بخوانید، روی چند نماد و تایم‌فریم بررسی کنید که علامت‌ها همان جایی ظاهر می‌شوند که انتظار دارید و مطمئن شوید از داده آینده استفاده نکرده است. اگر به دنبال ایده برای اندیکاتورهای پرکاربرد هستید، بهترین اندیکاتور تریدینگ ویو را هم ببینید.

ویرایشگر Pine را در چارت بایتیکل باز کن

جمع‌بندی

پاین اسکریپت ساده‌ترین راه برای تبدیل یک ایده معاملاتی به ابزار قابل دیدن روی چارت است. با //@version=6 شروع کنید، با indicator() نوع اسکریپت را اعلام کنید، با توابع ta.* محاسبه کنید و با plot() نتیجه را ببینید. اول دو مثال همین مقاله را اجرا کنید، بعد یک ورودی یا شرط جدید به آن‌ها اضافه کنید. وقتی منطق اجرای کندل به کندل را فهمیدید، نوشتن استراتژی و تست آن روی داده گذشته قدم بعدی است.

سؤالات متداول

پاین اسکریپت چیست؟

پاین اسکریپت زبان برنامه‌نویسی اختصاصی TradingView برای ساخت اندیکاتور، استراتژی و هشدار روی چارت است. یادگیری آن از زبان‌های عمومی برنامه‌نویسی ساده‌تر است.

آخرین نسخه پاین اسکریپت کدام است؟

نسخه ۶ که در ۱۰ دسامبر ۲۰۲۴ منتشر شد. اسکریپت‌های این نسخه با خط //@version=6 شروع می‌شوند.

برای یادگیری پاین اسکریپت باید برنامه‌نویسی بلد باشم؟

نه. آشنایی با مفاهیم ساده‌ای مثل متغیر و شرط کافی است. بیشتر محاسبات تحلیل تکنیکال با توابع آماده انجام می‌شود.

تفاوت indicator و strategy چیست؟

indicator فقط محاسبه و نمایش می‌دهد. strategy ورود و خروج فرضی ثبت می‌کند و گزارش بک‌تست می‌دهد.

ریپینت در پاین اسکریپت یعنی چه؟

یعنی اسکریپت روی داده گذشته طوری محاسبه شود که در زمان واقعی ممکن نبوده است؛ در نتیجه سیگنال‌های تاریخی بهتر از واقعیت به نظر می‌رسند.

آیا می‌توان با هوش مصنوعی پاین اسکریپت نوشت؟

بله. ابزارهایی مثل هوش مصنوعی بایتیکل از روی توضیح شما کد Pine v6 می‌نویسند، اما کد را باید پیش از استفاده خواند و آزمایش کرد.

این مطلب آموزشی است و توصیه به خرید، فروش یا نگهداری هیچ دارایی‌ای نیست.

⚠️

سلب مسئولیت و شفافیت در بایتیکل

تمامی مطالب منتشر شده در بلاگ آموزشی بایتیکل، اعم از تحلیل‌های بازار، بررسی پروژه‌ها، اخبار و معرفی پتانسیل‌های دنیای کریپتوکارنسی، صرفاً با رویکرد آموزشی و اطلاع‌رسانی تهیه شده‌اند. تیم تحریریه بایتیکل تأکید می‌کند که این محتواها به هیچ عنوان «توصیه مستقیم خرید و فروش» یا «سیگنال سرمایه‌گذاری» محسوب نمی‌شوند.

با توجه به نوسانات شدید و ریسک‌های ذاتی بازارهای مالی، مسئولیت نهایی هرگونه تصمیم‌گیری اقتصادی، سود یا ضرر احتمالی، به‌طور کامل بر عهده شخص کاربر است. ما اکیداً توصیه می‌کنیم پیش از هرگونه مشارکت مالی، تحقیقات شخصی خود را (DYOR) تکمیل کرده و در صورت نیاز با مشاوران دارای صلاحیت مشورت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا