بسته شدن و حذف سفارشات

ساخت وبلاگ

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

عملکرد سفارش ()

بول سفارش (در نظر گرفتن بلیط, دو برابر مقدار زیادی, دو برابر قیمت, در نظر گرفتن لغزش, رنگ رنگ=clr_none)

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

بلیط - تعداد منحصر به فرد سفارش.

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

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

لغزش - حداکثر انحراف مجاز قیمت درخواست شده برای بسته شدن سفارش از قیمت بازار (در امتیاز).

رنگ - رنگ فلش بسته در یک نمودار. اگر این پارامتر در دسترس نباشد یا مقدار آن برابر با CLR_NONE باشد ، فلش در نمودار نمایش داده نمی شود.

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

سفارش( 12345, 0.5, پیشنهاد, 2 );

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

عملکرد سفارش ()

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

بول انتخاب کردن(در نظر گرفتن فهرست مطالب, در نظر گرفتن انتخاب کنید, در نظر گرفتن استخر=mode_trades)

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

فهرست - موقعیت سفارش یا شماره ، به پارامتر دوم بستگی دارد.

انتخاب - روش پرچم انتخاب. پارامتر 'Select' می تواند یکی از دو مقدار ممکن را بگیرد:

SELECT_BY_POS - در پارامتر "فهرست" ، شماره سفارش در لیست بازگردانده می شود (شماره گذاری با 0 شروع می شود) ،

SELECT_BY_TICKET - در پارامتر "فهرست" ، شماره بلیط (شماره سفارش منحصر به فرد) بازگردانده می شود.

استخر - منبع داده برای انتخاب. از پارامتر "استخر" استفاده می شود ، هنگامی که پارامتر "انتخاب" برابر با مقدار SELECT_BY_POS است. در صورت انتخاب سفارش توسط شماره بلیط (SELECT_BY_TICKET) ، پارامتر "استخر" نادیده گرفته می شود. پارامتر "استخر" می تواند از دو مقدار ممکن استفاده کند:

mode_trades (به طور پیش فرض) - سفارش در سفارشات باز و در انتظار ، یعنی در میان سفارشات نمایش داده شده در برگه "تجارت" پنجره "ترمینال" انتخاب می شود.

mode_history - سفارش در سفارشات بسته و حذف شده ، یعنی در میان سفارشات نمایش داده شده در برگه "تاریخچه حساب" از پنجره "ترمینال" انتخاب می شود. در این حالت ، عمق تاریخ مشخص شده توسط کاربر برای نمایش سفارشات بسته و حذف شده مهم است.

به منظور نشان دادن روش استفاده از توابع تجاری برای بسته شدن سفارشات بازار ، بیایید یک مشکل را حل کنیم:

 

مشکل 28. یک اسکریپت بنویسید که یکی از سفارشات بازار موجود در حساب را ببندد. اجرای اسکریپت باید منجر به بسته شدن سفارش نزدیک به محل اسکریپت متصل به پنجره نماد با موش شود.

فرض کنید سه سفارش بازار در ترمینال برای نماد EUR/USD افتتاح شده است و یک دستور در حال تعلیق برای USD/CHF باز شده است:

شکل 90. نمایش چندین سفارش برای نمادهای مختلف در پنجره ترمینال.

ما باید چنین اسکریپتی بنویسیم که می تواند توسط ماوس از پنجره "Navigator" به پنجره نماد کشیده شود ، که باید منجر به بسته شدن یکی از سفارشات بازار شود ، یعنی سفارش نزدیک به مکان نما (از لحظه ای که در آن لحظهکاربر دکمه ماوس را منتشر کرد). در شکل 91 ، می توانید گزینه دیگری را مشاهده کنید ، که در آن مکان نما نزدیکترین برای سفارش فروش 4372889 است. این دستور است که باید در نتیجه اجرای اسکریپت بسته شود.

شکل 91. اسکریپت closeorder. mq4 برای بسته شدن سفارش انتخاب شده استفاده می شود.

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

بیایید در نظر بگیریم که چه پارامترهایی باید در سفارشات انتخاب شده () مشخص شود تا ویژگی های سفارش فوق را بدست آورید.

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

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

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

