🎯 دانشکدهٔ ۹ · آزمون سیستم
بکتست و خطای نگاه به آینده
Backtesting & look-ahead bias
پیشنیازها: قواعد ورود و خروج
📚 آموزش در سه سطح
از سطح ساده شروع کنید؛ اگر روشن بود، سطح بعد را بخوانید. سطح مناسب شما ذخیره میشود.
🌱 توضیح ساده
بکتست (Backtest) یعنی اجرای دقیق قواعد سیستم روی دادههای گذشته برای دیدن اینکه چه نتیجهای میداد. بکتست یک «صافی» است: میتواند ایدههای بد را ارزان و سریع رد کند، اما نمیتواند ثابت کند ایدهای در آینده سودآور خواهد بود. گذشته فقط یک مسیر از میان مسیرهای ممکن است و بازار تغییر میکند.
مهمترین خطای بکتست «نگاه به آینده» (Look-ahead bias) است: استفاده از اطلاعاتی که در لحظهٔ تصمیم وجود نداشت. نمونهها: تصمیم خرید با قیمت بستهشدن روز و اجرای آن در قیمت باز شدن همان روز؛ استفاده از سقف یا کف روز پیش از پایان روز؛ اندیکاتوری که با پنجرهٔ متقارن و شامل دادههای بعدی محاسبه شده؛ یا انتخاب ارزها بر اساس فهرست امروزِ برترینها. نتیجهٔ چنین بکتستی معمولاً بیش از حد زیباست.
خطای دوم «سوگیری بقا» (Survivorship bias) است. اگر فقط روی ارزهایی که امروز وجود دارند آزمون کنید، هزاران توکنی را که در این سالها از فهرست صرافیها حذف شدند یا به صفر رسیدند نادیده گرفتهاید؛ و این دقیقاً همانهاییاند که سیستم ممکن بود در گذشته بخرد. دادهٔ درست باید شامل داراییهای حذفشده هم باشد.
📘 توضیح متوسط
هزینهها جزء جدانشدنی بکتستاند: کارمزد سازنده و پذیرنده (Maker/Taker)، اسپرد، لغزش قیمت، نرخ تأمین مالی قراردادهای دائمی و هزینهٔ قرض در فروش استقراضی. سیستمی با صدها معاملهٔ کوچک ممکن است پیش از هزینه سودده و پس از هزینه زیانده باشد. محافظهکارانه فرض کنید: لغزش بیشتر از معمول در زمان نوسان شدید و کارمزد پذیرنده برای سفارشهای بازار.
کیفیت داده را بسنجید: قیمت کدام صرافی؟ ساعت بستهشدن کندل روزانه؟ دادههای گمشده یا سایههای غیرواقعی صرافیهای کمنقدشونده؟ مهاجرت توکن یا تغییر نماد؟ بکتست را روی دادهای انجام دهید که به بازاری که واقعاً در آن معامله میکنید نزدیک باشد و تعداد معاملات کافی داشته باشد؛ ده معامله برای هیچ نتیجهگیری آماری کافی نیست.
داده را تقسیم کنید: بخش «دروننمونه» (In-sample) برای ساخت و تنظیم سیستم، و بخش «بروننمونه» (Out-of-sample) که فقط یک بار و در پایان برای آزمون استفاده میشود. روش پیشرفتهتر «تحلیل گامبهگام» (Walk-forward) است: بهینهسازی روی یک پنجره، آزمون روی پنجرهٔ بعدی و تکرار این چرخه. همیشه نتیجه را با دو معیار مقایسه کنید: خرید و نگهداری، و ورود تصادفی با همان قواعد خروج.
🔬 توضیح تخصصی
بیشبرازش (Overfitting) یعنی سیستم به جای الگوی واقعی، نویز گذشته را حفظ کرده است. هرچه پارامترها و آزمونها بیشتر، احتمال یافتن نتیجهٔ درخشانِ تصادفی بیشتر. Bailey، Borwein، López de Prado و Zhu در مقالهٔ «شبهریاضیات و شارلاتانبازی مالی» (Notices of the AMS، ۲۰۱۴) نشان دادند با آزمودن تعداد نسبتاً کمی پیکربندی میتوان به عملکرد درخشان در بکتست رسید، حتی وقتی هیچ مزیت واقعی وجود ندارد؛ بکتستی که تعداد آزمونها را گزارش نکند، قابل ارزیابی نیست.
Harvey، Liu و Zhu (۲۰۱۶) در Review of Financial Studies با بررسی صدها عامل منتشرشده برای توضیح بازده سهام استدلال کردند که به دلیل آزمونهای متعدد، آستانهٔ معمول «آمارهٔ t بزرگتر از ۲» کافی نیست و عامل تازه باید آمارهٔ t بالاتر از ۳ داشته باشد؛ و احتمالاً بیشتر یافتههای ادعاشده در اقتصاد مالی نادرستاند. معاملهگر هم همین مشکل را دارد: هر بار که پارامتری را عوض میکند و دوباره آزمون میگیرد، یک آزمون به شمارش اضافه میشود.
پروتکل حرفهای: فرضیه و منطق اقتصادی را پیش از آزمون بنویسید؛ تعداد پارامترها را کم نگه دارید؛ «دفتر آزمونها» داشته باشید و تعداد همهٔ آزمونها را ثبت کنید؛ به دنبال «فلات» پارامتر باشید نه «قله»، یعنی نتیجه با تغییر کوچک پارامتر نباید فرو بریزد؛ سیستم را روی چند بازار و چند دوره بیازمایید؛ و با شبیهسازی مونتکارلو (بازنمونهگیری ترتیب معاملات) توزیع افت سرمایه را بسازید.
🌍 مثال واقعی: همه چیز طلا نیست — ۸۸۸ الگوریتم Quantopian (۲۰۱۶)
در سال ۲۰۱۶ پژوهشگران پلتفرم Quantopian (Wiecki، Campbell، Lent و Stauth) مقالهای با عنوان «All that Glitters Is Not Gold» منتشر کردند. آنها ۸۸۸ الگوریتم معاملاتی سهام آمریکا را بررسی کردند که هرکدام بکتستی در دورهٔ ۲۰۱۰ تا ۲۰۱۵ و دستکم شش ماه عملکرد بروننمونه داشتند. پرسش ساده بود: آیا معیارهای بکتست، عملکرد بعدی را پیشبینی میکنند؟
نتیجه هشداردهنده بود: نسبت شارپ بکتست تقریباً هیچ قدرتی در پیشبینی شارپ بروننمونه نداشت (R² کمتر از ۰٫۰۲۵). هرچه کاربری بکتستهای بیشتری اجرا کرده بود، فاصلهٔ عملکرد دروننمونه و بروننمونهاش بیشتر بود؛ نشانهٔ روشن بیشبرازش. در مقابل، معیارهای ریسک مانند نوسان (R² حدود ۰٫۶۷) و بیشترین افت سرمایه (حدود ۰٫۳۴) پایدارتر بودند. درس: بکتست بیشتر دربارهٔ ریسک آینده اطلاعات میدهد تا بازده آینده، و هر بار تکرار آزمون هزینهٔ آماری دارد.
🔤 واژگان تخصصی
اجرای قواعد سیستم روی دادههای گذشته.
مثال: اجرای سیستم شکست ۲۰ روزه روی دادهٔ بیتکوین ۲۰۱۸ تا ۲۰۲۴.
استفاده از اطلاعاتی که در لحظهٔ تصمیم در دسترس نبود.
مثال: خرید در قیمت باز شدن با سیگنالِ قیمت بستهشدن همان روز.
حذف داراییهای ازمیانرفته از داده و خوشبینی ناشی از آن.
مثال: آزمون فقط روی ارزهای فهرست امروز.
دادهای که در ساخت سیستم استفاده نشده و فقط برای آزمون نهایی کنار گذاشته شده است.
مثال: ساخت روی ۲۰۱۸ تا ۲۰۲۲ و آزمون روی ۲۰۲۳ تا ۲۰۲۴.
انطباق سیستم با نویز گذشته به جای الگوی واقعی.
مثال: ۱۲ پارامتر بهینهشده که با تغییر کوچک فرو میریزد.
🔑 نکات کلیدی
- بکتست صافی رد ایده است، نه اثبات سودآوری آینده.
- فقط اطلاعات موجود در لحظهٔ تصمیم مجاز است و اجرا پس از سیگنال انجام میشود.
- داراییهای حذفشده و همهٔ هزینهها باید در داده باشند.
- بروننمونه فقط یک بار و در پایان مصرف میشود.
- تعداد آزمونها را ثبت کنید؛ آزمونهای متعدد بیشبرازش میسازند.
⚠️ اشتباهات رایج
- اجرای معامله در همان کندلی که سیگنال با بستهشدنش ساخته شده؛ اشتباه است چون نگاه به آینده است.
- آزمون فقط روی ارزهای موجود امروز؛ اشتباه است چون سوگیری بقا نتایج را خوشبینانه میکند.
- تنظیم پارامترها تا جایی که بکتست عالی شود؛ اشتباه است چون نویز گذشته حفظ میشود.
- نادیده گرفتن کارمزد و نرخ تأمین مالی؛ اشتباه است چون سیستم پرمعامله را بهتر از واقعیت نشان میدهد.
🛠 تمرین عملی: بکتست سالم با تقسیم دروننمونه و بروننمونه
- در ابزار بکتست، سیستمی ساده (مثلاً تقاطع میانگینها) را با کارمزد واقعی روی ۷۰٪ اول داده تنظیم کنید و همهٔ آزمونها را در دفتر بنویسید.
- بهترین تنظیم را فقط یک بار روی ۳۰٪ پایانی داده اجرا کنید.
- نتیجه را با خرید و نگهداری و با پارامترهای همسایه (مثلاً ±۲۰٪) مقایسه کنید و دربارهٔ پایداری بنویسید.
✅ معیار درستی: کارمزد لحاظ شده، تعداد آزمونها ثبت شده، بروننمونه فقط یک بار استفاده شده و پایداری پارامتر بررسی شده است.
🔒 در هیچ تمرینی از سرمایهٔ واقعی، عبارت بازیابی (Seed Phrase)، کلید خصوصی یا اتصال کیف پول اصلی استفاده نکنید.
📝 آزمون تطبیقی
هر بار ۵ سؤال از بانک ۹ سؤالی این درس انتخاب میشود؛ سؤالهایی که قبلاً اشتباه زدهاید زودتر برمیگردند. حدنصاب قبولی ۸۰٪ (۴ از ۵) است و درس بعد با قبولی باز میشود.
✍️ پرسش تشریحی
پروتکل کامل یک بکتست سالم را برای یک سیستم کریپتو بنویسید: داده، هزینهها، جلوگیری از نگاه به آینده و سوگیری بقا، تقسیم داده، معیارهای مقایسه و کنترل بیشبرازش. با استفاده از یافتههای Quantopian و Bailey و همکاران توضیح دهید چرا شارپ بالای بکتست بهتنهایی قابل اعتماد نیست.
بعد از نوشتن، پاسخ خود را با این معیارها بسنجید
خودارزیابی: هر نکتهای را که پاسخ شما بهروشنی پوشش داده علامت بزنید.
🤖 دستیار آموزشی
دستیار آفلاین آکادمی: پاسخها فقط از متن درسها و واژگان همین آکادمی پیدا میشوند و منبع هر پاسخ نشان داده میشود. هوش مصنوعی مولد نیست، حدس نمیزند و هیچ سیگنال خرید و فروشی نمیدهد.
📎 منابع مطالعاتی
- Wiecki, Campbell, Lent & Stauth (2016) — All that Glitters Is Not Gold: Comparing Backtest and Out-of-Sample Performance (SSRN)
- Bailey, Borwein, López de Prado & Zhu (2014) — Pseudo-Mathematics and Financial Charlatanism, Notices of the AMS 61(5)
- Harvey, Liu & Zhu (2016) — …and the Cross-Section of Expected Returns, Review of Financial Studies 29(1)
🏁 معیار تسلط بر این درس: بتوانید بکتستی بدون نگاه به آینده و سوگیری بقا، با هزینههای واقعی و تقسیم بروننمونه بسازید و تعداد آزمونها و پایداری پارامترها را گزارش کنید.