کد خطا را از حدس جدا کن
اگر اکسپرت متاتریدر ۵ درخواست معامله را با کد 10014 ردشده ثبت کند، نام رسمی آن TRADE_RETCODE_INVALID_VOLUME یا «حجم نامعتبر در درخواست» است [۵]. این کد بهتنهایی ثابت نمیکند مشکل از سرمایه حساب، جهت معامله یا سرعت سرور است. برای عیبیابی باید حجم درخواستشده، نماد، نوع سفارش، زمان، مشخصات همان نماد و کد کامل نتیجه را کنار هم نگه داری.
خطای حجم را با TRADE_RETCODE_NO_MONEY برابر ندان. مرجع رسمی برای کمبود وجه کد 10019 را جدا ثبت میکند و برای رسیدن حجم تجمعی سفارشها و موقعیتها به محدودیت نماد نیز کد 10034 دارد [۵]. اگر فقط عبارت کوتاه «سفارش اجرا نشد» را ذخیره کنی، سه علت متفاوت در یک گزارش مبهم مخلوط میشوند و ممکن است پارامتر اشتباهی را تغییر بدهی.
چهار عدد را از خود نماد بخوان
ویژگیهای SYMBOL_VOLUME_MIN، SYMBOL_VOLUME_MAX و SYMBOL_VOLUME_STEP بهترتیب حداقل حجم معامله، حداکثر حجم معامله و کوچکترین گام تغییر حجم را معرفی میکنند [۱]. ویژگی SYMBOL_VOLUME_LIMIT نیز سقف مجموع حجم موقعیت باز و سفارشهای معلق در یک جهت را برای همان نماد مشخص میکند [۱، ۳]. این اعداد از نوع double هستند و با SymbolInfoDouble خوانده میشوند [۲].
مقدارهای یک نماد یا حساب را برای همه بروکرها کپی نکن. اگر SymbolInfoDouble شکست خورد، GetLastError را ثبت کن؛ برای نمونه، مستند رسمی خطای نماد ناشناخته و انتخابنشدن نماد در Market Watch را جدا میکند [۲]. مقدار صفر یا یک عدد قدیمی نباید بیصدا جای داده ناموجود بنشیند. در چنین وضعی فیلتر اکسپرت باید نتیجه را «پیششرط نامعتبر» بداند و ارسال سفارش را ادامه ندهد.
مثال کاملاً فرضی برای گام حجم
فرض کن مشخصات ساختگی یک نماد حداقل حجم 0.10 لات، حداکثر 5.00 لات و گام 0.05 لات باشد. درخواست 0.13 لات بین حداقل و حداکثر است، اما روی شبکه گام قرار نمیگیرد: اختلاف آن با 0.10 برابر 0.03 است و 0.03 بر 0.05 بخشپذیر نیست. در این مثال آموزشی، 0.10 و 0.15 دو مقدار مجاز مجاورند؛ این اعداد قیمت یا شرایط واقعی هیچ بروکری نیستند.
اکسپرت نباید برای ناپدیدکردن خطا، 0.13 را بیخبر به 0.15 گرد کند. گردکردن رو به بالا اندازه موقعیت، وجه لازم و زیان احتمالی را بیشتر میکند؛ گردکردن رو به پایین نیز ممکن است منطق اندازهگذاری استراتژی را عوض کند. سیاست امنتر این است که مقدار خارج از شبکه را با دلیل روشن رد کنی یا تصمیم گردکردن را به یک تنظیم صریح و آزمونشده بسپاری.
ماتریس آزمون بدون ارسال سفارش بساز
AutoTrading را خاموش نگه دار و فقط خروجی فیلتر داخلی را ثبت کن. برای مثال فرضی بالا، ردیفهای 0.05، 0.10، 0.13، 0.15، 5.00 و 5.05 لات را بساز. انتظار را پیش از اجرای کد بنویس: زیر حداقل، دقیقاً حداقل، خارج از گام، روی گام، دقیقاً حداکثر و بالاتر از حداکثر. یک ردیف هم برای شکست خواندن مشخصات نماد اضافه کن.
هر ردیف باید مقدار خام ورودی، حداقل، حداکثر، گام، مقدار محاسبهشده روی شبکه، تصمیم قبول یا رد و دلیل را داشته باشد. مقایسه اعشاری را با تلورانس کوچک و متناسب با دقت محاسبه انجام بده تا خطای نمایش ممیز شناور با یک اختلاف واقعی اشتباه نشود؛ اما تلورانس را آنقدر بزرگ نگیر که حجم نامعتبر را مجاز کند. این آزمون لاگمحور هیچ معامله دمو یا واقعی ارسال نمیکند.
OrderCheck کمک میکند، ولی تضمین اجرا نیست
پس از عبور از کنترل محلی و فقط در یک رویه دمو که جداگانه مجاز شده، OrderCheck میتواند پارامترهای درخواست و کافیبودن وجه را بررسی و نتیجه را در MqlTradeCheckResult قرار دهد [۴]. مستند رسمی صریح است که true شدن بررسی پایه تضمین نمیکند عملیات معاملاتی حتماً اجرا شود؛ جزئیات ساختار نتیجه و بعداً retcode واقعی باید جدا بررسی شوند [۴].
در این تمرین نیازی به OrderSend نیست. هدف این است که قبل از هر ارتباط معاملاتی بفهمی فیلتر حجم چگونه با داده معتبر، داده گمشده و مرزهای نماد رفتار میکند. حتی اگر حجم از نظر min، max و step درست باشد، محدودیت تجمعی حجم، وجه، وضعیت بازار، نوع سفارش و قواعد دیگر هنوز میتوانند نتیجه را تغییر دهند. یک چراغ سبز واحد برای همه این مراحل نساز.
برای ارزیابی یا خرید اکسپرت چه مدرکی بخواهی؟
از فروشنده یا توسعهدهنده بخواه نسخه برنامه، نماد و حساب آزمایش، چهار ویژگی حجم، ورودی خام، سیاست گردکردن و retcode کامل را نشان دهد. منحنی سود یا اسکرینشات یک معامله ثابت نمیکند ربات روی نمادی با گام متفاوت چگونه عمل میکند. فایل EX5 امکان آزمون رفتار قابلمشاهده را میدهد، اما ممیزی کامل منطق و مسیرهای خطا به کد MQ5 و وابستگیها نیاز دارد.
قدم عملی بعدی این است که همین ماتریس حداقل هفتردیفی را برای یک نماد دمو فقط در حالت لاگ اجرا کنی و همه ردها و وضعیتهای نامشخص را نگه داری. اگر اکسپرتت کد 10014 میدهد، پس از مشخصکردن محدوده و هزینه میتوانی بخش بررسی اکسپرت باماآپ را ببینی. این مطلب آموزش فنی است؛ نه سیگنال، نه نتیجه واقعی، نه توصیه حجم معامله و نه تضمین سود.