چگونه خطای 130 در MT4 EA را عیبیابی کنیم؟ روش چهار مرحلهای از فاصله حد ضرر تا محدودیتهای پویا
با یک فلوچارت آبی روشن اصیل و گامبهگام، ERR_INVALID_STOPS در MT4 EA را بررسی کنید: لاگها، دقت قیمت، MODE_STOPLEVEL و محدودیتهای پویا، تا از پنهان کردن ریسک با شل کردن حد ضرر جلوگیری شود.
نویسنده: توماس|عملیات EA و MT4|۲۰ اکتبر ۲۰۲۶
وقتی EA روی چارت قرار گرفته و معاملات خودکار فعال است، اما هنگام ارسال سفارش «130» ظاهر میشود، معمولاً این تصور پیش میآید که برنامه کاملاً خراب شده است. مستندات مرجع MQL4 کد 130 را به عنوان ERR_INVALID_STOPS فهرست میکند: حد ضرر و حد سود در درخواست، قیمت سفارش معلق یا نحوه نرمالسازی آنها توسط سرور معاملاتی پذیرفته نشده است. این یک سرنخ برای عیبیابی است، نه دلیلی برای شل کردن کورکورانه حد ضرر. این مقاله با روش چهار مرحلهای عیبیابی توضیح میدهد که کدام سوابق را باید بررسی کرد.
مرحله اول: ابتدا مشخص کنید کدام درخواست شکست خورده است
لاگهای مرتبط با ترمینال MT4 یا برنامه را باز کنید و زمان سرور خطا، نماد، جهت سفارش، اینکه عملیات OrderSend بوده یا OrderModify، و کد خطای برگشتی را ثبت کنید. اگر لاگ فقط شامل «سفارش ناموفق» است، ابتدا از EA بخواهید بدون خروجی دادن دادههای حساس مانند رمز عبور، قیمت درخواست، حد ضرر، حد سود و مقدار برگشتی را ثبت کند. ابتدا بین شکست باز کردن پوزیشن، شکست تغییر حد ضرر و شکست سفارش معلق تمایز قائل شوید؛ روابط قیمتی که این سه مورد بررسی میکنند متفاوت است.
در حساب واقعی با ارسال مکرر همان درخواست ناموفق «شانس خود را امتحان نکنید». تلاشهای تکراری ممکن است بار اضافی ایجاد کند و همچنین ممکن است پس از تغییر شرایط بازار به طور ناگهانی موفق شوند و پوزیشن ناخواسته ایجاد کنند. ابتدا در محیط شبیهسازی بازتولید کنید و نسخه پارامترها و قیمتهای پلتفرم در آن زمان را نگه دارید.
مرحله دوم: Bid، Ask، Point و Digits را بررسی کنید
MarketInfo در MQL4 میتواند Bid، Ask، Point و Digits نماد فعلی را بخواند. Point یکی از کوچکترین واحدهای نمایشی آن قیمت است و Digits تعداد ارقام اعشار را نشان میدهد؛ اینکه «۱۰ پوینت» برابر با چند دلار است باید بر اساس Point واقعی آن نماد محاسبه شود و نمیتوان کد طلا و دقت کارگزاران مختلف را با هم اشتباه گرفت. قیمت قبل از ارسال باید بر اساس تعداد ارقام مربوطه نرمالسازی شود.
مثال فقط برای نمایش ریاضی است: اگر Point یک نماد شبیهسازیشده 0.01 و حداقل فاصله ۵۰ پوینت باشد، فاصله محاسبهشده 0.50 واحد قیمتی است؛ اگر نماد Point برابر 0.001 داشته باشد، این مقدار 0.05 خواهد بود. این اعداد نشاندهنده قوانین قرارداد واقعی هیچ پلتفرمی در امروز نیستند. هنگام بررسی لاگها قیمت خرید و فروش را همزمان ذخیره کنید تا از بررسی سمتی که باید به قیمت خرید مراجعه کند با قیمت فروش، یا برعکس، جلوگیری شود.
مرحله سوم: MODE_STOPLEVEL و نوع سفارش را بررسی کنید
مستندات رسمی OrderSend توضیح میدهد که حد ضرر و حد سود نباید بیش از حد به قیمت بازار نزدیک باشند؛ قیمت باز شدن预定 سفارش معلق نیز نباید بیش از حد به بازار فعلی نزدیک باشد. میتوان با MarketInfo(Symbol(),MODE_STOPLEVEL) حداقل فاصله عمومی را که واحد آن پوینت است پرسوجو کرد. سپس بر اساس اینکه سفارش خرید، فروش یا کدام نوع سفارش معلق است، جهت قیمت، فاصله و نرمالسازی را جداگانه بررسی کنید، نه اینکه یک آفست ثابت را روی همه سفارشها اعمال کنید.