برای (در نظر گرفتن i=1; iحاد(); i++) // چرخه برای همه سفارشات ..  // در ترمینال نمایش داده می شود if(انتخاب کردن(i-1,select_by_pos)==درست است، واقعی)// اگر مورد بعدی وجود داشته باشد  // ویژگی های سفارش .. // .. در اینجا مورد تجزیه و تحلیل قرار می گیرد > > // پایان بدن چرخه

در هر تکرار ، هنگامی که شرط در اپراتور "if" محاسبه می شود ، عملکرد سفارش (i-1 ، select_by_pos) اجرا می شود. موضوع مهم زیر باید در اینجا ذکر شود:

 

شماره گذاری سفارشات در لیست بازار و سفارشات در انتظار با صفر شروع می شود.

این بدان معنی است که مرتبه اول در لیست (شکل 90) در موقعیت صفر قرار می گیرد ، موقعیت مرتبه دوم به صورت 1 شماره گذاری می شود ، از مرتبه سوم به عنوان 2 و غیره شماره گذاری می شود. به همین دلیل در عملکردتماس با سفارش () ، مقدار شاخص به عنوان I-1 آورده شده است. بنابراین ، برای همه سفارشات انتخاب شده ، این شاخص همیشه 1 کمتر از مقدار متغیر I خواهد بود (که همزمان با تعداد تکرار بعدی است).

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

طبق کد نشان داده شده در شکل 64. 3 ، در عنوان اپراتور "if" ، این برنامه تجزیه و تحلیل می کند که آیا سفارش بعدی در لحظه انتخاب در لیست سفارش موجود است. اگر سفارش بعدی در دسترس باشد ، کنترل برای پردازش پارامترهای سفارش به بدنه اپراتور منتقل می شود. لازم به ذکر است که در صورت بروز درگیری های احتمالی ، چنین ساخت و سازها کمکی نمی کند ، زیرا در هنگام پردازش پارامترهای آن می توان این دستور را از دست داد (بسته). با این حال ، این راه حل به نظر می رسد که اگر از لحظه انتخاب آن ، سفارش دیگر در دسترس نباشد. در بدنه اپراتور 'if' ، پارامترهای ترتیب انتخاب شده مورد تجزیه و تحلیل قرار می گیرند. هنگام اجرای توابع OrderOpenPrice () ، OrderTicket () ، OrderType () و دیگران از این نوع ، هر یک از آنها ارزش یک ویژگی خاص از سفارش را که در نتیجه اجرای سفارشات عملکرد انتخاب شده است ، باز می گردانند.

تمام استدلال فوق در برنامه مورد استفاده قرار گرفت که مشکل 28 را حل می کند.

 

