پاین اسکریپت چیست و چه کاربردی دارد؟ – از صفر تا صد


پاین اسکریپت زبان برنامه نویسی همهجانبه و کاربرپسند Trading View برای بازارهای مالی است. این زبان مجموعه ابزار قدرتمندی را برای ایجاد اندیکاتورها و استراتژیهای تجاری مخصوص، در اختیار تحلیلگران و معاملهگران قرار میدهد. به علاوه مدیریت مالی شخصی نیز با استفاده از این زبان، به سادگی ممکن میشود. در ادامه این مطلب از مجله فرادرس به توضیح بیشتر درباره اینکه پاین اسکریپت چیست میپردازیم و مزایا و معایب، محدودیتها و آموزش کار کردن با آن را نیز یاد میگیریم. در ابتدا، با پاین اسکریپت آشنا میشویم و مزایا و معایب آن را بیان میکنیم و نحوه شروع کار با پاین اسکریپت را بررسی میکنیم. البته برای این آشنایی اولیه با ادیتور پاین را هم نیاز داریم و به این موضوع نیز میپردازیم و سپس روش عملی بهرهگیری از پاین اسکریپت را آموزش میدهیم که نحوه انجام معاملات تنها بخشی از آن است. بنابراین اگر میخواهید با پاین اسکریپت آشنا شوید، تا انتهای این مطلب با مجله فرادرس همراه باشید.
پاین اسکریپت چیست ؟
پاین اسکریپت زبان برنامه نویسی توسعه یافته توسط «TradingView» است که برای آزمایش و بررسی استراتژیهای معاملاتی و تولید اندیکاتورهای سفارشی به کار میرود. این زبان با حجم کمی ساخته شده و در بیشتر مواقع با نوشتن کدهای کمتری نسبت به سایر زبانهای برنامهنویسی کار میکند.
البته توجه داشته باشید که پاین اسکریپت بر مبنای هیچ زبان برنامهنویسی دیگری ساخته نشده است. با این حال اگر قبلا با پایتون کار کرده باشید، احتمالا سریعتر پاین اسکریپت را یاد بگیرید و بتوانید شباهتهای بین این دو را پیدا کنید. همچنین خوب است بدانید کدهای پاین اسکریپت را میشود درون ادیتور پاین، به عنوان بخشی از بستر تولید نمودار آنلاین TradingView، نوشت.
مزایای پاین اسکریپت چیست ؟
پس از اینکه بررسی کردیم پاین اسکریپت چیست و برای چه منظوری به کار میرود، خوب است کمی نیز درباره دلایل استفاده از این زبان برنامهنویسی و مزایای آن حرف بزنیم. در ادامه چند مورد از مزایای پاین اسکریپت را آوردهایم.
داده آماده
وجود داده آماده (Bult-in) یکی از مهمترین و بزرگترین مزایای پاین اسکریپت محسوب میشود. به این دلیل که برای آزمایش استراتژیها و تولید اندیکاتور در زبانهای دیگر، نیاز است که منبع داده خارجی برای آن تعیین کنید. از این رو، برای کار با سایر زبانهای برنامهنویسی، نه تنها باید منبعی متناسب و غنی داشته باشید، بلکه زحمت تبدیل قالب و مناسبسازی آن نیز بر عهده خودتان خواهد بود. تمام این موارد نشان میدهند که باید زمان بسیار بیشتری را صرف آمادهسازی داده کنید. این در حالی است که TradingView، دادههای مختلف زیادی را در اختیار کاربر میگذارد که به سادگی نوشتن کمتر از یک خط، در دسترس هستند.
سادگی یادگیری و استفاده
از طرفی، خوانش فرمول پاین اسکریپت بسیار راحت است و نسبت به بسیاری از زبانهای برنامهنویسی دیگر، ساده محسوب میشود. به علاوه در کار با این زبان، نیازی به صرف زمان طولانی برای عیبیابی نیست و TradingView این کار را انجام میدهد.
پایه کاربری و کتابخانه گسترده
یکی دیگر از دلایلی که هر کاربری را به استفاده از پاین اسکریپت ترغیب میکند، کتابخانههای قوی آن است. از آنجایی که تمام کاربران TradingView این امکان را دارند که اندیکاتورها و استراتژیهای خود را در کتابخانه این برنامه منتشر کنند، هر کاربری به مجموعهای عظیم از ایدههای مختلف دسترسی خواهد داشت. دسترسی به کدهای منبع باز روشی بسیار عالی برای یادگیری از سایر برنامهنویسان است. همچنین در برخی مواقع این امکان وجود دارد که کاربر دیگری قبلا، کد موردنیاز شما را نوشته باشد.

