متغیرهای جهانی – درس سوم – کتاب آموزش mql (دوره پیشرفته)

دوره-پیشرفته--1-کتاب-آموزش-mql

در این درس به آموزش متغیرهای جهانی (سراسری) خواهیم پرداخت. جهت شناخت کاربردی این متغیرها اکسپرت جدید ساخته و به معرفی بیشتر می­پردازیم.

درس-سوم--متغیرهای-جهانی

 

متغیرهای-جهانی-2

 

متغیرهای جهانی - نکته

آنچه در این درس به آن پرداخته می­شود متغیرهای خارج از متغیرهای ثابت اکسپرت نمی­باشد بلکه متغیرهای دیگری است به عنوان مثال وارد متاتریدر شوید و از سربرگ tools گزینه global variables را انتخاب کنید.

متغیرهای-جهانی---3

آنچه که بناست در این جلسه به آن بپردازیم مربوط به متغیرهای این قسمت می­باشد. که متاتریدر اسم آن را متغیرهای جهانی نام گذاری کرده است.

وارد متاتریدر شوید اولین تابعی که در این درس با آن آشنا می­شوید؛ تابع GlobalVariableSet (عملکرد آن: تعریف متغیرهای جهانی) می­باشد. آن را در تابع OnInt بنویسید. درون رشته اسم متغیر را بیاورید. مقدار value را قید کنید دقت نمایید باید از مقدار از نوع دابل باشد. Compile را کلیک کنید.

  • وارد متاتریدر شوید.

متغیرهای-جهانی---4

 

متغیرهای-جهانی---5

نام کلاس را به درون چارت درگ کنید. سپس از سربرگ tools گزینه global variables را انتخاب نمایید.

متغیرهای-جهانی--6

 

متغیرهای-جهانی--7

متغیر ساخته شده است.

تفاوت این متغیر با دیگر متغیرها در این است که:

  • متغیر در متاتریدر می­باشد و ربطی به هیچ چارتی ندارد.

به همین دلیل بهترین چیزی است برای ارتباط بین اکسپرت هایی که در یک متاتریدر هستند یا حتی اندیکاتورها. بنابراین این متغیر هم می­تواند به اکسپرت دسترسی داشته باشد هم اندیکاتور و هم اسکریپت. پس می­تواند یک فایل ارتباطی باشد بین برنامه های این متاتریدر باز هستند.

نکته حائز اهمیت دیگر تاریخی است که در کادر نمایش می­شود. این متغیر از تاریخی که نوشته شده تا 4 هفته ماندگاری دارد. به عبارت دیگر شما این متاتریدر را ببندید متغیر در هارد شما ذخیره می­شود و تا 4 هفته بعد از آخرین استفاده باقی خواهد ماند. چرا که شما هر زمانی که از این متغیر استفاده کنید چه بخواهید مقدار آن را بخوانید و چه بخواهید مقدار آن را تغییر بدهید، تاریخ قید شده تغییر خواهد کرد. بنابراین از تاریخ نوشته شده تا 4 هفته می-توانید به متغیر دسترسی داشته باشید.

در سایت MQL چهار هفته بعد از آخرین استفاده نوشته شده اما در حقیقت اگر شما بخواهید از این متغیر فقط اسم یا تاریخ آن را بگیرید، در واقع یعنی از آن استفاده کرده اید این را متاتریدر حساب نمی­کند.

بنابراین اگر متغیر را تغییر دهید یا مقدار آن را به وسیله هر اندیکاتور یا اکسپرتی بگیرید یا اسم آن را تغییر دهید، تاریخ تغییر خواهد کرد. اما تا 4 هفته ذخیره می­ماند.

همچنین اگر بر نام متغیر دابل کلیک کنید می­توانید نام آن را تغییر دهید.

متغیرهای-جهانی--8

دقت نمایید بعد از تایید نام تاریخ نیز تغییر خواهد کرد.

متغیرهای-جهانی--9

دقت نمایید از تاریخ جدید به بعد 4 هفته محاسبه خواهد شد. همچنین اگر مقدار را تغییر بدهید تاریخ هم تغییر خواهد کرد.

متغیرهای-جهانی--10

می­توانید با استفاده از دکمه Add یک متغیر جدید با هر اسم و مقداری بسازید.

