ایجاد شاخص های سفارشی

  • 2022-05-29

هنگام ایجاد یک استراتژی معاملاتی ، یک توسعه دهنده اغلب با ضرورت ترسیم گرافیکی در یک پنجره امنیتی ، وابستگی خاصی که توسط یک کاربر (برنامه نویس) محاسبه می شود ، روبرو است. برای این منظور MQL4 امکان ایجاد شاخص های سفارشی را ارائه می دهد.

نشانگر سفارشی یک برنامه کاربردی است که در MQL4 کدگذاری شده است. این اساساً برای نمایش گرافیکی وابستگی های محاسبه شده اولیه در نظر گرفته شده است.

ساختار نشانگر سفارشی

ضرورت بافر

اصل اصلی شاخص های سفارشی انتقال مقادیر آرایه های نشانگر به یک ترمینال مشتری (برای خطوط نشانگر ترسیم) از طریق بافر مبادله است.

بافر یک منطقه حافظه است که حاوی مقادیر عددی یک آرایه شاخص است.

MQL4 Standard به دلالت بر امکان ترسیم هشت خط نشانگر با استفاده از یک نشانگر سفارشی است. یک آرایه شاخص و یک بافر با هر خط نشانگر در مکاتبات قرار می گیرند. هر بافر شاخص خاص خود را دارد. شاخص بافر اول 0 است ، از دوم - 1 و غیره ، آخرین مورد دارای شاخص 7. شکل 115 نشان می دهد که چگونه اطلاعات از یک نشانگر سفارشی از طریق بافر به یک ترمینال مشتری برای نشانگر ترسیم منتقل می شود. خطوط

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

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

1. محاسبات در یک نشانگر سفارشی انجام می شود. در نتیجه مقادیر عددی به عناصر آرایه شاخص اختصاص می یابد.

2. مقادیر عناصر آرایه شاخص از طریق بافر به ترمینال مشتری ارسال می شوند.

3. در پایه های آرایه های ارزش دریافت شده از بافر ، یک ترمینال مشتری خطوط نشانگر را نمایش می دهد.

مؤلفه های یک نشانگر سفارشی

بیایید یک نشانگر سفارشی ساده را که دو خط را نشان می دهد ، تجزیه و تحلیل کنیم - یک خط بر اساس قیمت نوار حداکثر ساخته می شود ، دوم از حداقل قیمت ها استفاده می کند.

نمونه ای از یک نشانگر سفارشی ساده userindicator. mq4

بیایید قطعات نشانگر را به تفصیل تجزیه و تحلیل کنیم. در هر برنامه کاربردی که در MQL4 نوشته شده است می توانید پارامترهای تنظیم را نشان دهید که سرویس دهی صحیح را توسط یک ترمینال مشتری ارائه می دهد. در این مثال قسمت برنامه سر (به ساختار برنامه مراجعه کنید) شامل چندین خط با دستورالعمل #property است.

اولین بخشنامه در کدام پنجره نشان می دهد که ترمینال مشتری باید خطوط نشانگر را ترسیم کند:

در MQL4 دو نوع خطوط نشانگر نقاشی وجود دارد: در پنجره امنیتی اصلی و در یک پنجره جداگانه. پنجره اصلی پنجره حاوی نمودار امنیتی است. در این مثال پارامتر Indicator_Chart_Window در #Property Directory نشان می دهد که یک ترمینال مشتری باید خطوط نشانگر را در پنجره اصلی ترسیم کند.

خط بعدی تعداد بافرهای مورد استفاده در نشانگر را نشان می دهد:

در مثال تجزیه و تحلیل دو خط نشانگر ترسیم شده است. یک بافر به هر بافر اختصاص داده می شود ، بنابراین تعداد کل بافر دو است.

خطوط بعدی رنگهای خطوط نشانگر را توصیف می کنند.

Parameters Indicator_Color1 و Indicator_Color2 تنظیم رنگ را برای بافرهای مربوطه تعریف می کنند - در این مورد برای بافر با شاخص های 0 (آبی) و 1 (قرمز). توجه داشته باشید که ارقام موجود در نام پارامترها indentor_color1 و Indicator_color2 شاخص های بافر نیستند. این ارقام بخش هایی از نامهای ثابت هستند که مطابق با بافر تنظیم شده اند. برای هر رنگ ثابت می تواند به صلاحدید کاربر تنظیم شود.

