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

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

شکل 2. بستن موقعیت با استفاده از دکمه "بستن" در کادر گفتگوی موقعیت. 1 - منوی Position Context را باز کنید ، 2 - "بستن موقعیت" 3 - دکمه "بستن" را کلیک کنید.
علاوه بر این ، هنگامی که قیمت به سطح سود از پیش تعیین شده (سود) یا سطح ضرر (ضرر متوقف) می رسد ، می توان موقعیت را به صورت خودکار بسته کرد. بر خلاف موقعیت اختتامیه با استفاده از دکمه "بستن" ، بسته شدن با ضرر متوقف و سودآوری از ترمینال (توسط معامله گر یا متخصص) بلکه توسط کارگزار انجام نمی شود. بنابراین ، موقعیت بسته شدن کاملاً تضمین شده است ، صرف نظر از اتصال و منبع تغذیه. این امر باعث می شود که استفاده از ضرر توقف از عنصر واجب در کار معامله گر باشد.
تنها اقدامی که معامله گر باید انجام دهد - این است که سفارش کارگزار را برای تعیین سطح توقف محافظ فراهم کند. به عبارت دیگر ، شما باید از دست دادن توقف در موقعیت (یا موقعیت باز با این مجموعه سطح) تنظیم کنید. تنظیم از دست دادن توقف با استفاده از دستور منوی "اصلاح" در ترمینال انجام می شود. در لیست موقعیت ها یک موقعیت را انتخاب کنید ، کلیک راست کرده و "اصلاح یا حذف" را انتخاب کنید. سپس در کادر گفتگوی موقعیتی باید سطح لازم برای از دست دادن توقف را وارد کرده و روی "اصلاح" کلیک کنید (شکل 3).

شکل 3. تنظیم سطح از دست دادن موقعیت موقعیت. 1 - منوی Position Context را باز کنید ، 2 - کلیک کنید "اصلاح یا حذف" ، 3 - مقدار تنظیم ، 4 - روی "اصلاح" کلیک کنید.
سطح از دست دادن موقعیت موقعیت در نمودار قیمت به همراه سطح افتتاح آن نشان داده شده است (شکل 4).

شکل 4. موقعیت با از دست دادن توقف. سطح با خط نقطه قرمز مشخص شده با SL در لبه سمت چپ آن مشخص شده است.
شما نه تنها می توانید از دست دادن توقف برای موقعیت نصب کنید بلکه به طور دوره ای مقدار آن را تغییر دهید. به عنوان مثال ، می توانید هنگامی که قیمت در جهت سودآور تغییر می کند ، آن را بالا بکشید ، در نتیجه ضرر احتمالی را کاهش می دهد. چنین کشش سطح محافظ به عنوان توقف دنباله دار شناخته می شود.
انواع مختلفی از توقف وجود دارد: شما می توانید پس از قیمت در فاصله مشخص ، ضرر متوقف را بکشید. می توانید بلافاصله شروع به حرکت ضرر متوقف کنید ، اما وقتی موقعیت به سودآوری خاصی برسد ، بلافاصله به سطح شکست منتقل می شود. این نوع استاندارد است و در ترمینال مشتری Metatrader 5 ساخته شده است. برای استفاده از موقعیت استاندارد Trailing Stop راست کلیک کرده و "توقف دنباله" را انتخاب کنید (شکل 5).

شکل 5. فعال کردن توقف استاندارد در ترمینال. 1 - منوی Position Context را باز کنید ، 2 - کلیک کنید "توقف دنباله" ، 3 - مقدار (یا مقدار تنظیم) را انتخاب کنید. دستور تنظیم مقدار (سفارشی) در پایین منوی زمینه است و در تصویر نشان داده نشده است.
علاوه بر نظارت مستقیم قیمت ، Trailing Stop می تواند بر اساس برخی از شاخص های فنی کار کند. به عنوان مثال ، بر اساس میانگین های در حال حرکت ، این امکان را می دهد که بر اساس نشانگر Ichimoku یا مناسب تر ، نسبت به تغییرات قیمت کوتاه مدت واکنش نشان ندهند. و حتی در SAR پارابولیک SAR (توقف و معکوس) که در ابتدا برای این منظور طراحی نشده است. شکل 6 را ببینید.