تصویر بالا یک نمودار فرآیند اصیل است و هیچ قیمت واقعی یا اطلاعات حساب ندارد. حداقل فاصله فقط مرز فنی پذیرش سفارش توسط سرور است و برابر با فاصله حد ضرر منطقی از نظر استراتژی نیست. اگر برای دور زدن 130 حد ضرر را دورتر کنید، ریسک هر معامله که قبلاً برنامهریزی شده بود بزرگتر میشود؛ ابتدا باید حجم پوزیشن را دوباره محاسبه کنید و در صورت لزوم از آن معامله صرفنظر کنید.
مرحله چهارم: بازگشت 0 نیز به معنای نبود محدودیت نیست
توضیحات رسمی MQL4 درباره MODE_STOPLEVEL به طور ویژه هشدار میدهد: بازگشت 0 ممکن است به معنای نبود حداقل فاصله ثابت باشد، یا ممکن است سرور از محدودیت پویایی استفاده کند که ترمینال نمیتواند مستقیماً آن را نمایش دهد. در حالت دوم همچنان ممکن است 130 برگردد. بنابراین «وقتی 0 را دیدید حد ضرر را چسبیده به قیمت بگذارید» درست نیست. هنگام تغییرات شدید بازار، بهروزرسانی قیمتها، تغییر اسپرد و قوانین سمت سرور نیز ممکن است فاصلهای را که قبلاً محاسبه شده بود بیاعتبار کند.
اگر فرمول کد با لاگ آن زمان مطابقت دارد و همچنان 130 دریافت میکنید، زمان شکست، نماد، پارامترهای سفارش و نسخه پلتفرم را نگه دارید، مشخصات نماد و محدودیتهای سفارش کارگزار را بررسی کنید و با پشتیبانی فنی پلتفرم تماس بگیرید. قوانین این حساب را از روی Point و StopLevel پلتفرم دیگری استنباط نکنید و بیش از این با حذف حد ضرر دلیل واقعی شکست را پنهان نکنید.
ترتیب تأیید پس از رفع مشکل
ابتدا در حساب شبیهسازیشده حداقل نمونه قابل بازتولید را اجرا کنید: با همان نماد چهار پارامتر قیمتی و StopLevel را ثبت کنید، یک درخواست آزمایشی ارسال کنید و پاسخ سرور و وضعیت سفارش را بررسی کنید. سپس رفتار در شرایط تغییر سریع قیمت یا ساعات معاملاتی مختلف را آزمایش کنید. تأیید کنید که برنامه مکانیزم توقف یا خنکسازی پس از شکست دارد و در تلاش مجدد پوزیشن تکراری باز نمیکند. در نهایت بررسی کنید که بودجه ریسک، اسپرد و زیان قابل قبول همچنان با برنامه اولیه مطابقت دارند.
تمرکز عیبیابی خطای 130 بر «چرا درخواست رد شد» است، نه «چگونه آن را به زور وادار به انجام معامله کنیم». نتایج اجرای EA همچنین تحت تأثیر منطق استراتژی، شبکه و اجرای پلتفرم است؛ هیچ رفعی تضمین سود یا جلوگیری از ضرر نیست. معاملات با اهرم ممکن است منجر به زیان قابل توجه شود.