در خط بعدی آرایه ها اعلام شده است:

این شاخص برای ترسیم دو خط شاخص در نظر گرفته شده است ، بنابراین ما باید دو آرایه جهانی یک بعدی را اعلام کنیم ، یکی برای هر خط. نام آرایه های شاخص به کاربر است. در این حالت نام های آرایه BUF_0 [] و BUF_1 [] استفاده می شود ، در موارد دیگر می توان از نامهای دیگر استفاده کرد ، به عنوان مثال ، Line_1 [] ، Alfa [] ، انتگرال [] و غیره. لازم است آرایه ها را در سطح جهانی اعلام کنید، از آنجا که مقادیر عناصر آرایه باید بین تماس های عملکرد ویژه شروع شود ().

نشانگر سفارشی شرح داده شده بر اساس دو کارکرد خا ص-it () و شروع () ساخته شده است. عملکرد اولیه () شامل بخشی از کد مورد استفاده در برنامه فقط یک بار است (به توابع ویژه مراجعه کنید).

یک عمل بسیار مهم در خط انجام می شود:

با استفاده از تابع setIndexBuffer () یک بافر لازم (در این مورد با شاخص 0) با یک آرایه مکاتبات می شود (در این مورد buf_0). این بدان معنی است که برای ساخت اولین خط نشانگر ، یک ترمینال مشتری داده های موجود در آرایه BUF_0 را با استفاده از بافر صفر برای آن می پذیرد.

در ادامه سبک خط تعریف شده است:

برای بافر صفر (0) یک ترمینال مشتری باید از سبک های نقاشی زیر استفاده کند: خط ساده (draw_line) ، خط جامد (style_solid) ، عرض خط 2.

دو خط بعدی حاوی تنظیمات برای خط دوم است:

بنابراین، با توجه به کد تابع ویژه init() هر دو خط نشانگر در پنجره اصلی امنیتی رسم می شوند. خط اول یک خط آبی ثابت با عرض 2 خواهد بود، دومین خط نقطه چین قرمز (STYLE_DOT) با عرض معمولی است. خطوط نشانگر را می توان با سبک های دیگر نیز ترسیم کرد (به سبک های خطوط نشانگر مراجعه کنید).

محاسبه مقادیر عناصر آرایه های نشانگر (مراقب باشید)

مقادیر عناصر آرایه های نشانگر در تابع ویژه start() محاسبه می شوند. برای درک صحیح محتویات کد start() به ترتیب نوارهای نمایه سازی توجه کنید. بخش آرایه ها روش نمایه سازی آرایه-سری های زمانی را با جزئیات شرح می دهد. طبق این روش نمایه سازی نوار از صفر شروع می شود. نوار صفر یک نوار جاری و در عین حال شکل نگرفته است. شاخص نزدیکترین نوار 1 است. شاخص بعدی 2 و غیره است.

همانطور که نوارهای جدید در یک پنجره امنیتی ظاهر می شوند، فهرست نوارهای (تاریخچه) از قبل تشکیل شده تغییر می کند. نوار جدید (جاری، تازه تشکیل شده، سمت راست ترین) شاخص صفر را دریافت می کند، نوار سمت چپ او (که به تازگی کاملاً تشکیل شده است) شاخص 1 را دریافت می کند و مقادیر شاخص های تمام نوارهای تاریخچه نیز یک افزایش می یابد.

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

قبلاً گفته شد که خطوط نشانگر بر اساس اطلاعات عددی موجود در آرایه های نشانگر ساخته می شوند. یک آرایه نشانگر حاوی اطلاعات مختصات نقاطی است که بر روی آنها یک خط نشانگر رسم شده است. و مختصات Y هر نقطه مقدار یک عنصر آرایه نشانگر است و مختصات X مقدار شاخص عنصر آرایه نشانگر است. در مثال مورد تجزیه و تحلیل، اولین خط نشانگر با استفاده از حداکثر مقادیر میله ها ترسیم شده است. شکل 116 این خط نشانگر (به رنگ آبی) را در یک پنجره امنیتی نشان می دهد که بر اساس آرایه نشانگر Buf_0 ساخته شده است.