متغیرهای-جهانی--11

متغیرهای جهانی -نکته 2

تابع بعدی که مرتبط با متغیرهاست GlobalVariableGet می­باشد. عملکرد آن به این صورت است که مقدار متغیر را به برمی­گرداند. به عنوان مثال :

متغیرهای-جهانی--12

متغیرهای-جهانی--14

مشاهده می­کنید برابر متغیر ، عدد به چاپ رسید.

مورد دیگری که می­توانید از این تابع بگیرید اسم این تابع یا تاریخ آن می­باشد. همانگونه که سابقا اشاره شد این نوع متغیرها فقط دابل می­گیرند.

بنابراین همانگونه که می­توانید مقدار بدهید می­توانید اسمی بدهید که بعدها بتوانید از آن استفاده کنید.

برای گرفتن تاریخ متغیر فعلی ، از GlobalVariableTime استفاده کنید. و داخل پرانتز روبه روی آن اسم متغیر را وارد نمایید. (به دلیل رشته بودن درون، دابل کوتیشن قرار دهید).

متغیرهای-جهانی--15

متغیرهای-جهانی--16

مشاهده می­کنید که تاریخ چاپ شد. برای چاپ اسم باید از ایندکس استفاده کنید.

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

متغیرهای جهانی -نکته 3

بنا برا آنچه گفته شد شماره ایندکس متغیر ردیف دوم ، 1 می باشد. در متاتریدر متغیر GlobalVariableName را قرار داده و شماره ایندکس را وارد کنید.

متغیرهای-جهانی--18

متغیرهای-جهانی--19

اسم متغیر چاپ شده است.

اینک به معرفی چند تابع جهانی می پردازیم. این نوع متغیر به مدت چهار هفته در متاتریدر ذخیره می گردند و از تمامی برنامه موجود در متاتریدر قابل دسترسی می باشند مقدار متغیر تنها می تواند از نوع double باشد.

متغیرهای جهانی -1چدول

 

تابع GlobalVariableCheck: مقدار خروجی آن bool می باشد اگر وجود داشته باشد مقدار 1 را می دهد و اگر وجود نداشته باشد مقدار صفر را برگشت خواهد داد. بسیار مهم است متغیری را قبل از اینکه از آن زمان یا مقدار بگیرید آن را چک کنید. زیرا اگر چک نشود زمانی که بخواهید مقدار آن را بگیرید و متغیر وجود نداشته باشد مقدار صفر را نشان خواهد داد و اگر متغیر را بگیرید در حالی که وجود نداشته باشد مقدار 1970 را نشان خواهد داد. این مقدارها ممکن است بر محاسبات شما خطا ایجاد کند. بنابراین چک کردن آن بسیار مهم است که اگر وجود داشت متغیر مقدار زمان یا مقدار value آن را بگیرید.

تابع GlobalVariableTime: زمان متغیر را به خروجی می دهد.

تابع GlobalVariableDel : جهت پاک کردن متغیر می باشد همانی که اسم آن را در ورودی قرار داده اید. خروجی GlobalVariableDel بولین می باشد که اگر پاک شود مقدار 1 را بر می گرداند و اگر به هر دلیلی پاک نشود مقدار 0 را نشان خواهد داد. یعنی ارور داده است. که با بررسی تابع ارور می توان دلیل ارور را بدانید.

تابع GlobalVariableGet : مقدار متغیر را به خروجی می دهد.

تابع GlobalVariableName: نام متغیر را به خروجی می دهد.

تابع GlobalVariableSet : یک متغیر جهانی می سازد و دارای دو ورودی است.

متغیرهای جهانی - نکته 4

تابع GlobalVariableFlush: مقدارهای ساخته شده را در هارد ذخیره می کند بدین معنا که؛ وقتی یک متغیر جهانی را می سازید زمانی در هارد ذخیره می شود که متاتریدر را ببندید. اگر قبل از اینکه متاتریدر بسته شود اتفاقی برای کامپیوتر بیافتد و ری استارت شود و خروجی اضطراری برای متاتریدر ایجاد شود. متغیرها ذخیره نمی شوند پس بهتر است زمانی که این متغیر را می سازید بعد از اینکه ساخت تمام شود متغیر را به طور دستی ذخیره کنید بدون اینکه از متاتریدر خارج شوید که این تابع به ذخیره سازی برنامه بر روی هارد کمک می کند. تا در صورت بروز ری استارت، برنامه بر روی هارد ذخیره شده باشد.