شکل 6. نشانگر SAR پارابولیک.
در برنامه نویسی رویه MQL4 معمولاً به عنوان یک عملکرد جداگانه ایجاد شده است یا در سایر توابع ادغام شده است. به عنوان مثال ، در کارشناس نمونه MACD ، که در Metatrader 4 گنجانده شده است ، عملکرد توقف Trailing با عملکرد بسته شدن بازار سفارشات یکپارچه شده است:
MQL5 به عنوان زبان شی گرا امکانات بیشتری در طراحی متخصصان می دهد. این امکان را به شما می دهد تا کلاسهای همه کاره و چند منظوره ایجاد کنید که بعداً تقریباً در هر متخصص به سرعت و به راحتی ادغام می شوند. در این مقاله قصد داریم چنین کلاس را توسعه دهیم.
1. ایجاد یک کلاس پایه توقف دنباله دار
همانطور که در بالا ذکر شد ، تعداد زیادی از توقف های دنباله دار وجود دارد ، اما همه آنها جنبه های عملکردی مشترک دارند:
- تعیین نوع (جهت) موقعیت
- تعیین سطح از دست دادن توقف فعلی موقعیت
- محاسبه سطح از دست دادن توقف جدید
- بررسی نیاز به تغییر سطح از دست دادن توقف فعلی
- اصلاح سطح از دست دادن موقعیت موقعیت
نوع توقف دنباله فقط مقدار سطح از دست دادن توقف محاسبه شده را تعیین می کند. بنابراین ، عملکرد اصلی توقف دنباله دار در کلاس پایه گنجانده خواهد شد. برای عملکرد ، این بستگی به نوع توقف دنباله دارد ، زیر کلاس ها ایجاد می شوند. استفاده از روش های این زیر کلاس ها از طریق روش های مجازی کلاس پایه انجام می شود.
از آنجا که ما قصد داریم از شاخص های فنی استفاده کنیم ، تا از عملکرد پایدار آنها اطمینان حاصل شود که لوازم دوره ای برای آنها فراهم می شود. برای این منظور ما از تایمر استفاده خواهیم کرد. ما همچنین قصد داریم توقف دنباله دار را روشن یا خاموش کنیم (هنگام استفاده از کلاس به عنوان بخشی از سیستم تجارت مکانیکی) ، و با استفاده از دکمه گرافیکی (هنگام استفاده از کلاس به عنوان بخشی از متخصصان کمکی) ، آن را روشن یا خاموش کنید. با توجه به این الزامات عملکردی ، کلاس پایه مجموعه روشهای زیر را خواهد داشت:
هنگام فراخوانی روش init () ، پارامترهای کلی را می پذیرد که به نوع توقف دنباله دار استفاده نمی شود. این روش حالت توقف Trailing را تنظیم کرده و متغیرهایی را با برخی از پارامترهای بازار تهیه می کند.
- StartTimer () - برای شروع تایمر ، مورد نیاز برای آدرس دهی دوره ای به شاخص ها و برای نگه داشتن اجباری آنها در حافظه نهان ترمینال استفاده می شود.
- StopTimer () - برای متوقف کردن تایمر در پایان کار متخصص استفاده می شود.
- on () - فعال کردن دکمه توقف و تنظیم در حالت فشار داده شده (اگر از دکمه استفاده می شود).
- خاموش () - غیرفعال کردن دکمه توقف و تنظیم در حالت افسرده (در صورت استفاده از دکمه).
- Dostoploss () - روش اصلی کنترل سطح از دست دادن توقف
- EventHandle () - برای پاسخ به فشار دادن دکمه و روشن/خاموش کردن ایستگاه دنباله دار ، بسته به موقعیت دکمه ، برای پاسخ به برنامه های نمودار نمودار استفاده می شود.
- DEINIT () - هنگامی که متخصص کار خود را تمام می کند اجرا می شود ، انتشار دسته نشانگر را تضمین می کند.
- Refresh () - طراوت مقادیر شاخص را فراهم می کند. این روش برای تعیین مقادیر فعلی شاخص قبل از محاسبه مقادیر از دست دادن توقف لازم است. همچنین ، این روش به طور مستقل مورد استفاده قرار می گیرد - به طور دوره ای توسط تایمر فراخوانی می شود تا شاخص ها را در شرایط کار نگه دارد.
- setParameters () - وقتی این روش را فراخوانی می کنید ، پارامترهای نشانگر را می پذیرد ، نشانگر با پارامترهای مشخص شده بارگذاری می شود.
- روند () - روش یافتن روند ، که توسط نشانگر نشان داده شده است. اگر نشانگر جهت بالا را نشان دهد ، مقدار 1 را برمی گرداند ، اگر پایین باشد - بازگش ت-1.
- روشهای خرید و فروش () و sellstoploss () مقادیر جدید ضرر توقف را برای موقعیت های خرید و فروش ، محاسبه شده توسط شاخص باز می گردانند.
1. 1روش اولیه ()
روش init () اولین روش است که پس از ایجاد نمونه ای از کلاس نامیده می شود. این پارامترهای کلی ، مستقل از نوع توقف دنباله دار را می پذیرد: نماد ، بازه زمانی ، حالت توقف دنباله دار (توسط کنه یا توسط میله ها) ، ضمیمه یا عدم اتصال به نمودار ، ایجاد یا ایجاد یا ایجاد دکمه. سپس ویژگی های دکمه را می پذیرد: x مختصات دکمه ، y مختصات دکمه ، رنگ دکمه ، رنگ زیرنویس دکمه.
پارامترهای مورد نیاز برای کار بیشتر در متغیرهای کلاس ذخیره می شوند. علاوه بر این ، هنگامی که روش اولیه () کار می کند ، پارامترهای اصلی تغییر در بازار را تعیین می کند ، که برای توقف دنباله مورد نیاز است: تعداد رقم ها پس از کاما و مقدار نقطه. سرانجام ، بسته به نوع توقف دنباله دار ، نام دکمه و عنوان آن شکل می گیرد. اگر تنظیم شده است از یک دکمه استفاده کند ، ایجاد می شود.
در بخش "محافظت شده" بیایید تمام متغیرهای لازم را اعلام کنیم:
حال بیایید خود روش INIT () را بنویسیم:
می بینید که هنگام ایجاد نام دکمه و زیرنویس ، از متغیر M_TYPENAME استفاده می شود ، که با هیچ مقدار اولیه نشده است. اختصاص یک مقدار به آن در سازندگان زیر کلاس انجام می شود. بنابراین هنگام استفاده از روشهای مختلف توقف دنباله دار ، مقدار متفاوتی خواهد داشت ، مطابق با نوع توقف دنباله دار استفاده شده.
1. 2روش starttimer ()
روش StartTimer () تایمر مشترک متخصص را شروع می کند.
هنگام استفاده از تایمر ، باید روش Call of Refresh () را به عملکرد ontimer () برای جذابیت دوره ای به نشانگر اضافه کنید.
1. 3روش Stoptimer ()
روش StartTimer () تایمر یک متخصص را متوقف می کند.
هنگامی که کارشناس کار خود را تمام کرد ، اگر از آن استفاده کرده اید ، این روش تایمر را متوقف می کند. این روش هنگام اجرای روش DEINIT () یک کلاس نامیده می شود.
1. 4روش ()
روش روشن () توقف دنباله دار را روشن می کند. روشن کردن با اختصاص متغیر m_onoff با مقدار درست انجام می شود. اگر دکمه در ابتدای کلاس استفاده شود ، سپس فشرده می شود.
1. 5روش خاموش ()
روش خاموش () متوقف می شود. خاموش کردن با اختصاص متغیر m_onoff با مقدار کاذب انجام می شود. اگر دکمه در ابتدای کلاس استفاده شود ، پس از آن افسرده می شود.
1. 6روش EventHandle ()
روش EventHandle () از عملکرد OnChartevent () فراخوانی می شود و بر این اساس تمام پارامترهای منتقل شده به عملکرد Onchartevent () را می پذیرد.
اگر رویداد ChartEvent_Object_Click رخ دهد ، و این رویداد با دکمه ای رخ می دهد که دارای نام M_OBJNAME است (نام شیء ، که با آن رویداد رخ داده است ، در متغیر SPARAM منتقل می شود) ، سپس بسته به حالت دکمه یا روشن () یا خاموش ()روش اجرا می شود.
1. 7روش deinit ()
هنگامی که متخصص کار خود را تمام می کند ، باید روش deinit () فراخوانی شود. این روش تایمر را متوقف می کند ، در صورت استفاده از آن ، دکمه نشانگر را آزاد کرده و دکمه حذف می کند.
روشهای مجازی () ، SetParameters () ، Trend () ، BuyStoploss () و Sellstoploss () بعداً مورد بحث قرار می گیرد - وقتی ما زیر کلاسهای توقف دنباله ای ایجاد خواهیم کرد. حال بیایید روش اصلی کلاس پایه - روش dostoploss () را در نظر بگیریم.
1. 8روش dostoploss ()
روش dostoploss () روش اصلی کار است که باید از عملکرد ONTICK () در هر کنه فراخوانی شود. اگر مقدار متغیر m_onoff نادرست است (متوقف کردن توقف خاموش) ، پس روش بلافاصله کار خود را تمام می کند.
علاوه بر این ، اگر Trailing Stop در حالت نوار کار می کند ، زمان بررسی می شود - مقایسه زمان نوار ایجاد شده با زمان آخرین اجرای موفقیت آمیز عملکرد. اگر زمان مطابقت داشته باشد ، روش کار خود را به پایان می رساند.
اگر توقف دنباله دار روشن شود و بررسی زمان به پایان برسد ، قسمت اصلی روش اجرا می شود - مقادیر نشانگر تازه می شوند (روش تازه سازی () نامیده می شود).
سپس ، بسته به مقدار برگشتی با روش Trend () ، توقف توقف برای موقعیت خرید یا فروش انجام می شود.
کار آن را در مورد مثال موقعیت خرید در نظر بگیرید.
در صورت انتخاب موقعیت ، نوع آن بررسی می شود. اگر نوع موقعیت با روند مطابقت داشته باشد ، با استفاده از روش buystoploss () ، مقدار مورد نیاز از دست دادن توقف (در متغیر SL) را دریافت می کنیم. در مرحله بعد ، سطح مجاز را تعیین کنید ، که می توان آن را از دست داد. اگر سطح محاسبه شده نزدیکتر از حد مجاز است ، مقدار متغیر SL را تنظیم کنید. سپس مقدار فعلی موقعیت از دست دادن توقف (در متغیر POSL) را دریافت می کنیم و مقادیر متغیرهای SL و POSL را مقایسه می کنیم. اگر مقدار جدید شناسه از دست دادن توقف بهتر از مقدار فعلی باشد - موقعیت را تغییر دهید.
قبل از اصلاح ، زمینه های SL و TP ساختار MQLTRADEREQUEST را پر کنید. متغیر m_request. sl با مقدار مورد نیاز از دست دادن توقف ، متغیر m_request. tp - با ارزش موجود سود (بدون تغییر) اختصاص می یابد. با اجرای روش INIT () ، بقیه زمینه ها پر می شوند. پس از پر کردن ساختار ، عملکرد سفارش () نامیده می شود.
پس از اتمام کار خود ، مقدار متغیر m_result. retcode بررسی می شود. اگر مقدار برابر با trade_retcode_done نباشد ، به دلایلی قادر به انجام عمل نبود ، که توسط عملکرد سفارش () درخواست شده است. در همان زمان در یک پیام ورود به سیستم با تعداد خطاها و تکمیل روش اجرا می شود. اگر عملکرد سفارش () با موفقیت به پایان رسید ، سپس زمان بار را به خاطر بسپارید که آخرین کار روش Dostoploss () انجام شده است. در صورت خطا ، حتی در هر حالت نوار ، در مورد بعدی تلاش برای امتحان مجدد این روش انجام می شود. تلاش ها تا زمانی که کار خود را با موفقیت انجام دهد ادامه خواهد یافت.
در زیر کل کد Dostoploss () وجود دارد.
توجه داشته باشید تفاوت در کد برای موقعیت های خرید و فروش. برای موقعیت فروش ، ارزش بازگشت شده توسط SellstopLoss () با ارزش گسترش افزایش می یابد ، زیرا موقعیت فروش با قیمت سؤال بسته می شود. بر این اساس ، شمارش معکوس سطح حداقل ضرر برای خرید از قیمت پیشنهاد ، برای فروش - از قیمت سؤال انجام می شود.
در حال حاضر ما با ایجاد کلاس Trailing Stop Base Class به پایان رسیده ایم. بیایید با ایجاد زیر کلاس ها اقدام کنیم.
2. زیر کلاس توقف توقف برای نشانگر SAR parabolic
روشهای مجازی کلاس ctrailingstop در حال حاضر محتویات یک زیر کلاس را به شما می گوید - setParameters () ، Refresh () ، Trend () ، buystoploss () ، sallestoploss () روش ها و سازنده کلاس برای تعیین نام Trailing Stop. این کلاس به عنوان CPARABOLLSTOP نامگذاری می شود. از آنجا که این کلاس زیر کلاس CtrailingStop است ، این در اعلامیه آن ذکر خواهد شد.
با استفاده از این اعلامیه ، فراخوانی روشهای مجازی کلاس CPARABOLICSTOP روشهای ارثی کلاس پایه را اجرا می کند.
بیایید جزئیات همه روش های زیر کلاس را در نظر بگیریم.
2. 1روش cparabolicstop ()
این روش به همان نام خود کلاس است ، به این روش سازنده گفته می شود. قبل از هر روش دیگر کلاس ، به طور خودکار هنگام بارگیری کلاس اجرا می شود. در روش CPARABOLLSTOP () نام Trailing Stop به متغیر M_TypeName اختصاص داده می شود. این متغیر برای ایجاد نام دکمه و زیرنویس (در روش اولیه () کلاس پایه) استفاده می شود.
2. 2روش setParameters ()
هنگام فراخوانی روش setParameters () ، پارامترهای نشانگر را می پذیرد و نشانگر با این پارامترها بارگیری می شود. اگر پارامتر M_Indicator روش اولیه () کلاس پایه را تنظیم کند ، سپس نشانگر به نمودار (ChartIndicatorAdd ()) وصل می شود.
2. 3روش تازه کردن ()
روش Refresh () قیمت جدیدی را دریافت می کند و مقادیر نشانگر را تازه می کند. در بخش "محافظت شده" کلاس ، آرایه PriceBuf برای ارزش قیمت و آرایه Indbuf - برای مقادیر شاخص وجود دارد. هر دو آرایه دارای اندازه یک عنصر هستند - فقط باید یک مقدار قیمت و یک مقدار شاخص از نوار تشکیل یا تشکیل شده (بسته به پارامتر M_Shift ، در هنگام اولیه سازی کلاس پایه تنظیم شود).
2. 4روش () روش
روش Trend () مکان قیمت را نسبت به خط نشانگر بررسی می کند. اگر قیمت بالاتر از خط باشد ، این روند بالایی است و روش مقدار را برمی گرداند 1. اگر قیمت زیر خط نشانگر باشد ، این روند پایین است و روش ارز ش-1 را برمی گرداند. وقتی قیمت برابر با خط نشانگر باشد ، این پرونده را حذف نکرد (نادر ، اما ممکن). در این حالت ، مقدار 0 بازگردانده می شود.
2. 5روش های خرید () و sellstoploss ()
از آنجا که نشانگر SAR پارابولیک تنها یک خط دارد ، هر دو روش یکسان هستند. آنها مقدار به دست آمده از روش Refresh () را برمی گردانند.
در حال حاضر توقف دنباله ای آماده است. هنوز فقط یک کلاس دارد ، اما می توان از آن استفاده کرد. آن را به عنوان یک پرونده جداگانه ذخیره کنید در پوشه. mql5 شامل نام نمونه_ trailingstop. mqh (پرونده به مقاله ضمیمه شده است).
3. اضافه کردن توقف دنباله دار برای پارابولیک به متخصص
بیایید سعی کنیم توقف دنباله دار را به برخی از متخصصان ، مانند MY_FIRST_EA از راهنمای گام به گام برای نوشتن یک مشاور متخصص در MQL5 برای مقاله مبتدی اضافه کنیم.
3. 1متخصص my_first_ea را در متائیتور باز کنید و آن را به عنوان my_first_ea_sartrailing ذخیره کنید.
3. 2شامل پرونده توقف Trailing. در قسمت بالایی کد خبره (ترجیحاً قبل از اعلام متغیرهای خارجی) خط را اضافه کنید:
3. 3پس از متغیرهای خارجی نمونه ای از کلاس CPARABOLLSTOP را ایجاد کنید ، به عنوان Trailing نامگذاری شده است.
3. 4در تابع OnInit () کلاس را اولیه کنید و پارامترهای آن را تنظیم کنید. ابتدا متغیرهای خارجی را با پارامترهای نشانگر اعلام کنید:
سپس کد را به عملکرد OnInit () اضافه کنید.
3. 5در کد خبره عملکرد Ontimer () را پیدا کنید. تابع Ontimer () در my_first_ea استفاده نمی شود ، بنابراین آن را اضافه کنید و به آن اضافه کنید تا تماس تازه را اضافه کنید ().
3. 6در بالای تابع ONTICK () فراخوانی روش dostoploss () را اضافه کنید.
3. 7کارشناس را کامپایل کنید و سعی کنید آن را آزمایش کنید. نتایج آزمون متخصص در شکل 7 (بدون توقف دنباله) و در شکل 8 (با توقف دنباله) نشان داده شده است.

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