مقدار شاخص آرایه شاخص Buf_0 مقدار عنصر آرایه شاخص Buf_0
0 1. 3123
1 1. 3124
2 1. 3121
3 1. 3121
4 1. 3123
5 1. 3125
6 1. 3127
. .

شکل 116. مطابقت مختصات یک خط نشانگر با مقادیر یک آرایه نشانگر.

مقدار شاخص یک آرایه شاخص توسط یک ترمینال مشتری در مکاتبات با یک شاخص نوار وجود دارد - این مقادیر شاخص برابر است. همچنین باید در نظر گرفت که روند ساخت خطوط نشانگر در حالت واقعی تحت شرایطی ادامه می یابد که در یک پنجره امنیتی هر از گاهی ظاهر می شود. و تمام میله های تاریخ به سمت چپ منتقل می شوند. برای اینکه خط نشانگر به درستی ترسیم شود (هر نقطه خط بالای نوار آن) نیز باید با میله ها منتقل شود. بنابراین نیاز (نیاز فنی) وجود دارد که مجدداً یک آرایه شاخص را نشان دهد.

تفاوت اساسی یک آرایه شاخص از یک آرایه معمول موارد زیر است:

در لحظه ای که یک نوار جدید ایجاد می شود ، مقادیر شاخص عناصر آرایه نشانگر به طور خودکار توسط ترمینال مشتری تغییر می یابد ، یعنی - مقدار هر شاخص آرایه شاخص توسط یک افزایش می یابد و اندازه آرایه نشانگر توسط یک عنصر افزایش می یابد (با صفرفهرست مطالب).

به عنوان مثال ، نوار صفر در شکل 116 (بازه زمانی H1) زمان افتتاح 6:00 را دارد. ساعت 7:00 یک نوار جدید در پنجره امنیتی ظاهر می شود. نوار باز شده در ساعت 6:00 به طور خودکار شاخص را دریافت می کند. برای اینکه خط نشانگر به درستی در این نوار ترسیم شود ، ترمینال مشتری شاخص عنصر آرایه شاخص را که مربوط به نوار باز شده در ساعت 6 است تغییر می دهد. در جدول در شکل 116 این عنصر در خط اول نوشته شده است. همراه با آن شاخص های همه عناصر آرایه توسط ترمینال مشتری توسط یک افزایش می یابد. شاخص عنصر آرایه مربوط به نوار باز شده در ساعت 6:00 مقدار 1 را دریافت می کند (قبل از آن برابر با 0). آرایه نشانگر توسط یک عنصر بزرگتر می شود. شاخص یک عنصر جدید اضافه شده برابر با 0 خواهد بود ، مقدار این عنصر یک مقدار جدید است که مختصات خط نشانگر را در یک نوار صفر منعکس می کند. این مقدار در عملکرد ویژه () در هر کنه محاسبه می شود.

محاسبات در تابع ویژه start() باید انجام شود تا هیچ اقدام اضافی انجام نشود. قبل از اینکه نشانگر به نمودار متصل شود، هیچ خط شاخصی را منعکس نمی کند (زیرا مقادیر آرایه های نشانگر هنوز تعریف نشده اند). به همین دلیل است که در اولین شروع تابع ویژه start() مقادیر آرایه نشانگر باید برای همه میله‌ها محاسبه شود که خط نشانگر روی آن‌ها رسم شود. در مثال مورد تجزیه و تحلیل، همه اینها میله‌هایی هستند که در نمودار وجود دارند (محاسبات اولیه را می‌توان نه برای همه میله‌های موجود، بلکه برای آخرین بخش تاریخ انجام داد؛ در مثال‌های بعدی توضیح داده شده است). در تمام شروع های بعدی تابع ویژه start() نیازی به محاسبه مجدد مقادیر آرایه نشانگر برای همه میله ها نیست. این مقادیر قبلاً محاسبه شده و در آرایه نشانگر موجود است. محاسبه مقدار فعلی خط نشانگر فقط در هر تیک جدید نوار صفر ضروری است.

برای پیاده سازی فناوری توصیف شده یک تابع استاندارد بسیار مفید در MQL4 - IndicatorCounted() وجود دارد.

تابع IndicatorCounted()

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

اگر اندیکاتور هرگز به نمودار متصل نشده باشد، در اولین اجرای start() مقدار Counted_bars برابر با صفر خواهد بود:

