کدنویسی و ساخت اندیکاتورهای خطی
درس نهم
مجموعه ای از خواص وجود دارد که باید در سربرگ (Header) کدها قرار بگیرند به عنوان مثال:
مقدارهای ثابت (شناسه) property#
در ادامه با آرگمان های بیشتری آشنا شوید.
بافر (buffers):
راهی است که یک سر آن به آرایه می خورد و سر دیگر آن به متاتریدر می رسد. در حقیقت هر خطی که در متاتریدر در چارت به وجود می آورید به یک آرایه نیاز دارد که مقدارهای آن خط را در آرایه قرار دهید. بافر آرایه را به متاتریدر وصل می کند.
به عنوان مثال:
از شناسه indicator_separate_window
استفاده شده است. که minimum مقدار صفر
و maximum مقدار 100 می باشد. چونکه دوخط
نمایش دشه بنابراین از 2 بافر استفاده شده است
برای خط کشیدن باید از تابع SetIndexStyle استفاده کنید. این تابع هیچ خروجی ندارد. چهار ورودی می گیرد به عنوان مثال :
; (اندازه خط ,نوع خط, DRAW_LINE,شماره بافر)SetIndexStyle
❓مسئله شماره 13:
اندیکاتوری بنویسید که در چارت یک خط 10 پوینت بالاتر از high کندل قبلی و یک خط 10 پوینت پایین تر از low کندل قبلی رسم کند.
در پاسخ فایل جدید از نوع Custom Indicator بسازید و نام گذاری کنید. سایر مراحل را بدون تغییر به پایان برسانید.
سپس دستورهای property را وارد کنید.
توجه کنید تمام property ها ابتدای آن ها هشتگ (#) قرار می گیرد. همه آن ها با حروف کوچک نوشته می شوند.
indicator_chart_window:
به صورت پیش فرض تعریف شده است. عملکرد آن نمایش اندیکاتور در چارت اصلی می باشد.
indicator_buffers :
در این اندیکاتور هر تعداد خط مدنظر دارید را وارد نمایید.
بعد از آن آرایه ها را تعریف کنید. تا مقدارها را در این دو آرایه قرار دهید. نام آن را به دلخواه انتخاب کنید. به عنوان مثال:
سپس در تابع OnInt دو بافر که بالا نوشتید را وصل کنید به اندیکاتور ، به تصویر زیر دقت نمایید.
دقت کنید که ایندکس از حروف بزرگ و کوچک تشکیل شده است. (SetIndexStyle)
چنانچه در تصویر بالا مشاهده می کنید دستور اول برای خط شماره یک ، شماره اندیکس آن صفر می باشد یعنی اولین خط را از صفر درنظر می گیرد و دومین خط شماره یک می باشد ، این نکته همانند تابع ordertotal است.
در انتهای دستور استایل خط ها می توان رنگ را نیز تعریف کرد، اما به دلیل انتخاب رنگ در property لزومی به تکرار این عمل نیست. در پایان compile را کلیک و نباید اخطاری نمایش شود.
محاسبات داخل اندیکاتور را باید در int oncalculate انجام دهید.
total عملکرد این متغیر بدین گونه است که مقدار بارهای کندل را نمایش می دهد. این متغیر با آرایه bar تفاوتی ندارد.
Const int orev_calculated مقدار آن صفر می باشد. از آن جایی که اندیکاتور بارها را می خواند و جلو می آید به مراتب به مقدار اضافه می شود. تا به بار بالا برسد. به عنوان مثال؛ اگر 100 بار (کندل) داشته باشید یا به تعبیری مقدار Const int rates_total عدد 100 باشد و مقدار Const int orev_calculated عدد صفر باشد ، زمانی که اندیکاتور را در چارت بگذارید Const int rates_total سریعا مقدار 0 تا 100 را می شمارد.
دستور نوشته شده در دستور ابتدا متغیر ساخته و مقدارها در متغیر قرار داده شد. سپس بارها (مثلا 100) منهای صفر(0-) و منهای یک(1-) شدند. به عبارتی 100 منهای 1 عدد 99 شد. چرا که بارها(کندل) از صفر شروع می شوند.
بنابراین عدد 99 حاصل شده را در حلقه for بگذارید تا یک به یک کم شده تا زمانی که بار به صفر برسد.
مرحله بعد خط ها را مقداردهی کنید.
Compile را کلیک و نباید اخطاری نمایش دهد.
نام کلاس را درون چارت درگ کنید در کادر نمایش شده رنگ ها را مشاهده کنید.
خط به وضوح قابل رؤیت هستند. که فاصله کوچکی با کندل دارند.
چنانچه بخواهید خطوط ضخامت بیشتری داشته باشند کافی است در کدنویسی در قسمت استایل ها عدد1 را به 2 تبدیل کنید. (ملاحظه: اگر خط انتخابی شما به صورت نقطه چین باشد با ضحامت دادن آن، نقطه چین از بین می رود).
حال اگر بخواهید فاصله را بیشتر کنید مقدار point10 را افزایش دهید.
در گذشته در ورژن های قدیمی شیوه محاسبات به بوده لذا چنانچه در جایی نوع دستور نویسی زیر را مشاهده نمودید بدانید به سبک قدیمی دستورات تعریف شده اند.
تفاوتی در شیوه اجرا برنامه وجود ندارد. اما این گونه کدنویسی دیگر منسوخ شده اند.
منبع : کتاب آموزش زبان MQL (دوره مقدماتی)
مدرس : استاد حسین احمدی
پاسخها
سلام وقت بخیر
شما این برنامه ها را از کجا یاد گرفتین؟ یعنی منبع یادگیریتون چیه؟
سلام ،این نتیجه سال ها برنامه نویسه هست ،منبع من ربفرنس ام کیو ال بود، همون f1 که زمانی که دارید کد میزنید باز میشه