اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول

1 سال قبل bitcoin بیت کوین
2
  • 1 سال قبل
    Pine script زبان برنامه نویسی داخلی پلتفرم تریدنگ ویو است که به کمک اون میتوان استراتژی های معاملاتی خودمون رو تست بزنیم یا اندیکاتور مخصوص و ویژه ای رو بسازیم. تو این مجموعه اموزشی ک این متن، بخش اول اون رو تشکیل میده سعی میکنم به زبان خیلی ساده مباحث مرتبط با این زبان رو توضیح بدم تا افرادی که اشنایی با برنامه نویسی ندارن هم، توانایی نگارش اسکریپتهای مخصوص به خودشون رو داشته باشن . البته این مجموعه رو سعی میکنم تا نوشتن ربات معامله گر بر اساس سیگنالهای تولیدی توسط استراتژی های معاملاتی ک اونم با هم برنامه نویسی میکنیم رو، ادامه بدم. سیگنالهایی که میشه به ایمیل فرستاد یا حتی به کانال تلگرامی. پس حتما آموزشهای روزهای آینده رو دنبال کنید.
    Pine script ، یک زبان برنامه نویسی خیلی ساده و بسیار شبیه به زبان برنامه نویسی پایتون هست. دوستانی ک تجربه کار با پایتون دارن متوجه شباهتهای اون میشن .
    برای نوشتن اسکریپت به این زبان، تنها کافیه وارد اکانت تریدینگ ویو خودتون بشید (اگه تا الان اکانتی نداشتید الان زمان مناسبی واسه ایجاد یه اکانت تو تریدینگ ویو هست) بعد از ورود و رفتن به بخش chart ،یه جفت ارز رو انتخاب کنید سپس از نوار پایینی گزینه pine editor رو انتخاب کنید.(مانند تصویر زیر)
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
    Pine editor همون بخشی هست ک میخوایم اونجا اسکریپت مون رو بنویسیم با انتخاب گزینه pine editor با چیزی مشابه تصویر زیر رو برو میشید:
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
    همونطور که میبینید دستوراتی به صورت پیش فرض نوشته شده . این دستورات در تمامی اسکریپتهایی هم که  بعدا میخواید ایجاد کنید به صورت پیش فرض هستن که در ادامه توضیحشون میدم :
    تو سطر  اول عبارت زیر نوشته شده :
    // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
    در اینجا در مورد مجوز یا لیسانس اسکریپت ما و اینکه تحت چه قوانینی هست توضیحاتی داده شده  البته در اینجا بهش نیازی نداریم و میتونید پاک کنید. اما چیزی که تو این خط مهمه اسلش ها هست که در ابتدای خط اومده این اسلش ها به ما میگه نوشته ای که در ادامه اش میاد توضیحات ان و نقشی در اجرای کد ندارن. پس چرا می نویسیمش ؟! جواب ساده است به جز این مورد خاص که توضیحاتی درباره مجوز انتشار نوشته شده، به صورت کلی توضیحات کمک میکنه که در اینده اگه خواستیم دوباره کدمون رو توسعه بدیم یادمون بمونه دستوراتی که نوشتیم برای چه کاری بوده !!! نقش مهم دیگه ای هم که  داره در زمان انتشار، و توسعه توسط برنامه نویسای دیگه است که اونا هم منطق برنامه ای که نوشتیم رو بهتر درک کنن. پس توضیحات رو قبل از نوشتن دستوراتی ک کار خاصی انجام میدن بنویسید.
    .....................
    // © mehrdad
    تو سطر  دوم عبارت بالایی نوشته شده که نویسنده اسکریپت رو مشخص میکنه (اینم یه توضیح هست که با دابل اسلش شروع شده) و به صورت پیش فرض نام کاربری اکانت ما در تریدینگ ویو هست. در صورتی ک میخواید میتونید تغییرش بدید یا به کل حذفش کنید. من هم دراینجا تغیییرش دادم و این اسم کاربری من در تریدینگ ویو نیست !!!
    ........................
    //@version=5
    و اما سطر 4 که بر خلاف  دو سطر  قبلی قابلیت حذف نداره و مهم هم هستش، ورژن برنامه ما رو مشخص میکنه . این دستور نباید حذف بشه و توجه کنید که دستورات pine script  در ورژنهای مختلف کمی متفاوته و اگ میخواید از کدی که در نت منتشر شده استفاده کنید، حتما به این موضوع توجه داشته باشید که با چه ورژنی نوشته شده ان.
    ........................................
    indicator("My script")
    در سطر بعدی ما به تریدینگ ویو اعلام میکنیم میخوایم اندیکاتوری بنویسیم به نام my script . میتونید این عبارت رو تغییر بدید و اسم خاص مورد نظر خودتون رو بنویسید. توجه کنید ما برای ایجاد اندیکاتور  حتما باید دستور indicator رو بهمین شکل نوشته باشیم. اندیکاتور در واقع ابزار تحلیلی هست که با کمک اون میتونیم بازار رو تحلیل کنیم مثل rsi یا ma و موارد مشابه .
    یه نکته مهم که اینجا باید بگم هدف از این اموزش یادگیری دسترات pine script برای کمک در توسعه اندیکاتور شخصی هست نه اینکه اندیکاتور خاصی مد نظر من هست و میخوام اون رو منتشر کنم !!! به عبارت دیگه شما باید بازار رو بشناسید و مثلا به فرمول ریاضی رسیدید ک اگ کندلهای قیمتی رو اینجور تحلیل کنیم نقاط مناسبی برای خرید و فروش به ما میده !!! وبعد اون رو برنامه نویسی کنید !!!
    .................................
    و اما اخرین دستور، دستور plot(close) هست که از اسمش هم مشخصه این دستور برای ترسیم استفاده میشه. در داخل دستور عبارت close نوشته شده که به تریدیگ ویو میگه عمل ترسیم رو براساس قیمت بسته شدن انجام بده. حالا اگ گزینه  Add to Chart رو کلیک کنیم این اندیکاتور به چارت ما اضافه میشه .
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
     البته قبل از اون بهتره اسکریپت خودمون رو ذخیره کنیم . بر روی گزینه Save کلیک کنید ، پنجره ای مشابه پنجره زیر باز میشه و از ما میخواد اسکریپتمون رو ذخیره کنیم.
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
    همینطور که میبینید بعد از ذخیره، اندیکاتور ما با نام my script به چارت اضافه شده . این اندیکاتور که 1 دستور plot داره، میاد و نمودار قیمت رو به صورت خطی و بر اساس قیمت بسته شدن کندل ها نمایش میده. در واقع  کندل فعلی و کندلهای قبلی رو به شکل نقطه و بر اساس قیمت بسته نمایش میده و مجموعه این نقاط هم تشکیل این نمودار خطی رو داده. (خط مجموعه ای از نقاط به هم پیوسته است)
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
    میتونید نحوه نمایش نمودار قیمت رو به جای حالت شمعی بزارید رو حالت Line و نمودار قیمت رو با اندیکاتور my script مقایسه کنید.
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
    کاملا مشابه ان!!! درسته !!! به همین راحتی ما یه یه اندیکاتور ایجاد کردیم بدون نوشتن حتی یک خط دستور!!!
    حالا شاید از خودتون بپرسید چه جور میشه رنگ اونو تغییر داد. شاید بگید خب اینم مثل اندیکاتورهای دیگه بخش تنظیمات داره و از اون طریق میشه تغییر داد البته که این درسته ولی منظور من از طریق برنامه نویسی بود !!! خب من برای همین دارم این مطلب رو مینویسم !!!
    برای این کار دستور plot رو به شکل زیر تغییر بدید :
    plot(close, color = color.red )
    نکته : وقتی در نگارش color هستید خود تریدینگ ویو پیشنهاداتی رو برای نوشتن دستورات احتمالی به شما نشون میده اگ املای صحیح دستور رو فراموش کردید میتونید از اون کمک بگیرید . بعد از تغییرات حتما اسکریپت رو ذخیره کنید . در صورتی که اندیکاتور رو بستید یا به نمودار اضافه نشده  دوباره add to chart رو کلیک کنید تا اندیکاتور رو با تغییراتی که دادیم نمایش بده. اگ این کار ها رو به درستی انجام بدید نمودار قرمز رنگ میشه .
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
    برای تغییر در ضخامت خط ترسیم شده باید دستور جدیدی به plot بدیم . پس دستور plot رو به شکل زیر تغییر بدید :
     
    plot(close, color = color.red, linewidth = 3  )
    تا اینجا کد ما شد :
    // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © mehrdad//@version=5 indicator("My script") plot(close, color = color.red, linewidth = 3  )
    و نتیجه حاصله :
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
    برای تمرین خودتون عدد 3 رو تغییر بدین و تغییرات حاصل رو مشاهده کنید و اگ سوالی داشتین در بخش کامنتها بپرسین.
    در ادامه شاید این سوال رو از خودتون بپرسید که چه جور میتونیم این نمودار ترسیم شده رو بر روی چارت ببینیم نه در پایین چارت و در کادر جداگانه، یا در واقع چه طور اندیکاتوری بنویسیم که بر روی نمودار قیمت نمایش داده بشه ؟! جواب این سوال با تغییر در دستور indicator نهفته است. این دستور هم مانند plot ورودی های مختلفی میگیره . اما قبل از نوشتن دستور بهتره بگم منظور از ورودی چی هست دستوراتی مثل plot و مشابه اون در واقع مانند یه تابع عمل میکنه همون تابعی ک در ریاضیات خوندیم مثل تابع f(x) = x +1 ک به ما میگه  x به عنوان ورودی هر چه است رو یکی بهش اضافه کن مثلا f(1) = 2 وووو خب در اینجا هم تیم توسعه تریدینگ ویو از قبل توابعی نوشته مثل همین plot که مقادیری به عنوان ورودی میگیره و عمل خاصی رو انجام میده  . همین عمل قرمز رنگ کردن خط ترسیمی ما در واقع یک ورودی هست با مقدار red ک میگیم جایگزین color در تابع plot کن..در مثال f(x)  ما 1 رو به جای x وارد کردیم  تابع به ما عدد 2 رو داد. خب در اینجا هم باید مقدار خاصی رو به عنوان ورودی به دستور indicator بدیم تا بر اساس اون بیاد عملی رو انجام بده و اندیکاتوری که میخوایم رو نمودار قیمت نمایش بده نه به صورت مجزا و در پایین. این ورودی با overlay مشخص میشه. دستور indicator رو مشابه زیر تغییر داده و ذخیره کنید و به چارت اضافه کنید :
    indicator("My script", overlay = true)
    نتیجه کار میشه تصویر زیر :
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
    البته ضخامت خط زیاده و کامل کندل ها رو پوشونده !!!
    دستورات کامل تا اینجا :
    // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © mehrdad//@version=5 indicator("My script", overlay = true) plot(close, color = color.red, linewidth = 3  )
    در دستور plot اگر به جای close کلمه open بنویسیم خط رو بر اساس قیمت باز شده کندلها ترسیم میکنه low و high هم برای پایین ترین قیمت کندل و بالاترین قیمت به کار برده میشه. این تغییرات رو اعمال کنید و اگر سوالی داشتید بپرسید. بعد از اضافه کردن اندیکاتوری ک نوشتید تایم فریم رو هم تغییر بدید تا بهتر انچه که انجام میدید رو درک کنید.
    در ادامه اندیکاتوری رو بر اساس میانگینهای متحرک توسعه میدیم. اندیکاتور قبلی رو ببندید و بر روی گزینه open کلیک کنید و برای ایجاد یک اندیکاتور جدید گزینه indicator رو انتخاب کنید.
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
    در اینجا کد پیش فرض به ما نشون داده میشه . اسم اندیکاتور رو میزاریم my moving average و چون میخوایم روی نمودار قیمت نشون داده بشه دستور overlay رو با مقدار true به عنوان ورودی به اون  میدیم.
    indicator("My Moving Average", overlay = true)
    بعد دستور plot رو به شکل زیر تغییر میدیم :
    plot(ta.sma(close,20))
    این در واقع از دو دستور تشکیل شده که اول دستور داخل پرانتز رو اجرا میکنه یا بهتر بگم پرانتزهای داخل در اولویت ان وبعد دستور plot رو اجرا میکنه. دستور داخل پرانتز یعنی ta.sma(close,20)  میانگین متحرک ساده با طول 20  است که این میانگین رو بر اساس قیمت بسته شده یا close محاسبه میکنه و نتیجه هرچی شد رو با دستور plot نمایش میده :
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
    در اینجا هم  نمودار رو با رنگ ابی مشخص کرده (رنگ پیش فرضه) برای تغییر رنگ  یا ضحامت مشابه قبل عمل میکنیم. مثلا ما در اینجا رنگ تغییر دادیم.
    plot(ta.sma(close,20), color = color.red)
    دستور بالا رو با دستورات قبلی مقایسه میکنیم :
    plot(close, color = color.red )
    همینطور که میبینید ساختار دستور کاملا مشابه است و فقط بخش اول تفاوت داره که این بخش اول یا ورودی اول plot ، چیزی هست که خواستیم رسم کنیم (در اینجا میانگین متحرک).
    Plot ورودی های محتلفی میگیره این ورودی ها رو میتونید تو شکل زیر ببینید:
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
    در بخش پایین اش توضیحی در مورد plot داده : plots a series of data on the chart ترسیم یا نمایش مجموعه ای از داده ها بر روی چارت. پس در وافع اولین ورودی یعنی series چیزی هست که میخوایم ترسیم کنیم، که ما اینجا میانگین متحرک ساده رو به عنوان ورودی اول دادیم یعنی این رو واسمون ترسیم کن. ورودی سوم color که رنگ انچه ترسیم میکنیم رو مشخص میکنیم و با ورودی چهارم یعنی linewidth ضخامت خط رو، که البته با اینها هم از قبل اشنا شدیم.مابقی ورودی ها رو هر چه جلوتر بریم معرفی میکنم.
    تا اینجا موفق به ایجاد یک اندیکاتور برای میانگین متحرک شدیم. اما در اغلب موارد ما به جای یک میانگین متحرک به چند میانگین نیاز داریم در طولهای محتلف . این کار باعث میشه ما دید بهتری در کوتاه مدت، میان مدت و بلند مدت داشته باشیم. اما اضافه کردن چندتا اندیکاتور میانگین در سیستم تریدینگ ویو با توجه به رایگان بودن اکانت ما، محدودیت اضافه کردن اندیکاتر برای ما ایجاد میکنه .  برای اینکه این محدودیت رو دور بزنیم بهتره تمامی میانگینهای متحرک رو در یک اندیکاتور داشته باشیم.
    برای اینکار تنها کافی هست دستور plot  رو به تعداد دلخواه کپی کنیم (با طول 10، 20،50،100،200):
    plot(ta.sma(close,10), color = color.green) plot(ta.sma(close,20), color = color.blue) plot(ta.sma(close,50), color = color.lime) plot(ta.sma(close,100), color = color.red) plot(ta.sma(close,200), color = color.black)
     
    نتیجه حاصل (دارم رو گالا ترید میکنم و همزمان مقاله مینویسم!!!):
    اموزش برنامه نویسی تریدینگ ویو: ساخت اندیکاتور شخصی قسمت اول
    و کل کد ما تا اینجا :
    // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © mehrdad//@version=5 indicator("My Moving Average", overlay = true)plot(ta.sma(close,10), color = color.green) plot(ta.sma(close,20), color = color.blue) plot(ta.sma(close,50), color = color.lime) plot(ta.sma(close,100), color = color.red) plot(ta.sma(close,200), color = color.black)
     
    نوشتن این دستورات به این شکل هرچند کار ما رو راه میندازه اما خوانش کد رو سخت تر و اعمال تغییرات رو پیچیده تر میکنه پس بهتره دستورات plot  و sma رو از هم تفکیک کنیم.
    برای این کار تک تک دستورات plot رو ب شکل زیر تغییر میدیم برای مثال اولین دستور :
    ma1 = ta.sma(close,10)
     
    plot(ma1, color = color.green)
    در اینجا اومدیم برای دستور میانگین متحرک یک variable یا متغیر تعریف کردیم. متغیر در برنامه نویسی برای نگهداری داده ها با نام خاصی استفاده میشه .نام متغیر در اینجا ma1 هست. و ma1  رو به عنوان ورودی به plot دادیم. بعد از اعمال این کار برای تمامی دستورات plot ، کد ما به شکل زیر دیده میشه :
    // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © mehrdad//@version=5 indicator("My Moving Average", overlay = true)ma1 = ta.sma(close,10) ma2 = ta.sma(close,20) ma3 = ta.sma(close,50) ma4 = ta.sma(close,100) ma5 = ta.sma(close,200)plot(ma1, color = color.green) plot(ma2, color = color.blue) plot(ma3, color = color.lime) plot(ma4, color = color.red) plot(ma5, color = color.black)
    نکته : حتما بعد از اعمال تغییرات ، رو گزینه save کلیک کنید.
    این اندیکاتوری که مانوشتیم مشابه اندیکاتور moving average ribbon هست البته ما 5 میانگین داریم اونجا 4 تا.
    پایان آموزش اول
    اگر سوالی بود در مورد این مطلب کامنت بدید و اگ سوالی غیر این مطلب بود ولی مرتیط با pine script اونا رو تو یه پست جداگانه به صورت پرسش و پاسخ جواب میدم.
    موفق باشید
guest

استفاده از محتوای توهین‌آمیز، غیراخلاقی، دیدگاه‌های غیراقتصادی، تبلیغات و اطلاعات تماس یا لینک‌های نامرتبط ممنوع است.

نقض قوانین ممکن است منجر به عدم تأیید دیدگاه‌ها یا مسدودسازی حساب کاربران شود.

2 دیدگاه
کاربر تازه‌وارد
کاربر تازه‌وارد
5 ماه قبل

سلام من یه استراتژی نوشتم و می خوام دوستام هم از این استراتژی استفاده کنن // چطوری می تونم فقط برای دوستام به اشتراک بزارم

مهدی
مهدی
8 ماه قبل

سلام. از سبک آموزشتون خیلی خوشم اومد.بدون هیچ پیش زمینه، ساده و کاربردی جلو رفتید.عالیه...از آموزشتون لذت بردم
سلامت و پایدار باشید مهندس مهرداد عزیزززز