به این معنی که آرایه نشانگر حاوی هیچ عنصری با مقدار از پیش تعریف شده نیست، به همین دلیل است که کل آرایه نشانگر باید از ابتدا تا انتها محاسبه شود. آرایه نشانگر از قدیمی ترین نوار تا صفر یک محاسبه می شود. شاخص قدیمی ترین نوار، که محاسبات باید از آن شروع شود، به روش زیر محاسبه می شود:

فرض کنید در لحظه اتصال نشانگر 300 میله در یک پنجره نمودار وجود دارد. این مقدار متغیر از پیش تعریف شده Bars است. همانطور که قبلاً تعریف شد، Counted_bars برابر با 0 است. بنابراین، در نتیجه به دست می‌آوریم که شاخص i اولین نوار شمارش نشده (آخرین، که محاسبات را از آن شروع می‌کند) برابر با 299 است.

تمام مقادیر عناصر آرایه شاخص در حلقه while():

در حالی که i در محدوده از اولین نوار شمارش نشده (299) تا یک فعلی (0) است، مقادیر عناصر آرایه نشانگر برای هر دو خط نشانگر محاسبه می شود. توجه داشته باشید، مقادیر از دست رفته عناصر آرایه نشانگر در طول یک (اولین) شروع تابع ویژه start() محاسبه می شود. در طول محاسبات، پایانه مشتری عناصری را به خاطر می آورد که مقادیر برای آنها محاسبه شده است. آخرین تکرار در while() زمانی انجام می شود که i برابر با 0 باشد، یعنی مقادیر آرایه های شاخص برای نوار صفر محاسبه می شود. وقتی حلقه تمام شد، تابع ویژه start() اجرای خود را به پایان می رساند و کنترل به ترمینال مشتری منتقل می شود. ترمینال مشتری به نوبه خود تمام خطوط نشانگر (در این مورد دو) را مطابق با مقادیر محاسبه شده عناصر آرایه ترسیم می کند.

در تیک بعدی start() دوباره توسط ترمینال مشتری شروع می شود. اقدامات بعدی به موقعیت بستگی دارد (ما به تجزیه و تحلیل مثال برای 300 میله ادامه خواهیم داد).

نوع 1. یک تیک جدید در طول تشکیل نوار صفر فعلی (متداول ترین وضعیت) می آید.

شکل 117. تیک پردازش شده متعلق به نوار فعلی است.

شکل 117 دو تیک دریافت شده توسط ترمینال را در لحظه های زمان t 1 و t 2 نشان می دهد. وضعیت تحلیل شده برای هر دو تیک یکسان خواهد بود. بیایید اجرای start() را که در لحظه t 2 راه اندازی شد ردیابی کنیم. در حین اجرای تابع start() خط زیر اجرا می شود:

IndicatorCounted() مقدار 299 را برمی گرداند، یعنی از زمانی که آخرین فراخوانی start() 299 نوارهای قبلی تغییر نکرده است. در نتیجه مقدار شاخص i برابر با 0 (300-299-1) خواهد بود:

یعنی در حلقه () while بعدی مقادیر عناصر آرایه با شاخص صفر محاسبه خواهد شد. به عبارت دیگر، موقعیت جدید یک خط نشانگر روی نوار صفر محاسبه خواهد شد. هنگامی که چرخه به پایان رسید، start() اجرا را متوقف می کند و کنترل را به ترمینال مشتری منتقل می کند.

نوع 2. یک تیک جدید اولین تیک یک نوار صفر است (هر از گاهی اتفاق می افتد).

شکل 118. تیک پردازش شده اولین تیک یک نوار صفر جدید است.

در این مورد، ظاهر یک نوار جدید مهم است. قبل از اینکه کنترل به تابع ویژه start() منتقل شود، ترمینال مشتری دوباره تمام نوارهای موجود در پنجره امنیتی را ترسیم می کند و همه آرایه های نشانگر اعلام شده را مجدداً فهرست می کند (مطابق با بافرها تنظیم می شود). علاوه بر این، ترمینال مشتری به یاد می آورد که در یک پنجره نمودار در حال حاضر 301 میله وجود دارد، نه 300.