شکل 8. نتایج آزمایش متخصص با توقف دنباله دار.
اثربخشی استفاده از توقف دنباله دار آشکار است.
پرونده my_first_ea_sartrailing. mq5 به مقاله ضمیمه شده است.
4. زیر کلاس توقف توقف برای NRTR
نشانگر NRTR (Nick Rypock Trailing Reverse) با نام و ظاهر آن (شکل 9) باعث می شود که سعی در ایجاد یک توقف دنباله دار روی آن داشته باشید.

شکل 9. نشانگر NRTR.
شاخص خط پایه (خط پشتیبانی یا مقاومت) و خط هدف را ترسیم می کند. هنگامی که قیمت بیش از خط هدف باشد ، خط پایه در جهت حرکت قیمت منتقل می شود ، نوسانات جزئی از قیمت نادیده گرفته می شود. هنگامی که قیمت از خط پایه عبور می کند - به عنوان تغییر روند در نظر گرفته می شود ، بنابراین مکان خط پایه و خط هدف را با توجه به قیمت تغییر می دهد. خط پشتیبانی و خط هدف در روند بالا با رنگ آبی ، در روند پایین - با قرمز رنگ آمیزی شده است.
یک ایستگاه دنباله دیگر ، اکنون برای نشانگر NRTR ایجاد کنید.
CNRTRSTOP کلاس دیگری را در کلاس پایه CNRTRSTOP اعلام کنید.
توقف دنباله ای برای زیر کلاس NRTR دقیقاً همان مجموعه روش هایی را با توقف دنباله دار برای پارابولیک به جز سازنده دارد - اکنون به عنوان CNRTRSTOP () نامگذاری می شود.
4. 1روش cnrtrstop ()
اکنون در سازنده کلاس متغیر M_TypEname با ارزش NRTR ، مطابق با نشانگر استفاده شده اختصاص داده می شود.
4. 2روش setParameters ()
هنگام تماس با روش setParameters () ، پارامترهای شاخص را می پذیرد و بارگیری می شود. سپس ، بسته به پارامترهای اصلی توقف دنباله دار ، نشانگر به نمودار وصل می شود.
4. 3روش تازه کردن ()
روش Refresh () دو بافر از نشانگر NRTR را کپی می کند - بافر خط پشتیبانی و بافر خط مقاومت.
در بخش "محافظت شده" کلاس دو آرایه اعلام شده وجود دارد: Double Sup [] و Double Res [].
4. 4روش () روش
روش Trend () بررسی می کند که کدام یک از خطوط در حال حاضر وجود دارد. اگر خط پشتیبانی باشد ، به این معنی است که نشانگر روند بالایی را نشان می دهد. این روش به خودی خود مقدار 1. را برمی گرداند. اگر خط مقاومت باشد ، روش بازگش ت-1 را برمی گرداند.
4. 5روش خرید ()
روش buystoploss () مقدار خط پشتیبانی را برمی گرداند.
4. 6روش sellstoploss ()
روش sellstoploss () مقدار خط مقاومت را برمی گرداند.
اکنون کلاس Trailing Stop کامل است.
5. اضافه کردن توقف دنباله دار برای NRTR به متخصص
درست مانند توقف دنباله دار برای پارابولیک ، بیایید توقف دنباله MY_FIRST_EA را برای NRTR به متخصص اضافه کنیم.
5. 1MY_FIRST_EA_SARTRAILING را در Metaeditor باز کنید و آن را به عنوان my_first_ea_nrtrtrailing ذخیره کنید.
5. 2پارامترهای خارجی توقف دنباله دار را برای پارابولیک با پارامترهای توقف دنباله دار برای NRTR جایگزین کنید.
5. 3. به جای ایجاد نمونه ای از کلاس CPARABOLLSTOP ، نمونه ای از کلاس CNRTRSTOP ایجاد کنید. کد پس از متغیرهای خارجی قرار دارد.
5. 4در تابع OnInit () پارامترهای روش فراخوانی SetParameters () را با پارامترهای NRTR جایگزین کنید.
5. 5کارشناس را کامپایل کنید و سعی کنید آن را آزمایش کنید.