معایب پاین اسکریپت چیست ؟
مهمترین دلیلی که شاید کاربران را از استفاده از پاین اسکریپت منصرف کند، محدود بودن آن به دنیای TradingView است. در ادامه با برخی از این محدودیتها بیشتر آشنا میشویم:
محدودیت پاین اسکریپت در زمینه داده
مشکل اینجاست که اگر TradingView، داده موردنظر شما را ارائه ندهد، هیچ کاری نمیتوانید انجام دهید. البته TradingView، پایگاه داده بسیار جامعی از فیدهای داده دارد. با این حال اگر استراتژی شما شامل معامله در بازارهای گمنام باشد، احتمال در دسترس نبودن داده قیمتها بیشتر میشود.
هرچند این مشکل فراتر از دادههای قیمت است. باید در نظر داشت که برخی از استراتژیها شامل دادههای اقتصادی یا آماری نیز میشوند. TradingView مقداری داده (بیشتر داده Quandl) را در این زمینه ارائه میدهد اما این دادهها در حال حاضر محدود هستند. در این شرایط مجبور میشوید از داده جایگزین استفاده کنید.
مشکل کتابخانههای خارجی در پاین اسکریپت چیست ؟
اگر برای انجام کارهایی مانند یادگیری ماشین به دنبال کتابخانههای خارجی هستید، پاین اسکریپت چندان برای شما مناسب نیست. در صورتی که روش شما به استفاده از علم داده یا کتابخانههای خارجی متفرقه نیاز دارد، بهتر است گزینههای دیگر را بررسی کنید.
آموزش شروع کار با پاین اسکریپت
در این قسمت، میدانیم که پاین اسکریپت چیست و چه مزایا و معایبی دارد. اگر تصمیم به استفاده از این زبان گرفتهاید، باید بدانید کار با آن بسیار ساده است و نیاز به دانلود و نصب هیچ برنامه یا فایلی ندارد. برای کار با این پلتفرم باید حساب کاربری TradingView داشته باشید. اگر قبلا حساب کاربری ساختهاید، کافی است وارد سایت شوید و بقیه مراحل را دنبال کنید. در صورتی که میخواهید به تازگی ثبتنام کنید، ابتدا به سایت TradingView (+) بروید.
سپس در گوشه سمت راست بالای صفحه روی گزینه «Sign In» یا «Get Started» بزنید و اطلاعات لازم را بنویسید. در این قسمت همچنین چند گزینه برای ثبتنام با یک کلیک را میبینید که به شما امکان میدهند از اطلاعات سایر حسابهای کاربری خود برای ورود به سایت کمک بگیرید.
توجه داشته باشید که وارد شدن با حساب کاربری، یعنی میتوانید اسکریپتهای خود را روی فضای ابری TradingView ذخیره کرده و اندیکاتورهای سفارشی را به نمودارها اضافه کنید. پس از ثبتنام و ورود به حساب کاربری، با کلیک روی منوی Chart (+) وارد محیط نمودارها شوید.
آشنایی اولیه با ادیتور پاین
ادیتور پاین محل نوشتن کدها است. برای ورود به این محیط در انتهای صفحه جدید روی دکمه «Pine Editor» کلیک کنید.

در نهایت پنجره ادیتور باز میشود که شبیه به تصویر زیر است.
در پاین اسکریپت این امکان برایتان فراهم میشود که اندیکاتور یا استراتژی تولید کنید که در ادامه تفاوت بین آنها را بررسی خواهیم کرد.
صفحه ادیتور را که برای اولین بار باز کنید، کدهای آغازین اسکریپت برای خلق یک اندیکاتور را به طور پیشفرض در آن خواهید دید. در ادامه این کد را خط به خط توضیح میدهیم.
اولین خط یک یادداشت ساده است که برای توضیح عملیات موردنظر به کار میرود و نوشتن آن در پاین اسکریپت با دو علامت «اسلش» (/) شروع میشود.
خط دوم نیز یادداشت است که به طور خودکار و بر اساس نام کاربری در سایت TradingView تولید خواهد شد.
ممکن است تصور کنید در خط چهارم نیز با یک یادداشت روبهرو هستیم، اما اینطور نیست و این خط کد کمی تفاوت دارد. این کد به عنوان «Compiler directive» به معنی دستورالعمل کامپایلر شناخته میشود و به کامپایلر اطلاع میدهد که کاربر قصد استفاده از کدام نسخه پاین اسکریپت را دارد.
هنگام نوشتن اسکریپت جدید میتوانید دو خط یادداشت ابتدایی را نادیده بگیرید اما نوشتن کد Compiler directive در تمام اسکریپتها ضروری است.
خط پنجم یک «اعلان» (Declaration) است و به کمک آن مشخص میکنید که درحال خلق یک اندیکاتور هستید. البته همانطور که گفتیم امکان خلق استراتژی نیز در این ادیتور وجود دارد اما در این مثال یک اندیکاتور ایجاد میکنیم.
بخش دوم این کد که درون دو علامت «نقل قول» ("") قرار دارد، نامی است که برای اندیکاتور اختصاص داده خواهد شد و حالت پیشفرض آن، «My Script» نام دارد.
در خط ششم میتوانید کد Plot را ببینید. همانطور که از نام آن پیدا است، این خط کد برای رسم یک متغیر خاص به کار میرود. در این مثال، متغیر «Close» رسم میشود که متغیری درونی است و برای نگه داشتن قیمت پایانی ستون آخر از آن استفاده میشود. پس از اتمام کد، برای شروع کار آن روی دکمه «Add to Chart» در گوشه سمت راست بالای ادیتور کلیک کنید.

