میانگین متحرک - متخصص برای متاتریدر 5

  • 2021-10-7

به استفاده از کوکی ها برای ورود به وب سایت MQL5. com اجازه دهید.

لطفاً تنظیمات لازم را در مرورگر خود فعال کنید، در غیر این صورت نمی توانید وارد شوید.

میانگین متحرک EA در بسته استاندارد ترمینال مشتری متاتریدر 5 گنجانده شده است و نمونه ای از EA است که با استفاده از نشانگر میانگین متحرک معامله می کند.

فایل EA Moving Average. mq5 در پوشه "terminal_data_folder\MQL5\Experts\Examples\Moving Average\" قرار دارد. این EA نمونه ای از استفاده از شاخص های فنی، توابع تاریخ تجارت و کلاس های تجاری کتابخانه استاندارد است. علاوه بر این، EA شامل یک سیستم مدیریت پول است که بر اساس نتایج تجارت است.

بیایید ساختار Expert Advisor و نحوه عملکرد آن را در نظر بگیریم.

1. خواص EA

5 ردیف اول حاوی یک نظر است، سه خط زیر ویژگی های برنامه MQL5 (کپی رایت، پیوند، نسخه) را با استفاده از دستورالعمل های پیش پردازنده #property تنظیم می کند.

هنگامی که Expert Advisor را اجرا می کنید، آنها در برگه "Common" نمایش داده می شوند:

شکل 1. پارامترهای رایج میانگین متحرک EA

1. 2. شامل فایل ها

در مرحله بعد، دستورالعمل #include به کامپایلر می‌گوید که فایل "Trade. mqh" را وارد کند.

این فایل بخشی از کتابخانه استاندارد است، شامل کلاس CTrade برای دسترسی آسان به توابع معاملاتی است.

نام فایل شامل در داخل پرانتز نشان داده شده است.<>;"، بنابراین مسیر نسبت به دایرکتوری تنظیم می شود: "terminal_data_folder\Include\".

سپس نوع، نام، مقادیر پیش فرض و نظر می رود. نقش آنها در شکل نشان داده شده است. 2.

پارامترهای MaximumRisk و DecreaseFactor برای مدیریت پول مورد استفاده قرار خواهند گرفت، MovingPeriod و MovingShift دوره و جابجایی شاخص فنی میانگین متحرک مورد استفاده یا بررسی شرایط تجارت را تنظیم می کند.

متن موجود در نظر در خط پارامتر ورودی، به همراه مقادیر پیش‌فرض، به جای نام پارامتر ورودی، در برگه «گزینه‌ها» نمایش داده می‌شوند:

شکل 2. پارامترهای ورودی میانگین متحرک EA

1. 4. متغیرهای جهانی

سپس متغیر سراسری ExtHandle اعلام می شود. برای ذخیره کردن دسته نشانگر میانگین متحرک استفاده می شود.

6 عملکرد به دنبال آن است. هدف هر یک از آنها در کامنت قبل از بدنه تابع توضیح داده شده است:

  1. TradeSizeOptimized() - اندازه لات بهینه را محاسبه کنید.
  2. CheckForOpen() - شرایط موقعیت باز را بررسی کنید.
  3. CheckForClose() - شرایط موقعیت بسته را بررسی کنید.
  4. OnInit() - تابع مقداردهی اولیه.
  5. OnTick() - تابع تیک خبره.
  6. OnDeinit() - تابع deinitialization متخصص.

سه تابع آخر توابع مدیریت رویداد هستند. سه تابع سرویس اول در کد آنها فراخوانی می شود.

2. توابع مدیریت رویداد

2. 1. تابع مقداردهی اولیه OnInit().

تابع OnInit() یک بار در اولین شروع کار Expert Advisor فراخوانی می شود. معمولاً در کنترل کننده رویداد OnInit() EA برای عملیات آماده می شود: پارامترهای ورودی بررسی می شوند، نشانگرها و پارامترها مقداردهی اولیه می شوند، و غیره. در مورد خطاهای بحرانی، زمانی که کار بیشتر بی معنی است، تابع با یک کد بازگشتی INIT_FAILED خارج می شود.

از آنجایی که معاملات EA بر اساس اندیکاتور Moving Average است، با فراخوانی iMA() اندیکاتور Moving Average ایجاد می شود و دسته آن در متغیر جهانی ExtHandle ذخیره می شود.

در صورت بروز خطا، OnInit() با یک کد بازگشتی INIT_FAILED خارج می شود - این یک راه صحیح برای تکمیل عملیات EA/indicator در صورت شروع ناموفق است.

2. 2. تابع OnTick().

تابع OnTick() هر بار که یک نقل قول جدید برای نماد نمودار دریافت می شود، که EA روی آن اجرا می شود، فراخوانی می شود.