شکل 118 شامل وضعیتی است که در آخرین تیک نوار قبلی (در لحظه t 2) تابع start() با موفقیت شروع و اجرا شد. به همین دلیل است، اگرچه اکنون اولین نوار (با شاخص 1) که در لحظه t 2 به پایان رسید توسط نشانگر محاسبه شد، تابع IndicatorCounted() مقداری را که در نوار قبلی بود، یعنی 299 برمی گرداند:

در خط بعدی شاخص i محاسبه خواهد شد، در این حالت برای اولین تیک یک نوار جدید برابر با 1 (301-299-1) خواهد بود:

این بدان معناست که محاسبه مقادیر آرایه نشانگر در حلقه while() در ظاهر یک نوار جدید هم برای آخرین نوار و هم برای نوار صفر جدید انجام می شود. کمی زودتر در طول نمایه سازی مجدد آرایه های نشانگر، ترمینال مشتری اندازه این آرایه ها را افزایش داد. مقادیر عناصر آرایه با شاخص صفر قبل از محاسبات در حلقه تعریف نشده بودند. در طول محاسبات در حلقه، این عناصر مقادیری را دریافت می کنند. هنگامی که محاسبات در start() تمام شد، کنترل به ترمینال مشتری برگردانده می شود. پس از آن ترمینال مشتری خطوط نشانگر را بر اساس مقادیر فقط محاسبه شده عناصر آرایه با شاخص های صفر بر روی نوار صفر ترسیم می کند.

نوع 3. تیک جدید اولین تیک یک نوار صفر جدید است، اما تیک آخر اما یک پردازش نمی شود (مورد نادر).

شکل 119. همه تیک های نوار قبلی پردازش نشدند.

شکل 119 وضعیتی را نشان می دهد که start() در اولین تیک یک نوار جدید در لحظه t 5 راه اندازی شد. زمان قبلی این تابع در لحظه t 2 شروع شده بود. تیکی که در لحظه t 3 به ترمینال آمد (فلش قرمز) توسط نشانگر پردازش نشد. این به این دلیل اتفاق افتاد که زمان اجرای start() t 2 - t 4 بزرگتر از فاصله بین تیک های t 2 - t 3 است. این واقعیت توسط ترمینال مشتری در طول اجرای start() راه اندازی شده در لحظه t 5 شناسایی می شود. محاسبات در خط:

IndicatorCounted() مقدار 299 (!) را برمی گرداند. این مقدار درست است - از لحظه آخرین فراخوانی نشانگر، 299 نوار بعد از (اکنون) 301 تغییر نکرده است. برابر 1 (301-299-1) خواهد بود:

این بدان معناست که در حالی که () اجرای دو تکرار انجام می شود. در اولین مقادیر عناصر آرایه با شاخص I = 1 محاسبه می شود ، یعنی BUF_0 [1] و BUF_1 [1]. در حال حاضر ، با شروع محاسبات ، میله ها و آرایه های شاخص در حال حاضر توسط ترمینال مشتری مجدداً نشانگر می شوند (زیرا یک نوار جدید شروع شده است ، بین شروع عملکرد ویژه ()). به همین دلیل محاسبات برای عناصر آرایه ها با شاخص 1 بر اساس زمان های آرایه (حداکثر و حداقل مقادیر قیمت نوار) نیز با شاخص 1 محاسبه می شود:

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

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

نه ، اگر محاسبه مقادیر عنصر آرایه های شاخص حداقل برای یک آخرین کنه نوار انجام نشود ، یک نوار بی شمار در نظر گرفته می شود.

با شروع نشانگر سفارشی UserIndicator. MQ4 در یک پنجره نمودار ، دو خط را مشاهده خواهید کرد - یک خط آبی ضخیم که بر روی حداکثر نوار ساخته شده است و یک خط قرمز نقطه ای که بر روی حداقل آن ساخته شده است (شکل 120).

شکل 120. دو خط نشانگر در یک پنجره امنیتی ، ساخته شده توسط نشانگر userindicator. mq4.