در ادامه وقتی عملیات ذخیره تمام شد، پنجره جدیدی حاوی نمودار قیمتهای پایانی از نمودار اصلی را با نام آن «Data Window» خواهید داشت که در تصویر زیر با خط آبی مشخص شده است.
اگر توجه کنید، عبارت My Script را در گوشه سمت چپ بالای این پنجره میبینید. این نام از داخل خط پنجم کد که محل تعریف نام اندیکاتور است، برداشته میشود. به همین سادگی، توانستیم اندیکاتور جدیدی در پاین اسکریپت خلق و از آن استفاده کنیم.
نحوه بازیابی قیمت از نمودارهای دیگر
در مثال قبل، نموداری برای قیمت پایانی رسم کردیم. البته پاین اسکریپت این کار را به طور خودکار برای تمام نمودارهایی که در برنامه باز شوند، انجام میدهد. در این مثال از نمودار روزانه بیت کوین کمک گرفتیم.
اما اگر دادههای مربوط به داراییهای دیگر را بخواهیم باید چه کار کنیم؟ در مثال جدید قصد داریم قیمت اپل را بازیابی کنیم، در حالی که نمودار مربوط به آن روی ادیتور نیست. برای شروع باید توجه داشته باشید که تمام اسکریپتها با چند خط کد برای تنظیم دستورالعمل آغاز میشوند. همچنین باید مشخص کنید که قصد تولید یک اندیکاتور یا یک استراتژی را دارید و سپس نامی برای آن بنویسید. در نهایت کدهای ابتدایی شبیه نمونه زیر هستند:
در این مثال اندیکاتور جدیدی به نام «Price of Apple» را میسازیم. حالا باید به پاین اسکرپیت بگوییم که دارایی دیگری به غیر از مورد جاری روی نمودار را میخواهیم. برای انجام این کار نیز از تابع «Request.security» کمک میگیریم و کد را به شکل زیر مینویسیم:
یکی از مزایای خوب پاین اسکریپت این است که راهنمایی و کمک را به راحتی در اختیار کاربران میگذارد. به همین دلیل اگر با فرمولی ناآشنا کار میکنید، نیازی به نگرانی وجود ندارد. به عنوان نمونه اگر ماوس را روی تابع موجود در این کد ببرید، توضیحات کوتاهی درباره آن نشان داده خواهد شد.
در صورت نیاز به کسب اطلاعات بیشتر میتوانید پنجره Help را ببینید. برای انجام این کار، در ویندوز دکمه «Ctrl» و در مک دکمه «CMD» را روی کیبورد فشار دهید و سپس روی تابع مربوطه کلیک کنید.
در مرحله بعد کد زیر را مینویسیم که مشابه کد قبلی است. اما در این کد، اولین مقدار تابع Security، نماد «Ticker» است.
سپس دوره زمانی را روی حالت «Daily» یا روزانه قرار میدهیم که نماد آن «D» است. در انتهای کد نیز به پاین اسکریپت میفهمانیم که به دنبال قیمت پایانی هستیم.
کد زیر را در ادامه مینویسیم تا مقدار بازگشتی تابع قبلی، درون متغیر apple_price ذخیره شود.
حالا متغیر جدید، حاوی قیمت پایانی روزانه سهام اپل است. توجه داشته باشید که مطالعات ساخته شده در پاین اسکریپت باید حداقل یک خروجی داشته باشند، در غیر اینصورت اسکریپت خطای کامپایلر را نشان میدهد. به همین دلیل با کد زیر متغیر خود را رسم میکنیم تا از بروز این خطا جلوگیری شود.
نتیجه نهایی پس از ذخیره و افزودن نمودار، شبیه به تصویر زیر خواهد بود.
همانطور که میبینید، موفق شدیم نمودار قیمت پایانی اپل را رسم کنیم، البته در شرایطی که صفحه اصلی در حال نمایش نمودار کندل استیک بیتکوین است.
کد نهایی به طور کامل در ادامه نوشته شده است.
روش بازیابی میانگین متحرک ساده در پاین اسکریپت چیست ؟
در این مرحله، نمودار قیمت روزانه سهام اپل را داریم و میخواهیم با مثالی جدید، نحوه دریافت ۲۰ «میانگین متحرک» (SMA) آن را بررسی کنیم. از این روش میتوانید برای اعمال هر اندیکاتور دیگری نیز کمک بگیرید.
کار را به سادگی با نوشتن اعلان اولیه و استفاده از تابع Security که در مثال قبل ساختیم، آغاز میکنیم.
در صورتی که نیازی به ۲۰ میانگین متحرک به طور خاص برای AAPL نداشتید، به جای نوشتن تابع Security میتوانید از متغیر داخلی Close کمک بگیرید. با این کار درواقع قیمت پایانی چارتی که در صفحه اصلی نشان داده میشود را دریافت خواهید کرد.
تابعی کمکی برای اندیکاتور SMA درون پاین اسکریپت وجود دارد که برای دسترسی به آن از تابع «ta.sma() » مانند نمونه زیر استفاده میکنیم.
اولین آرگومانی که باید وارد کنیم، مقدار قیمت است. در این مثال از قیمت پایانی اپل که در متعیر apple_price ذخیره کردهایم، کمک میگیریم. دومین آرگومان نیز طول SMA است که یعنی ۲۰ میانگین متحرک را در این کد درخواست دادهایم. در نهایت نیز داده مربوط به SMA را درون متغیر دیگری قرار میدهیم و آن را رسم میکنیم.
نتیجه نهایی میانگین متحرک قیمت اپل را در تصویر زیر میبینید.
دقت کنید که میانگینهای متحرک معمولا در نمودار اصلی رسم میشوند. برای انجام این کار باید کمی کد را تغییر دهیم و آن را مانند نمونه زیر بنویسیم:
با افزودن آرگومان overlay=True در اعلان اندیکاتور، میتوانیم داده را به جای پنجره Data، به طور مستقیم در پنجره اصلی نمودار رسم کنیم.
کد کلی را در ادامه میبینید:
چگونه استراتژی تقاطع میانگین متحرک را با پاین اسکریپت آزمایش کنیم؟
در مراحل قبلی از مطلب پاین اسکریپت چیست به طور کامل با نحوه کار با اندیکاتورها آشنا شدیم و از این پس قصد داریم کمی به آموزش استراتژی بپردازیم. در مثال زیر یک استراتژی تقاطع میانگین متحرک را با چند آرگومان اضافی دیگر میسازیم. سپس آن را درون پاین اسکریپت آزمایش خواهیم کرد.
برای خلق یک استراتژی باید اعلان اندیکاتور را پاک کرده و آن را با اعلان استراتژی جایگزین کنیم.
مرحله بعدی این است که دو میانگین متحرک بسازیم و داده آنها را درون متغیرها قرار دهیم.
همچنین یک «اندیکاتور قدرت نسبی» یا «RSI» نیز میسازیم که برای تایید ورودیها و خروجیها استفاده میشود. از آنجایی که این استراتژی روی نمودار اصلی اجرا خواهد شد، نیازی به نوشتن تابع Security نیست.
در مرحله بعد باید شروط تقاطع را مشخص کنیم. خوشبختانه TradingView تابعی داخلی برای انجام این کار دارد و نیازی نیست که کد را به صورت دستی بنویسیم.
در این مثال دو شرط داریم، اولین شرط برای زمانی است که میانگین متحرک کوچکتر یا ۱۰ دورهای، از روی میانگین متحرک بزرگتر یا ۳۰ دورهای عبور کند و تابع «Crossover» را برای آن مینویسیم. دومین شرط، برعکس مورد قبلی است و برای آن از تابع «Crossunder» استفاده کردهایم. هر دو شرط درون متغیرهای جداگانه ذخیره شدهاند. به همین خاطر وقتی یکی از شروط Crossover یا Crossunder محقق شود، مقدار آنها بهروز شده و روی حالت بولین «True» قرار میگیرد.
برای بررسی اینکه آیا شرطی به حالت True تغییر کرده است، از یک تابع «If» کمک میگیریم و سپس در صورت نیاز، معاملهای را بر اساس آن ایجاد میکنیم.
تابع داخلی strategy.entry برای وارد کردن معاملات به کار میرود. در ادامه با آرگومانهای این تابع آشنا میشویم:
- Long : این آرگومان مشخصه یا «ID» معامله است که در این مثال استفاده نمیکنیم. اما در صورت نیاز به بستن یا لغو کردن معامله، میتوانید از آن کمک بگیرید.
- strategy.long : متغیری داخلی است که برای دریافت آرگومان Long به کار میرود.
- ۱۰۰ : تعداد سهمهای موردنظر برای معامله کردن را نشان میدهد.
- when = rsi > 50 : آرگومانی اضافی است و معامله را در صورتی اجرا میکند که RSI بالاتر از ۵۰ باشد.
فرمول ورودیهای کوتاه، قالب بسیار سادهای دارد و مانند زیر نوشته میشود:
توجه داشته باشید از آنجایی که در حال اجرای یک استراتژی هستیم، نیازی به رسم نمودار یا مشخص کردن خروجی نیست. اما در این مثال، این کار را انجام میدهیم. بهتر است SMA را روی نمودار ببینیم تا مطمئن شویم ترید در زمان درست اجرا میشود. پس کد زیر را نیز اضافه میکنیم:
پس از ذخیره و افزودن کد به نمودار، استراتژی اجرا شده و پنجره «Strategy Tester » برای نمایش آزمایشهای مهم باز میشود. در نهایت نتیجه شبیه به تصویر زیر خواهد شد.
به طور پیشفرض زبانه جدیدی نیز باز شده و آمار کلی استراتژی را نشان میدهد. برای مشاهده سایر احتمالات میتوانید روی یکی از گزینههای «Performance Summary» برای مشاهده خلاصه عملکرد یا «List of Trades» برای دیدن لیست معاملات، کلیک کنید.
در نهایت استراتژی در محدوده زمانی مشخص شده در نمودار، اجرا خواهد شد. این امکان را نیز دارید که از طریق گزینه تایم فریم در منوی بالای صفحه، دورههای زمانی دیگر را انتخاب کنید.