تابع PositionSelect() برای تعیین اینکه آیا یک موقعیت باز برای نماد فعلی وجود دارد یا خیر استفاده می شود.

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

2. 3. تابع نامشخص سازی OnDeInit().

هنگامی که یک EA از نمودار حذف شود، OnDeInit() فراخوانی می شود. اگر برنامه ای اشیاء گرافیکی را در حین کار قرار دهد، می توان آنها را از نمودار حذف کرد.

در این مورد، هیچ اقدامی در طول اصالت‌زدایی توسط Expert Advisor انجام نمی‌شود.

3. توابع خدمات

3. 1. تابع TradeSizeOptimized()

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

تابع SymbolInfoDouble() برای بررسی در دسترس بودن قیمت ها برای نماد فعلی استفاده می شود، سپس تابع OrderCalcMargin() برای درخواست حاشیه مورد نیاز برای سفارش (در این مورد سفارش خرید) استفاده می شود. اندازه لات اولیه از مقدار حاشیه مورد نیاز برای ثبت سفارش، حاشیه آزاد حساب (AccountInfoDouble(ACCOUNT_FREEMARGIN)) و حداکثر مقدار مجاز ریسک مشخص شده در پارامتر ورودی MaximumRisk تعیین می شود.

اگر مقدار پارامتر ورودی DecreaseFactor مثبت باشد، معاملات در تاریخ تجزیه و تحلیل می‌شوند و اندازه لات با در نظر گرفتن اطلاعات مربوط به حداکثر سری معاملات بازنده تنظیم می‌شود: اندازه لات اولیه در اندازه ضرب می‌شود (1-زیان/ضریب کاهش).

سپس حجم معامله به مقداری که مضربی از حداقل گام مجاز حجم (stepvol) برای نماد فعلی است "گرد" می شود. همچنین حداقل (minvol) و حداکثر مقادیر ممکن (maxvol) حجم معاملات درخواستی است و در صورت خروج ارزش لات از محدوده مجاز، تعدیل می شود. در نتیجه، تابع مقدار محاسبه شده حجم معاملات را برمی گرداند.

3. 2. تابع CheckForOpen()

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

هنگام معامله با استفاده از متحرک، باید بررسی کنید که آیا قیمت از میانگین متحرک عبور می کند یا خیر. با استفاده از تابع CopyRates() دو مقدار از قیمت های فعلی در آرایه ساختارها کپی می شود rt[]، rt[1] مربوط به نوار فعلی، rt[0] - نوار تکمیل شده است.

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

مقدار فعلی نشانگر میانگین متحرک با استفاده از تابع CopyBuffer() درخواست می شود و در آرایه ma[] ذخیره می شود که فقط یک مقدار دارد. سپس برنامه بررسی می‌کند که آیا قیمت از میانگین متحرک عبور کرده است یا خیر و بررسی‌های اضافی انجام می‌دهد (در صورت امکان تجارت با استفاده از EA و وجود میله‌ها در تاریخ). در صورت موفقیت آمیز بودن، یک موقعیت مناسب برای نماد با فراخوانی متد PositionOpen() شی تجارت (نمونه ای از CTrade) باز می شود.

قیمت باز کردن موقعیت با استفاده از تابع ()SymbolInfoDouble تنظیم می‌شود که بسته به مقدار متغیر سیگنال، قیمت Bid یا Ask را برمی‌گرداند. حجم موقعیت با فراخوانی TradeSizeOptimized() که در بالا توضیح داده شد تعیین می شود.

3. 3. تابع CheckForClose()

CheckForClose() شرایط بسته شدن موقعیت را بررسی می کند و در صورت وقوع شرایط بسته شدن آن را می بندد.

الگوریتم تابع CheckForClose() مشابه الگوریتم CheckForOpen() است. بسته به جهت موقعیت‌های باز فعلی، شرایط بسته شدن آن دوباره بررسی می‌شود (قیمت برای خرید از MA به سمت پایین یا برای فروش به سمت بالا عبور می‌کند). یک موقعیت باز با فراخوانی متد PositionClose() شیء تجاری (نمونه CTrade) بسته می شود.

4. بک تست

بهترین مقادیر پارامترها را می توان با استفاده از تستر استراتژی ترمینال MetaTrader 5 پیدا کرد.

به عنوان مثال، هنگام بهینه سازی پارامتر MovingPeriod در بازه زمانی 2012. 01. 01-2013. 08. 01، بهترین نتایج با MovingPeriod=45 به دست می آید:

Backtesting Results of the Moving Average Expert Advisor

نتایج آزمون بک تست مشاور متخصص میانگین متحرک

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

برچسب ها

ثبت دیدگاه

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