شکل 10. نتایج آزمون متخصص با توقف دنباله برای NRTR.
نتایج کار مشاور خبره (شکل 10) با یک استراتژی توقف در مقایسه با کار یک متخصص بدون آن (شکل 7) تقریباً بدون تغییر است. استفاده از توقف دنباله ای برای پارابولیک برای این متخصص مؤثرتر بود. می توان نتیجه گرفت که زرادخانه تعداد مشخصی از توقف های دنباله دار می تواند هنگام توسعه متخصصان بسیار مفید باشد - برای آزمایش و انتخاب مناسب ترین نوع توقف دنباله دار.
پرونده MY_FIRST_EA_NRTRTRAILING. MQ5 به مقاله ضمیمه شده است.
6. متخصص متخصص
هنگامی که یک کلاس پایه از توقف دنباله ایجاد شد ، قرار بود از طریق دکمه کنترل خاموش/خاموش کردن متوقف شود. بیایید یک متخصص متخصص ایجاد کنیم تا موقعیت های موجود در نمادهای مختلف را با انواع مختلف توقف دنبال کند. این متخصص موقعیت ها را باز نمی کند ، بلکه فقط موارد باز را دنبال می کند.
6. 1. در متائیتور متخصص جدیدی به نام sample_trailingstop ایجاد کنید.
6. 2. پرونده sample_trailingstop. mqh را درج کنید.
6. 3. پارامترهای خارجی را برای شاخص ها اعلام کنید.
6. 4. آرایه ای از نمادها را اعلام کنید ، که در آن متخصص قادر به کار خواهد بود.
6. 5. آرایه ها را برای بارگیری کلاس اعلام کنید.
6. 6. در تابع oninit () آرایه ها را برای بارگیری کلاس ها ، با توجه به اندازه آرایه نمادها تغییر دهید.
6. 7. در حلقه برای هر عنصر نمونه کلاس بار آرایه.
توجه: هنگام تماس با مختصات دکمه های روش (). در سمت چپ دکمه های قدرت توقف Trailing برای پارابولیک ، در سمت راست - برای NRTR وجود دارد.
6. 8. int the ontick () عملکرد روش dostoploss () را برای هر نمونه از توقف دنباله اضافه کنید.
6. 9. رسیدگی به رویدادهای نمودار را اضافه کنید.
6. 10. در عملکرد deinit () همه نمونه های کلاس را حذف کرده و آنها را حذف کنید.
کامپایل کنید ، متخصص را به نمودار وصل کنید. شاخص ها و دکمه ها در نمودار ظاهر می شوند (شکل 11) - مشاور خبره آماده کار است.