در نهایت کد کامل به شکل زیر خواهد بود:
حد سود و ضرر در پاین اسکریپت چیست و چگونه آن را تنظیم کنیم؟
در مثال قبلی، زمان اجرای معامله از طریق شرایط Crossover و Crossunder میانگینهای متحرک مشخص شد. حالا میخواهیم این اسکریپت را کمی تغییر داده و حدود مشخصی برای سود و ضرر اضافه کنیم. برای محاسبه مقادیر این دو مورد از اندیکاتور «میانگین محدوده واقعی» یا «ATR» استفاده خواهیم کرد.
اندیکاتور ATR، میانگین حرکات آخرین اعداد از ستونهای مشخص شده را محاسبه میکند و استفاده از آن روشی عالی برای حساب کردن تغییرات در نوسانات و تشخیص روند بازار است. همانطور که قبلا چند اندیکاتور دیگر ساختیم، اندیکاتور ATR را نیز با کد زیر به فهرست اضافه میکنیم.
در مرحله بعد، محاسبات لازم برای حد سود و ضرر را در بخش شروط معامله انجام میدهیم:
در کد بالا، حد ضرر را با گرفتن مقدار پایین ستون در زمان ورود و کم کردن میانگین محدوده واقعی (ATR)، ضرب در دو، محاسبه کردهایم. به این شکل اگر سهام به طور میانگین پنج دلار در هر ستون حرکت کند، ما حد سود را ۱۰ دلار زیر سطح پایین قرار میدهیم. برای محاسبه حد سود نیز همین کار را انجام دادهایم.
در نهایت با استفاده از تابع strategy.exit() ، شرایط خروج را مشخص میکنیم. آرگومانهای این تابع به شرح زیر هستند:
- exit : این آرگومان مشخصه معامله یا Trade ID برای خروج از معامله است.
- long : مشخصهای است که قبلا وقتی وارد معامله شدیم، آن را تنظیم کردیم. این آرگومان به اطلاع پاین اسکریپت میرساند که در چه موقعیتی قصد خروج داریم.
- stop=stopLoss : مشخص میکند که سطح موجود در متغیر stopLess باید به عنوان دستور توقف برای خروج از معامله در نظر گرفته شود.
- limit=takeProfit : در این بخش مشخص میکنیم که سطح موجود در متغیر takeProfit ، باید به عنوان دستور محدودیت برای خروج از معامله در نظر گرفته شود.
فرمول شرط کوتاه مشابه موارد قبلی است اما چند مورد از محاسبات آن کمی تغییر کرده و کد نهایی به شکل زیر نوشته میشود:
سایر قسمتهای کد نسبت به مثال قبلی تغییری نکرده و دست نخورده باقی میمانند. در تصویر زیر میتوانید ببینید که استراتژی جدید چگونه کار میکند.
همانطور که میبینید، خروجیها به درستی کار میکنند و مانند ورودیهای کوتاه و بلند روی نمودار اصلی رسم شدهاند. در ادامه کل کد موردنیاز برای انجام این عملیات را میبینید:
آموزش نحوه انجام معامله اپل در شرایطی که گوگل ۵ درصد جابهجا شود
در مراحل قبلی این مطلب از مجله فرادرس دیدیم که تابع Security میتواند دادههای سهامهایی که در صفحه اصلی نیستند را نشان دهد. حالا قصد داریم به کمک آن، یک استراتژی برای اجرای معامله اپل در شرایط جابهجایی سهام گوگل به میزان پنج درصد، بسازیم. این کار یک استراتژی برگشت متوسط است، به این معنی که اگر سهام گوگل بیش از پنج درصد افزایش پیدا کند، سهام اپل را کوتاه میکنیم و در صورتی که اپل پنج درصد سقوط کند، میتوانیم اپل را بخریم.
اولین کاری که باید انجام دهیم، این است که قیمتهای شروع و پایان گوگل را به کمک کد زیر در یک متغیر ذخیره کنیم.
در ادامه با انجام محاسبات مناسب، درصد تغییر قیمت را مشخص میکنیم.
محاسبات درون متغیر price_change قرار میگیرند. به عنوان نمونه اگر سهام گوگل با قیمت ۱۰۰ دلار شروع شود، ۵ درصد افزایش پیدا کند و با قیمت ۱۰۵ دلار پایان یابد، مقدار «۱۰۵/۱۰۰» که همان عدد «۱.۰۵» است، در این متغیر قرار میگیرد. اما اگر گوگل با قیمت ۱۰۰ دلار شروع شود، به میزان ۵ درصد سقوط کند و در مبلغ ۹۵ دلار به پایان برسد، مقدار «۹۵/۱۰۰» یا همان «۰.۹۵» در متغیر ریخته میشود.
به این شکل میدانیم اگر سهام گوگل ۵ درصد سقوط کند، متغیر price_change دارای مقدار «۰.۹۵» یا کمتر خواهد بود و میتوانیم خرید انجام دهیم. فرمول مورنیاز برای انجام این کار به شکل نمونه زیر نوشته میشود:
همچنین فرمول لازم برای کوتاه کردن سهام در صورتی که گوگل ۵ درصد افزایش داشته باشد نیز مانند مثال زیر نوشته میشود:
اگر توجه کرده باشید، خواهید دید که در این کد از قیمت سهام اپل استفاده نکردهایم. تنها کاری که باید بکنیم، باز کردن یک نمودار AAPL است و معامله به طور خودکار برای اپل انجام میشود.
در نهایت، متغیر price_change را در پنجره Data رسم میکنیم. البته انجام این کار ضروری نیست اما دیدن نمودار مربوطه خوب است و میتوانیم مطمئن شویم که معاملات در زمان درست اجرا میشوند.
نتیجه نهایی را در تصویر زیر میبینید.
البته انجام تنها چهار معامله برای حرکات پنج درصدی به نوعی نادر است و کمتر انجام میشود. برای مشخص کردن اینکه آیا استراتژی مناسب است یا خیر، باید معاملات بیشتری را مدنظر قرار دهیم.
کد نهایی مانند نمونه زیر است:
روش تغییر دادن اسکریپتها بدون نیاز به کدنویسی
اگر میخواهید بدانید یکی از مزایای جالب پاین اسکریپت چیست به مطالعه این بخش ادامه دهید. پاین اسکریپت این امکان را فراهم میکند تا با ساختن ورودیهای سفارشی، آرگومانهای استراتژیها و اندیکاتورهای خود را تغییر دهیم.
میتوانید برای درک بهتر این موضوع، اندیکاتور داخلی ATR که توسط TradingView ارائه شده است را بررسی کنید. همانطور که میبینید، تغییر دادن طول و حتی رنگها از طریق زبانه «Style» به راحتی انجام میشود.

