تریدینگ ویو به عنوان یک ابزار تحلیل تکنیکال قابلیتهای بسیاری دارد: به ما امکان میدهد داراییها را در پلتفرمهای معاملاتی متعدد ردیابی کنیم و تحلیلهای خودمان را در آن منتشر کنیم. در این مقاله، ما بر روی قابلیت سفارشیسازی آن تمرکز خواهیم کرد. ما از Pine Script، زبان برنامهنویسی تریدینگ ویو استفاده خواهیم کرد، که به ما کنترل دقیقی بر اجزای نمودار میدهد. با فکت کوینز و آموزش Pine Script همراه باشید.
Pine Script چیست؟
Pine Script یک زبان برنامهنویسی است که میتواند برای ویرایش نمودارهای تریدینگ ویو استفاده شود. این پلتفرم شما را با قابلیتهای بسیاری مجهز میکند، اما Pine Script به شما اجازه میدهد تا یک قدم جلوتر بروید. چه بخواهید رنگ کندلهای خود را تغییر دهید یا یک استراتژی جدید را آزمایش کنید، ویرایشگر Pine به شما امکان میدهد نمودارهای خود را به دلخواه شخصیسازی کنید.
برای اطلاعات بیشتر حتماً راهنمای کاربر (user manual) را مطالعه کنید. هدف ما در این آموزش توضیح اصول اولیه و معرفی اندیکاتورهایی است که میتوانند برای ترید ارزهای دیجیتال مفید باشند.
آموزش Pine Script
شروع کار با Pine Script فوقالعاده ساده است. هر کدی که مینویسیم روی سرورهای تریدینگ ویو اجرا میشود، بنابراین میتوانیم به ویرایشگر دسترسی داشته باشیم و اسکریپتهای خود را از یک مرورگر توسعه دهیم، بدون نیاز به دانلود یا پیکربندی (Configuration) اضافی.
در آموزش Pine Script ، ما قصد داریم نمودار جفت ارز BTC/BUSD را ترسیم کنیم. اگر از قبل اکانت ندارید، یک حساب رایگان ایجاد کنید (اشتراک حرفهای نیز در دسترس است، اما برای این آموزش لازم نیست).
این لینک را دنبال کنید، نموداری شبیه شکل زیر خواهید دید:
در اینجا، ما میخواهیم نمودار کامل را دریافت کنیم. برای دسترسی به آن، روی دکمه کلیک کنید. این به ما نمای بسیار دقیقتر، ابزارهای ترسیم و گزینههایی برای ترسیم خط روند و غیره میدهد.
شما میتوانید با کلیک بر روی تبهای بالا، بازه زمانی یا تایم فریم را تنظیم کنید.
ما در آموزش Pine Script در مورد نحوه استفاده از ابزارهای مختلف بحث نخواهیم کرد، اما اگر در مورد تحلیل تکنیکال جدی هستید، توصیه میکنیم که با آنها آشنا شوید. در پایین سمت چپ (که در تصویر مشخص شده است)، چند تب مختلف را مشاهده خواهید کرد: روی Pine Editor کلیک کنید.
این ویرایشگر جایی است که جادو اتفاق میافتد. ما به آن میگوییم که چه کاری میخواهیم انجام دهیم، سپس روی Add to Chart کلیک میکنیم تا کدهای ما در بالا ظاهر شود. توجه داشته باشید که اگر چندین annotations را همزمان اضافه کنیم، ممکن است اوضاع به هم ریخته شود، بنابراین آنها را بین مثالها حذف میکنیم (در نمودار کلیک راست کنید و سپس گزینه Remove Indicators را انتخاب کنید.)
میبینید که ما از قبل چند خط کد در آنجا داریم. روی Add to Chart کلیک کنید تا ببینیم چه اتفاقی میافتد.
نمودار دوم زیر نمودار اصلی اضافه میشود. نمودار جدید در ابتدا همان دادهها را نشان میدهد. نشانگر ماوس را روی My Script نگه دارید و روی ضربدر کلیک کنید تا آن را حذف کنید. اکنون، بیایید به کدها بپردازیم.
study(“My Script”)
خط اول فقط Annotation ما را تنظیم میکند. در اینجا فقط به اسمی که میخواهید برای اندیکاتور خود انتخاب کنید نیاز است (در این مورد “My Script”)، اما برخی از پارامترهای اختیاری نیز وجود دارد که میتوانیم اضافه کنیم. یکی از آنها overlay است که به تریدینگ ویو میگوید این اندیکاتور را روی نمودار موجود (بهجای یک بخش جدید) قرار دهد. همانطور که از اولین مثال ما میبینید، پیش فرض آن false است. اگرچه اکنون آن را در عمل نمیبینیم، overlay=true اندیکاتور را به نمودار موجود اضافه میکند.
plot(close)
این خط دستورالعمل ترسیم قیمت بسته (Close) بیت کوین است. plot به سادگی یک نمودار خطی به ما میدهد، اما همانطور که خواهیم دید، میتوانیم کندل ها و میلهها را نیز نمایش دهیم.
در ادامه آموزش Pine Script ، بیایید موارد زیر را امتحان کنیم:
//@version=4
study(“My Script”, overlay=true)
plot(open, color=color.purple)
پس از اضافه کردن این خط کد، نمودار دوم را ببینید (به نظر میرسد نمودار اصلی به سمت راست منتقل شده است). تمام کاری که ما انجام دادهایم این است که به جای آن قیمت باز (Open price) را ترسیم کردهایم، و از آنجایی که قیمت باز روز جاری همان قیمت بسته یا کلوز روز قبل است، منطقی است که این قیمتها شکل یکسانی داشته باشند.
حال بیایید از شر کدهای فعلی خلاص شویم (ما این کار را با کلیک راست و Remove Indicators انجام میدهیم). ماوس را روی Bitcoin / BUSD نگه دارید و روی دکمه Hide کلیک کنید تا نمودار فعلی نیز پاک شود.
بسیاری از معاملهگران نمودارهای کندل استیک را ترجیح میدهند، زیرا اطلاعات بیشتری به ما میدهند تا طرح سادهای مانند آنچه که ما انجام دادیم. در ادامه آموزش Pine Script آنها را اضافه میکنیم.
//@version=4
study(“My Script”, overlay=true)
plotcandle(open, high, low, close)
در حالت ایدئال، زمانی که قیمت باز در یک بازه زمانی معین بیشتر از قیمت بسته است، باید کندلهای قرمز رنگ داشته باشیم و اگر قیمت بسته از قیمت باز بیشتر شود، باید کندلهای سبز داشته باشیم. یک خط بالای تابع plotcandle() اضافه میکنیم:
//@version=4
study(“My Script”, overlay=true)
colors = open >= close ? color.red : color.green
plotcandle(open, high, low, close)
این کد به هر کندل نگاه میکند و بررسی میکند که آیا قیمت باز بیشتر یا برابر با قیمت بسته است. اگر اینطور باشد، به این معنی است که قیمت در طول دوره مورد نظر کاهش یافته است، بنابراین کندل را قرمز رنگ میکند. در غیر این صورت آن را سبزرنگ میکند. تابع plotcandle() را تغییر دهید تا این طرح رنگی را به صورت زیر ارسال کنید:
//@version=4
study(“My Script”, overlay=true)
colors = open >= close ? color.red : color.green
plotcandle(open, high, low, close, color=colors)
اگر این کار را نکردهاید، اندیکاتورهای فعلی را حذف کنید و آن را به نمودار اضافه کنید. حالا باید چیزی شبیه به یک نمودار کندلی معمولی داشته باشیم.
ترسیم میانگین متحرک (MA)
تا اینجای آموزش Pine Script ، برخی اصول اولیه را توضیح دادیم. حال بیایید به اولین اندیکاتور سفارشی خود بپردازیم: میانگین متحرک نمایی یا EMA. این ابزار ارزشمند است که به ما امکان میدهد تا هرگونه نویز بازار را فیلتر کرده و قیمت را هموار کنیم.
EMA کمی با میانگین متحرک ساده (SMA) متفاوت است، زیرا وزن بیشتری را به قیمتهای اخیر دارایی میدهد. به حرکات ناگهانی واکنش نشان میدهد و اغلب برای بازههای کوتاهمدت (مثلاً در معاملات روزانه) استفاده میشود.
میانگین متحرک ساده (SMA)
ما همچنین میتوانیم SMA را رسم کنیم، فقط برای اینکه بتوانیم این دو را بعد از آن مقایسه کنیم. این خط را به اسکریپت خود اضافه کنید:
plot(sma(close, 10))
این نمودار میانگین ده روز گذشته را نشان میدهد. عدد داخل پرانتز را تغییر دهید تا ببینید با در نظر گرفتن طولهای مختلف، منحنی چگونه تغییر میکند.
میانگین متحرک نمایی (EMA)
درک EMA کمی پیچیدهتر خواهد بود، اما نگران نباشید. بیایید ابتدا فرمول را بررسی کنیم:
EMA = (Close – Previous Day’s EMA) * Multiplier – Previous Day’s EMA
حال این فرمول چه چیزی به ما میگوید؟ خب، برای هر روز، یک میانگین متحرک جدید را بر اساس میانگین روز قبل محاسبه میکنیم. ضریب (multiplier) همان چیزی است که به آخرین دوره وزن (weighs) میدهد و با فرمول زیر محاسبه میشود:
Multiplier = 2 / (Length of EMA + 1)
مانند میانگین های متحرک ساده، باید مشخص کنیم که EMA چقدر طولانی خواهد بود. تابع ترسیم EMA مشابه SMA است. آن را در کنار SMA ترسیم کنید تا بتوانید این دو را با هم مقایسه کنید:
//@version=4
study(“My Script”, overlay=true)
plot(sma(close, 10))
plot(ema(close,10))
میتوانید تفاوت جزئی را در دو نوع MA مشاهده کنید.
اسکریپتهای داخلی (Built-in scripts)
تاکنون در آموزش Pine Script ، ما کد خود را به صورت دستی نوشتهایم تا بتوانید آن را احساس کنید. اما بیایید چیزی را معرفی کنیم که میتواند در وقت ما صرفه جویی کند، به خصوص اگر قرار است اسکریپتهای پیچیدهتری بنویسیم، و نمیخواهیم آنها را از ابتدا انجام دهیم.
در بالا، سمت راست ویرایشگر خود، روی New کلیک کنید. یک منوی کشویی با انواع اندیکاتورهای تکنیکالهای مختلف مشاهده خواهید کرد. روی Moving Average Exponential کلیک کنید تا کد منبع یا سورس کد یک اندیکاتور EMA را ببینید.
آن را به نمودار اضافه کنید.
… و با کلیک بر روی ایکون Settings به راحتی مقادیر را در یک پنجره پاپ آپ تغییر دهید.
برای نشان دادن این موضوع، چند تابع input() را در اسکریپت بعدی خود اضافه میکنیم.
ترسیم اندیکاتور RSI
شاخص قدرت نسبی (RSI) یکی دیگر از اندیکاتورهای ضروری در تحلیل تکنیکال است. این شاخص به عنوان یک شاخص مومنتوم یا شتاب قیمت شناخته میشود، به این معنی که نرخ خرید و فروش داراییها را اندازه میگیرد. RSI که در مقیاس 0 تا 100 اندازهگیری میشود، تلاش میکند سرمایهگذاران را در مورد خرید یا فروش بیش از حد داراییها آگاه کند. به طور معمول، اگر RSI کمتر یا مساوی 30 باشد، ممکن است دچار اشباع فروش در نظر گرفته شود، و اگر بیشتر یا مساوی ۷۰ باشد دچار اشباع خرید در نظر گرفته میشود.
اگر به New > RSI Strategy بروید، میتوانید این را خودتان ببینید. RSI عموماً در دورههای 14 (یعنی 14 ساعت یا 14 روز) اندازهگیری میشود، اما شما میتوانید این تنظیمات را مطابق با استراتژی خود تغییر دهید.
این را به نمودار اضافه کنید. اکنون باید چند فلش را ببینید (که با تابع strate.entry() در کد تعریف شده است). RsiLE یک فرصت بالقوه برای خرید دارایی را نشان میدهد،زمانی که نشان دارایی دچار اشباع فروش شده است. RsiSE نقاط احتمالی برای فروش دارایی در هنگام اشباع خرید را نیز مشخص میکند. توجه داشته باشید که مانند همه شاخصها، لزوماً نباید به این شاخصها بهعنوان شواهدی مطلق مبنی بر کاهش قیمتها تکیه کنید.
آموزش بک تست گرفتن
راهی وجود دارد که بتوانیم اندیکاتورهای سفارشی خود را آزمایش کنیم. هرچند تضمینی بر تکرار عملکرد گذشته نیست، آزمایش مجدد اسکریپتهای ما میتواند به ما ایده دهد که چقدر در انتخاب سیگنالها موثر هستند.
در ادامه آموزش Pine Script مثالی از یک اسکریپت ساده ارائه میدهیم. ما قصد داریم یک استراتژی ساده ایجاد کنیم که زمانی که قیمت بیت کوین به کمتر از 11000 دلار میرسد، وارد یک موقعیت خرید (Long) میشود و زمانی که قیمت از 11300 دلار فراتر میرود، از موقعیت خارج میشود. سپس میتوانیم ببینیم که این استراتژی از نظر تاریخی چقدر سودآور بوده است.
//@version=4
strategy(“ToDaMoon”, overlay=true)
enter = input(11000)
exit = input(11300)
price = close
if (price <= enter)
strategy.entry(“BuyTheDip”, strategy.long, comment=”BuyTheDip”)
if (price >= exit)
strategy.close_all(comment=”SellTheNews”)
در اینجا ما نقطه ورود و خروج را به عنوان متغیر تعریف کردهایم. هر دو ورودی هستند، به این معنی که میتوانیم بعداً آنها را در نمودار تغییر دهیم. ما همچنین متغیر قیمت را تنظیم کردیم که برای هر دوره بسته میشود. سپس، منطقهایی به شکل عبارات if داریم. اگر قسمت داخل پرانتز درست (True) باشد، دستور زیر آن اجرا خواهد شد. در غیر این صورت از آن صرف نظر میشود.
بنابراین، اگر قیمت کمتر یا برابر با ورودی مورد نظر ما باشد، عبارت اول درست (True) ارزیابی میشود و ما یک موقعیت خرید باز میکنیم. هنگامی که قیمت از خروجی مورد نظر فراتر رفت، بلوک دوم اجرا میشود و تمام موقعیتهای باز بسته میشود.
نمودار را با فلشهایی حاشیهنویسی میکنیم که نشان میدهد کجا وارد/خروج شدهایم، ما با پارامتر comment مشخص کردهایم که این نقاط را چه نام بگذاریم (در این مثال، «BuyTheDip» و «SellTheNews»). کد را کپی کنید و به نمودار اضافه کنید.
اکنون میتوانید اندیکاتورها را در نمودار مشاهده کنید. ممکن است نیاز به بزرگنمایی داشته باشید.
TradingView به طور خودکار قوانین شما را روی دادههای قدیمی اعمال میکند. همچنین متوجه خواهید شد که از ویرایشگر Pine به تب Strategy Tester منتقل میشود. این به شما امکان میکند نمای کلی از سود بالقوه خود، لیستی از معاملات و هر یک از عملکردهای جداگانه آنها را مشاهده کنید.
مثال عملی
اکنون که به انتهای آموزش Pine Script رسیدیم، وقت آن است که با استفاده از برخی از مفاهیمی که تاکنون یاد گرفتیم، فیلمنامه خودمان را بنویسیم. ما EMA و RSI را با هم ترکیب میکنیم و از مقادیر آنها برای رنگ آمیزی کندل استفاده میکنیم و اطلاعاتی را به دست میآوریم که میتوانیم به راحتی آنها را مصور کنیم.
این نباید به عنوان توصیه مالی تلقی شود ، هیچ راه عینی برای استفاده از این شاخص وجود ندارد. مانند سایر موارد، باید با ابزارهای دیگر برای تقویت استراتژیتان استفاده شود.
حالا بیایید روی اسکریپت جدیدمان کار کنیم. تمام اندیکاتورهای خود را از نمودار حذف کنید و نمودار Bitcoin/BUSD را نیز مخفی (Hide) کنید تا یک بوم تمیز برای نقاشی داشته باشیم.
بیایید با نوشتن کد جدید شروع کنیم. نام آن را هر چه میخواهید بگذارید، فقط مطمئن شوید که overlay=true را تنظیم کردید.
study(title=”Binance Academy Script”, overlay=true)
فرمول EMA قبلی را به خاطر بسپارید. باید ضریب را با طول EMA ارائه کنیم. بیایید آن را به یک ورودی تبدیل کنیم که به یک عدد صحیح نیاز دارد (بدون ارقام اعشاری). ما همچنین یک حداقل (minval) و یک مقدار پیش فرض (defval) را تعیین میکنیم.
study(title=”Binance Academy Script”, overlay=true)
emaLength = input(title=”EMA Length”, type=input.integer, defval=25, minval=0)
با استفاده از این متغیر جدید، میتوانیم مقدار EMA را برای هر کندل در نمودار خود محاسبه کنیم:
study(title=”Binance Academy Script”, overlay=true)
emaLength = input(title=”EMA Length”, type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
حال روی RSI به روشی مشابه به آن طول میدهیم:
study(title=”Binance Academy Script”, overlay=true)
emaLength = input(title=”EMA Length”, type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title=”RSI Length”, type=input.integer, defval=25, minval=0)
And now, we can calculate it:
study(title=”Binance Academy Script”, overlay=true)
emaLength = input(title=”EMA Length”, type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title=”RSI Length”, type=input.integer, defval=25, minval=0)
rsiVal = rsi(close, rsiLength)
در این مرحله، بیایید منطقی را ایجاد کنیم که کندل ها را بسته به مقادیر EMA و RSI رنگ میکند. مثلاً این وضعیت را در نظر میگیریم: (a) زمانی که قیمت بسته کندل از EMA بیشتر شود و (b) زمانی که RSI از 50 عبور میکند.
این اندیکاتورها میتوانند در کنار هم استفاده شوند تا به شما بگویند چه زمانی بیت کوین را لانگ یا شورت کنید. به عنوان مثال، ممکن است فکر کنید که برآورده شدن هر دوی این شرایط به این معنی است که زمان خوبی برای ورود به یک موقعیت لانگ است.
بنابراین، خط بعدی ما به این صورت خواهد بود:
study(title=”Binance Academy Script”, overlay=true)
emaLength = input(title=”EMA Length”, type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title=”RSI Length”, type=input.integer, defval=25, minval=0)
rsiVal = rsi(close, rsiLength)
colors = close > emaVal and rsiVal > 50 ? color.green : color.red
اگر این را به انگلیسی ساده ترجمه کنیم، صرفاً میگوییم که اگر مقدار EMA از قیمت بسته و امتیاز RSI از 50 بیشتر شود، شمع را سبز رنگ میکنیم. در غیر این صورت آن را قرمز رنگ میکنیم.
سپس EMA را رسم کنید:
study(title=”Binance Academy Script”, overlay=true)
emaLength = input(title=”EMA Length”, type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title=”RSI Length”, type=input.integer, defval=25, minval=0)
rsiVal = rsi(close, rsiLength)
colors = close > emaVal and rsiVal > 50 ? color.green : color.red
plot(emaVal, “EMA”)
در نهایت، کندل ها را رسم کنید و پارامتر رنگ را در آن لحاظ کنید:
study(title=”Binance Academy Script”, overlay=true)
emaLength = input(title=”EMA Length”, type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title=”RSI Length”, type=input.integer, defval=25, minval=0)
rsiVal = rsi(close, rsiLength)
colors = close > emaVal and rsiVal > 50 ? color.green : color.red
plot(emaVal, “EMA”)
plotcandle(open, high, low, close, color=colors)
و تمام! آن را به نمودار اضافه کنید.
نمودار BTC/BUSD با اندیکاتور EMA/RSI.
جمع بندی
در این مقاله به آموزش Pine Script در نرمافزار تریدینگ ویو و کارهایی که به کمک آن میتوانیم انجام دهیم پرداختیم. ما در این مقاله فقط به چند اندیکاتور پرداختیم، اما شما به راحتی میتوانید کدهای پیچیدهتری بنویسید، یا با انتخاب اسکریپتهای داخلی از بخش New یا با نوشتن آنها.