با سلام خدمت دوستان
در مورد دستورات پیش پردازنده و دستورات عمومی توضیحاتی خدمت دوستان ارائه شد.در ادامه به معرفی 3 تابع ذکر شده میپردازیم:
1-تابع init: دستوراتی که در این تابع نوشته میشود فقط یک بار و آن هم موقع اجرای اندیکاتور اجرا میشوند.برای مثال فرض کنید ما میخوایم دو تا خط رسم کنیم و رنگ این خط ها رو در ورودی از
کاربر میگیریم. ما میخوایم رنگ هایی که کاربر وارد میکنه رو به خط ها اختصاص بدیم.این دستورات در تابع init نوشته میشوند چون فقط 1 بار موقع اجرای برنامه اجرا بشن کافیه.
در زبان برنامه نویسی mql ما میتونیم روی نمودار object رسم کنیم.مثل خط روند و چنگال و خطوط عمودی و افقی و....
وقتی ما دستور رسم مثلا یک خط روند با اسم مشخص رو میدیم، اگر خطی به اون اسم وجود داشته باشه برنامه خطا میده و میگه یک object با این اسم در حال حاضر وجود داره و نمیتونه object
دیگری با همون اسم رو دوباره بسازه.
در مواقعی که ما در برنامه خودمون مثلا دو تا خط به اسم 1 و 2 رسم میکنیم، در تابع init، دو دستور برای پاک کردن خط 1 و 2 مینویسیم.چرا؟
به این دلیل که اگر خطی به اسم 1 و 2 در حال حاضر و جود داره، اونها پاک بشن تا موقع رسم خطوط با مشکل مشابه بودن اسم object مواجه نشیم.
2-تابع deinit: دستوراتی که موجع پاک کردن اندیکاتور میخوایم اجرا بشن رو در این تابع باید بنویسیم.فرض کنید موقع اجرای برنامه، ما تعداد زیادی object در نمودار رسم میکنیم.وقتی کاربر میخواد
اندیکاتور رو حذف کنه، اون خطوطی که ما رسم کردیم رو باید خودمون پاک کنیم.
نتیجه: وقتی میخوایم object با یک اسم مشخص رو رسم کنیم، ابتدا دستور حفط object با اسم مشابه رو در تابع init مینویسیم تا برای رسم شیء دچار مشکل نشیم و شیئی هم نام اون وجود
نداشته باشه. این دستور حذف object رو باید در تابع deinit هم بنویسیم تا موقع پاک کردن اندیکاتور، خط ما هم پاک بشه.در دستور حدفی که در تابع init مینویسیم برای مطمئن شدن از این
هست که در رسم شیء ها مشکلی پیش نمیاد.
3-تابع start: این تابع در حقیقت بدنه اصلی برنامه هست.تمام محاسبات ما در این تابع نوشته میشه.
دقت کنید که توابع init و deinit فقط موقع اجرا و حذف اندیکاتور و فقط 1 بار اجرا میشوند ولی دستورات تابع start در شرایط مختلف مدام اجرا میشوند.
مثلا وقتی دیتا به روز میشه یا وقتی متاتریدر رو باز میکنیم و اندیکاتور روی چارت هست دستورات start یک بار اجرا میشوند و با بروز شدن دیتا، دستورات start دوباره اجرا میشوند و ...
نکته مهم: دستوراتی که برای حذف object ها در بالا بهش اشاره کردم فقط مربوط به object ها هستند و خطوطی که جزء برنامه هستند و موقع ایجاد یک برنامه جدید، ایجاد میشوند(در پست های بعدی در این مورد بیشتر توضیح خواهم داد.) جزء خود برنامه هستند و احتیاجی به حذف ندارن و خودشون موقع پاک کردن اندیکاتور پاک می شوند.
موفق باشید.
ادامه دارد....
در مورد دستورات پیش پردازنده و دستورات عمومی توضیحاتی خدمت دوستان ارائه شد.در ادامه به معرفی 3 تابع ذکر شده میپردازیم:
1-تابع init: دستوراتی که در این تابع نوشته میشود فقط یک بار و آن هم موقع اجرای اندیکاتور اجرا میشوند.برای مثال فرض کنید ما میخوایم دو تا خط رسم کنیم و رنگ این خط ها رو در ورودی از
کاربر میگیریم. ما میخوایم رنگ هایی که کاربر وارد میکنه رو به خط ها اختصاص بدیم.این دستورات در تابع init نوشته میشوند چون فقط 1 بار موقع اجرای برنامه اجرا بشن کافیه.
در زبان برنامه نویسی mql ما میتونیم روی نمودار object رسم کنیم.مثل خط روند و چنگال و خطوط عمودی و افقی و....
وقتی ما دستور رسم مثلا یک خط روند با اسم مشخص رو میدیم، اگر خطی به اون اسم وجود داشته باشه برنامه خطا میده و میگه یک object با این اسم در حال حاضر وجود داره و نمیتونه object
دیگری با همون اسم رو دوباره بسازه.
در مواقعی که ما در برنامه خودمون مثلا دو تا خط به اسم 1 و 2 رسم میکنیم، در تابع init، دو دستور برای پاک کردن خط 1 و 2 مینویسیم.چرا؟
به این دلیل که اگر خطی به اسم 1 و 2 در حال حاضر و جود داره، اونها پاک بشن تا موقع رسم خطوط با مشکل مشابه بودن اسم object مواجه نشیم.
2-تابع deinit: دستوراتی که موجع پاک کردن اندیکاتور میخوایم اجرا بشن رو در این تابع باید بنویسیم.فرض کنید موقع اجرای برنامه، ما تعداد زیادی object در نمودار رسم میکنیم.وقتی کاربر میخواد
اندیکاتور رو حذف کنه، اون خطوطی که ما رسم کردیم رو باید خودمون پاک کنیم.
نتیجه: وقتی میخوایم object با یک اسم مشخص رو رسم کنیم، ابتدا دستور حفط object با اسم مشابه رو در تابع init مینویسیم تا برای رسم شیء دچار مشکل نشیم و شیئی هم نام اون وجود
نداشته باشه. این دستور حذف object رو باید در تابع deinit هم بنویسیم تا موقع پاک کردن اندیکاتور، خط ما هم پاک بشه.در دستور حدفی که در تابع init مینویسیم برای مطمئن شدن از این
هست که در رسم شیء ها مشکلی پیش نمیاد.
3-تابع start: این تابع در حقیقت بدنه اصلی برنامه هست.تمام محاسبات ما در این تابع نوشته میشه.
دقت کنید که توابع init و deinit فقط موقع اجرا و حذف اندیکاتور و فقط 1 بار اجرا میشوند ولی دستورات تابع start در شرایط مختلف مدام اجرا میشوند.
مثلا وقتی دیتا به روز میشه یا وقتی متاتریدر رو باز میکنیم و اندیکاتور روی چارت هست دستورات start یک بار اجرا میشوند و با بروز شدن دیتا، دستورات start دوباره اجرا میشوند و ...
نکته مهم: دستوراتی که برای حذف object ها در بالا بهش اشاره کردم فقط مربوط به object ها هستند و خطوطی که جزء برنامه هستند و موقع ایجاد یک برنامه جدید، ایجاد میشوند(در پست های بعدی در این مورد بیشتر توضیح خواهم داد.) جزء خود برنامه هستند و احتیاجی به حذف ندارن و خودشون موقع پاک کردن اندیکاتور پاک می شوند.
موفق باشید.
ادامه دارد....
نظر