با استفاده از تابع «Input» میتوانیم همین کار را برای مطالعات و استراتژیهای ساخته شده در پاین اسکریپت نیز انجام دهیم. در ادامه نحوه کارکرد این تابع برای عوض کردن درصد تغییر در استراتژی مثال قبلی را میبینیم:
آرگومانهای این تابع به شرح زیر هستند:
- title : با این گزینه، متنی را که کاربر در زمان تلاش برای تغییر دادن مقدار این آرگومان خاص میبیند، مشخص میکنیم.
- defval : این آرگومان، مقدار پیشفرض است.
حالا میتوانیم مقادیر را از کاربر دریافت کنیم. البته توجه داشته باشید که کاربر مقدار موردنظر را مانند «۵٪» وارد میکند و نیاز است تا این عدد را برای استفاده در شرایط If، به شکل «۱.۰۵» تبدیل کنیم. برای انجام این کار از کد زیر کمک میگیریم:
همچنین باید تابع If را نیز به نحوی تغییر دهیم که برای دریافت مقادیر به سراغ متغیرهای جدید برود و از مقادیری که قبلا با کد نوشته شدهاند استفاده نکند.
در نهایت برای دسترسی به گزینههای ورودی، در پنجره داده، روی علامت چرخ دنده در کنار نام استراتژی کلیک کنید.

