در این درس به آموزش متغیرهای جهانی (سراسری) خواهیم پرداخت. جهت شناخت کاربردی این متغیرها اکسپرت جدید ساخته و به معرفی بیشتر میپردازیم.
آنچه در این درس به آن پرداخته میشود متغیرهای خارج از متغیرهای ثابت اکسپرت نمیباشد بلکه متغیرهای دیگری است به عنوان مثال وارد متاتریدر شوید و از سربرگ tools گزینه global variables را انتخاب کنید.
آنچه که بناست در این جلسه به آن بپردازیم مربوط به متغیرهای این قسمت میباشد. که متاتریدر اسم آن را متغیرهای جهانی نام گذاری کرده است.
وارد متاتریدر شوید اولین تابعی که در این درس با آن آشنا میشوید؛ تابع GlobalVariableSet (عملکرد آن: تعریف متغیرهای جهانی) میباشد. آن را در تابع OnInt بنویسید. درون رشته اسم متغیر را بیاورید. مقدار value را قید کنید دقت نمایید باید از مقدار از نوع دابل باشد. Compile را کلیک کنید.
- وارد متاتریدر شوید.
نام کلاس را به درون چارت درگ کنید. سپس از سربرگ tools گزینه global variables را انتخاب نمایید.
متغیر ساخته شده است.
تفاوت این متغیر با دیگر متغیرها در این است که:
- متغیر در متاتریدر میباشد و ربطی به هیچ چارتی ندارد.
به همین دلیل بهترین چیزی است برای ارتباط بین اکسپرت هایی که در یک متاتریدر هستند یا حتی اندیکاتورها. بنابراین این متغیر هم میتواند به اکسپرت دسترسی داشته باشد هم اندیکاتور و هم اسکریپت. پس میتواند یک فایل ارتباطی باشد بین برنامه های این متاتریدر باز هستند.
نکته حائز اهمیت دیگر تاریخی است که در کادر نمایش میشود. این متغیر از تاریخی که نوشته شده تا 4 هفته ماندگاری دارد. به عبارت دیگر شما این متاتریدر را ببندید متغیر در هارد شما ذخیره میشود و تا 4 هفته بعد از آخرین استفاده باقی خواهد ماند. چرا که شما هر زمانی که از این متغیر استفاده کنید چه بخواهید مقدار آن را بخوانید و چه بخواهید مقدار آن را تغییر بدهید، تاریخ قید شده تغییر خواهد کرد. بنابراین از تاریخ نوشته شده تا 4 هفته می-توانید به متغیر دسترسی داشته باشید.
در سایت MQL چهار هفته بعد از آخرین استفاده نوشته شده اما در حقیقت اگر شما بخواهید از این متغیر فقط اسم یا تاریخ آن را بگیرید، در واقع یعنی از آن استفاده کرده اید این را متاتریدر حساب نمیکند.
بنابراین اگر متغیر را تغییر دهید یا مقدار آن را به وسیله هر اندیکاتور یا اکسپرتی بگیرید یا اسم آن را تغییر دهید، تاریخ تغییر خواهد کرد. اما تا 4 هفته ذخیره میماند.
همچنین اگر بر نام متغیر دابل کلیک کنید میتوانید نام آن را تغییر دهید.
دقت نمایید بعد از تایید نام تاریخ نیز تغییر خواهد کرد.
دقت نمایید از تاریخ جدید به بعد 4 هفته محاسبه خواهد شد. همچنین اگر مقدار را تغییر بدهید تاریخ هم تغییر خواهد کرد.
میتوانید با استفاده از دکمه Add یک متغیر جدید با هر اسم و مقداری بسازید.
تابع بعدی که مرتبط با متغیرهاست GlobalVariableGet میباشد. عملکرد آن به این صورت است که مقدار متغیر را به برمیگرداند. به عنوان مثال :
مشاهده میکنید برابر متغیر ، عدد به چاپ رسید.
مورد دیگری که میتوانید از این تابع بگیرید اسم این تابع یا تاریخ آن میباشد. همانگونه که سابقا اشاره شد این نوع متغیرها فقط دابل میگیرند.
بنابراین همانگونه که میتوانید مقدار بدهید میتوانید اسمی بدهید که بعدها بتوانید از آن استفاده کنید.
برای گرفتن تاریخ متغیر فعلی ، از GlobalVariableTime استفاده کنید. و داخل پرانتز روبه روی آن اسم متغیر را وارد نمایید. (به دلیل رشته بودن درون، دابل کوتیشن قرار دهید).
مشاهده میکنید که تاریخ چاپ شد. برای چاپ اسم باید از ایندکس استفاده کنید.
باز دیگر داخل پنجره بروید، متاسفانه چونکه تاریخ تغییر میکند تنها چیزی که شماره ایندکس متغیرها را تعریف میکند اسم آن هاست. مثلا اگر متغیر جدید بسازید و اسم آن را عدد بگذارید و مقداری نیز برای آن تعریف کنید خواهی دید ردیف اول قرار میگیرد یعنی ایتدکس آن صفر میباشد.
بنا برا آنچه گفته شد شماره ایندکس متغیر ردیف دوم ، 1 می باشد. در متاتریدر متغیر GlobalVariableName را قرار داده و شماره ایندکس را وارد کنید.
اسم متغیر چاپ شده است.
اینک به معرفی چند تابع جهانی می پردازیم. این نوع متغیر به مدت چهار هفته در متاتریدر ذخیره می گردند و از تمامی برنامه موجود در متاتریدر قابل دسترسی می باشند مقدار متغیر تنها می تواند از نوع double باشد.
تابع GlobalVariableCheck: مقدار خروجی آن bool می باشد اگر وجود داشته باشد مقدار 1 را می دهد و اگر وجود نداشته باشد مقدار صفر را برگشت خواهد داد. بسیار مهم است متغیری را قبل از اینکه از آن زمان یا مقدار بگیرید آن را چک کنید. زیرا اگر چک نشود زمانی که بخواهید مقدار آن را بگیرید و متغیر وجود نداشته باشد مقدار صفر را نشان خواهد داد و اگر متغیر را بگیرید در حالی که وجود نداشته باشد مقدار 1970 را نشان خواهد داد. این مقدارها ممکن است بر محاسبات شما خطا ایجاد کند. بنابراین چک کردن آن بسیار مهم است که اگر وجود داشت متغیر مقدار زمان یا مقدار value آن را بگیرید.
تابع GlobalVariableTime: زمان متغیر را به خروجی می دهد.
تابع GlobalVariableDel : جهت پاک کردن متغیر می باشد همانی که اسم آن را در ورودی قرار داده اید. خروجی GlobalVariableDel بولین می باشد که اگر پاک شود مقدار 1 را بر می گرداند و اگر به هر دلیلی پاک نشود مقدار 0 را نشان خواهد داد. یعنی ارور داده است. که با بررسی تابع ارور می توان دلیل ارور را بدانید.
تابع GlobalVariableGet : مقدار متغیر را به خروجی می دهد.
تابع GlobalVariableName: نام متغیر را به خروجی می دهد.
تابع GlobalVariableSet : یک متغیر جهانی می سازد و دارای دو ورودی است.
تابع GlobalVariableFlush: مقدارهای ساخته شده را در هارد ذخیره می کند بدین معنا که؛ وقتی یک متغیر جهانی را می سازید زمانی در هارد ذخیره می شود که متاتریدر را ببندید. اگر قبل از اینکه متاتریدر بسته شود اتفاقی برای کامپیوتر بیافتد و ری استارت شود و خروجی اضطراری برای متاتریدر ایجاد شود. متغیرها ذخیره نمی شوند پس بهتر است زمانی که این متغیر را می سازید بعد از اینکه ساخت تمام شود متغیر را به طور دستی ذخیره کنید بدون اینکه از متاتریدر خارج شوید که این تابع به ذخیره سازی برنامه بر روی هارد کمک می کند. تا در صورت بروز ری استارت، برنامه بر روی هارد ذخیره شده باشد.
تابع GlobalVariableTemp : متغیر موقت جهانی می سازد. شبیه متغیر جهانی است اما فرق آن این است که در هارد ذخیره نمی شود. زمانی که متاتریدر بسته شود این متغیر نیز از بین خواهد رفت. تفاوت GlobalVariableTemp با GlobalVariableSet در این است که متاتریدر بسته شود تغییرات ذخیره می شود و وقتی که متاتریدر را مجددا باز می کنید، وجود خواهد داشت در حالی که GlobalVariableTemp بعد از اینکه متاتریدر بسته شود از بین خواهد رفت.
تابع GlobalVariableSetOnCondition: این تابع یک مقدار را با یک شرط به متغیر جهانی می دهد .
تابع GlobalVariableDeleteAll : تمامی متغیر های جهانی را پاک می کند.
تابع GlobalVariablesTotal: تعداد تمامی متغیرهای خروجی را بر می گرداند. بستگی به نوع سیستم می توانید از آن استفاده کنید.
مجددا به اکسپرت رفته و تابع ها GlobalVariableSetOnCondition را بررسی می کنیم.
بعد از نوشتن نام تابع در پرانتز ورودی اول، نام متغیر می باشد سپس مقدار value که می خواهید تغییر بدهید ورودی آخر مقدار value قبلی است. یعنی اگر مقدار value قبلی فلان عدد بود، به مقدار جدید تغییر دهد.
بنابراین کد بالا می گوید اگر متغیر با نام 1555 مقدار value آن صفر بود به عدد 5 تغییر دهد.
وارد چارت شوید.
در جعبه GlobalVariable عدد 2 تغییر نکرده است زیرا مقدار آن صفر نبوده است. مجددا وارد کدها می شویم.
عدد صفر را به 2 تغییر دهید.
مشاهده می کنید مقدار تغییر کرد.
با کلیک بر دکمه add متغیر های دیگری بسازید.
در حال حاضر سه متغیر دارید که با عدد 1 شروع شده اند.
چنانچه تابع GlobalVariableDeleteAll را وارد کنید بدون اینکه ورودی به آن بدهید و compile را کلیک کنید. زمانی که تابع فراخوانی شود تمام متغیرها پاک می شوند.
متغیری وجود ندارد.
مجددا متغیر بسازید و سه متغیر بسازید که نام آن ها با 1 شروع شود.
اگر بخواهید متغیرهایی را پاک کنید که فقط با 1 شروع می شوند کافیست در قسمت کدنویسی دوتا دابل کوتیشن و عدد 1 را قرار دهید.
تمام متغیرهای با نام 1 حذف شده اند.
همچنین می توانید با قرار دادن کاما ، کنار نام تاریخ را نیز قرار دهید. در نتیجه متغیرهای پاک خواهند شد که قبل از این تاریخ ساخته شده اند. در اکسپرت تست کنید.
تابع GlobalVariableSet را وارد کنید. یک متغیر با اسم دلخواه بنویسید.
تابع GlobalVariableTemp بسازید.
دقت نمایید که به آن نمی توان مقدار بدهید . اگر بخواهید مقداری بدهید باید از تابع GlobalVariableSetOnCondition استفاده کنید. کامپایل را کلیک کنید.
مقدار ساخته شده است.
اکسپرت را ببندید و مجددا باز کنید.
مشاهده می کنید که تم آخری که ایجاد کرده بودید از بین رفت.
پاسخها