نمونه ای از یک اسکریپت ساده در نظر گرفته شده برای بسته شدن سفارش بازار ، که قیمت باز آن به مکان پیوست اسکریپت نزدیکتر از قیمت های باز سایر سفارشات است (closeorder. mq4).
//-------------------------------------------------------------------------------------- // closeorder. mq4 // کد فقط باید برای اهداف آموزشی استفاده شود. // --------------------------------------------------------------------------------------------- 1- در نظر گرفتن شروع() // عملکرد ویژه "شروع"  رشته سد=سمبل(); // سمبل دو برابر دور=1000000. 0; // پیش از در نظر گرفتن _=-1; // هنوز سفارشات بازار وجود ندارد دو برابر برنده_انه=ویندوز(); // فیلمنامه در اینجا کنار گذاشته شده است // -------------------------------------------------------------------------------------------- 2- برای(در نظر گرفتن i=1; iحاد(); i++) // سفارش چرخه جستجو  if (انتخاب کردن(i-1,select_by_pos)==درست است، واقعی) // اگر مورد بعدی موجود است  // تجزیه و تحلیل سفارش: // ----------------------------------------------------------------------------------- 3- if (ترتیب()!= سد) ادامه هید; // نماد مال ما نیست در نظر گرفتن نکته=نوع سفارش(); // نوع سفارش if (نکته>1) ادامه هید; // سفارش معلق // ----------------------------------------------------------------------------------- 4- دو برابر قیمت=سفارش(); // سفارش قیمت if (عادی شده(ماتاب(قیمت-برنده_انه),رقم) //انتخاب عادی شده(دور,رقم)) // از نزدیکترین سفارش  دور=ماتاب(قیمت-برنده_انه); // مقدار جدید _=نکته; // سفارش بازار موجود است در نظر گرفتن بلیط=سفارش(); // سفارش بلیط دو برابر بخش=ترتیب(); // مقدار مقدار زیادی > // ----------------------------------------------------------------------------------- 5- > // پایان تحلیل سفارش > // پایان سفارش جستجو // -------------------------------------------------------------------------------------------- 6- در حالی که(درست است، واقعی) // چرخه بسته شدن  if (_==-1) // اگر سفارش بازار موجود نیست  هشدار دادن("برای ",سد," هیچ سفارش بازار در دسترس نیست"); زنگ تفريح; // چرخه بسته شدن > // ------------------------------------------------------------------------------------ 7- تعویض(_) // با نوع سفارش  مورد 0: دو برابر CLS_CLS=پیشنهاد; // سفارش خرید رشته متن="خرید کردن "; // متن برای خرید زنگ تفريح; // سوئیچ з مورد 1: CLS_CLS=پرسیدن; // سفارش فروش متن="فروش "; // متن برای فروش > هشدار دادن("تلاش برای بستن ",متن," ",بلیط,"بشردر انتظار پاسخ .."); بول عید=سفارش(بلیط,بخش,CLS_CLS,2);// سفارش بسته شدن // ------------------------------------------------------------------------------------ 8- if (عید==درست است، واقعی) // فهمیدم!:)  هشدار دادن ("سفارش بسته ",متن," ",بلیط); زنگ تفريح; // چرخه بسته شدن > // ------------------------------------------------------------------------------------ 9- در نظر گرفتن خطا=گلیستور(); // ناموفق :( تعویض(خطا) // خطاهای قابل استفاده  مورد 135:هشدار دادن("قیمت تغییر کرده استامتحان مجدد .."); تازه کردن(); // بروزرسانی اطلاعات ادامه هید; // در تکرار بعدی مورد 136:هشدار دادن("بدون قیمتمنتظر یک کنه جدید .."); در حالی که(تازه کردن()==دروغ) // به کنه جدید خواب(1); // چرخه خواب ادامه هید; // در تکرار بعدی مورد 146:هشدار دادن("زیر سیستم تجارت شلوغ است. امتحان مجدد .."); خواب(500); // راه حل ساده تازه کردن(); // بروزرسانی اطلاعات ادامه هید; // در تکرار بعدی > تعویض(خطا) // خطاهای بحرانی  مورد 2 : هشدار دادن("خطای مشترک"); زنگ تفريح; // خروج از سوئیچ " مورد 5 : هشدار دادن("نسخه قدیمی ترمینال مشتری."); زنگ تفريح; // خروج از سوئیچ " مورد 64: هشدار دادن("حساب مسدود شده است."); زنگ تفريح; // خروج از سوئیچ " مورد 133:هشدار دادن("تجارت ممنوع است"); زنگ تفريح; // خروج از سوئیچ " پیش فرض: هشدار دادن("خطا رخ داده است ",خطا);// گزینه های دیگر > زنگ تفريح; // چرخه بسته شدن > // ------------------------------------------------------------------------------------------- 10- هشدار دادن ("این اسکریپت عملیات را به پایان رسانده است -----------------------------"); برگشت; // شروع به کار () > // --------------------------------------------------------------------------------------------- 11-

کل کد برنامه closeorder. mq4 در شروع عملکرد ویژه () متمرکز است. در بلوک 1-2 ، برخی از متغیرها آغاز می شوند. فاصله متغیر فاصله از مکانی است که اسکریپت به نزدیکترین مرتبه کاهش یافته است. متغیر Real_order پرچمی است که در دسترس بودن حداقل یک سفارش بازار در ترمینال مشتری (ارزش غیر منفی) را نشان می دهد. متغیر win_price قیمت است که در آن کاربر اسکریپت را به پنجره نماد وصل کرده است. در بلوک 2-6 ، سفارش مورد تجزیه و تحلیل قرار می گیرد: یکی از سفارشات موجود برای بسته شدن اختصاص داده شده است. بلوک 6-10 بلوک بستن سفارش و پردازش خطاهایی است که می تواند در هنگام انجام تجارت رخ دهد.

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