لازم به ذکر است که فرد می تواند یک شاخص سفارشی ایجاد کند ، که خطوط نشانگر آن با خطوط یک شاخص فنی مشابه همزمان می شود. اگر به عنوان فرمول های محاسبه در نشانگر سفارشی ، از همان فرمول هایی که در نشانگر فنی استفاده می شود ، به راحتی انجام می شود. برای نشان دادن این ، بیایید کد برنامه مورد تجزیه و تحلیل را در مثال قبلی بهبود بخشیم. بگذارید شاخص خطوط را با مقادیر متوسط حداکثر و حداقل چندین میله آخر ترسیم کند. انجام محاسبات لازم آسان است: ما به سادگی باید مقادیر متوسط عناصر آرایه را پیدا کنیم. به عنوان مثال ، مقدار یک آرایه شاخص با شاخص 3 (یعنی مختصات خط نشانگر برای نوار سوم) بر اساس پنج حداکثر آخر به روش زیر محاسبه می شود:

BUF_0 [3] = (HIGH [3] + HIGH [4] + HIGH [5] + HIGH [6] + HIGH [7]) / 5

محاسبات مشابه را می توان برای خطوط نشانگر ساخته شده بر روی حداقل ها انجام داد.

نمونه ای از یک نشانگر سفارشی ساده averagevalue. mq4. خطوط نشانگر بر اساس مقادیر متوسط حداقل و حداکثر N میله ساخته شده اند.

در این مثال یک متغیر خارجی Aver_Bars وجود دارد. با استفاده از این متغیر، کاربر می تواند تعداد میله ها را نشان دهد که یک مقدار متوسط برای آنها محاسبه می شود. در start() این مقدار برای محاسبه یک مقدار متوسط استفاده می شود. در حلقه 'for' مجموع مقادیر حداکثر و حداقل برای تعداد میله های مربوط به مقدار متغیر Aver_Bars محاسبه می شود. در دو خط برنامه بعدی مقادیر عناصر آرایه نشانگر برای خطوط نشانگر مربوط به مقادیر حداقل و حداکثر محاسبه می شود.

روش میانگین گیری در اینجا برای محاسبات در شاخص فنی میانگین متحرک نیز اعمال می شود. اگر اندیکاتور سفارشی تحلیل شده averagevalue. mq4 و شاخص فنی Moving Average را ضمیمه کنیم، سه خط نشانگر را خواهیم دید. اگر دوره میانگین گیری یکسان برای هر دو نشانگر تنظیم شود، خط میانگین متحرک با یکی از خطوط نشانگر سفارشی منطبق خواهد شد (برای این منظور پارامترهای شرح داده شده در شکل 121 باید در تنظیمات نشانگر فنی مشخص شوند).

شکل 121. خطوط همزمان یک نشانگر فنی و یک نشانگر سفارشی (خط قرمز).

بنابراین، با استفاده از نشانگر فنی، کاربر می تواند انعکاس هر گونه قاعده مندی لازم در کار عملی را بسازد.

گزینه های شاخص سفارشی

ترسیم خطوط نشانگر در ویندوز مجزا

MQL4 یک سرویس بزرگ برای ساخت نشانگرهای سفارشی ارائه می دهد که استفاده از آنها را بسیار راحت می کند. به طور خاص، خطوط نشانگر را می توان در یک پنجره جداگانه ترسیم کرد. این زمانی راحت است که مقادیر مطلق دامنه خط نشانگر به طور قابل ملاحظه ای کوچکتر (یا بزرگتر) از قیمت های امنیتی باشد. به عنوان مثال، اگر ما به تفاوت بین مقادیر میانگین حداکثر و مینیمم میله در یک بازه تاریخی خاص علاقه مند باشیم، بسته به بازه زمانی، این مقدار تقریباً بین 0 تا 50 امتیاز خواهد بود (مثلاً برای M15). ایجاد یک خط نشانگر دشوار نیست، اما در یک پنجره امنیتی این خط در محدوده 0 تا 50 امتیاز قیمت امنیتی ترسیم می شود، یعنی به طور قابل توجهی کمتر از ناحیه نمودار منعکس شده بر روی صفحه نمایش. بسیار ناخوشایند است.

برای ترسیم خطوط نشانگر در یک پنجره جداگانه (که در قسمت پایین یک پنجره امنیتی است) باید در دستورالعمل #property (در ابتدای برنامه) پارامتر پارامتر indicator_separate_window مشخص شود:

در لحظه ای که چنین شاخصی به یک پنجره امنیتی وصل شده است ، ترمینال مشتری یک پنجره جداگانه در زیر نمودار ایجاد می کند ، که در آن خطوط نشانگر محاسبه شده در نشانگر ترسیم می شود. بسته به تنظیمات رنگ و انواع خطوط نشانگر ، آنها در این یا آن سبک ترسیم می شوند.