شکل 11. دکمه ها و شاخص های موجود در نمودار پس از شروع نمونه_ trailingstop.
فقط دکمه را فشار دهید تا هنگام باز شدن موقعیت مربوطه را دنبال کنید.
پرونده sample_trailingstop. mq5 به مقاله وصل شده است.
نتیجه
بیایید هنگام ایجاد یک سیستم معاملاتی مکانیکی ، ترتیب استفاده از کلاس CtrailingStop را مرور کنیم:
1. پرونده sample_trailingstop. mqh را درج کنید.
2. متغیرهای خارجی را با پارامترهای نشانگر توقف دنباله دار استفاده کنید.
3. نمونه کلاس را ایجاد کنید.
4- روش های init () ، setParameters () ، StartTimer () و On () را از عملکرد OnInit () اضافه کنید.
5- روش فراخوانی () را از عملکرد Ontimer () اضافه کنید.
6. فراخوانی روش dostoploss () را از عملکرد ONTICK () اضافه کنید.
7. روش فراخوانی از روش deinit () را از عملکرد ondeinit () اضافه کنید.
هفت مرحله ، کمتر از 5 دقیقه ، و مشاور متخصص شما عملکردی از توقف دنباله دار دارد!
ترجمه شده از روسی توسط Metaquotes Ltd. مقاله اصلی: https://www. mql5.com/ru/articles/134
هشدار: کلیه حقوق این مواد توسط Metaquotes Ltd. کپی یا چاپ مجدد این مواد به طور کامل یا جزئی محفوظ است.
مقالات دیگر این نویسنده
- بهینه سازی رنگ استراتژی های معاملاتی
- تجزیه و تحلیل نتایج معاملات با استفاده از گزارش های HTML
- توسعه شاخص زیگزاگ مبتنی بر نوسان ساز. نمونه ای از اجرای مشخصات الزامات
- جستجوی خودکار برای واگرایی و همگرایی
- الگوی پرچم
- امواج گرگ
- روند جهانی با رابط گرافیکی
من در حال تلاش برای توسعه یک EA هستم که با "سفارش" مشکل دارم. من زبان برنامه نویسی را خیلی نمی فهمم ، قبلاً راه حل های زیادی را امتحان کرده ام و پیدا نکردم. اما این کار نمیکنه. پیام
"ارزش بازگشت" سفارش "باید بررسی شود"
ظاهر می شود . این هیچ خطایی ندارد ، اما هیچ موقعیتی در طول تست ها باز نیست. هنگام تست با حساب نسخه ی نمایشی ، من موفقیتی ندارم. آزمون اجرا می شود و هیچ موقعیتی در هر زمان باز نمی شود.
آیا کسی می تواند با نشان دادن تنظیمات لازم که باید انجام دهم به من کمک کند؟
استراتژی های مؤثر فارکس...
ما را در سایت استراتژی های مؤثر فارکس دنبال می کنید
برچسب :
نویسنده : توران میرهادی
بازدید : <-PostHit->
تاريخ : شنبه
19 فروردين
1402 ساعت: 15:54