در چرخه 'for' (بلوک 2-6) ، سفارشات در بلوک 2-3 جستجو می شوند ، برنامه بررسی می کند که آیا در خط بعدی "ترمینال" سفارش وجود دارد یا خیر. اگر سفارش پیدا شود ، کنترل به بدنه اپراتور "اگر" برای گرفتن و تجزیه و تحلیل ویژگی های آن ترتیب منتقل می شود. در بلوک 3-4 ، سفارشات برای نمادهای اشتباه (نه نمادی که برنامه برای آن اجرا می شود) باز شده است. در مورد ما ، این سفارش 4372930 برای USD/CHF باز شده است. عملکرد سفارشات () نام نماد سفارش انتخاب شده را برمی گرداند. اگر این نام نماد غیر از این باشد ، که برای آن برنامه اجرا می شود ، تکرار فعلی شکسته می شود و مانع از آن می شود که سفارش برای پردازش نماد دیگر باز شود. اگر به نظر می رسد که سفارش تحت تجزیه و تحلیل برای نماد "ما" باز شود ، یک بررسی دیگر انجام می شود. نوع سفارش با استفاده از Function OrderType () تعیین می شود (انواع معاملات را ببینید). اگر نوع سفارش بیش از 1 باشد ، به این معنی است که سفارش در انتظار است. در این حالت ، تکرار فعلی نیز قطع می شود ، زیرا ما علاقه ای به سفارشات نداریم. به عنوان مثال ، ما چنین نظمی داریم ، اما برای نمادی دیگر باز شده است ، بنابراین قبلاً فیلتر شده است. تمام سفارشاتی که با موفقیت 3-4 بلوک را پشت سر می گذارند ، بازار هستند.

بلوک 4-5 برای انتخاب تنها یک سفارش از کلیه سفارشات بازار که با موفقیت از بلوک قبلی عبور کرده اند ، در نظر گرفته شده است. این سفارش باید نزدیکترین قیمت از پیش تعریف شده (مقدار متغیر win_price) باشد. کاربر ملزم به "مشخص کردن" خط سفارش با مکان نما موس خود نیست. ترتیب نزدیکتر از هر سفارش دیگر به مکان نما از لحظه راه اندازی اسکریپت برای اجرای. قیمت باز سفارش پردازش شده با استفاده از عملکرد OrderOpenPrice () یافت می شود. اگر مقدار مطلق فاصله بین قیمت سفارش فعلی و "قیمت مکان نما" برای ترتیب قبلی کمتر از همان فاصله باشد ، ترتیب فعلی انتخاب می شود (مقدار مطلق فاصله برای استثناء لازم استتأثیر موقعیت مکان نما - در زیر یا بالاتر از خط سفارش). در این حالت ، این دستور در تکرار فعلی چرخه "for" به عنوان یک پیشکسوت برای بسته شدن به خاطر می آید. برای این سفارش ، شماره بلیط (شماره فردی سفارش) و مقدار تعداد زیادی در انتهای بلوک 4-5 محاسبه می شود. در این مثال (شکل 90) ، کل سفارشات چهار (سه بازار و یک سفارش در انتظار) است ، بنابراین چهار تکرار در چرخه "for" اجرا می شود ، که منجر به یافتن تمام داده های لازم برای بسته شدن خواهد شد. از یک سفارش انتخاب شده.

سپس کنترل در برنامه اجرا به اپراتور چرخه "در حالی که" (بلوک 6-10) منتقل می شود. در بلوک 6-7 ، سفارشات بازار یافت شده برای در دسترس بودن بررسی می شود. اگر هیچ سفارش بازار در بلوک 2-4 یافت نشود (به طور کلی کاملاً ممکن است) ، ارزش پرچم Real_order برابر ب ا-1 است ، این به معنای عدم دسترسی به سفارشات بازار است. اگر بررسی در بلوک 6-7 هیچ سفارش بازار را تشخیص دهد ، اجرای چرخه "در حالی که" شکسته است ، برنامه سپس عملیات خود را به پایان می رساند. اگر مقدار متغیر Real_order برابر با 0 یا 1 باشد ، این بدان معنی است که یک بازار برای بسته شدن از پیش تعریف شده است و باید بسته شود.