حالا امکان وارد کردن مقادیر سفارشی برای تعویض درصد تغییر در استراتژی مربوطه را دارید.

پنجره دیگری به نام «Properties» نیز وجود دارد که به شما اجازه میدهد برای سایر قسمتهای استراتژی نیز از گزینههای سفارشی استفاده کنید.
پنجره Style نیز برای شخصی سازی کردن گزینههای رسم به کار میرود.

کد کامل مانند نمونه زیر است:
رسم در پاین اسکریپت چیست و چگونه انجام میشود؟
پیش از این مرحله از مقاله پاین اسکریپت چیست برای رسم موارد مشخص، از تابع استاندارد Plot استفاده کردهایم. با این حال پاین اسکریپت دستورات مختلف دیگری نیز دارد که میتوانیم برای خروجیها استفاده کنیم که در ادامه به بررسی آنها میپردازیم.
رسم ساعتهای بازار فارکس
آشنایی با زمان باز و بسته شدن بازارهای مالی، یکی از موارد مهمی است که باید به آن توجه داشته باشید. اما ممکن است یادگیری این مورد برای معامله گران بازار فارکس کمی سختتر باشد. فارکس ۲۴ ساعت در روز و پنچ روز در هفته ترید انجام میدهد. بازارهای مختلف در سراسر جهان نیز در زمانهایی باز و بسته میشوند که در نوسانات ارز تاثیر داشته باشد.
قصد داریم در ادامه اندیکاتوری بسازیم که کمک کند تنها با یک نگاه کوتاه به نمودار، بفهمیم بازارها چه زمانی شلوغتر هستند. بیشتر معاملهگران بازار فارکس به جلسات لندن و نیویورک توجه میکنند و در این مثال نیز زمان را برای این دو شهر تنظیم خواهیم کرد. کد مناسب برای انجام این کار به شکل زیر نوشته میشود:
در این مثال از تابع «Time» برای ساخت یک دوره استفاده کردهایم. همچنین در بین آرگومانها، گزینههای 0700 UTC برای زمان شروع جلسه لندن و 1500 UTC برای زمان اتمام این جلسه به کار میروند.
حالا اگر زمان ستون مربوطه در این دوره قرار بگیرد، مقدار این ستون در متغیر London گذاشته میشود. در غیر اینصورت عبارت «NaN» به عنوان عدم وجود مقدار، در خروجی نشان داده خواهد شد. برای مشاهده و بررسی خروجی این متغیر میتوانیم از یک تابع If به شکل زیر استفاده کنیم:
در کد بالا از تابعی داخلی به نام na() استفاده کردهایم که وجود عبارت Nan در یک متغیر را بررسی میکند. اگر تابع London مقدار NaN را نشان دهد، یعنی ستون مربوطه خارج از ساعتهای معاملات لندن است.
در این شرایط، عدد صحیح «۱» درون متغیر «Val» قرار داده میشود و در غیر اینصورت، متغیر Val روی عدد «۰» تنظیم خواهد شد. در نهایت تابع جدید Val را رسم میکنیم.
نتیجه نهایی نمودار پس از ذخیره اندیکاتور به شکل زیر است.
البته این نتیجه چندان خوب به نظر نمیرسد. البته زمانی که بازار لندن باز باشد نتایج درست نشان داده میشوند اما رسم این مقادیر باعث شده است خوانایی کندل استیکها کمتر شود.
برای رفع این مشکل میتوانیم رسم را در پنجره Data انجام دهیم اما در این صورت نیز مشاهده باز و بسته بودن بازار چندان راحت نیست. حتی کد نیز به قدر کافی خوب نیست. به همین دلیل در ادامه با استفاده از تنها یک خط و شرط If، آن را بهتر میکنیم:
این کد درست مانند تابع If در مثال قبلی کار میکند اما در این شرایط نیازی به متغیر Val نیست. در ادامه قسمتهای مختلف کد را برای درک بهتر توضیح میدهیم:
این قسمت از کد، وجود مقدار NaN را در متغیر London بررسی میکند.
علامت سوال در این بخش از کد، شکل کوتاهی از شرایط If و Elce است. آنچه بعد از علامت سوال میآید، بخش مهمی محسوب میشود. دو عدد را در این قسمت میبینید که با یک علامت «:» از هم جدا شدهاند. عدد اول یا «۱»، در این مثال مقداری است که در صورت تحقق شرط در خروجی نشان داده میشود. عدد دوم یا «۰» نیز در شرایطی نشان داده میشود که شرط محقق نشود.
حالا میتوانیم کل فرمول نهایی را درون یک تابع Plot قرار دهیم و آن را رسم کنیم:
همانطور که دیدید، کل شرط If را درون یک خط کد جای دادیم.
آموزش تغییر رنگ پس زمینه رسم در پاین اسکریپت
برای سادهتر کردن مشاهده و خواندن نمودار همچنین میتوانیم نمودار را در زمان باز بودن بازار لندن، با رنگ پسزمینه متفاوتی نشان دهیم. برای انجام این کار، تابع Plot را با تابع bgcolor که برای تغییر رنگ پسزمینه به کار میرود، جایگزین میکنیم.
به علاوه رنگ دیگری برای زمان باز بودن بازار مشخص میکنیم و کد زیر را برای آن مینویسیم:
در این مرحله، نمودار بسیار بهتر دیده میشود.
آخرین کار نیز این است که کدی برای بررسی باز بودن بازار نیویورک و تنظیم رنگ سبز برای آن بنویسیم:
در تصویر بالا میبینید که نمودار نهایی حاوی سه رنگ مختلف است. این پدیده از آنجایی ناشی میشود که بین جلسات لندن و نیویورک همپوشانی وجود دارد، درواقع بیثباتترین زمان روز به این شکل دیده خواهد شد. با این حال میتوانیم به راحتی جلسات اخیر را ببینیم و مواردی مانند میزان بالای معاملات در اروپا یا پایینترین قیمت در طول همپوشانی را انتخاب کنیم. کد کلی مانند نمونه زیر خواهد بود:
نحوه رسم حاشیهنویسیها
روشهای مختلفی برای چاپ کردن حاشیهنویسیها وجود دارند. به عنوان مثال میتوانیم از تابع «Hline» برای رسم یک خط افقی در نمودار استفاده کنیم. همچنین تابع دیگری به نام «Plotchar» وجود دارد که امکان رسم حروف اسکی روی نمودار را فراهم میکند. از این تابع معمولا برای رسم یک یادداشت در بالا یا پایین ستون قیمت استفاده میشود.
تابع رسم معروف دیگر، «Plotshape» نام دارد که اجازه میدهد شکلهای مختلف را رسم کنیم. این تابع بسیار محبوب است چون کاربران برای کشیدن فلش در بالا یا پایین ستونها به منظور نمایش علائم خرید یا فروش، از آن استفاده میکنند.
چگونه در پاین اسکریپت اندیکاتور سفارشی بسازیم؟
در این بخش از مقاله پاین اسکریپت چیست مراحل ساخت یک اندیکاتور چند زمانه را بررسی میکنیم. این اندیکاتور بر اساس یک استراتژی اسکالپینگ است و همچنین به عنوان یک استراتژی برگشت متوسط در جلسات آسیای اولیه در بازارهای فارکس، زمانی که اوضاع آرام باشد، به خوبی کار میکند. در این استراتژی از باندهای بولینگر در نمودار «۵» دقیقهای و RSI در نمودار «۱» دقیقهای استفاده میشود.
به طور کلی، میخواهیم وقتی قیمت در باند بولینگر در نمودار پنج دقیقهای به حد بالا یا پایین میرسد، در بازار یک دقیقهای به دنبال واگرایی RSI باشیم. یک هدف بالقوه میتواند خط وسط باند بولینگر پنج دقیقهای یا خط پایین باند یک دقیقهای بولینگر باشد.
تصویر زیر نمونهای از این استراتژی را نشان میدهد. همچنین از اندیکاتور فارکسی که در مراحل قبل ساختیم، در این مورد نیز برای نشان دادن زمان گشوده شدن بازارهای آسیایی استفاده کردهایم.
این استراتژی در نیمه اولین بهترین عملکرد را دارد اما پس از آن، ریسک شکست یا حرکت جهت دار افزایش پیدا میکند.
برای ساخت این اندیکاتور در پاین اسکریپت، کد زیر را به کار میبریم:
با اعلان نامی برای اسکریپت و مشخص کردن نوع که اندیکاتور است، کار را شروع میکنیم. توجه داشته باشید که این نام روی نمودار نشان داده میشود و امکان استفاده از عنوان کوتاهتر نیز برای آن وجود دارد.

