خطای نگاه به آینده یا Look-Ahead Bias زمانی رخ میدهد که یک سیستم در محاسبه تصمیم گذشته، از دادهای استفاده کند که در آن لحظه هنوز در دسترس نبوده است. تصور کنید استراتژی ادعا میکند ساعت ده صبح خرید کرده، اما شرط آن بر اساس قیمت بسته شدن کندل چهارساعتهای بوده که ساعت دوازده تکمیل شده است. در بک تست، اگر به ترتیب زمان توجه نکنیم، سیستم میتواند ظاهراً بهترین موقعیتها را انتخاب کند؛ در واقعیت چنین دانشی وجود نداشته است.
این خطا ممکن است عمدی نباشد و حتی در کدهای ظاهراً ساده رخ دهد. نتیجه آن معمولاً افزایش غیرواقعی وینریت، کاهش زیان یا ورودهای بیش از حد دقیق است. نکته مهم این است که هیچ معاملهگر واقعی نمیتواند پیش از انتشار یک داده از آن استفاده کند. بنابراین باید برای هر متغیر مشخص شود چه زمانی تولید شده و از چه لحظهای برای تصمیم معاملاتی مجاز بوده است. برای مروری بر فرآیند کلی، راهنمای بک تست استراتژی را مطالعه کنید.
فرض کنید قانون خرید شما این است که اگر کندل جاری بالاتر از مقاومت بسته شد، در همان کندل با قیمت میانی وارد شوید. چنین شرطی تناقض زمانی دارد: تا پایان کندل نمیدانید بسته شدن آن بالای مقاومت خواهد بود یا خیر. اگر تصمیم بر اساس بسته شدن گرفته میشود، ورود باید در لحظه بعدی یا طبق قاعدهای قابل اجرای واقعی مدل شود. حتی استفاده از بالاترین یا پایینترین قیمت کندل برای تعیین ترتیب برخورد حد ضرر و حد سود میتواند ابهام ایجاد کند.
در داده OHLC یک کندل، فقط چهار قیمت باز، بالا، پایین و بسته مشخص است و ترتیب دقیق حرکت داخل کندل لزوماً معلوم نیست. اگر هم حد سود و هم حد ضرر در دامنه یک کندل قرار گرفتهاند، نمیتوان بدون داده ریزتر دانست کدام ابتدا فعال شده است. راه محتاطانه استفاده از داده با تفکیک زمانی بالاتر، قواعد محافظهکارانه یا ثبت حالت مبهم است. فرض کردن فعال شدن هدف پیش از حد ضرر در تمام این موارد، سود تاریخی را به شکل غیرواقعی افزایش میدهد.
برخی اندیکاتورها پس از تشکیل چند کندل بعدی، یک نقطه چرخش را روی کندلهای قبل علامتگذاری میکنند. اگر در بک تست فرض کنید همان علامت در زمان کندل قدیمی قابل مشاهده بوده، درواقع از آینده خبر گرفتهاید. این مسئله در ابزارهای مبتنی بر پیوت تأییدشونده، بعضی نسخههای Zigzag و اندیکاتورهایی با بازنویسی تاریخی میتواند رخ دهد. باید زمان ایجاد واقعی سیگنال را از محل نمایش آن روی نمودار جدا کنید و اگر سیگنال با تأخیر مشخص میشود، ورود را نیز با همان تأخیر مدل کنید.
برای مثال، اگر یک سقف محلی تنها پس از مشاهده سه کندل بعد تأیید میشود، معاملهگر در خود کندل سقف هنوز نمیتواند آن را قطعی بداند. بک تستی که در لحظه سقف با آن اطلاعات فروش ثبت کند، واقعبینانه نیست. راهحل این است که هر شرط فقط از دادههایی استفاده کند که تا زمان تصمیم بسته و در دسترس بودهاند. در کدنویسی نیز باید جهت شیفتدادن سری زمانی و زمان محاسبه اندیکاتور با دقت بررسی شود.
نشت اطلاعات یا Data Leakage مفهوم گستردهتری است و زمانی رخ میدهد که اطلاعاتی از بخش آزمون یا آینده به فرایند آموزش، انتخاب ویژگی یا تنظیم پارامترها راه پیدا کند. برای مثال، اگر میانگین و انحراف معیار کل مجموعه داده را محاسبه و قبل از تقسیم زمانی برای نرمالسازی استفاده کنید، آمار دوره آینده بر مقادیر گذشته اثر میگذارد. همین اتفاق در انتخاب بهترین اندیکاتورها بر اساس کل تاریخچه و سپس معرفی بخشی از همان تاریخچه بهعنوان «آزمون مستقل» رخ میدهد.
بهتر است تمام مراحل پردازش داده، از حذف مقادیر غیرعادی تا مقیاسبندی، فقط با داده آموزشی همان مقطع انجام شوند. سپس تبدیلهای آموختهشده بدون نگاه به آینده بر دوره آزمون اعمال شوند. در استراتژیهای مبتنی بر رویداد خبری نیز تاریخ رویداد کافی نیست؛ باید زمان واقعی انتشار داده یا اصلاح بعدی آن را بدانید. در صورت نبود زمان دقیق دسترسی، استفاده از تأخیر محافظهکارانه منطقیتر از فرض آگاهی فوری در گذشته است.
بایاس بقا یا Survivorship Bias زمانی رخ میدهد که مجموعه آزمون فقط داراییهایی را شامل شود که تا امروز باقی ماندهاند یا موفق بودهاند. فرض کنید برای بک تست آلتکوینهای چند سال پیش فقط ده رمزارز بزرگ فعلی را انتخاب کنید. پروژههایی که از فهرست صرافی حذف شدهاند، نقدشوندگی خود را از دست دادهاند یا سقوط شدید داشتهاند از نمونه کنار میمانند. نتیجه ممکن است استراتژی را بهتر از تجربه واقعی معاملهگری آن دوره نشان دهد، چون بخشی از داراییهای ناموفق حذف شدهاند.
برای کاهش این خطا، در صورت امکان فهرست داراییها را بر اساس وضعیت واقعی هر تاریخ بازسازی کنید. تاریخ لیست شدن و حذف شدن نمادها، تغییر نام توکنها و وقفههای داده را ثبت کنید. اگر چنین دادهای در دسترس نیست، محدودیت را در گزارش بنویسید و نتیجه را با احتیاط تفسیر کنید. بایاس بقا با خطای نگاه به آینده یکی نیست، اما هر دو میتوانند از طریق دانستن نتایج آینده، ارزیابی گذشته را خوشبینانه کنند.
بهترین دفاع، طراحی فرآیند زمانمحور است. دادههای قدیمیتر برای توسعه و انتخاب پارامتر استفاده شوند و بازه جدیدتر تا پایان طراحی دستنخورده باقی بماند. اگر لازم است مدل بهطور دورهای بهروزرسانی شود، از آزمون چندپنجرهای استفاده کنید و در هر مرحله فقط به دادههای قبل از زمان تصمیم اجازه ورود دهید. برای بررسی روش مناسب، آموزش Walk-Forward Optimization را در کنار مفهوم نشت اطلاعات مطالعه کنید.
حتی پس از تقسیم زمانی، ممکن است با نگاه چندباره به نتیجه آزمون و انتخاب نسخهای که در آن بهتر عمل کرده، داده آزمون عملاً وارد فرآیند طراحی شود. تعداد دفعات استفاده از مجموعه آزمون را ثبت کنید و در صورت تغییرهای اساسی، مجموعه جدیدی برای ارزیابی نهایی کنار بگذارید. آزمون معتبر باید در نقش شبیهسازی آینده عمل کند، نه صفحهای برای تنظیم بیپایان استراتژی. برای تحقیق تخصصیتر، مستندات راهنمای پژوهش QuantConnect مثالهایی از این سوگیری ارائه میکند.
بازار کریپتو بهصورت شبانهروزی فعال است و دادههای آن میان صرافیها تفاوت دارند. هنگام بک تست باید منطقه زمانی کندلها، نوع بازار اسپات یا فیوچرز، قیمت مرجع و واحد حجم مشخص باشند. اگر یک نماد در میانه تاریخ از صرافی حذف شده یا قرارداد آن تغییر کرده، داده نباید بدون توضیح به هم چسبانده شود. همچنین قیمتهای غیرعادی ناشی از خطای داده یا کمبود نقدینگی ممکن است نتیجه را بهشدت تغییر دهند و باید طبق قاعده از پیش تعریفشده بررسی شوند.
استفاده از نرخ فاندینگ، اوپن اینترست یا دادههای آنچین نیز نیازمند توجه به زمان ثبت و انتشار است. برای نمونه، اگر دادهای چند دقیقه بعد از پایان بازه اعلام میشود، نباید آن را در ابتدای همان بازه به استراتژی بدهید. حتی یک تأخیر کوچک ممکن است در معاملات کوتاهمدت مهم باشد. تاریخ دریافت داده را همراه با زمان رویداد نگه دارید و مشخص کنید کدام تاریخ برای تصمیم مجاز است. این کار بازتولید آزمون را آسانتر میکند.
برای کنترل خطای نگاه به آینده، هر سیگنال را همراه با زمان دقیق قابل مشاهده شدن آن ثبت کنید. کندل بستهنشده را قطعی فرض نکنید، ترتیب مبهم حد سود و ضرر در کندل را به سود خود تفسیر نکنید، و همه تبدیلهای داده را بر اساس اطلاعات همان مقطع اجرا کنید. برای بایاس بقا نیز داراییهای حذفشده و دادههای ناقص را شناسایی کنید. پس از هر تغییر کد یا قانون، نمونهای از معاملات را دستی بازبینی کنید تا مطمئن شوید زمان ورود و خروج منطقی است.
آیا خطای نگاه به آینده فقط در الگوریتمهای خودکار رخ میدهد؟ خیر؛ در بک تست دستی نیز ممکن است. آیا تقسیم داده به آموزش و آزمون بهتنهایی کافی است؟ نه؛ پیشپردازش و انتخاب پارامتر هم نباید آینده را ببیند. آیا تمام سیگنالهای پیوت اشتباهاند؟ خیر؛ مشکل زمانی است که زمان تأیید آنها نادیده گرفته شود. اگر از ایدههای منتشرشده استفاده میکنید، بررسی سیگنال رایگان کریپتو بدون سوگیری زمانی را با زمان انتشار واقعی پیام و قیمت قابل اجرای آن بسنجید، نه با نموداری که بعدها کامل شده است.