در بلوک 7-8 ، با توجه به نوع سفارش ، قیمت نزدیک سفارش محاسبه می شود. این ارزش پیشنهاد برای سفارشات خرید و ارزش درخواست سفارشات فروش است (به الزامات و محدودیت ها در انجام معاملات مراجعه کنید).

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

بول عید=سفارش(بلیط,بخش,CLS_CLS,2);// سفارش بسته شدن

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

در ابتدای بلوک 9-10 ، کد خطا محاسبه می شود. پس از آن ، با توجه به کد خطا ، یا خروج برنامه یا عملکرد مکرر اجرا می شود. در اولین "سوئیچ" اپراتور ، این برنامه خطاهایی را که به طور ضمنی قابل استفاده هستند پردازش می کند ، یعنی خطاها می توانند به عنوان مشکلات موقتی در انجام تجارت در نظر گرفته شوند. تمام اقدامات لازم برای هر یک از این خطاها انجام می شود ، سپس تکرار فعلی متوقف می شود و اجرای چرخه "در حالی که" شروع می شود.(لطفا توجه داشته باشید که ، در این مثال ، ما برای پردازش خطا از "سوئیچ" اپراتور که در نتیجه استفاده از اپراتور "ادامه" استفاده می کنیم ، استفاده می کنیم که ، به همین ترتیب ، برای عبور از کنترل خارج از اپراتور در نظر گرفته نشده است. سوئیچ '. این ساخت و ساز فقط به این دلیل کار می کند که "سوئیچ" اپراتور بخشی از محتویات اپراتور چرخه خارجی است "در حالی که" و اپراتور "ادامه می دهد" تکرار فعلی را با عبور از کنترل به عنوان اپراتور "در حالی که" قطع می کند).

اگر کد خطا در اولین "سوئیچ" اپراتور پردازش نشود ، این خطا بسیار مهم در نظر گرفته می شود. در این حالت ، کنترل به "سوئیچ" اپراتور دوم منتقل می شود ، که به منظور اطلاع کاربر به کاربر که یک یا یک خطای مهم دیگر رخ داده است ، اجرا می شود. علاوه بر این ، این برنامه از "شکست" اپراتور استفاده می کند که اجرای چرخه را در حالی که "را قطع می کند. خروج از چرخه "در حالی که" به هر دلیلی منجر به انتقال کنترل برای مسدود کردن 9-10 می شود که پیامی راجع به پایان عملیات برنامه تولید می کند."بازگشت" اپراتور اجرای عملکرد ویژه () را متوقف می کند و برنامه عملکرد خود را به پایان می رساند.

نتیجه عملی به دست آمده پس از راه اندازی فیلمنامه در شرایط بیان شده (شکل 90 و 91 را ببینید) در زیر نشان داده شده است. تجارت با موفقیت در سرور انجام شد.

شکل 92. پیام های دریافت شده در نتیجه اجرای موفقیت آمیز اسکریپت closeorder. mq4.

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

شکل 93. اجرای اسکریپت CloseRorder. MQ4 منجر به بسته شدن یکی از سفارشات می شود.

بسته شدن سفارش نیز در پنجره "ترمینال" نمایش داده شده است:

شکل 94. پس از اجرای اسکریپت closeorder. mq4 ، دو سفارش بازار در پنجره "ترمینال" نمایش داده می شود.

بعداً ، دو سفارش دیگر با استفاده از این اسکریپت نیز بسته شده اند.

حذف سفارشات در انتظار

درخواست های تجاری برای حذف سفارشات در حال تعلیق با استفاده از عملکرد OrderDelete () تشکیل می شود.

استراتژی برای تحلیل فاندمنتال...
ما را در سایت استراتژی برای تحلیل فاندمنتال دنبال می کنید

برچسب : نویسنده : سعید شیخ‌زاده بازدید : 29 تاريخ : سه شنبه 24 مرداد 1402 ساعت: 12:00