در مرحله بعدی چند ورودی مشخص میکنیم. برای این کار میتوانیم چند مورد از ورودیهای اندیکاتور معمولی باند بولینگر را برای اندیکاتور سفارشی خود کپی کنیم که در مثال زیر نشان داده شده است.
امکان ساخت اندیکاتور باند بولینگر از طریق یک تابع داخلی کمکی نیز وجود دارد که کد آن مانند نمونه زیر است:
از این تابع، سه مقدار مختلف به دست میآید که شامل کمترین، میانی و بیشترین باند هستند. این مقادیر به صورت جداگانه در متغیرهای مختلف ذخیره میشوند. حالا باید آنها را در محدوده زمانی متفاوتی محاسبه کرد. برای انجام این کار میتوانیم از تابع Security کمک بگیریم و انتخاب محدوده زمانی را بر عهده کاربر بگذاریم. این مورد درون متغیر tf که توسط ورودی قبلی ساخته شده است، قرار خواهد گرفت.
نماد Ticker مانند قبل باقی میماند، به همین دلیل از syminfo.tickerid که نشان میدهد کدام نماد در حال نمایش روی صفحه اصلی است، کمک گرفتهایم. پس از آن تنها کار باقی مانده، این است که اندیکاتور را رسم کنیم.
در این مرحله میتوانیم باندهای بولینگر یک نمودار پنج دقیقهای را ببینیم که روی یک نمودار یک دقیقهای نشان داده میشوند. امکان مشخص کردن ورودی توسط کاربر، سفارشی سازی کردن باند بولینگر را سادهتر کرده و به اندیکاتور اجازه میدهد با هر ترکیب محدوده زمانی کار کند. به علاوه تشخیص روند بازار نیز با استفاده از این اندیکاتور بسیار سادهتر میشود.
کد کلی مانند نمونه زیر است:
جایگزینهای پاین اسکریپت
- Thinkorswim شرکت TD Ameritrade: این پلتفرم شباهتهای بسیاری به پاین اسکریپت دارد و با استفاده از زبانی به نام Thinkorswim، به روشی مانند پاین اسکریپت، دادههای مربوط به قیمت را در آرایههای مختلف ذخیره میکند. دادهها در این زبان به صورت داخلی در دسترس هستند و هدف کلی آن نیز بر تولید اندیکاتورها و استراتژیهای سفارشی تمرکز دارد.
- Ninjatrader: این گزینه نیز از زبانی اختصاصی به نام Ninjatrader استفاده میکند. البته زبان Ninjatrader چندان اختصاصی و منحصربهفرد نیست و به گونهای بر اساس زبان برنامهنویسی C# شاخته شده است. از آنجایی که Ninjatrader امکان برقراری ارتباط با فیدهای داده سفارشی را دارد، انعطاف بالایی نیز دارد. اگر از قبل با زبانهای C ، C# یا C++ آشنا هستید، انتخاب مناسبی برای شما خواهد بود.
سخن پایانی
اگر مثالهای این مقاله از مجله فرادرس را دنبال کنید، ایده بسیار خوبی از اینکه پاین اسکریپت چیست خواهید داشت و حتی میتوانید کدهای ساده برای معاملات خود بنویسید. پاین اسکریپت کاربردهای متنوع بسیاری دارد اما ممکن است شما را با محدودیتهایی نیز مواجه کند.
در این مقاله میبینید که چطور میشود برخی از این محدودیتها را از میان برداشت و از زاویهای تازه، کدنویسی کرد. به عنوان نمونه در بخش معرفی روشهای مختلف رسم، راهحلهای منطقی و جالبی را برای رفع مشکل همپوشانی چند نمودار، بررسی کردیم. به طور کلی کار با پاین اسکریپت راحت است و میتوانید بسیار سریع در استفاده از آن مانند حرفهای ها عمل کنید.
سلام خسته نباشید ببخشید مزاحم شدم. چطوری میتونیم یک اندیکاتور که در تریدینگ ویو هست رو تبدیل کنیم به اندیکاتور متاتریدر 4 یا 5 . ممنون