تابع GlobalVariableTemp : متغیر موقت جهانی می سازد. شبیه متغیر جهانی است اما فرق آن این است که در هارد ذخیره نمی شود. زمانی که متاتریدر بسته شود این متغیر نیز از بین خواهد رفت. تفاوت GlobalVariableTemp با GlobalVariableSet در این است که متاتریدر بسته شود تغییرات ذخیره می شود و وقتی که متاتریدر را مجددا باز می کنید، وجود خواهد داشت در حالی که GlobalVariableTemp بعد از اینکه متاتریدر بسته شود از بین خواهد رفت.

تابع GlobalVariableSetOnCondition: این تابع یک مقدار را با یک شرط به متغیر جهانی می دهد .

تابع GlobalVariableDeleteAll : تمامی متغیر های جهانی را پاک می کند.

تابع GlobalVariablesTotal:  تعداد تمامی متغیرهای خروجی را بر می گرداند. بستگی به نوع سیستم می توانید از آن استفاده کنید.

مجددا به اکسپرت رفته و تابع ها GlobalVariableSetOnCondition را بررسی می کنیم.

متغیرهای-جهانی---20

بعد از نوشتن نام تابع در پرانتز ورودی اول، نام متغیر می باشد سپس مقدار value که می خواهید تغییر بدهید ورودی آخر مقدار value قبلی است. یعنی اگر مقدار value قبلی فلان عدد بود، به مقدار جدید تغییر دهد.

بنابراین کد بالا می گوید اگر متغیر با نام 1555 مقدار value آن صفر بود به عدد 5 تغییر دهد.

وارد چارت شوید.

متغیرهای-جهانی---21

در جعبه GlobalVariable عدد 2 تغییر نکرده است زیرا مقدار آن صفر نبوده است. مجددا وارد کدها می شویم.

متغیرهای-جهانی---22

عدد صفر را به 2 تغییر دهید.

متغیرهای-جهانی---23

مشاهده می کنید مقدار تغییر کرد.

با کلیک بر دکمه add متغیر های دیگری بسازید.

متغیرهای-جهانی---24

در حال حاضر سه متغیر دارید که با عدد 1 شروع شده اند.

متغیرهای-جهانی---25

چنانچه تابع GlobalVariableDeleteAll را وارد کنید بدون اینکه ورودی به آن بدهید و compile را کلیک کنید. زمانی که تابع فراخوانی شود تمام متغیرها پاک می شوند.

متغیرهای-جهانی---26

متغیری وجود ندارد.

مجددا متغیر بسازید و سه متغیر بسازید که نام آن ها  با 1 شروع شود.

متغیرهای-جهانی---27

اگر بخواهید متغیرهایی را پاک کنید که فقط با 1 شروع می شوند کافیست در قسمت کدنویسی دوتا دابل کوتیشن و عدد 1 را قرار دهید.

متغیرهای-جهانی---28

متغیرهای-جهانی---29

تمام متغیرهای با نام 1 حذف شده اند.

متغیرهای-جهانی---نکته-5

همچنین می توانید با قرار دادن کاما ، کنار نام تاریخ را نیز قرار دهید. در نتیجه متغیرهای پاک خواهند شد که قبل از این تاریخ  ساخته شده اند. در اکسپرت تست کنید.

تابع GlobalVariableSet را وارد کنید. یک متغیر با اسم دلخواه بنویسید.

متغیرهای-جهانی---30

متغیرهای-جهانی---31

تابع GlobalVariableTemp بسازید.

متغیرهای-جهانی---32

دقت نمایید که به آن نمی توان مقدار بدهید . اگر بخواهید مقداری بدهید باید از تابع GlobalVariableSetOnCondition استفاده کنید. کامپایل را کلیک کنید.

مقدار ساخته شده است.

اکسپرت را ببندید و مجددا باز کنید.

مشاهده می کنید که تم آخری که ایجاد کرده بودید از بین رفت.

 

سایر مقالات مرتبط

دیدگاه‌ خود را بنویسید

عناوین این پست
اسکرول به بالا