محدود کننده سابقه محاسبه

در بیشتر موارد ، خطوط شاخص حاوی اطلاعات مفیدی است که فقط در جدیدترین تاریخ وجود دارد. بخشی از خطوط نشانگر ساخته شده بر روی میله های قدیمی (به عنوان مثال ، بازه زمانی دقیقه 1 ماهه) به سختی نمی تواند برای تصمیم گیری در مورد تجارت مفید باشد. علاوه بر این ، اگر میله های زیادی در یک پنجره نمودار وجود داشته باشد ، زمان سرمایه گذاری در محاسبه و ترسیم خطوط نشانگر غیر منطقی است. این ممکن است در اشکال زدایی برنامه بسیار مهم باشد ، هنگامی که یک برنامه اغلب تدوین می شود و سپس شروع می شود. به همین دلیل است که انجام محاسبات نه برای کل تاریخ ، بلکه برای بخش محدودی از اخیر تاریخ بار لازم است.

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

محاسبات بیشتر در حلقه در حالی که () برای تعداد میله های تاریخ اخیر بزرگتر از ارزش تاریخ انجام می شود. توجه داشته باشید ، روش تجزیه و تحلیل محدود کردن تاریخچه محاسبه فقط بخشی از محاسبات را که در اولین شروع عملکرد ویژه () انجام می شود ، مربوط می شود. علاوه بر این ، هنگامی که میله های جدید ظاهر می شوند ، قسمت های جدیدی از خطوط نشانگر در قسمت سمت راست اضافه می شوند ، در حالی که تصویر در قسمت سمت چپ حفظ می شود. بنابراین طول خط نشانگر در کل زمان عملکرد نشانگر افزایش می یابد. ارزش مشترک پارامتر تاریخ تقریباً 5000 میله در نظر گرفته شده است.

نمونه ای از یک نشانگر سفارشی ساده جداگانه window. mq4. خطوط نشانگر در یک پنجره جداگانه ترسیم می شوند.

محاسبه مشابه یک خط شاخص در محدوده فنی Averagetrue انجام می شود. شکل 122 یک خط نشانگر ساخته شده توسط نشانگر سفارشی جداگانه window. mq4 را در یک پنجره جداگانه و یک خط نشانگر ساخته شده توسط ATR در یک پنجره دیگر نشان می دهد. در این حالت خطوط کاملاً یکسان هستند زیرا دوره میانگین برای هر دو شاخص یکسان است - 5. اگر این پارامتر در هر یک از شاخص ها تغییر یابد ، خط نشانگر مربوطه نیز تغییر خواهد کرد.

شکل 122. ترسیم یک خط نشانگر سفارشی در یک پنجره جداگانه. خطوط یکسان یک شاخص فنی (ATR) و یک نشانگر سفارشی (جداگانه window. mq4).

همچنین بدیهی است که خط نشانگر سفارشی نه برای کل عرض صفحه ، بلکه برای 50 میله جدید که در تاریخ متغیر خارجی مشخص شده است ، ساخته شده است. اگر یک معامله گر نیاز به استفاده از فاصله زمانی بزرگتر داشته باشد ، می توان مقدار متغیر خارجی را از طریق پنجره تنظیمات نشانگر سفارشی به راحتی تغییر داد.

شکل 123 یک پنجره امنیتی را نشان می دهد ، که در آن خط نشانگر ما به سبک دیگری - به عنوان یک هیستوگرام - کشیده شده است. برای به دست آوردن چنین نتیجه ، یک خط در کد برنامه جداگانه window. mq4 تغییر یافت - سایر سبک های خط نشان داده شده است:

تمام قطعات کد دیگر بدون تغییر است.

شکل 123. ترسیم خط نشانگر سفارشی در یک پنجره جداگانه (هیستوگرام). شباهت نقشه های یک نشانگر فنی (ATR) و یک نشانگر سفارشی (جداگانه window. mq4).

تغییر خطوط نشانگر به صورت عمودی و افقی

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

نمونه ای از جابجایی نشانگر سفارشی. mq4. تغییر خطوط نشانگر به صورت افقی و عمودی.

