زمان اکسپرت را دقیق تعریف کن
فرض کن یک اکسپرت معاملاتی (Expert Advisor یا EA) فقط در یک بازه مشخص از روز اجازه بررسی سیگنال دارد. اگر این بازه را بر اساس ساعت گوشی تنظیم کنی اما اکسپرت از زمان سرور بروکر استفاده کند، تصمیمها ممکن است در لحظه دیگری گرفته شوند. پیش از دیدن نمودار سود و زیان، باید مشخص باشد ساعت مرجع قانون تو دقیقاً چیست. ساعت تهران، ساعت ویندوز، ساعت سرور و ساعت شبیهسازیشده بکتست الزاماً یک چیز نیستند.
در زبان برنامهنویسی MQL5، تابع TimeCurrent آخرین زمان شناختهشده سرور در هنگام دریافت مظنه را برمیگرداند. داخل OnTick، یعنی رویداد دریافت قیمت تازه، زمان همان مظنهای است که در حال پردازش است. اما در رویدادهای دیگری مانند OnTimer یا «رویداد زمانسنج» میتواند زمان آخرین مظنه یکی از نمادهای پنجره Market Watch یا «دیدهبان بازار» باشد [۱]. اگر بازار بسته باشد، این زمان لزوماً مانند ساعت دیواری هر ثانیه جلو نمیرود.
زمان تخمینی سرور چه فرقی دارد؟
تابع TimeTradeServer زمان فعلی سرور را به صورت محاسبهشده تخمین میزند. طبق مستندات رسمی، این محاسبه در ترمینال انجام میشود و به تنظیمات زمان رایانه وابسته است [۲]. پس اگر اکسپرت از یک لپتاپ به VPS یا سرور مجازی منتقل شد، نباید بدون آزمون فرض کنی تمام تصمیمهای زماندار دقیقاً همان رفتار قبلی را دارند. برای هر رویداد، نام تابع زمان و مقدار مشاهدهشدهاش را ثبت کن.
تعویض محل VPS نیز به معنی تعویض منطقه زمانی سرور معاملاتی بروکر نیست. همینطور داشتن ساعت محلی صحیح تضمین نمیکند که اختلاف زمانی سرور تا UTC، یعنی زمان هماهنگ جهانی، در تمام تاریخها ثابت باشد. برای کدی که به جلسه معاملات وابسته است، «فاصله زمانی بروکر» را یک فرض قابل بررسی بنویس؛ آن را قانون همیشگی بازار تصور نکن.
مثال کاملاً فرضی با ساعت ۹ و نمودار پانزدهدقیقهای
در یک سناریوی صددرصد فرضی، همزمان که ساعت سرور ۰۹:۰۰ است، ساعت محلی تو ۱۰:۳۰ را نشان میدهد. اگر دستور آزمون میگوید «بررسی از ۰۹:۰۰ تا ۱۰:۰۰ به وقت سرور» و نفر بعدی همین بازه را به وقت تهران تفسیر کند، دو آزمایش متفاوت انجام شده است. اختلاف ۹۰ دقیقه در این مثال صرفاً برای آموزش است؛ ادعایی درباره ساعت واقعی هیچ بروکر یا قیمت زنده بازار نیست.
حالا فرض کنیم اکسپرت روی تایمفریم M15، یعنی نمودار ۱۵ دقیقهای، قرار دارد. اولین مظنه فرضیِ یک بازه ساعت ۰۹:۰۰:۰۷ میرسد؛ تصمیم «مجاز برای ارزیابی» است. اولین مظنه یک بازه دیگر ساعت ۱۰:۰۰:۰۲ میرسد؛ چون از مرز فرضی گذشته، تصمیم باید «رد ارزیابی» باشد. هدف از ثبت این موارد ساخت سیگنال نیست، بلکه قابل آزمون کردن رفتار اکسپرت در مرز ساعت است. مرزها را هم صریح تعریف کن: در این مثال شروعِ ۰۹:۰۰ مجاز است، اما خودِ ۱۰:۰۰ و زمانهای بعد از آن مجاز نیستند. این قاعده فقط برای ارزیابی تازه است و به معنی کنارگذاشتن مدیریت ریسک موقعیتهای موجود نیست.
دام ساعت GMT در Strategy Tester
در Strategy Tester یا «آزمونگر استراتژی» متاتریدر، ساعتها شبیهسازی میشوند. مستند رسمی MQL5 میگوید در بکتست، TimeTradeServer و TimeCurrent با هم برابر میشوند و TimeGMT نیز برابر زمان شبیهسازیشده سرور است [۲، ۳]. راهنمای محدودیتهای آزمون تأکید میکند که در همین محیط، ساعت محلی، GMT و ساعت سرور عمداً برابر در نظر گرفته میشوند [۴]. بنابراین مشاهده اختلاف صفر بین این توابع در بکتست به معنی UTC بودن همیشگی سرور واقعی بروکر نیست.
اگر قرار است یک اکسپرت را در بازههای فصلی مختلف بسنجی، برای تاریخهای مهم یک جدول تبدیل زمان همراه با منبع و تاریخ معتبر بساز. از اختلافِ زمان شبیهسازیشده توابع، تاریخچه واقعی تغییر ساعت بروکر را استنتاج نکن. همچنین نگهداشتن نتیجه مثبت یک دوره و حذف نتایج نامطلوب دوره دیگر، اعتبار آزمون را از بین میبرد.
تمرین عملی بدون معامله واقعی
در حساب دمو یک آزمایش بدون ارسال سفارش طراحی کن. برای هر رویداد پنج چیز را ثبت کن: نماد و بروکر، ساعت مورد انتظار جلسه، TimeCurrent، TimeTradeServer و تصمیم نهایی فیلتر. مشخص کن رویداد از OnTick آمده یا از OnTimer. سه حالت را جدا بررسی کن: شرایط معمول بازار، مظنههای کمتعداد و چند ثانیه قبل و بعد از پایان بازه. اگر داده لازم موجود نیست، با دلیل مشخص «بدون ارزیابی» ثبت کن.
در آزمون تاریخی تاریخ شروع و پایان، تایمفریم و تنظیمات را ثابت نگه دار. سپس فقط یک فرض زمانی را تغییر بده و تفاوت تصمیمها را یادداشت کن. این تمرین را میتوانی با درس رایگان مقدماتی ترید آغاز کنی و نیازی به خرید دوره، واریز پول یا فعالکردن معاملات واقعی ندارد. این مقاله آموزشی است، نه توصیه معامله، سیگنال زنده یا تضمین سود.