پاین اسکریپت چیه؟
پاین اسکریپت زبان برنامهنویسی اختصاصی پلتفرم TradingView هست که برای ساخت ابزارهای معاملاتی شخصیسازیشده مثل اندیکاتورها، استراتژیها و آلارمها طراحی شده. TradingView یکی از محبوبترین پلتفرمهای تحلیل تکنیکال و معاملهگریه که بیش از ۵۰ میلیون معاملهگر در سراسر دنیا ازش استفاده میکنن.
پاین اسکریپت در مقایسه با زبانهای برنامهنویسی دیگه، یه اسکریپت سبک و جمعوجوره که با کمترین تعداد خط کد میتونید با TradingView کار کنید. خیلیا پاین اسکریپت رو با Python مقایسه میکنن، ولی اگر تجربهای توی هر زبان برنامهنویسی داشته باشید، یادگیری پاین اسکریپت براتون راحت خواهد بود.
کدنویسی پاین با استفاده از Pine Editor که بخشی از پلتفرم آنلاین TradingView هست، انجام میشه.
چطور از پاین اسکریپت استفاده کنیم؟
استفاده از پاین اسکریپت خیلی سادهست و با چند مرحله میتونید شروع کنید:
- وارد حساب TradingView بشید یا یه حساب جدید بسازید.
- به آدرس tradingview.com/chart برید و پنل چارت رو باز کنید.
- توی همون نوار ابزار که پنل معاملاتی هست، دکمه Pine Editor رو انتخاب کنید.
حالا میتونید شروع کنید به نوشتن اندیکاتور و استراتژیهای اختصاصی با پاین اسکریپت.
💡 نکته: اگه حوصله نوشتن اندیکاتور رو ندارید، میتونید از اندیکاتورهای از پیش آماده توی پلتفرمهای وب استفاده کنید.
چطور با پاین اسکریپت کدنویسی کنیم؟
برای ساخت یه اسکریپت تو پاین اسکریپت، این مراحل رو دنبال کنید:
- تعریف اندیکاتور یا استراتژی:
با استفاده از کلمههای کلیدیindicator
یاstrategy
شروع کنید. اینا مشخص میکنن که قراره یه اندیکاتور بسازید یا یه استراتژی معاملاتی. - ورودیها رو تعریف کنید:
مثلا طول میانگین متحرک یا حد آستانه برای یه اندیکاتور خاص رو به عنوان ورودی تعیین کنید. این ورودیها به شما اجازه میدن اسکریپت رو انعطافپذیر کنید. - سیگنالها و هشدارها رو تنظیم کنید:
بر اساس اندیکاتورهایی که استفاده میکنید، سیگنالهای خرید و فروش رو تعریف کنید. مثلا وقتی یه اندیکاتور از یه حد مشخص بالاتر رفت، سیگنال خرید بده یا وقتی پایینتر اومد، سیگنال فروش بده
چطور با پاین اسکریپت یه اندیکاتور بسازیم؟
وقتی پاین اسکریپت رو باز میکنی، یه کد پیشفرض بهت نشون داده میشه که از چند بخش تشکیل شده:
- دو خط اول: کامنتهایی هستن که با
//
شروع میشن. خط دوم که نوشته "author"، اسم کاربری تو توی تریدینگ ویو رو نشون میده. اگه خواستی، میتونی این خطوط رو حذف کنی. - خط چهارم: این خط یه دستور مهمه که نسخه پاین اسکریپت مورد استفاده رو مشخص میکنه. مثلاً میگه داری از نسخه 5 استفاده میکنی.
- خط پنجم: اینجا مشخص میکنی که داری یه اندیکاتور یا استراتژی مینویسی. بعدش اسمش رو تعیین میکنی. پیشفرض اسمش "My Script" هست که میتونی عوضش کنی.
- خط ششم: مشخص میکنه که چی میخوای روی چارت نمایش بدی. مثلاً توی این مثال، متغیر
close
قیمت بسته شدن هر کندل رو نشون میده.
الان میخوایم اولین اسکریپت کاری خودمون رو بنویسیم، که پیادهسازی اندیکاتور MACD تو Pine Script™ هست:
1. نوشتن کد:
این کد رو کپی کن:
//@version=5
indicator("MACD #1")
fast = 12
slow = 26
fastMA = ta.ema(close, fast)
slowMA = ta.ema(close, slow)
macd = fastMA - slowMA
signal = ta.ema(macd, 9)
plot(macd, color = color.blue)
plot(signal, color = color.orange)
2. باز کردن پنل کد:
برو به منوی "Open" در گوشه بالای سمت راست و گزینه "New indicator" رو انتخاب کن.
3. جایگزینی کد:
تمام کدی که قبلاً تو ویرایشگر بود رو انتخاب کن و با کد بالا جایگزین کن.
4. ذخیرهسازی اسکریپت:
روی دکمه "Save" کلیک کن و یه اسم برای اسکریپتت انتخاب کن. حالا اسکریپتت تو فضای ابری TradingView ذخیره شده، ولی فقط زیر نام حساب کاربری خودت قابل دسترسیه و هیچکس جز تو نمیتونه ازش استفاده کنه.
5. اضافه کردن به چارت:
در نوار منوی ویرایشگر روی "Add to Chart" کلیک کن. حالا اندیکاتور MACD در یک پنل جداگانه زیر چارتت نمایش داده میشه.
الان اولین Pine Script تو چارتت در حال اجراست و باید شبیه به این باشه:
بیایید خط به خط کد اسکریپت رو بررسی کنیم:
خط 1: //@version=5
این یک نشانهگذاری برای کامپایلر هست که بهش میگه این اسکریپت از نسخه ۵ Pine Script™ استفاده میکنه.
خط 2: indicator("MACD #1")
اینجا اسم اسکریپت رو تعریف میکنیم که روی چارت به عنوان "MACD" نمایش داده میشه.
خط 3: fast = 12
یک متغیر عددی سریع تعریف میکنه که طول EMA سریع رو مشخص میکنه.
خط 4: slow = 26
یک متغیر عددی کند تعریف میکنه که طول EMA کند رو مشخص میکنه.
خط 5: fastMA = ta.ema(close, fast)
اینجا متغیر fastMA
تعریف میشه که شامل نتیجه محاسبه EMA (میانگین متحرک نمایی) با طول برابر با fast
(۱۲) بر روی قیمتهای بستهشده است.
خط 6: slowMA = ta.ema(close, slow)
متغیر slowMA
رو تعریف میکنه که شامل نتیجه محاسبه EMA با طول برابر با slow
(۲۶) از قیمتهای بستهشده است.
خط 7: macd = fastMA - slowMA
اینجا متغیر macd
به عنوان تفاوت بین دو EMA تعریف میشه.
خط 8: signal = ta.ema(macd, 9)
متغیر signal
به عنوان یک مقدار هموار شده از macd
با استفاده از الگوریتم EMA (میانگین متحرک نمایی) با طول ۹ تعریف میشه.
خط 9: plot(macd, color = color.blue)
این خط تابع plot
رو فراخوانی میکنه تا متغیر macd
رو با یک خط آبی نمایش بده.
خط 10: plot(signal, color = color.orange)
اینجا هم تابع plot
رو برای نمایش متغیر signal
با یک خط نارنجی فراخوانی میکنیم.
نسخه دوم
نسخه اول اسکریپت ما MACD رو بهطور "دستی" محاسبه میکرد، اما چون Pine Script™ برای نوشتن اندیکاتورها و استراتژیها طراحی شده، توابع داخلی برای بسیاری از اندیکاتورهای رایج وجود داره، از جمله یک تابع برای MACD به نام ta.macd()
.
این نسخه دوم اسکریپت ماست:
//@version=5
indicator("MACD #2")
fastInput = input(12, "Fast length")
slowInput = input(26, "Slow length")
[macdLine, signalLine, histLine] = ta.macd(close, fastInput, slowInput, 9)
plot(macdLine, color = color.blue)
plot(signalLine, color = color.orange)
نکات مهمی که به این نسخه اضافه شده:
- ورودیها رو اضافه کردیم تا بتونیم طولهای میانگینهای متحرک (MA) رو تغییر بدیم.
- حالا از تابع داخلی
ta.macd()
برای محاسبه MACD استفاده میکنیم، که باعث میشه سه خط از کد رو ذخیره کنیم و کد رو خواناتر کنیم.
حالا همون روند قبلی رو برای کپی کردن این کد در یک اندیکاتور جدید تکرار میکنیم:
- ابتدا منوی "Open" رو در بالای سمت راست ویرایشگر باز کنید و گزینه "New indicator" رو انتخاب کنید.
- بعد کد نمونه بالا رو کپی کنید.
- همه کد موجود در ویرایشگر رو انتخاب کنید و با نسخه دوم اسکریپت ما جایگزین کنید.
- روی "Save" کلیک کنید و نامی متفاوت از قبلی برای اسکریپت خود انتخاب کنید.
- در نوار منوی ویرایشگر روی "Add to Chart" کلیک کنید. اندیکاتور "MACD #2" در یک پنل جداگانه زیر اندیکاتور "MACD #1" ظاهر میشه.
حالا دومین اسکریپت Pine شما روی چارت شما اجرا میشه. اگر روی نام اندیکاتور در چارت دوبار کلیک کنید، تب "Settings/Inputs" اسکریپت باز میشه که میتونید طولهای کند و سریع رو تغییر بدید.
بیایید به خطهایی که در نسخه دوم اسکریپت ما تغییر کرده نگاه کنیم:
خط ۲: indicator("MACD #2")
ما شماره #1 رو به #2 تغییر دادیم تا نسخه دوم اندیکاتور نام متفاوتی روی چارت نشون بده.
خط ۳: fastInput = input(12, "Fast length")
به جای این که یک مقدار ثابت به یک متغیر اختصاص بدیم، از تابع input()
استفاده کردیم تا بتونیم مقدار رو در تب "Settings/Inputs" اسکریپت تغییر بدیم. ۱۲ به عنوان مقدار پیشفرض در نظر گرفته میشه و برچسب فیلد "Fast length" خواهد بود. اگر مقدار تو تب "Inputs" تغییر کنه، محتوای متغیر fastInput
شامل مقدار جدید خواهد بود و اسکریپت با اون مقدار جدید دوباره اجرا میشه. نکتهای که باید توجه کنیم اینه که طبق راهنمای سبک Pine Script™، ما "Input" رو به انتهای نام متغیر اضافه کردیم تا بعداً به یاد داشته باشیم که مقدارش از ورودی کاربر میاد.
خط ۴: slowInput = input(26, "Slow length")
ما همین کار رو برای طول کند (slow length) انجام دادیم و دقت کردیم که نام متغیر، مقدار پیشفرض و متن برچسب فیلد متفاوت باشه.
خط ۵: [macdLine, signalLine, histLine] = ta.macd(close, fastInput, slowInput, 9)
در این خط از تابع ta.macd()
استفاده میکنیم تا همه محاسبات نسخه اول رو فقط در یک خط انجام بدیم. این تابع به چهار پارامتر نیاز داره (مقادیر بعد از نام تابع که داخل پرانتز قرار دارند) و سه مقدار رو به سه متغیر برمیگردونه. به همین دلیل باید لیست سه متغیر دریافتکننده نتیجه تابع رو در داخل کروشهها قرار بدیم، به سمت چپ علامت =. دقت کنید که دو تا از مقادیری که به تابع میدیم، متغیرهای ورودی هستند که طولهای سریع و کند رو در خودشون نگه میدارند: fastInput
و slowInput
.
خط ۶ و ۷:
نام متغیرهایی که داریم رسم میکنیم تغییر کرده، ولی خطوط همون کاری رو میکنن که در نسخه اول انجام میدادند.
نسخه دوم ما همون محاسبات نسخه اول رو انجام میده، ولی ما میتونیم دو طول رو که برای محاسبه استفاده میشه تغییر بدیم. کد ما هم سادهتر و کوتاهتر شده و سه خط کمتری داره. ما اسکریپت خودمون رو بهبود دادیم.
چطور با Pine Script یه استراتژی بسازیم؟
حالا که در مورد نحوه ایجاد اندیکاتورها با Pine Script صحبت کردیم، بیایید به استراتژیها بپردازیم. در این مثال، ما روی میانگینهای متحرک تمرکز میکنیم و یک استراتژی ساده بر اساس کراساُورهای میانگین متحرک ایجاد میکنیم. کد Pine Script زیر یک استراتژی رو مشخص میکنه که از میانگینهای متحرک برای شناسایی سیگنالهای خرید و فروش بر اساس کراساُور بین یک میانگین متحرک ۲۰ دورهای و سطح قیمت استفاده میکنه.
//@version=5
strategy("Simple Moving Average Strategy", overlay=true)
اول، باید اعلامیهی اندیکاتور رو با اعلامیهی استراتژی عوض کنیم.
ma_length = input(title="Moving Average Length", type=input.integer, defval=20)
سپس، طول میانگین متحرک رو مشخص میکنیم.
ma = sma(close, ma_length)
plot(ma, color=color.blue)
این دو خط، رسم میانگین متحرک رو روی چارت مشخص میکنه. خط اول میانگین متحرک رو محاسبه میکنه و خط دوم اون رو روی چارت نشون میده.
buy_signal = crossover(close, ma)
sell_signal = crossunder(close, ma)
این خطوط، سیگنالهای خرید و فروش رو بر اساس کراساُور قیمت و میانگین متحرک تعریف میکنن.
if (buy_signal)
strategy.entry("Buy", strategy.long)
if (sell_signal)
strategy.close("Buy")
if (sell_signal)
strategy.entry("Sell", strategy.short)
if (buy_signal)
strategy.close("Sell")
این هشت خط، شرایط ورود و خروج برای استراتژی شما رو تعریف میکنه. در واقع:
- وقتی سیگنال خرید فعال میشه، استراتژی وارد موقعیت خرید میشه.
- وقتی سیگنال فروش فعال میشه، استراتژی موقعیت خرید رو میبنده.
- وقتی سیگنال فروش فعال میشه، استراتژی وارد موقعیت فروش میشه.
- وقتی سیگنال خرید فعال میشه، استراتژی موقعیت فروش رو میبنده.
با این کد، شما یک استراتژی ساده برای خرید و فروش بر اساس کراساُور میانگین متحرک ایجاد کردید.
این هم استراتژی کامل که با Pine Script نوشته شده. این مثال نسبتاً کوتاهه و استراتژیهایی که با کد Pine نوشته میشن، میتونن خیلی پیچیدهتر بشن، بسته به اینکه چه تعداد اندیکاتور، شرایط و محاسباتی رو اضافه کنیم.
بهترین راه برای یادگیری کامل Pine Script اینه که از دفترچه راهنمای کاربری TradingView شروع کنی که برای Pine Script نسخه 6 بهروز شده. همچنین میتونی ایدههای معاملاتی، محتوای آموزشی و ویدیوهای آموزشی رو در مرکز جامعه TradingView پیدا کنی. با پیشرفت تکنولوژی هوش مصنوعی، تعداد بیشتری از معاملهگران با کمی تجربه کدنویسی از چتباتهایی مثل ChatGPT برای نوشتن استراتژیهای معاملاتی با Pine Script استفاده میکنن.