آموزش ساخت اندیکاتور تحلیل تکنیکال در تریدینگ ویو (Tradingview)
بدون داشتن ابزار معاملاتی و اندیکاتور های مناسب نمیتوانید تحلیل تکنیکال کارآمدی انجام دهید. یک استراتژی معاملاتی منسجم به شما کمک خواهد کرد تا از اشتباهات رایج اجتناب کنید، مدیریت ریسک خود را بهبود ببخشید و قابلیت شناسایی و بهره بردن از فرصتها را افزایش دهید.
برای بسیاری از افراد Trading View یک پلتفرم ارائه نمودار قیمت داراییهای دیجیتال است. تریدینگ ویو قطب ابزارهای تحلیل تکنیکال همچون اندیکاتور ها و اسیلاتورها است که توسط میلیونها نفر استفاده میشود تا تغییرات و نوسانات بازارهای بورس سنتی، فارکس و ارزهای رمزنگاری شده را رصد کنند.
پلتفرم تریدینگ ویو ویژگیهای بسیار زیادی دارد. این پلتفرم به ما امکان میدهد تا داراییها را در بین چندین صرافی معاملاتی مختلف رصد کنیم و ایدههای خود را در شبکه اجتماعی آن ارائه دهیم. در این مقاله، بر روی قابلیت شخصیسازی این پلتفرم معطوف خواهیم بود. ما از پاین اسکریپت (Pine Script)، زبان برنامهنویسی تریدینگ ویو استفاده خواهیم کرد که کنترل بر روی نمودارها را امکانپذیر میسازد. برای دانلود تریدینگ ویو برای ویندوز 10 کلیک کنید و آموزش کامل دانلود و نصب آن را مشاهده کنید.
خرید اکانت تریدینگ ویو پریمیوم یکی از نیازهای معامله گران است که اگر قصد داشته باشند اندیکاتور خصوصی خود را روی تریدینگ ویو لانچ کنند، حتماً باید پلن پریمیوم این وب سایت را تهیه کنند. بایننس فارسی در کنار شماست تا در کمترین زمان ممکن این کار را برای شما انجام دهد.
پاین اسکریپت چیست؟
پاین اسکریپت یک زبان اسکریپتنویسی است که میتوان از آن برای اصلاح نمودارهای قیمتی در سایت تریدینگ ویو استفاده کرد. این سایت ویژگیهای بسیار زیادی برای اصلاح نمودارها در اختیار شما قرار داده است، اما پاین اسکریپت به شما امکان میدهد تا از ویژگیهای موجود فراتر بروید. فرقی نمیکند که میخواهید رنگ کندل استیکها را تغییر دهید یا استراتژی جدیدی را آزمایش (backtest) کنید، ویرایشگر پاین یا همان پاین ادیتور (Pine Editor) به شما امکان خواهد داد تا نمودارهای همزمان خود را شخصیسازی کنید.
اعمال تنظیمات
شروع کار با پاین اسکریپت بسیار ساده است. هر کدی که مینویسیم بر بستر سرورهای TradingView اجرا میشود، بنابراین میتوانیم به ویرایشگر دسترسی داشته باشیم و اسکریپت خود را از مرورگر و بدون دانلود برنامه یا اعمال تنظیمات اضافی توسعه دهیم. در این مقاله به ایجاد نمودار جفت ارز BTC/BUSD خواهیم پرداخت. اگر در این پلتفرم حساب ندارید، ابتدا یک حساب رایگان ایجاد کنید. همچنین عضویت حرفهای هم موجود است، اما برای این راهنما لازم نیست.
در صفحه جفت ارز BTC/BUSD در TradingView با نمودار زیر مواجه میشوید:
در این قسمت میخواهیم به نمودار با جزییات کامل دسترسی داشته باشیم، در نتیجه بر روی دکمه مورد نظر کلیک میکنیم. پس از کلیک کردن بر روی این دکمه، نمودار با جزییات بیشتر، ابزار ترسیم نمودار و گزینههایی برای رسم خطوط روند و سایر موارد نشان داده میشود.
در این مقاله به نحوه استفاده از ابزارهای مختلف موجود نمیپردازیم، اما اگر میخواهید تحلیل تکنیکال را یاد بگیرید، پیشنهاد میکنیم که با این ابزارها آشنا شوید. در قسمت پایین سمت چپ (همانطور که در تصویر مشخص شده است) تبهای مختلفی را مشاهده میکنید. بر روی گزینهPine Editor (ویرایشگر پاین) کلیک کنید.
ویرایشگر پاین
در این ویرایشگر کارهای باورنکردنی میتوان انجام داد. بر رویAdd Chart کلیک میکنیم تا پاورقیها (Annotation) نمایش داده شود. توجه داشته باشید اگر همزمان چندین پاورقی اضافه کنیم ممکن است شرایط از کنترل خارج شود، بنابراین بین مثالها، پاورقیها را پاک میکنیم.
بیشتر بخوانید: آموزش کامل دانلود و نصب نرم افزار تریدینگ ویو برای کامپیوتر
همانطور که مشاهده میکنید از قبل چند خط کد وارد کردهایم. بر روی Add to Chart کلیک میکنیم تا تاثیر آن را مشاهده کنیم.
نمودار اندیکاتور در قسمت پایین نمودار قیمت اضافه شد. نمودار جدید همان اطلاعات را نشان میدهد. از بخشMy Script بر روی ضربدر کلیک کنید تا نمودار دوم حذف شود. اکنون به بررسی کد میپردازیم:
study("My Script")
خط اول صرفا ایجاد پاورقی است. این قسمت فقط اسمی که میخواهید بر روی اندیکاتور یا نمودار خود بگذارید را از شما درخواست میکند (که در این مثال “My Script” است)، اما پارامترهای انتخابی دیگری وجود دارد که میتوان آنها را اضافه کرد. یکی از این پارامترها، همپوشانی (Overlay) است که به TradingView میگوید اندیکاتور را به جای بخش جدید، بر روی نمودار موجود قرار بدهد. همانطور که از مثال اول ما میتوانید مشاهده کنید، مقدار پیشفرض آن بر روی false قرار دارد. اگرچه تاثیر آن را اکنون مشاهده نمیکنیم، اما overlay=true اندیکاتور را به نمودار موجود اضافه میکند.
plot(close)
این خط کد، دستورالعمل رسم قیمت پایانی یک دارایی دیجیتال (مثلا بیت کوین) است. کد plot صرفا به ما یک نمودار خطی ارائه میدهد، اما در ادامه مشاهده خواهیم کرد که چگونه نمودار کندل استیک و نمودارهای میلهای را رسم کنیم.
اکنون کدهای زیر را امتحان میکنیم:
//@version=4
study("My Script", overlay=true)
plot(open, color=color.purple)
پس از افزودن این کدها، باید نمودار دوم را مشاهده کنید (همانند نمودار اول است که به سمت راست حرکت کرده است). تنها کاری که کردیم، رسم قیمت شروع است و از آنجایی که قیمت شروع روز جاری همان قیمت پایانی روز گذشته است، منطقی است که شکل یکسانی داشته باشند.
اکنون با کلیک راست کردن و انتخاب گزینه حذف اندیکاتور ها (Remove Indicators)، پاورقیهای کنونی را پاک میکنیم. بر روی Bitcoin/BUSD بروید و کلید Hide را کلیک کنید تا نمودار کنونی نیز پاک شود.
بسیاری از معاملهگران نمودارهای کندل استیک را ترجیح میدهند زیرا نسبت به یک نمودار ساده، اطلاعات بیشتری ارائه میدهند. در مرحله بعد، نمودارهای کندل استیک را اضافه میکنیم.
//@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)
اندیکاتور های کنونی را حذف کنید و این اندیکاتور را به نمودار اضافه کنید. اکنون نموداری داریم که همانند نمودار رایج کندل استیک است.
ساخت اندیکاتورهای میانگین متحرک
به اولین اندیکاتور شخصیسازی خود به اسم میانگین متحرک تصاعدی یا EMA میپردازیم. EMA یک ابزار ارزشمند است زیرا به ما امکان میدهد تا حواشی بازار را فیلتر کنیم و روند قیمت صحیحتری را به دست آوریم.
میانگین متحرک تصاعدی اندکی با میانگین متحرک ساده (SMA) فرق دارد و بیشتر به نوسانات ناگهانی واکنش میدهد و اغلب برای روندهای کوتاهمدت استفاده میشود.
مقاله مرتبط: دانلود اپلیکیشن اندروید و آیاواس تریدینگ ویو
میانگین متحرک ساده
میانگین متحرک ساده را نیز رسم میکنیم تا بتوانیم این دو میانگین متحرک را مقایسه کنیم. خط کد زیر را به اسکریپت خود اضافه کنید:
plot(sma(close, 10))
این کد، میانگین ۱۰ روز گذشته را رسم میکند. میتوانید عدد داخل پرانتز را تغییر دهید تا تاثیر دورههای مختلف را بر روی منحنی مشاهده کنید.
میانگین متحرک تصاعدی (EMA)
شناخت و توضیح EMA مقداری پیچیدهتر است، اما نگران نباشید. مرحله به مرحله باهم پیش میرویم:
EMA = (Close - Previous Day’s EMA) * Multiplier - Previous Day’s EMA
عبارت فوق چه چیزی به ما میگوید؟ هر روز بر اساس میانگین متحرک روز قبل، میانگین متحرک جدیدی محاسبه میکنیم. ضریب (Multiplier) به صورت زیر محاسبه میشود:
Multiplier = 2 / (Length of EMA + 1)
همانند میانگینهای متحرک ساده، باید طول مدت EMA را نیز مشخص کنیم. تابع رسم EMA همان تابع SMA است. EMA را در کنار SMA رسم کنید تا بتوانید آنها را مقایسه کنید:
//@version=4
study("My Script", overlay=true)
plot(sma(close, 10))
plot(ema(close,10))
اسکریپت های موجود
تاکنون کدها را به صورت دستی نوشتیم تا متوجه آنها شوید. اما اکنون نکتهای را معرفی میکنیم که میتواند باعث صرفهجویی در زمان ما شود، مخصوصا اگر در حال نوشتن اسکریپتهای پیچیدهتر باشیم و نخواهیم از ابتدا این کار را انجام دهیم.
در قسمت بالا سمت راست ویرایشگر، بر روی New کلیک کنید. منویی با اندیکاتور های تکنیکال مختلف باز خواهد شد. بر روی Moving Average Exponential کلیک کنید تا کد منبع اندیکاتور EMA را مشاهده کنید.
در ادامه توابع input () را مشاهده خواهید کرد. این توابع بسیار مفید هستند. میتوانید بر روی این قسمت کلیک کنید.
با کلیک بر روی Settings ، مقادیر موجود در پنجره ظاهرشده را تغییر دهید.
چند تابع Input () در اسکریپت بعدی اضافه میکنیم تا تغییرات را نشان دهیم.
بیشتر بخوانید: آموزش انتقال دیتای چارت در تریدینگ ویو
ترسیم اندیکاتور شاخص قدرت نسبی (RSI)
شاخص قدرت نسبی (RSI) یکی دیگر از اندیکاتور های مهم در تحلیل تکنیکال است. به RSI، اندیکاتور روند معاملات نیز میگویند یعنی نرخ خرید و فروش دارایی را میسنجد. مقدار RSI از صفر تا صد است و نشان میدهد که دارایی موردنظر در وضعیت اشباع خرید یا اشباع فروش قرار دارد. معمولا اگر مقدار RSI کمتر یا برابر با ۳۰ باشد، دارایی در وضعیت اشباع فروش و اگر بیشتر یا برابر با ۷۰ باشد در وضعیت اشباع خرید قرار دارد. اندیکاتور RSI معمولا در دورههایی بر مبنای ۱۴ (۱۴ روز یا ۱۴ ساعت) محاسبه میشود، اما میتوانید بر اساس استراتژی خود، این مقدار را تغییر دهید.
این اندیکاتور را به نمودار اضافه کنید. اکنون باید چند فلش را مشاهده کنید. RsiLE فرصت بالقوه برای خرید یک دارایی را نشان میدهد زیرا ممکن است در وضعیت اشباع فروش قرار داشته باشد. RsiSE نیز بیانگر زمان مناسب برای فروش دارایی در زمان اشباع خرید است. توجه داشته باشید که همانند سایر اندیکاتور ها، صرفا به این اندیکاتور هم نباید به عنوان مدرک قطعی از افزایش و کاهش قیمت متکی باشید.
بک تستینگ
روشی برای اندیکاتور های شخصیسازی وجود دارد. اگرچه عملکرد گذشته نمیتواند نتایج آینده را پیشبینی کند، اما بک تستینگ اسکریپتها میتواند کارایی آنها را در انتخاب سیگنالها به ما نشان دهد. با ذکر مثال ساده زیر ادامه میدهیم. ما میخواهیم استراتژی سادهای ایجاد کنیم که با رسیدن قیمت بیت کوین به ۱۱,۰۰۰ دلار، پوزیشن لانگ در بازار آتی بیت کوین فعال شود و با رسیدن قیمت بیت کوین به بیش از ۱۱,۳۰۰ دلار، این پوزیشن بسته شود. بعداً میتوانیم مشاهده کنیم که این استراتژی تا چه حد کارآمد بوده است.
//@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")
در اینجا، ورود و خروج را به عنوان متغیرها در نظر گرفتهایم. همچنین متغیر قیمت را ایجاد کردهایم که در هر دوره، بسته میشود. سپس، چندین منطق به صورت جملههای شرطی داریم. اگر بخش موجود در پرانتزها درست باشد، بلاک پایین آن اجرا خواهد شد. در غیر این صورت از آن رد خواهد شد. بنابراین، اگر قیمت کمتر یا برابر با قیمت ورودی موردنظر ما باشد، اولین جمله، درست (true) خواهد بود و وضعیت سفارش فعال شده و خرید انجام میشود. پس از آنکه قیمت به میزان موردنظر افزایش یافت، بلاک دوم فعال شده و تمام سفارشهای باز را میبندد.
بر روی نمودار، فلشهایی قرار خواهیم داد که نقطه ورود و خروج ما را نشان دهند. این کد را کپی کرده و به نمودار اضافه کنید.
پلتفرم TradingView به طور خودکار، قوانین جدید شما را بر روی اطلاعات قبلی اعمال میکند. همچنین متوجه خواهید شد که از تب ویرایشگر پاین به Strategy Tester تغییر خواهد کرد. این موضوع به شما امکان میدهد تا حالت کلی سود بالقوه خود، فهرستی از معاملات و عملکرد هر کدام را مشاهده کنید.
آزمایش اندیکاتورها
زمان آن رسیده است با استفاده از بعضی از مفاهیمی که تاکنون توضیح داده شده است، اسکریپت خود را بنویسید. ما EMA و RSI را ترکیب کرده و از مقادیر آنها برای تعیین رنگ کندل استیکها استفاده میکنیم.
از این اندیکاتور نباید به عنوان مشاوره مالی استفاده شود. این اندیکاتور نیز باید همانند سایر اندیکاتور ها با ابزارهای دیگر استفاده شود تا استراتژی مناسب توسعه یابد.
مقاله مرتبط: چگونه در تریدینگ ویو ثبت نام کنیم؟
اکنون بر روی اسکریپت جدید کار میکنیم. تمام اندیکاتور ها را از روی نمودار حذف کنید و نمودار BTC/BUSD را نیز پنهان کنید.
بر روی نمودار جدید خود هر اسمی که میخواهید بگذارید، فقط مطمئن شوید که مقدار overlay برابر با true باشد (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 را برای هر کندل محاسبه کنیم.
udy(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
به RSI میپردازیم. طول 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)
اکنون میتوانیم آن را محاسبه کنیم:
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، رنگ کندل استیکها را تعیین میکنیم. شرایطی را برقرار کنید که
۱) قیمت پایانی کندل بیشتر از EMA باشد. ۲) مقدار 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)
rsiVal = rsi(close, rsiLength)
colors = close > emaVal and rsiVal > 50 ? color.green : color.red
به عبارت سادهتر، اگر مقدار EMA بیشتر از قیمت پایانی و مقدار RSI بیشتر از ۵۰ باشد، کندل به رنگ سبز خواهد بود. در غیر این صورت به رنگ قرمز تبدیل خواهد شد.
سپس، 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)
مطالب بیشتر: آموزش ابتدایی تریدینگ ویو (Tradingview) و استفاده از ابزارها
اسکریپت آماده است. آن را به نمودار اضافه کنید تا عملکرد آن را مشاهده کنید.
سخن آخر
در این مقاله، به مثالهای سادهای پرداختیم که چه اقداماتی میتوانید با ویرایشگر پاین انجام دهید. اکنون میتوانید تغییرات سادهای در نمودارهای قیمت اعمال کنید. در این مقاله فقط به چند اندیکاتور پرداختیم، اما استفاده از اندیکاتور های پیچیدهتر نیز آسان است و میتوانید اسکریپتهای موجود را از قسمت New انتخاب کنید یا خودتان به نوشتن اسکریپت بپردازید.
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.