برای تنظیم خطوط در یک نمودار ، دو متغیر خارجی وجود دارد - Left_right برای تغییر افقی همه خطوط و up_down برای تغییر دو خط نقطه به صورت عمودی.

الگوریتم مورد استفاده برای محاسبه مقادیر عناصر آرایه مربوطه بر اساس قوانین بسیار ساده است:

  • برای تغییر یک خط به صورت افقی ، مقدار محاسبه شده را به یک عنصر آرایه اختصاص دهید ، که شاخص آن توسط Left_right بزرگتر است (برای انتقال به سمت راست و کمتر برای تغییر به سمت راست) از شاخص یک نوار ، که برای آن محاسبات انجام می شود.
  • برای تغییر یک خط به صورت عمودی ، باید نقطه up_down*اضافه شود (برای تغییر به سمت بالا یا جدا شدن برای تغییر به سمت پایین) به هر مقدار یک آرایه شاخص که موقعیت خط خط اولیه را نشان می دهد.

در مثال تجزیه و تحلیل شاخص ها در خط محاسبه می شوند:

در اینجا من شاخص یک نوار است که برای آن محاسبات انجام می شود ، k یک شاخص از یک عنصر آرایه شاخص است. خط نشانگر قرمز نمایش داده شده توسط ترمینال مشتری بر اساس آرایه آرایه Line_0 [] توسط 5 میله (مطابق با تنظیمات سفارشی ، به شکل 124 مراجعه کنید) از خط اولیه به سمت چپ منتقل می شود. در این حالت ، خط اولیه میانگین متحرک با دوره میانگین برابر با 5 است. فرمول محاسبه MA (بالا [i]+پایین [i])/2 است.

در این مثال موقعیت خط قرمز پایه ای برای محاسبه مقادیر آرایه شاخص برای دو خط دیگر است ، یعنی موقعیت آنها در نمودار. خطوط نقطه ای از این طریق محاسبه می شوند:

استفاده از شاخص K برای عناصر کلیه آرایه های شاخص امکان انجام محاسبات را برای عناصر آرایه LINE_1 [] ، LINE_2 [] در همان نوار که برای محاسبه مقادیر اصلی آرایه اصلی LINE_0 استفاده می شود ، انجام می دهد. در نتیجه ، خطوط نقطه ای نسبت به خط قرمز با مقدار مشخص شده در پنجره تنظیمات نشانگر منتقل می شوند ، در این حالت با 30 امتیاز (شکل 124).

شکل 124. خط نشانگر قرمز توسط 5 میله به سمت چپ منتقل می شود. خطوط نشانگر نقطه نسبت به خط قرمز با 30 امتیاز تغییر می کنند.

محدودیت شاخص های سفارشی

محدودیت هایی در MQL4 وجود دارد که باید در برنامه نویسی شاخص های سفارشی در نظر گرفته شود.

گروهی از کارکردها وجود دارد که فقط در شاخص های سفارشی قابل استفاده است و نمی توان در مشاوران متخصص و اسکریپت ها مورد استفاده قرار گرفت: نشانگر () ، نشانگر () ، indicatordigits () ، indintorshortname () ، setIndexArrow () ، setIndexBuffer () ، setIndexDexDrawBegin ()) ، setIndExemptyValue () ، setIndexLabel () ، setIndexShift () ، setIndexStyle () ، setLevelStyle () ، setLevelValue ().

از طرف دیگر ، توابع تجاری در شاخص ها قابل استفاده نیست: سفارش () ، سفارش () ، OrderCloseby () ، OrderDelete () و OrderModify (). این امر به این دلیل است که شاخص ها در جریان رابط کار می کنند (همانطور که از مشاوران خبره و اسکریپت هایی که در جریان خودشان کار می کنند) کار می کنند.

به همین دلیل است که الگوریتم های مبتنی بر حلقه در شاخص های سفارشی قابل استفاده نیستند. شروع یک نشانگر سفارشی حاوی یک حلقه بی پایان (از نظر زمان اجرای واقعی) می تواند منجر به حلق آویز شدن ترمینال مشتری با ضرورت بیشتر برای راه اندازی مجدد رایانه شود.

ویژگی های مقایسه ای کلی مشاوران متخصص ، اسکریپت ها و شاخص ها در جدول 2 موجود است.

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.