پاسخ کوتاه
بکتست (Backtest) یعنی اجرای قوانین یک استراتژی معاملاتی روی داده تاریخی بازار برای دیدن اینکه اگر آن قوانین در گذشته اجرا میشدند چه اتفاقی میافتاد. نتیجهی مثبت بکتست بهتنهایی سودده بودن استراتژی را ثابت نمیکند؛ فقط نشان میدهد استراتژی روی یک بازهی مشخص از گذشته و با مجموعهای از فرضها عملکرد خوبی داشته است. برای اینکه بفهمیم نتیجه واقعی است یا تصادفی، باید هزینههای واقعی معامله وارد تست شوند، استراتژی روی دادهای که در ساخت آن نقشی نداشته آزمایش شود، به تغییر پارامترها حساس نباشد، در رژیمهای مختلف بازار تست شود و در پایان فوروارد تست (Forward Test) روی دادهی زنده انجام شود. نقش هوش مصنوعی در این فرایند تسریع و بازرسی است، نه تضمین سود.
اگر فقط ۳۰ ثانیه وقت دارید
یک بکتست قابل اعتماد این هفت شرط را همزمان دارد:
- دادهی درست — بدون شکاف، با مهر زمانی و منطقهی زمانی مشخص، و از همان نمادی که واقعاً معامله میکنید.
- هزینهی واقعی معامله — اسپرد، کمیسیون، سوآپ و لغزش قیمت (Slippage) از ابتدا در تست باشند، نه بهعنوان «حاشیهی اطمینان» بعدی.
- آزمایش روی دادهی دیدهنشده — بخشی از تاریخ که در ساخت و بهینهسازی استراتژی هیچ نقشی نداشته است.
- مقاومت در برابر تغییر پارامتر — با ۱۰٪ جابهجایی هر پارامتر، نتیجه باید بدتر شود، نه نابود.
- افت سرمایهی قابل تحمل — نه فقط عدد بیشینه، بلکه طول دورهی افت و رفتار سرمایهی شناور.
- تست در رژیمهای مختلف بازار — روند، رِنج، نوسان بالا و نوسان پایین.
- فوروارد تست — اجرای واقعی روی دادهی زنده، قبل از هر تصمیم جدی.
بین «بکتست گرفتن» و «بکتست کردن» فاصلهی زیادی هست. اولی یک دکمه است؛ دومی یک روش تحقیق. تفاوت این دو در چند سال گذشته مهمتر هم شده، چون ابزارهای هوش مصنوعی هزینهی ساخت و آزمایش استراتژی را تقریباً به صفر رساندهاند. وقتی تولید و تست صد ایده در یک بعدازظهر ممکن است، احتمال پیدا کردن نتیجهای که فقط شبیه سود است بهشدت بالا میرود. این مقاله دربارهی همین شکاف است: چطور از قدرت هوش مصنوعی استفاده کنیم بدون اینکه قربانی سرعتش شویم.
بخش ۰۱بکتست دقیقاً چیست و چه چیزی را اندازه میگیرد؟
بکتست شبیهسازی اجرای یک مجموعه قانون معاملاتی روی دادهی تاریخی است. شما به نرمافزار میگویید «هر وقت این شرط برقرار شد بخر، هر وقت آن شرط برقرار شد بفروش، با این حجم و این حد ضرر» و نرمافزار تاریخ را از ابتدا تا انتها بازپخش میکند و میگوید نتیجه چه میشد.
نکتهی کلیدی این است که بکتست یک اندازهگیری نیست، یک آزمایش مشروط است. هر عددی که در گزارش میبینید، پاسخ این پرسش است: «اگر داده درست بود، اگر سفارشها دقیقاً در همان قیمت پر میشدند، اگر هزینهها همین بود، و اگر آینده شبیه همین بازه باشد، نتیجه این میشد.» هر کدام از این «اگر»ها که بشکند، عدد بیمعنا میشود.
به همین دلیل، هدف حرفهای از بکتست معمولاً برعکس چیزی است که تازهکارها تصور میکنند. بکتست ابزار اثبات نیست، ابزار ابطال است. شما یک فرضیه دارید و با تست تلاش میکنید آن را بشکنید. اگر بعد از همهی فشارها هنوز رفتار قابل دفاعی داشت، تازه ارزش دارد مرحلهی بعد را شروع کنید.
خیر. بکتست مثبت فقط نشان میدهد استراتژی روی دادهی تاریخی و با فرضیات مشخص عملکرد مناسبی داشته است. برای ارزیابی اعتبار آن باید تست خارجازنمونه، هزینههای واقعی معامله، احتمال بیشبرازش، تحلیل واکفوروارد و در نهایت فوروارد تست نیز بررسی شوند.
سه چیزی که بکتست هرگز نمیگوید
- نمیگوید استراتژی در آینده کار میکند. بکتست فقط دربارهی گذشته حرف میزند. رابطهی گذشته و آینده یک فرض است، نه یک نتیجه.
- نمیگوید شما میتوانید آن را اجرا کنید. استراتژیای که در بکتست ۳۵٪ افت سرمایه دارد، روی کاغذ قابل تحمل است؛ در واقعیت اغلب قبل از پایان افت، دستی خاموش میشود.
- نمیگوید چند بار امتحان کردهاید. و این مهمترین عددی است که در هیچ گزارش بکتستی چاپ نمیشود — در بخش ۰۸ میبینیم چرا این عدد از خودِ نتیجه مهمتر است.
بخش ۰۲هوش مصنوعی در بکتست واقعاً چه کاری انجام میدهد؟
ارزش واقعی مدلهای زبانی در این حوزه در «پیدا کردن سیگنال» نیست؛ در حذف اصطکاک از فرایند تحقیق است. کارهایی که قبلاً روزها طول میکشید و به همین دلیل انجام نمیشدند، حالا در چند دقیقه انجام میشوند — و دقیقاً همین کارهای «انجامنشده» بودند که باعث میشدند استراتژیهای معیوب تا مرحلهی پول واقعی پیش بروند.
مراحل پررنگ، جاهایی هستند که هوش مصنوعی بیشترین صرفهجویی زمانی را ایجاد میکند.
۱. تبدیل قوانین به کد
مهمترین کاربرد عملی. شما قانون را به زبان طبیعی توضیح میدهید و مدل آن را به MQL5، پایتون یا Pine Script تبدیل میکند. این کار یک اثر جانبی مهم دارد: در لحظهی نوشتن کد، ابهامهای قانون آشکار میشوند. «وقتی روند صعودی است» باید تبدیل شود به یک شرط قابل محاسبه، و همین اجبار، نیمی از استراتژیهای مبهم را همانجا از بین میبرد.
۲. پیدا کردن ایرادهای منطقی
مدلها در بازبینی کد بهتر از تولید آن هستند. اگر کد بکتست خود را بدهید و صریحاً بپرسید «کجای این کد ممکن است از اطلاعات آینده استفاده کند؟»، معمولاً موارد کلاسیک مثل استفاده از قیمت بستهشدن کندلی که هنوز بسته نشده یا شاخصی که با دادهی کل بازه نرمالسازی شده را پیدا میکنند.
۳. بازرسی و پاکسازی داده
نوشتن اسکریپتهایی که شکافهای داده، کندلهای تکراری، پرشهای غیرممکن قیمت، ناهماهنگی منطقهی زمانی و اسپردهای غیرواقعی را پیدا کنند، کار حوصلهسربری است که تقریباً هیچکس دستی انجام نمیدهد. مدلها این اسکریپتها را در چند دقیقه مینویسند.
۴. تحلیل معاملات زیانده
وقتی خروجی بکتست یک فایل با هزاران ردیف معامله است، پرسیدن سؤالهایی مثل «۲۰ معاملهی بدتر در چه ساعتی و در چه سطح نوسانی رخ دادهاند؟» با یک اسکریپت تحلیلی چند دقیقهای پاسخ میگیرد. این دقیقاً همان کاری است که بیشترین اطلاعات را دربارهی نقاط ضعف استراتژی میدهد.
۵. تحلیل حساسیت و مقایسهی سناریو
ساختن جدولی که نشان دهد نتیجه با تغییر هر پارامتر چقدر جابهجا میشود، یا اجرای همان استراتژی روی چند نماد و چند تایمفریم و کنار هم گذاشتن نتایج. این کار قبلاً ساعتها طول میکشید.
۶. تولید گزارش قابل خواندن
تبدیل خروجی خام به گزارشی که بتوان بعداً به آن رجوع کرد و فهمید دقیقاً چه چیزی، روی چه دادهای و با چه فرضی تست شده است. مستندسازی، ملالآورترین بخش تحقیق است و همان بخشی است که واگذارکردنش به مدل بیشترین سود را دارد.
هوش مصنوعی زمان چرخهی تحقیق را کوتاه میکند: از ایده تا نتیجهی قابل بررسی. این یعنی میتوانید فرضیههای بیشتری را رد کنید — که ارزشمندترین خروجی تحقیق است. اما همین سرعت، اگر بدون انضباط آماری استفاده شود، دقیقاً به مشکل بخش ۰۸ منتهی میشود.
میخواهید فرایند تحقیقتان را خودکار کنید؟
فیلتور روی ساخت ابزارهای داخلی، اسکریپتهای تحلیل داده و اتوماسیون گزارش کار میکند — از جمله برای تیمهایی که با دادهی بازار سروکار دارند.
بخش ۰۳هوش مصنوعی چه کاری را نباید انجام دهد
مرز بین «کمک» و «توهم» در این حوزه باریک است. جدول زیر تفکیک عملی است.
کاری که از AI بخواهید
- تبدیل قوانین شفاف به کد قابل اجرا
- بازبینی کد برای نشت داده و نگاه به آینده
- نوشتن اسکریپت بازرسی کیفیت داده
- تحلیل آماری خروجی معاملات
- ساخت تست حساسیت و مونتکارلو
- توضیح یک معیار و محدودیتهایش
- پیدا کردن تناقض بین چیزی که گفتهاید و چیزی که کد میکند
- مستندسازی و تولید گزارش
کاری که نباید به AI بسپارید
- «یک استراتژی سودده برای طلا بساز»
- پیدا کردن «بهترین» پارامترها با آزمونوخطای نامحدود
- تصمیمگیری دربارهی حجم معامله و ریسک
- تفسیر نتیجه بدون دیدن دادهی خام
- پیشبینی قیمت
- گزارش عملکردی که خودش تولید کرده و شما اجرا نکردهاید
- جایگزینی فوروارد تست
- قضاوت نهایی دربارهی اینکه استراتژی «آماده» است
یک مدل زبانی میتواند گزارش بکتستی تولید کند که کاملاً واقعی به نظر میرسد — با اعداد دقیق، نسبت شارپ منطقی و جدول معاملات — بدون اینکه هیچ کدی اجرا شده باشد. عدد بدون فایل اجرایی و بدون دادهی قابل بازتولید، عدد نیست. هر نتیجهای باید روی سیستم خودتان، با دادهی خودتان و بهصورت قابل تکرار بهدست بیاید.
یک نمونهی واقعی از همین جنس ریسک: یکی از پرسروصداترین مقالات «هوش مصنوعی بهتر از تحلیلگر انسانی عمل میکند» در سال ۲۰۲۴ منتشر شد و بعداً توسط خود نویسندگان از دسترس خارج شد، با این توضیح که یکی از نویسندگان هنگام تلاش برای بازتولید نتایج، ناسازگاری در داده و تحلیلها پیدا کرده است.۱ این اتفاق دقیقاً همان چیزی است که در سطح فردی هم رخ میدهد، فقط بدون اینکه کسی متوجه شود.
بخش ۰۴قبل از بکتست، استراتژی باید قابل تعریف باشد
یک استراتژی تا وقتی که به قوانین بدون ابهام تبدیل نشده، قابل تست نیست. این جمله بدیهی به نظر میرسد اما بیشتر ایدههای معاملاتی دقیقاً در همین مرحله شکست میخورند.
| فرمولبندی مبهم | فرمولبندی قابل تست |
|---|---|
| «وقتی بازار قوی بود بخر» | ورود خرید وقتی قیمت بستهشدن کندل تکمیلشدهی ۱ساعته بالای میانگین متحرک نمایی ۵۰ دورهای باشد و همان میانگین نسبت به کندل قبل صعودی باشد |
| «حد ضرر منطقی بگذار» | حد ضرر برابر ۱٫۵ برابر میانگین دامنهی واقعی ۱۴ دورهای زیر قیمت ورود، محاسبهشده روی همان کندل ورود |
| «وقتی روند تمام شد خارج شو» | خروج وقتی قیمت بستهشدن زیر میانگین متحرک ۵۰ دورهای برود، یا حد ضرر فعال شود، یا ۴۸ ساعت از ورود گذشته باشد — هرکدام زودتر |
| «ریسک را مدیریت کن» | حجم هر معامله طوری که فاصلهی ورود تا حد ضرر معادل ۰٫۵٪ سرمایه باشد؛ حداکثر یک پوزیشن باز در هر لحظه |
| «در اخبار مهم معامله نکن» | عدم ورود از ۳۰ دقیقه قبل تا ۳۰ دقیقه بعد از رویدادهای تقویم اقتصادی با درجهی اهمیت بالا، بر اساس یک فایل تقویم مشخص و ثابت |
معیار سنجش ساده است: اگر دو نفر مستقل قوانین شما را بخوانند و کد بنویسند، باید کد یکسانی تولید کنند. اگر چنین نیست، هنوز استراتژی ندارید — یک احساس دارید.
اینجا هوش مصنوعی خیلی مفید است، اما در جهتی که معمولاً انتظار نمیرود: بهجای اینکه از مدل بخواهید قانون بسازد، از او بخواهید ابهامهای قانون شما را فهرست کند. پرامپت این کار در بخش ۱۹ آمده است.
بخش ۰۵داده؛ جایی که بیشتر بکتستها همانجا میمیرند
کیفیت نتیجه از کیفیت داده بالاتر نمیرود. این تنها قانون بیاستثنای این حوزه است.
OHLC یا دادهی تیک؟
دادهی OHLC برای هر بازه فقط چهار قیمت دارد: باز، بیشترین، کمترین و بسته. دادهی تیک (Tick Data) هر تغییر قیمت را ثبت میکند. تفاوت این دو در بکتست تزئینی نیست — تعیینکننده است، مخصوصاً برای استراتژیهایی که در طول کندل تصمیم میگیرند یا حد ضرر و حد سود داخل کندل دارند.
مستندات رسمی متاتریدر ۵ این را صریح میگوید: در حالت «۱ دقیقه OHLC» فقط چهار قیمت هر کندل یکدقیقهای شبیهسازی میشود، و به همین دلیل حد ضررها و سفارشهای معلق ممکن است در قیمتی متفاوت از قیمت واقعی فعال شوند. مستندات توسعهدهندهی MQL5 از اصطلاح گویای «جام مقدس تستر» (Testing Grail) استفاده میکند: استراتژیهایی که فقط بهخاطر جبرگرایی مصنوعی دادهی OHLC سودده به نظر میرسند و روی تیک واقعی از بین میروند.۲
در مقالهی رسمی MQL5 دربارهی تست روی تیک واقعی، یک اکسپرت مشخص روی یک بازهی یکسان با سه حالت مدلسازی تست شده است: با «۱ دقیقه OHLC» سود خالص ۱۶۹٫۴۶+، با «هر تیک (شبیهسازیشده)» ۴۶۶٫۸۱− و با «تیک واقعی» ۹۷٫۲۴−.۳ یعنی همان کد، همان دوره، همان نماد — و تفاوت بین سود و زیان فقط از روش مدلسازی داده میآید.
چکلیست کیفیت داده
- شکاف و کندل گمشده: آیا در ساعات معاملاتی، کندلی جا افتاده است؟ چند درصد؟
- منطقهی زمانی سرور: کندلهای روزانه بر اساس چه ساعتی بسته میشوند؟ تغییر ساعت تابستانی چطور اعمال شده؟ استراتژیهای وابسته به ساعت با تغییر منطقهی زمانی کاملاً عوض میشوند.
- اسپرد تاریخی: در تستر متاتریدر ۵، اسپرد شبیهسازی نمیشود بلکه از دادهی تاریخی گرفته میشود و همیشه شناور در نظر گرفته میشود.۲ اگر دادهی تاریخی اسپرد ندارید، عملاً دارید با اسپرد ثابت و خوشبینانه تست میکنید.
- یکسان بودن نماد: دادهی طلا از یک بروکر با بروکر دیگر تفاوت قیمتی و اسپرد متفاوت دارد. تست روی دادهی بروکر «الف» و اجرا روی بروکر «ب» یک فرض پنهان است.
- سوگیری بقا (Survivorship Bias): اگر روی سهام تست میکنید و دیتاست شما فقط شامل شرکتهایی است که امروز هنوز وجود دارند، نتیجه بهطور سیستماتیک خوشبینانه است. مطالعهی کلاسیک براون و همکاران نشان داد این سوگیری بهتنهایی میتواند «تداوم عملکرد» را از هیچ بسازد.۴
- اقدامات شرکتی: تقسیم سود، افزایش سرمایه و تجزیهی سهم اگر تعدیل نشده باشند، پرشهای مصنوعی قیمت تولید میکنند که استراتژیهای شکستمحور عاشقشان هستند.
بخش ۰۶معیارهای واقعی ارزیابی استراتژی
گزارش هر بکتستی پر از عدد است. مسئله این نیست که کدام عدد «خوب» است؛ مسئله این است که هر عدد چه چیزی را پنهان میکند. هیچ معیاری بهتنهایی کافی نیست، چون هر معیار فقط یک بُعد از رفتار استراتژی را میبیند و میشود همان بُعد را به قیمت خرابکردن بقیه بهینه کرد.
سود خالص
Net Profitمجموع سود معاملات برنده منهای مجموع زیان معاملات بازنده. بیمعناترین عدد اگر بدون ریسک و بدون تعداد معامله گزارش شود.
نرخ برد
Win Rateدرصد معاملات سودده. بهتنهایی هیچ اطلاعاتی دربارهی سودده بودن نمیدهد؛ بخش ۰۷ نشان میدهد چرا.
میانگین برد و میانگین باخت
Average Win / Average Lossمجموع سودها تقسیم بر تعداد برندهها، و مجموع زیانها تقسیم بر تعداد بازندهها. بدون این دو، نرخ برد قابل تفسیر نیست.
نسبت ریسک به بازده
Risk / Rewardدر گزارشها معمولاً نسبت محققشده است: میانگین برد تقسیم بر قدرمطلق میانگین باخت. این با نسبت برنامهریزیشده (حد سود به حد ضرر) یکی نیست.
امید ریاضی
Expectancyمیانگین نتیجهی مورد انتظار هر معامله. مهمترین معیار خلاصهکننده، چون نرخ برد و اندازهی برد و باخت را همزمان در خود دارد.
ضریب سود
Profit Factorنسبت مجموع سودها به قدرمطلق مجموع زیانها. مقدار ۱ یعنی سربهسر. عدد خیلی بزرگ روی نمونهی کوچک، نشانهی خوبی نیست — نشانهی کم بودن داده است.
بیشترین افت سرمایه
Maximum Drawdownبزرگترین فاصلهی بین یک قله و درهی بعدی. تفکیک «موجودی» و «سرمایهی شناور» حیاتی است: استراتژیای که ضررها را باز نگه میدارد، افت موجودی کوچک و افت سرمایهی شناور فاجعهبار نشان میدهد.
ضریب بازیابی
Recovery Factorسود خالص تقسیم بر بیشترین افت. عملاً میپرسد: در ازای هر واحد ریسکی که تحمل شد، چقدر سود بهدست آمد؟
نسبت شارپ
Sharpe Ratioبازده مازاد تقسیم بر انحراف معیار همان بازده. محدودیتهایش جدی است — پایینتر توضیح داده شده.
تعداد معاملات
Number of Tradesپایهی همهی استنتاجهای آماری. با ۲۰ معامله، هیچکدام از اعداد بالا معنای آماری ندارند.
طول دورهی افت
Drawdown Durationمعیاری که تقریباً همیشه نادیده گرفته میشود. عمق افت را میشود تحمل کرد؛ چهارده ماه زیر قله ماندن را معمولاً نه.
سهم معاملات برتر از سود
Profit Concentrationاگر پنج معاملهی برتر را حذف کنیم، چه میماند؟ اگر جواب «هیچچیز» است، استراتژی ندارید؛ چند اتفاق خوششانس دارید.
مثال امید ریاضی — مثال فرضی آموزشی
فرض کنید یک استراتژی در ۱۰۰ معامله، ۴۰ معاملهی برنده با میانگین سود ۳۰۰ واحد و ۶۰ معاملهی بازنده با میانگین زیان ۱۵۰ واحد داشته است:
یعنی بهطور میانگین هر معامله ۳۰ واحد سود مورد انتظار دارد — با نرخ بردِ فقط ۴۰٪.
این اعداد فرضی و صرفاً آموزشی هستند و نتیجهی هیچ بکتست واقعی نیستند. نکته این است که امید ریاضی مثبت هم تضمین نیست: این عدد میانگین یک نمونه است، نه یک ثابت. با نمونهی کوچک، خطای برآورد آن بهسادگی از خودش بزرگتر میشود.
محدودیتهای نسبت شارپ
شارپ محبوبترین معیار ریسکتعدیلشده است و همزمان یکی از قابل دستکاریترینها. چند محدودیت مستند:
- فرض توزیع نرمال. شارپ فقط میانگین و انحراف معیار را میبیند. استراتژیهایی که ریسک دنباله میفروشند — مارتینگل، گرید، فروش اختیار — تا وقتی فاجعه رخ نداده شارپ درخشانی دارند. بیلی و لوپز د پرادو نشان دادهاند چولگی منفی همراه با کشیدگی مثبت، شارپ مشاهدهشده را بهطور سیستماتیک متورم میکند.۵
- سالانهسازی با ضرب در جذر دوره اشتباه است، مگر بازدهها مستقل باشند. اندرو لو در یک مقالهی کلاسیک نشان داد در حضور همبستگی سریالی، شارپ سالانه میتواند تا ۶۵٪ بیشبرآورد شود.۶
- خودش یک برآورد نویزی است. خطای استاندارد تقریبی شارپ برابر
√((1 + SR²/2) / T)است.۶ یعنی با دادهی کم، بازهی اطمینان آنقدر پهن است که مقایسهی دو استراتژی بیمعنا میشود. - به تعداد آزمایشهای شما حساس است. این نکته آنقدر مهم است که بخش بعدی کاملاً به آن اختصاص دارد.
عدد جهانی ثابتی وجود ندارد. شارپ فقط در کنار سه چیز معنا دارد: طول دورهی داده، تعداد آزمایشهایی که برای رسیدن به آن انجام شده، و شکل توزیع بازده. شارپ ۲ روی شش ماه داده و پس از صد بار بهینهسازی، کماطلاعتر از شارپ ۰٫۸ روی ده سال داده و بدون بهینهسازی است.
بخش ۰۷چرا نرخ برد بهتنهایی هیچ چیزی را ثابت نمیکند
نرخ برد بالا فروشندهترین عدد در بازاریابی سیستمهای معاملاتی است و کماطلاعترین عدد در ارزیابی آنها. دلیلش ساده است: نرخ برد چیزی دربارهی اندازه بردها و باختها نمیگوید.
| استراتژی الف | استراتژی ب | |
|---|---|---|
| نرخ برد | ۸۰٪ | ۴۰٪ |
| میانگین سود هر برد | ۵۰ واحد | ۳۰۰ واحد |
| میانگین زیان هر باخت | ۲۵۰ واحد | ۱۵۰ واحد |
| امید ریاضی هر معامله | ۱۰− واحد | ۳۰+ واحد |
| نتیجه پس از ۱۰۰ معامله | ۱۰۰۰− واحد | ۳۰۰۰+ واحد |
استراتژی «الف» در هر گزارشی عالی به نظر میرسد: هشت معامله از هر ده معامله سودده. و پول از دست میدهد. این الگو تصادفی نیست؛ ساختار طبیعی سیستمهایی است که حد سود کوچک و حد ضرر بزرگ دارند — یا اصلاً حد ضرر ندارند.
هر وقت نرخ برد از حدود ۸۵٪ بالاتر رفت، اولین فرض باید این باشد که استراتژی ضررها را نمیبندد یا حد ضرر ندارد. در این حالت، افت سرمایهی شناور را نگاه کنید، نه افت موجودی را.
بخش ۰۸بزرگترین دشمن بکتست: بیشبرازش
بیشبرازش (Overfitting) یعنی مدل بهجای یاد گرفتن ساختار عمومی بازار، جزئیات و نویز همان بازهی خاص داده را حفظ کرده است. در معاملهگری، شکل رایج آن منحنیبرازی (Curve Fitting) است: آنقدر پارامترها را تغییر میدهیم تا منحنی سرمایه زیبا شود.
نکتهی مهم و غیرشهودی این است: بیشبرازش نتیجهی بدجنسی نیست، نتیجهی جستوجو است. هر بار که یک پارامتر را عوض میکنید و دوباره تست میگیرید، یک آزمون آماری جدید انجام دادهاید. و هرچه آزمون بیشتر، احتمال اینکه بهترین نتیجه صرفاً خوششانسترین نتیجه باشد بیشتر.
عددهایی که این را کمّی میکنند
گروه بیلی، بورواین، لوپز د پرادو و ژو در مقالهای در نشریهی انجمن ریاضی آمریکا این پدیده را دقیق فرمولبندی کردند. چند نتیجهی مستقیم از آن مقاله:۷
- اگر پژوهشگر فقط ۱۰ پیکربندی مختلف از یک استراتژی را امتحان کند، انتظار میرود نسبت شارپ دروننمونهای برابر ۱٫۵۷ پیدا کند — در حالی که همهی آن استراتژیها خارجازنمونه شارپ صفر دارند.
- روی یک بکتست دوساله، فقط هفت پیکربندی مستقل کافی است تا شارپ دروننمونه به ۱ برسد، در حالی که شارپ واقعی صفر است.
- اگر فقط پنج سال داده دارید، نباید بیش از ۴۵ پیکربندی مستقل را امتحان کنید.
- و جملهی مرکزی مقاله: در غیاب کنترل تعداد آزمایشها، عملکرد خوب بکتست خودش نشانهی نتایج بد آینده است.
لوپز د پرادو در جای دیگری همین را سادهتر بیان میکند: با سطح معناداری متعارف ۵٪، بهطور معمول حدود ۲۰ تکرار کافی است تا یک استراتژی کاذب کشف شود.۸ بیست بار — عددی که هر کسی در یک بعدازظهر با بهینهساز رد میکند.
وقتی نوشتن و اجرای یک بکتست چند دقیقه طول میکشد، تعداد آزمایشها از دهها به هزاران میرسد — اغلب بدون اینکه کسی بشمارد. عددی که باید ثبت کنید تعداد کل تستهایی است که تا رسیدن به نتیجهی نهایی گرفتهاید. بدون این عدد، هیچکس — از جمله خودتان — نمیتواند ریسک بیشبرازش را ارزیابی کند.
سه راه عملی برای مقابله
- تعداد آزمایشها را بشمارید و بنویسید. یک فایل ساده که هر اجرا، پارامترها و نتیجهاش را ثبت کند. این تنها کاری است که هیچ ابزاری برایتان انجام نمیدهد.
- تست حساسیت بگیرید. اگر استراتژی فقط با EMA = 137، Stop = 1.73 و TP = 2.41 خوب کار میکند و با EMA = 130 فرو میریزد، شما یک استراتژی پیدا نکردهاید؛ یک ترکیب خوششانس در داده پیدا کردهاید. نتیجه باید روی یک دامنه از پارامترها پایدار باشد، نه روی یک نقطه.
- شارپ را تعدیل کنید. «نسبت شارپ تعدیلشده» (Deflated Sharpe Ratio) دقیقاً برای همین ساخته شده: شارپ مشاهدهشده را با توجه به تعداد آزمایشها و غیرنرمال بودن توزیع بازده تصحیح میکند.۵
هاروی و لیو نشان دادهاند این تعدیل خطی نیست. در مثال منتشرشدهی خودشان، شارپ سالانهی ۰٫۷۵ روی ۲۴۰ ماه داده، اگر ۲۰۰ آزمایش پشت آن بوده باشد، به ۰٫۳۲ تعدیل میشود — حدود ۶۰٪ کاهش. آنها صریحاً مینویسند قاعدهی رایج «۵۰٪ از شارپ را کم کن» اشتباه است، چون شارپهای بالاتر جریمهی کمتری میگیرند و شارپهای مرزی جریمهی بهمراتب بیشتری.۹
در سطح کل ادبیات مالی هم همین منطق اعمال شده است: هاروی، لیو و ژو با بررسی صدها فاکتور منتشرشده به این نتیجه رسیدند که آستانهی متعارف t > 2.0 دیگر کافی نیست و یک یافتهی جدید باید t > 3.0 را رد کند.۱۰
سالیوان، تیمرمن و وایت در سال ۱۹۹۹ حدود ۷٬۸۴۶ پیکربندی از قوانین معاملاتی تکنیکال را روی شاخص داوجونز از ۱۸۹۷ تا ۱۹۹۶ آزمودند. بهترین قانون روی کل صد سال، حتی پس از تصحیح آماری برای «کاوش داده»، معنادار بود. اما وقتی همان قانون روی دورهی خارجازنمونهی ۱۹۸۷ تا ۱۹۹۶ آزموده شد، نتیجهگیری آنها این بود که شواهد اندکی وجود دارد مبنی بر اینکه قوانین معاملاتی تکنیکال در آن دوره ارزش اقتصادی داشتهاند.۱۱
بخش ۰۹سوگیری نگاه به آینده
سوگیری نگاه به آینده (Look-Ahead Bias) یعنی استراتژی در لحظهی تصمیمگیری از اطلاعاتی استفاده کند که در آن لحظه هنوز در دسترس نبوده است. این رایجترین خطای فنی بکتست است و تقریباً همیشه ناخواسته رخ میدهد.
شکلهای رایجش
- استفاده از قیمت بستهشدن کندل جاری. کلاسیکترین نمونه: شرط ورود روی Close کندلی محاسبه میشود که هنوز بسته نشده، ولی ورود در همان کندل ثبت میشود.
- نرمالسازی با آمار کل بازه. اگر یک اندیکاتور را با میانگین و انحراف معیارِ کل دیتاست نرمال کنید، هر نقطه از داده اطلاعاتی از آینده دارد.
- دادهی بنیادی بدون تاریخ انتشار. استفاده از سود فصلی یک شرکت از تاریخ پایان فصل، در حالی که گزارش هفتهها بعد منتشر شده است.
- دادهی تجدیدنظرشده. بسیاری از سریهای اقتصادی بعداً بازنگری میشوند. مقدار امروزِ یک شاخص، همان چیزی نیست که در آن زمان منتشر شده بود.
- حافظهی مدل زبانی. اگر از یک مدل بخواهید دربارهی دورهای تحلیل کند که در دادهی آموزشش بوده، عملاً یک نگاه به آیندهی پنهان دارید.
در هر نقطه از کد بپرسید: «در همین ثانیه از تاریخ، آیا این عدد واقعاً روی صفحهی من بود؟» اگر پاسخ «نه» یا «مطمئن نیستم» است، همانجا یک نشت وجود دارد. اجرای این پرسش روی کل کد، دقیقاً کاری است که میتوانید به یک مدل زبانی بسپارید — پرامپتش در بخش ۱۹ آمده است.
بخش ۱۰نشت داده
نشت داده (Data Leakage) مفهوم گستردهتری از نگاه به آینده است: هر مسیری که اطلاعات مجموعهی آزمون به فرایند ساخت مدل راه پیدا کند. در یادگیری ماشین مالی، این شایعترین دلیل نتایج غیرقابل بازتولید است.
یک بررسی سیستماتیک در نشریهی Patterns نشان داد نشت داده در دستکم ۲۹۴ مقاله در ۱۷ حوزهی علمی باعث شکست در بازتولید نتایج شده است. نویسندگان یک دستهبندی هشتگانه ارائه کردند که مستقیماً به بکتست هم قابل ترجمه است.۱۲
| نوع نشت | در بکتست چه شکلی دارد؟ |
|---|---|
| نبود جداسازی تمیز آموزش/آزمون | پارامترها روی کل تاریخ بهینه شده و بعد «خارجازنمونه» روی بخشی از همان تاریخ گزارش میشود |
| پیشپردازش روی کل داده | نرمالسازی، حذف دادهی پرت یا پرکردن شکافها قبل از تقسیم داده انجام شده است |
| انتخاب ویژگی روی کل داده | انتخاب اینکه «کدام اندیکاتورها بهتر کار میکنند» با نگاه به کل بازه، قبل از تقسیم |
| ویژگی نامشروع | استفاده از متغیری که در لحظهی معامله وجود نداشته یا خودش نتیجه را در خود دارد |
| نشت زمانی | آموزش روی دادهای که بعد از دورهی آزمون است — مثلاً اعتبارسنجی متقاطع تصادفی روی سری زمانی |
| نبود استقلال نمونهها | برچسبهای همپوشان: معاملهای که ۴۸ ساعت باز است، با معاملهی بعدی در همان بازه همپوشانی دارد |
راهحل استاندارد برای دو مورد آخر در ادبیات یادگیری ماشین مالی، پاکسازی (Purging) و قرنطینه (Embargo) است: حذف نمونههای آموزشی که بازهی زمانی برچسبشان با مجموعهی آزمون همپوشانی دارد، و کنار گذاشتن درصدی از دادهی بلافاصله پس از هر بازهی آزمون تا اثر همبستگی سریالی از بین برود.۱۳
بخش ۱۱هزینههایی که بکتستها فراموش میکنند
این سادهترین بخش برای درست کردن است و بیشترین تعداد استراتژی را میکشد. یک بکتست بدون هزینه، بکتست نیست؛ یک شبیهسازی از بازاری است که وجود ندارد.
| هزینه | چیست | چرا فراموش میشود |
|---|---|---|
| اسپرد Spread |
فاصلهی قیمت خرید و فروش که در لحظهی ورود پرداخت میشود | اگر دادهی تاریخی اسپرد نداشته باشید، تستر مقدار پیشفرض یا آخرین مقدار شناختهشده را میگذارد — که معمولاً خوشبینانه است |
| کمیسیون Commission |
کارمزد ثابت یا درصدی هر معامله | در حالتهای سریع تست (مثل «سود بر حسب پیپ» در متاتریدر ۵) محاسبهی کمیسیون و سوآپ کاملاً حذف میشود۲ |
| لغزش قیمت Slippage |
تفاوت قیمت درخواستی و قیمت اجراشده | بکتستها بهصورت پیشفرض فرض میکنند سفارش دقیقاً در قیمت مورد نظر پر میشود |
| تأخیر اجرا Latency |
فاصلهی زمانی بین تصمیم و اجرا | در بکتست صفر است؛ در واقعیت هیچوقت صفر نیست |
| سوآپ / بهرهی شبانه Swap |
هزینه یا سود نگهداری پوزیشن در طول شب | برای استراتژیهای چندروزه میتواند از خود سود بزرگتر شود |
| پر شدن جزئی Partial Fill |
پر شدن بخشی از حجم سفارش | در بازارهای کمعمق یا حجمهای بزرگ رایج است و در شبیهسازی معمولاً وجود ندارد |
مقیاس اثر این هزینهها در ادبیات دانشگاهی هم اندازهگیری شده است. نووی-مارکس و ولیکوف با بررسی ۲۳ استراتژی ناهنجاریمحور نشان دادند هزینههای معاملاتی معمولاً بیش از ۱٪ از گردش ماهانهی یکطرفه را میبلعند، و از میان استراتژیهایی که گردش ماهانهی بالای ۵۰٪ دارند، تنها دو مورد پس از کسر هزینه بازده معنادار باقی میمانند.۱۴
در سمت مقابل — و برای انصاف علمی — پژوهشی مبتنی بر دادهی اجرای واقعی به ارزش حدود ۱٫۷ تریلیون دلار نشان میدهد هزینههای واقعی نهادهای بزرگ در سهام نقدشوندهی بازارهای توسعهیافته بهمراتب کمتر از برآوردهای دانشگاهی است (میانگین اثر بازار حدود ۱۰ واحد پایه). ۱۵ اما این یافته برای معاملهگر خرد در فارکس یا CFD تسلیبخش نیست: آنجا اسپرد و کمیسیون نسبت به اندازهی معامله بهمراتب بزرگتر است.
هزینهها را از ابتدا وارد تست کنید، نه در پایان. و بدترین حالت معقول را فرض کنید، نه میانگین را. استراتژیای که فقط با اسپرد ایدئال سودده است، در عمل سودده نیست. اگر با دو برابر کردن هزینهها نتیجه از بین میرود، حاشیهی اطمینان شما صفر است.
نکتهی مکملی که کمتر گفته میشود: افت عملکرد از بکتست به واقعیت فقط به هزینه مربوط نیست. مکلین و پونتیف با بررسی ۹۷ متغیر پیشبینیکنندهی بازده سهام نشان دادند بازده این استراتژیها ۲۶٪ خارجازنمونه و ۵۸٪ پس از انتشار کمتر میشود.۱۶ بخشی از این کاهش، سهم سوگیری آماری است؛ بخش دیگرش این است که وقتی همه یک الگو را کشف کنند، آن الگو دیگر کار نمیکند.
بخش ۱۲دروننمونه و خارجازنمونه
پایهایترین دفاع در برابر بیشبرازش، تقسیم داده است. دادهی دروننمونه (In-Sample) بخشی است که استراتژی روی آن ساخته و تنظیم میشود. دادهی خارجازنمونه (Out-of-Sample) بخشی است که هیچ نقشی در هیچ تصمیمی نداشته است — نه در انتخاب اندیکاتور، نه در تنظیم پارامتر، نه حتی در تصمیم به کنار گذاشتن یک نسخه.
جهت زمان → از گذشته به امروز و بعد به آینده
نتیجهی خارجازنمونه بد است. برمیگردید، پارامتر را کمی عوض میکنید، دوباره تست میگیرید، حالا خوب است. در آن لحظه، دادهی خارجازنمونه دیگر خارجازنمونه نیست. شما فقط بازهی بهینهسازی را بزرگتر کردهاید. اگر این کار را کردید، صادقانهترین راه این است که یک بخش دستنخوردهی جدید کنار بگذارید — یا بپذیرید که دیگر تست مستقلی ندارید.
بخش ۱۳تحلیل واکفوروارد
تقسیم یکبارهی داده یک ضعف دارد: نتیجه به این وابسته است که خط تقسیم را دقیقاً کجا گذاشتهاید. تحلیل واکفوروارد (Walk-Forward Analysis) — که بهطور سیستماتیک توسط رابرت پاردو معرفی شد — این ضعف را برطرف میکند.۱۷
چطور کار میکند
- یک پنجرهی زمانی برای بهینهسازی انتخاب کنید — مثلاً دو سال.
- پارامترها را فقط روی همان پنجره بهینه کنید.
- پارامترهای برنده را روی بازهی بلافاصله بعدی — مثلاً شش ماه — بدون هیچ تغییری اجرا کنید. نتیجهی این شش ماه، خارجازنمونهی واقعی است.
- کل پنجره را شش ماه جلو ببرید و مراحل بالا را تکرار کنید.
- در پایان، فقط بازههای خارجازنمونه را به هم بچسبانید. منحنی سرمایهی حاصل، تنها منحنیای است که ارزش نگاه کردن دارد.
ارزش این روش در این است که شبیهترین چیز به واقعیت است: در دنیای واقعی هم شما هر چند وقت یک بار پارامترها را بازبینی میکنید و بعد با آنها جلو میروید. واکفوروارد همین چرخه را شبیهسازی میکند.
چه چیزی به شما میگوید
- پایداری پارامترها. اگر در هر پنجره پارامتر بهینه کاملاً جای دیگری است، استراتژی ساختار پایداری ندارد.
- نسبت کارایی. مقایسهی عملکرد بازههای خارجازنمونه با بازههای بهینهسازی. افت شدید یعنی بیشبرازش.
- رفتار در زمان. آیا عملکرد در سالهای اخیر ضعیفتر شده؟ این نشانهی زوال استراتژی است.
در یادگیری ماشین مالی، اعتبارسنجی متقاطع معمولی روی سری زمانی نشت ایجاد میکند. نسخهی اصلاحشده — اعتبارسنجی متقاطع ترکیبیِ پاکسازیشده — بهجای یک مسیر، دهها مسیر آزمون تولید میکند و در نتیجه یک توزیع از عملکرد میدهد، نه یک عدد.۱۳ یک عدد میتواند شانس باشد؛ یک توزیع نه.
بخش ۱۴مونتکارلو؛ استراتژی در دنیاهای موازی
منحنی سرمایهای که در گزارش بکتست میبینید، فقط یکی از ترتیبهای ممکن است. اگر همان معاملات با ترتیب دیگری رخ میدادند، شکل منحنی و بیشترین افت کاملاً متفاوت میشد — در حالی که سود نهایی همان است.
تحلیل مونتکارلو (Monte Carlo Analysis) دقیقاً همین را میسنجد: نتایج معاملات را بارها با ترتیب تصادفی بازچینی میکند و توزیع نتایج ممکن را میسازد. سؤالی که پاسخ میگیرد این نیست «چقدر سود کردم؟» بلکه این است: «بدترین حالت معقول چقدر بد بود؟»
چه چیزهایی را میشود تصادفیسازی کرد
- ترتیب معاملات. سادهترین و پرکاربردترین حالت. نشان میدهد اگر همان زیانها پشت سر هم میآمدند، افت سرمایه تا کجا میرفت.
- حذف تصادفی بخشی از معاملات. شبیهسازی اینکه چند سیگنال را از دست میدادید — که در اجرای واقعی همیشه اتفاق میافتد.
- افزودن نویز به قیمت ورود و خروج. شبیهسازی لغزش و تفاوت اجرا.
- جابهجایی تاریخ شروع. نتیجه نباید به این وابسته باشد که از فروردین شروع کردهاید یا از مهر.
خروجی مفید مونتکارلو یک عدد نیست، چند صدک است: مثلاً «در ۹۵٪ از بازچینیها، بیشترین افت کمتر از فلان مقدار بود». اگر عدد صدک ۹۵ برای شما غیرقابل تحمل است، استراتژی برای شما مناسب نیست — حتی اگر نتیجهی اصلی بکتست عالی باشد.
بازچینی سادهی ترتیب معاملات فرض میکند معاملات مستقلاند. اگر استراتژی وابستگی سریالی دارد — مثلاً پس از یک باخت رفتار متفاوتی نشان میدهد — این فرض نقض میشود. در آن حالت باید از بازنمونهگیری بلوکی استفاده کرد که ساختار وابستگی را حفظ میکند.۱۸
سؤال متفاوتی که باید جدا پرسیده شود
مونتکارلو به شما میگوید «این استراتژی چقدر میتوانست بد باشد». اما پرسش دیگری هم هست: «آیا بهترین استراتژی از میان صدها استراتژیای که امتحان کردم، واقعاً بهتر از شانس است؟» این پرسش، ابزار آماری خودش را دارد — آزمون «بررسی واقعیت» وایت و نسخهی قویترش، آزمون توانایی پیشبینی برتر هانسن.۱۹۲۰ منطقشان ساده است: توزیع نتایج را نه برای یک استراتژی، بلکه برای بهترینِ کل مجموعه میسازند. این تنها راه درست برای قضاوت دربارهی برندهی یک جستوجوی بزرگ است.
بخش ۱۵تغییر رژیم بازار
هیچ استراتژیای در یک دنیای ثابت معامله نمیکند. بازار بین حالتهای متفاوتی جابهجا میشود و هر حالت، رفتار متفاوتی از سیستم میطلبد.
| رژیم | مشخصه | چه استراتژیهایی آسیب میبینند |
|---|---|---|
| روند Trend |
حرکت جهتدار پایدار با اصلاحهای کمعمق | سیستمهای بازگشت به میانگین، فروش در سقف و خرید در کف |
| رِنج Range |
نوسان بین دو سطح بدون جهت مشخص | سیستمهای شکستمحور — پیدرپی سیگنال کاذب میگیرند |
| نوسان بالا High Volatility |
دامنهی بزرگ، شکاف قیمتی، اسپرد پهن | هر سیستمی با حد ضرر ثابت؛ و هر سیستمی که اسپرد را ثابت فرض کرده |
| نوسان پایین Low Volatility |
دامنهی کوچک، حرکت کند | سیستمهایی که حد سودشان نسبت به نوسان بزرگ است — هرگز فعال نمیشود |
کار عملی ساده است: نتیجهی بکتست را بهجای یک عدد کلی، به تفکیک سال و به تفکیک رژیم گزارش کنید. اگر کل سود از دو سال خاص میآید و بقیهی سالها سربهسر یا منفی است، شما یک استراتژی عمومی ندارید؛ یک شرطبندی روی یک رژیم خاص دارید. این ممکن است اشکالی نداشته باشد — به شرطی که بدانید و به همان شکل مدیریتش کنید.
چهار دلیل اصلی، به ترتیب فراوانی: بیشبرازش روی دادهی گذشته؛ نادیده گرفتن هزینههای واقعی معامله؛ نشت داده یا نگاه به آینده در کد؛ و تغییر رژیم بازار نسبت به دورهی تست. دلیل پنجم که کمتر گفته میشود، تفاوت اجرای واقعی با شبیهسازی است — لغزش، تأخیر و پر شدن جزئی.
بخش ۱۶نقش هوش مصنوعی در تحلیل هزاران معامله
اینجا جایی است که هوش مصنوعی واقعاً چیزی اضافه میکند که قبلاً عملاً در دسترس نبود. خروجی یک بکتست چندساله میتواند چند هزار ردیف باشد. هیچکس این را دستی تحلیل نمیکند. اما اگر همین فایل را به یک مدل بدهید و از او بخواهید اسکریپت تحلیلی بنویسد، در چند دقیقه به سؤالهایی پاسخ میگیرید که معمولاً هرگز پرسیده نمیشوند:
- استراتژی در چه ساعتهایی ضعیفتر است؟ اغلب مشخص میشود بخش بزرگی از زیان در یک بازهی زمانی مشخص متمرکز است — مثلاً ساعات کمنقدشوندگی یا بازهی همپوشانی بازارها.
- عملکرد خرید و فروش متفاوت است؟ اگر تمام سود از یک سمت میآید، احتمالاً استراتژی فقط روند کلی همان دوره را سوار شده است.
- کدام ستاپ بیشترین افت را ساخته؟ گاهی حذف یک شرط ورود خاص، افت سرمایه را نصف میکند بدون اینکه سود چندانی از دست برود.
- رفتار در نوسان بالا چطور تغییر میکند؟ تقسیم معاملات بر اساس صدک نوسان در لحظهی ورود، معمولاً یکی از روشنترین یافتهها را میدهد.
- چه دورههایی بیشترین ضرر را ساختهاند؟ و آیا آن دورهها ویژگی مشترکی دارند؟
- سود چقدر متمرکز است؟ اگر پنج معاملهی برتر را حذف کنیم چه میماند؟
هر کدام از این یافتهها وسوسهی یک فیلتر جدید میسازد: «پس در آن ساعت معامله نکنیم». اما هر فیلتری که بعد از دیدن نتیجه اضافه شود، یک آزمون آماری دیگر است و مستقیماً به بیشبرازش اضافه میکند. قاعدهی سالم: فیلتر جدید فقط وقتی مجاز است که یک دلیل ساختاری داشته باشد (مثلاً «در آن ساعت اسپرد سه برابر است») و بعد از افزودنش، روی دادهی دیدهنشده دوباره آزمایش شود.
تحلیل داده و اتوماسیون گزارش، بدون اینکه خودتان کد بزنید
فیلتور روی ساخت ابزار داخلی، اسکریپت تحلیل داده و رباتهای گزارشدهی کار میکند — از داشبورد تحلیل معاملات تا ربات بله برای اطلاعرسانی خودکار.
بخش ۱۷یک گردش کار واقعی برای بکتست با هوش مصنوعی
ترتیب مراحل مهم است. بیشتر اشتباهات از این میآید که مرحلهای زودتر از جای خودش انجام میشود — مخصوصاً بهینهسازی، که اگر قبل از وارد کردن هزینهها انجام شود، کل نتیجه را بیاعتبار میکند.
- تعریف فرضیهDefine Hypothesis
یک جمله بنویسید که چرا این استراتژی باید کار کند. اگر دلیل ساختاری ندارید، احتمالاً دارید در نویز الگو میبینید. این تنها مرحلهای است که هوش مصنوعی نباید جای شما انجام دهد.
- تعریف قوانینDefine Rules
قوانین بدون ابهام، طوری که دو نفر مستقل کد یکسانی بنویسند. از مدل بخواهید ابهامها را فهرست کند، نه اینکه خودش پر کند.
- آمادهسازی دادهPrepare Data
منبع داده، بازه، تایمفریم و منطقهی زمانی را ثبت کنید. اسکریپت بازرسی کیفیت بنویسید و نتیجهاش را نگه دارید.
- تولید و بازبینی کدGenerate & Review Code
کد را تولید کنید، بعد در یک نشست جداگانه از مدل بخواهید همان کد را برای نشت داده و نگاه به آینده بازرسی کند. جدا بودن این دو مرحله مهم است.
- اجرای بکتست پایهRun Baseline Backtest
بدون هیچ بهینهسازی، با پارامترهای اولیه. این عدد مبنای مقایسهی همهی مراحل بعدی است.
- افزودن هزینههای واقعیAdd Trading Costs
اسپرد، کمیسیون، سوآپ و لغزش. اگر استراتژی همینجا میمیرد، بقیهی مراحل لازم نیست.
- تحلیل حساسیتSensitivity Analysis
هر پارامتر را در یک دامنه جابهجا کنید و شکل سطح نتیجه را ببینید. دنبال یک فلات باشید، نه یک قلهی نوکتیز.
- تست خارجازنمونهOut-of-Sample Test
یک بار. با پارامترهایی که قبلاً قفل شدهاند. نتیجه هرچه بود، ثبتش کنید.
- تحلیل واکفورواردWalk-Forward Analysis
پنجرهی غلتان. فقط منحنی بههمچسبیدهی بخشهای خارجازنمونه معتبر است.
- مونتکارلو و تست فشارMonte Carlo & Stress Test
بازچینی ترتیب، حذف تصادفی سیگنال، افزودن نویز اجرا. صدکهای افت سرمایه را استخراج کنید.
- فوروارد تستForward Test
اجرای زنده بدون پول واقعی، در شرایط اجرایی واقعی و برای مدتی که تعداد معاملات معناداری تولید کند — نه یک هفته.
- اجرای زندهی کوچکSmall Live Deployment
کمترین حجم ممکن. هدف سود نیست؛ هدف اندازهگیری فاصلهی اجرا با شبیهسازی است.
- پایش زوال استراتژیMonitor Strategy Degradation
از قبل تعریف کنید در چه شرایطی استراتژی را خاموش میکنید — عدد افت، تعداد باخت پیاپی، یا انحراف از رفتار مورد انتظار. تصمیمگیری وسط افت سرمایه، تصمیمگیری نیست.
بخش ۱۸یک مثال عملی فرضی
استراتژی زیر عمداً ساده و فرضی است و صرفاً برای نشان دادن روش آزمایش آورده شده. هیچ ادعایی دربارهی سودده بودن آن وجود ندارد و هیچ نتیجهی عددی برایش گزارش نمیشود.
فرض کنیم استراتژی روی XAUUSD در تایمفریم یکساعته این قانون را دارد:
ورود خرید: کندل یکساعته بسته شود بالای بالاترین قیمت ۲۰ کندل قبلی، و میانگین متحرک نمایی ۵۰ دورهای نسبت به کندل قبل صعودی باشد.
حد ضرر: ۲ برابر میانگین دامنهی واقعی ۱۴ دورهای، زیر قیمت ورود.
حد سود: ۳ برابر میانگین دامنهی واقعی ۱۴ دورهای، بالای قیمت ورود.
مدیریت ریسک: ریسک هر معامله ۰٫۵٪ سرمایه؛ حداکثر یک پوزیشن باز.
محدودیت زمانی: بدون ورود در ساعت پایانی جمعه.
حالا سؤال درست این نیست که «سودش چقدر است؟». سؤالهای درست اینهاست:
- داده از کجاست و چقدر کامل است؟ کدام بروکر، کدام بازه، چند درصد کندل گمشده، اسپرد تاریخی موجود است یا نه.
- «بالاترین قیمت ۲۰ کندل قبلی» شامل کندل جاری هست یا نه؟ این تفاوت کوچک، تفاوت بین یک استراتژی سالم و یک نگاه به آینده است.
- حد ضرر و حد سود در همان کندل ورود محاسبه میشوند یا کندل بعد؟ و اگر هر دو در یک کندل لمس شوند، تستر کدام را اول در نظر میگیرد؟ این تصمیم بهتنهایی میتواند نتیجه را وارونه کند.
- با اسپرد و کمیسیون واقعی چه اتفاقی میافتد؟ و اگر هزینهها را دو برابر کنیم؟
- با EMA ۴۰ یا ۶۰ بهجای ۵۰ چه میشود؟ با ۱۵ یا ۲۵ کندل بهجای ۲۰؟ سطح نتیجه هموار است یا نوکتیز؟
- تعداد معاملات چقدر است؟ اگر در پنج سال ۴۰ معامله شده، هیچ آماری از آن قابل استخراج نیست.
- سود در طول سالها چطور توزیع شده؟ اگر ۸۰٪ سود از یک سال بیاید، استراتژی یک شرطبندی روی یک رژیم بوده است.
- روی نماد دیگری هم کار میکند؟ اگر منطق واقعاً ساختاری است، باید روی دستکم چند بازار مشابه رفتار مشابهی نشان دهد — حتی اگر ضعیفتر.
- در بازچینی مونتکارلو، بیشترین افت در صدک ۹۵ چقدر است؟ و آیا با آن عدد میتوانید زندگی کنید؟
- در فوروارد تست سهماهه چه رفتاری نشان میدهد؟ نه لزوماً سود — رفتار مشابه با شبیهسازی.
اگر برای همهی این ده سؤال پاسخ مستند دارید، بکتست کردهاید. اگر فقط عدد سود نهایی را دارید، بکتست گرفتهاید.
بخش ۱۹چطور از ChatGPT یا Claude برای بکتست استفاده کنیم
کیفیت خروجی مدل تقریباً کاملاً تابع کیفیت پرسش است. شش پرامپت زیر برای استفادهی مستقیم نوشته شدهاند؛ بخشهای داخل کروشه را با اطلاعات خودتان جایگزین کنید.
«من این ایدهی معاملاتی را دارم: [توضیح ایده به زبان خودتان].
بهعنوان یک مهندس کمّی عمل کن. کد ننویس. بهجای آن:
- هر ابهامی را که مانع نوشتن کد قطعی میشود فهرست کن
- برای هر ابهام، حداقل دو تفسیر ممکن بنویس و توضیح بده هرکدام چه اثری بر نتیجه دارد
- هر جایی که ایدهی من ممکن است ناخواسته از اطلاعات آینده استفاده کند علامت بزن
- در پایان، مشخصات کامل و بدون ابهام را بهصورت شبهکد بنویس
هیچ فرضی را بیصدا پر نکن؛ هر فرضی که لازم شد را صریحاً بهعنوان فرض اعلام کن.»
«این کد بکتست است: [کد]
نقش تو بازرس است، نه کمککننده. فقط دنبال این موارد بگرد و برای هر مورد شمارهی خط بده:
- استفاده از دادهای که در لحظهی تصمیم هنوز در دسترس نبوده
- استفاده از قیمت بستهشدن کندلی که هنوز بسته نشده
- هر محاسبهای که از آمار کل بازه استفاده میکند (نرمالسازی، مقیاسبندی، حذف پرت)
- انتخاب ویژگی یا پارامتر که با نگاه به کل داده انجام شده
- همپوشانی زمانی بین نمونههای آموزش و آزمون
- هر جایی که سفارش در قیمتی پر میشود که در آن لحظه در دسترس نبوده
اگر چیزی پیدا نکردی صریح بگو «موردی پیدا نشد» — چیزی از خودت نساز.»
«این گزارش بکتست است: [گزارش یا فایل معاملات]
بدون هیچ تعریف و تمجیدی، فقط اینها را به من بگو:
- سود چقدر متمرکز است؟ اگر ۵ معاملهی برتر حذف شوند چه میماند؟
- سود به تفکیک سال و به تفکیک ماه چطور توزیع شده؟
- طولانیترین دورهی افت چند روز طول کشیده و کِی بوده؟
- عملکرد خرید و فروش چقدر متفاوت است؟
- تعداد معاملات برای استنتاج آماری کافی است؟ اگر نه، بگو چرا
- سه ضعف اصلی این استراتژی بر اساس همین داده چیست؟
هر عددی که میدهی باید از همین فایل قابل محاسبه باشد. اگر چیزی در داده نیست، بگو نیست.»
«این اطلاعات فرایند تحقیق من است:
- تعداد کل بکتستهایی که تا رسیدن به این نسخه گرفتهام:
[عدد] - تعداد پارامترهای قابل تنظیم:
[عدد] - طول داده:
[سال]، تعداد معاملات:[عدد] - نسبت شارپ گزارششده:
[عدد] - آیا دادهی خارجازنمونه بعد از دیدن نتیجه دوباره استفاده شده؟
[بله/خیر]
بر اساس ادبیات بیشبرازش بکتست، ارزیابی کن که این نتیجه چقدر میتواند حاصل شانس باشد. نسبت طول داده به تعداد آزمایشها را بررسی کن و بگو چه آزمونهای اضافهای لازم است. خوشبین نباش.»
«برای این استراتژی: [پارامترها و مقادیر فعلی]
یک اسکریپت پایتون بنویس که:
- هر پارامتر را در یک دامنهی معقول حول مقدار فعلی جابهجا کند
- نتیجه را بهصورت جدول و نقشهی حرارتی خروجی بدهد
- مشخص کند مقدار فعلی روی یک فلات هموار قرار دارد یا روی یک قلهی منفرد
- معیاری عددی برای «پایداری» گزارش کند — مثلاً انحراف معیار نتیجه در همسایگی
کد باید قابل اجرا باشد و ورودیاش فایل معاملات باشد، نه دادهی ساختگی.»
«این فایل معاملات است: [فایل]
یک اسکریپت بنویس که:
- ۱۰٬۰۰۰ بار ترتیب معاملات را تصادفی بازچینی کند
- برای هر بازچینی، بیشترین افت سرمایه و طولانیترین دورهی افت را محاسبه کند
- صدکهای ۵۰، ۹۰، ۹۵ و ۹۹ هر دو معیار را گزارش کند
- نسخهای هم با بازنمونهگیری بلوکی اجرا کند تا وابستگی سریالی حفظ شود
- نتیجه را با افت واقعی بکتست مقایسه کند
در پایان توضیح بده این اعداد چه چیزی را نشان میدهند و چه چیزی را نشان نمیدهند.»
مطالعهای در سال ۲۰۲۵ استراتژیهای زمانبندی مبتنی بر مدلهای زبانی را روی دو دهه داده و بیش از ۱۰۰ نماد آزمود و نشان داد برتریهای گزارششده در مطالعات قبلی، با گسترش بازهی زمانی و مجموعهی نمادها بهشدت افت میکند. نویسندگان دلیل را سوگیری بقا و کاوش داده در ارزیابیهای محدود قبلی میدانند.۲۱ ترجمهی عملی: مدلها ابزار خوبی برای تحقیقاند، اما وقتی خودشان تصمیمگیر معامله میشوند، دقیقاً همانطور ارزیابی میشوند که یک بکتست بیشبرازششده.
بخش ۲۰چه زمانی باید یک استراتژی را رد کنیم
رد کردن سریع، ارزشمندترین مهارت در این کار است. هر یک از نشانههای زیر بهتنهایی کافی است که استراتژی را کنار بگذارید یا دستکم تا رفع ابهام متوقفش کنید.
- تعداد معاملات خیلی کم. با چند ده معامله، هیچکدام از معیارها معنای آماری ندارند.
- سود وابسته به چند معامله. اگر حذف پنج معاملهی برتر نتیجه را منفی کند، آن سود ویژگی استراتژی نیست.
- حساسیت شدید به پارامتر. تغییر ۵ تا ۱۰ درصدی یک پارامتر نباید نتیجه را وارونه کند.
- افت شدید در خارجازنمونه. فاصلهی بزرگ بین عملکرد دروننمونه و خارجازنمونه، تعریف عملی بیشبرازش است.
- نتیجه بدون هزینهی معامله. هر گزارشی که اسپرد و کمیسیون ندارد، تا اطلاع ثانوی بیاعتبار است.
- عملکرد خوب فقط در یک دوره. سودی که کاملاً از یک سال یا یک رژیم میآید، یک شرطبندی است نه یک استراتژی.
- افت سرمایهی غیرمنطقی. مخصوصاً وقتی افت سرمایهی شناور خیلی بزرگتر از افت موجودی باشد — نشانهی نگه داشتن ضررهاست.
- بهینهسازی بیشازحد. تعداد پارامترهای آزاد نسبت به تعداد معاملات زیاد است.
- نتیجهی غیرقابل تکرار. اجرای دوبارهی همان کد روی همان داده نتیجهی متفاوتی میدهد.
- نمیدانید چند بار تست گرفتهاید. اگر این عدد را ثبت نکردهاید، هیچ ارزیابی آماری از نتیجه ممکن نیست.
- منطق استراتژی را نمیتوانید در یک جمله توضیح دهید. اگر نمیدانید چرا باید کار کند، نمیفهمید کِی از کار افتاده است.
بخش ۲۱چکلیست نهایی قبل از اعتماد به بکتست
- منبع، بازه و تایمفریم داده ثبت شده و قابل بازتولید است.
- کیفیت داده بررسی شده: شکاف، کندل تکراری، پرش غیرممکن، منطقهی زمانی.
- قوانین استراتژی بدون ابهام نوشته شدهاند و کد با آنها منطبق است.
- کد برای نگاه به آینده و نشت داده جداگانه بازرسی شده است.
- اسپرد، کمیسیون، سوآپ و لغزش در تست وارد شدهاند.
- نتیجه با دو برابر کردن هزینهها هم بررسی شده است.
- تعداد معاملات برای استنتاج آماری کافی است.
- تعداد کل بکتستهای گرفتهشده ثبت شده است.
- تحلیل حساسیت انجام شده و نتیجه روی یک فلات است، نه یک قله.
- تست خارجازنمونه فقط یک بار و با پارامترهای قفلشده انجام شده است.
- تحلیل واکفوروارد انجام شده و منحنی بههمچسبیده بررسی شده است.
- مونتکارلو اجرا شده و صدک ۹۵ افت سرمایه استخراج شده است.
- عملکرد به تفکیک سال و رژیم بازار گزارش شده است.
- تمرکز سود بررسی شده: نتیجه بدون پنج معاملهی برتر.
- افت سرمایهی شناور جدا از افت موجودی گزارش شده است.
- طول دورهی افت علاوه بر عمق آن اندازهگیری شده است.
- فوروارد تست با تعداد معاملات معنادار انجام شده است.
- شرایط خاموش کردن استراتژی از قبل و بهصورت عددی تعریف شده است.
- حجم شروع زنده کوچکترین حجم ممکن است.
بخش ۲۲جمعبندی
اگر یک جمله از این مقاله بماند، این باشد: کار یک بکتست حرفهای اثبات استراتژی نیست، تلاش برای شکست دادن آن است. استراتژیای که فقط در شرایط ایدهآل زنده میماند — دادهی تمیز، اسپرد صفر، پارامتر دقیق، دورهی خوششانس — استراتژی مقاومی نیست. اگر بعد از هزینههای واقعی، تست خارجازنمونه، تغییر پارامترها، واکفوروارد، مونتکارلو، رژیمهای مختلف بازار و فوروارد تست هنوز رفتار قابل دفاعی داشت، تازه ارزش دارد جدیتر بررسیاش کنید.
و دربارهی هوش مصنوعی: تفکیکی که در کل این مقاله حفظ شد، تفکیک اصلی این حوزه است. مدلهای زبانی فرایند تحقیق را متحول کردهاند — نوشتن کد، بازرسی منطق، تحلیل داده، تولید گزارش، همه چند برابر سریعتر شدهاند. اما هیچکدام از اینها اعتبار آماری تولید نمیکند. اعتبار فقط از آزمایش درست میآید، و آزمایش درست کند است، ملالآور است و اغلب به این ختم میشود که ایدهی خوبتان کار نمیکند.
خبر خوب این است که همین سرعت، شما را قادر میکند ایدههای بیشتری را رد کنید و زودتر رد کنید. اگر از هوش مصنوعی برای این استفاده کنید، بیشترین ارزش را از آن گرفتهاید. اگر برای پیدا کردن استراتژی برنده استفاده کنید، فقط سرعت رسیدن به یک نتیجهی نادرست را بالا بردهاید.
پرسشهای متداول
آیا بکتست، سودده بودن استراتژی در آینده را تضمین میکند؟
خیر. بکتست فقط عملکرد گذشته را تحت مجموعهای از فرضها شبیهسازی میکند. رابطهی بین گذشته و آینده یک فرض است، نه یک نتیجهی اثباتشده. بکتست میتواند نشان دهد یک استراتژی احتمالاً بیاعتبار است؛ نمیتواند نشان دهد معتبر است.
آیا ChatGPT یا Claude میتوانند خودشان بکتست انجام دهند؟
میتوانند کد بکتست بنویسند، کد را بازرسی کنند، خروجی را تحلیل کنند و گزارش بسازند. اما اجرای واقعی باید روی دادهی شما و پلتفرم شما انجام شود. اگر مدلی بدون اجرای کد عدد بدهد، آن عدد ساختگی است. قاعدهی ساده: نتیجهای که نمیتوانید خودتان دوباره تولید کنید، نتیجه نیست.
چند معامله برای یک بکتست معتبر کافی است؟
عدد جهانی ثابتی وجود ندارد و هیچ منبع معتبری آستانهی مشخصی مثل «۳۰ معامله» یا «۱۰۰ معامله» تعیین نکرده است. آنچه اهمیت دارد نسبت تعداد معاملات به تعداد پارامترهای آزاد و تعداد آزمایشهایی است که انجام دادهاید. ادبیات علمی این را با مفاهیمی مثل «حداقل طول بکتست» و «نسبت شارپ تعدیلشده» فرمولبندی میکند، نه با یک عدد ثابت.۷
نرخ برد مناسب چقدر است؟
نرخ برد بهتنهایی معیار نیست. یک استراتژی با نرخ برد ۳۰٪ میتواند بسیار سودده باشد اگر بردهایش چند برابر باختهایش باشد، و یک استراتژی با نرخ برد ۸۵٪ میتواند زیانده باشد اگر یک باخت، ده برد را از بین ببرد. معیار درست، امید ریاضی هر معامله است که نرخ برد و اندازهی برد و باخت را همزمان در نظر میگیرد.
ضریب سود (Profit Factor) چیست و چه عددی خوب است؟
ضریب سود نسبت مجموع سودها به قدرمطلق مجموع زیانهاست. عدد ۱ یعنی سربهسر و بالای ۱ یعنی سودده در آن نمونه. اما عدد بزرگ روی نمونهی کوچک بیشتر نشانهی کمبود داده است تا کیفیت استراتژی، و مثل هر معیار دیگری بدون در نظر گرفتن هزینههای معامله و تعداد آزمایشها قابل تفسیر نیست.
بیشترین افت سرمایه (Maximum Drawdown) چقدر باید باشد؟
عدد جهانی ثابتی ندارد. مقدار قابل قبول به نوع استراتژی، سطح ریسک، بازار، افق زمانی و مهمتر از همه به تحمل روانی و مالی خود سرمایهگذار بستگی دارد. دو نکتهی عملی: افت سرمایهی شناور را جدا از افت موجودی نگاه کنید، و طول دورهی افت را هم اندازه بگیرید — اغلب ماندن طولانی زیر قله سختتر از عمق افت است.
بیشبرازش (Overfitting) دقیقاً یعنی چه؟
یعنی استراتژی بهجای یادگیری ساختار عمومی بازار، جزئیات و نویز یک بازهی خاص از داده را حفظ کرده است. نتیجهاش این است که در همان بازه عالی و در هر بازهی دیگری ضعیف عمل میکند. مهمترین عامل ایجاد آن، تعداد زیاد آزمایشهاست: هر بار که پارامتری را عوض و دوباره تست میکنید، احتمال اینکه بهترین نتیجه صرفاً خوششانسترین نتیجه باشد بالاتر میرود.۷
تحلیل واکفوروارد (Walk Forward) چیست؟
روشی که در آن پارامترها روی یک پنجرهی زمانی بهینه میشوند، سپس بدون تغییر روی بازهی بلافاصله بعدی اجرا میشوند، و بعد کل پنجره جلو میرود و چرخه تکرار میشود. در پایان فقط بازههای خارجازنمونه به هم چسبانده میشوند. مزیتش این است که چرخهی واقعی بازبینی دورهای پارامترها را شبیهسازی میکند و نتیجه به محل یک خط تقسیم دلخواه وابسته نیست.
تحلیل مونتکارلو چه چیزی دربارهی استراتژی نشان میدهد؟
نشان میدهد نتیجهی مشاهدهشده چقدر به ترتیب خاص وقوع معاملات وابسته بوده است. با بازچینی تصادفی ترتیب معاملات و ساختن توزیع نتایج ممکن، میتوان فهمید بیشترین افت سرمایه در بدترین حالتهای معقول چقدر میشد. خروجی مفید آن یک عدد نیست، بلکه صدکهایی مثل «در ۹۵٪ حالتها افت کمتر از فلان مقدار بود» است.
آیا هوش مصنوعی میتواند یک استراتژی سودده پیدا کند؟
هوش مصنوعی میتواند تعداد بسیار زیادی ایده را سریع تولید و آزمایش کند، اما همین سرعت مسئلهی آماری را بزرگتر میکند: هرچه تعداد آزمایشها بیشتر، احتمال پیدا شدن نتیجهی خوبِ کاملاً تصادفی بیشتر. پژوهشها نشان دادهاند برتریهای گزارششدهی استراتژیهای مبتنی بر مدلهای زبانی، وقتی روی بازهی زمانی طولانیتر و مجموعهی بزرگتری از نمادها ارزیابی میشوند، بهشدت افت میکنند.۲۱ نقش درست هوش مصنوعی، تسریع و بازرسی فرایند تحقیق است، نه تولید سود.
تفاوت بکتست و فوروارد تست چیست؟
بکتست روی دادهی تاریخی و در حالت شبیهسازی انجام میشود؛ فوروارد تست اجرای همان استراتژی روی دادهی زنده و در زمان واقعی است، معمولاً بدون پول واقعی. تفاوت اصلی این است که فوروارد تست چیزهایی را میسنجد که بکتست نمیتواند: تأخیر اجرا، لغزش واقعی، اسپرد لحظهای، پایداری اتصال و رفتار سیستم در شرایط واقعی بازار.
آیا آمار رسمی دربارهی نتیجهی معاملهگران خرد وجود دارد؟
بله، و ارزش دانستن دارد. نهاد ناظر بازارهای اروپا در سال ۲۰۱۸ اعلام کرد بر اساس تحلیلهای نهادهای ناظر ملی، معمولاً ۷۴ تا ۸۹ درصد حسابهای خرد در CFD زیان میکنند، با میانگین زیان ۱٬۶۰۰ تا ۲۹٬۰۰۰ یورو.۲۲ مطالعهای دانشگاهی روی ۱۹٬۶۴۶ معاملهگر روزانه در بازار برزیل هم نشان داد از میان کسانی که بیش از ۳۰۰ روز ادامه دادند، ۹۷ درصد زیان کردند.۲۳ این آمار دربارهی بکتست نیست، اما چارچوب واقعبینانهای برای انتظارات میسازد.
ادامهی مسیر
این مقاله بخشی از مجموعهی محتوای فیلتور دربارهی هوش مصنوعی و بازارهای مالی است.
مقالات مرتبط
منابع
همهی ادعاهای عددی این مقاله از منابع زیر گرفته شدهاند. مثالهای عددی که منبع ندارند، در متن صریحاً «فرضی و آموزشی» علامت خوردهاند.
- Kim, A., Muhn, M., & Nikolaev, V. (2024). «Financial Statement Analysis with Large Language Models». arXiv:2407.17866 — نویسندگان این مقاله را موقتاً از گردش پژوهشی خارج کردند؛ دلیل اعلامشده، کشف ناسازگاریهایی در داده و تحلیلها هنگام تلاش برای بازتولید نتایج بود. https://arxiv.org/abs/2407.17866
- MetaQuotes. «Testing Trading Strategies» — مستندات رسمی MQL5 Reference (حالتهای مدلسازی، اسپرد تاریخی، حالت سود بر حسب پیپ). https://www.mql5.com/en/docs/runtime/testing
- MetaQuotes. «Testing trading strategies on real ticks» — مقالهی رسمی MQL5 (مقایسهی سه حالت مدلسازی روی یک اکسپرت). https://www.mql5.com/en/articles/2612
- Brown, S. J., Goetzmann, W. N., Ibbotson, R. G., & Ross, S. A. (1992). «Survivorship Bias in Performance Studies». The Review of Financial Studies, 5(4), 553–580. https://academic.oup.com/rfs/article-abstract/5/4/553/1590264
- Bailey, D. H., & López de Prado, M. (2014). «The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting, and Non-Normality». The Journal of Portfolio Management, 40(5), 94–107. https://www.davidhbailey.com/dhbpapers/deflated-sharpe.pdf
- Lo, A. W. (2002). «The Statistics of Sharpe Ratios». Financial Analysts Journal, 58(4), 36–52. https://rpc.cfainstitute.org/research/financial-analysts-journal/2002/the-statistics-of-sharpe-ratios
- Bailey, D. H., Borwein, J. M., López de Prado, M., & Zhu, Q. J. (2014). «Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance». Notices of the American Mathematical Society, 61(5), 458–471. https://www.ams.org/notices/201405/rnoti-p458.pdf
- López de Prado, M. (2018). «The 10 Reasons Most Machine Learning Funds Fail». Lawrence Berkeley National Laboratory / GARP. https://www.garp.org/hubfs/Whitepapers/a1Z1W0000054x6lUAA.pdf
- Harvey, C. R., & Liu, Y. (2015). «Backtesting». The Journal of Portfolio Management. https://people.duke.edu/~charvey/Research/Published_Papers/P120_Backtesting.PDF
- Harvey, C. R., Liu, Y., & Zhu, H. (2016). «… and the Cross-Section of Expected Returns». The Review of Financial Studies, 29(1), 5–68. https://academic.oup.com/rfs/article-abstract/29/1/5/1843824
- Sullivan, R., Timmermann, A., & White, H. (1999). «Data-Snooping, Technical Trading Rule Performance, and the Bootstrap». The Journal of Finance, 54(5), 1647–1691. https://onlinelibrary.wiley.com/doi/abs/10.1111/0022-1082.00163
- Kapoor, S., & Narayanan, A. (2023). «Leakage and the reproducibility crisis in machine-learning-based science». Patterns, 4(9), 100804. https://www.cell.com/patterns/fulltext/S2666-3899(23)00159-9
- López de Prado, M. (2018). Advances in Financial Machine Learning. Wiley. فصلهای ۷ (اعتبارسنجی متقاطع در مالی) و ۱۱ تا ۱۴ (خطرهای بکتست، بکتست با اعتبارسنجی متقاطع، آمار بکتست). ISBN 978-1-119-48208-6.
- Novy-Marx, R., & Velikov, M. (2016). «A Taxonomy of Anomalies and Their Trading Costs». The Review of Financial Studies, 29(1), 104–147. https://academic.oup.com/rfs/article-abstract/29/1/104/1844518
- Frazzini, A., Israel, R., & Moskowitz, T. J. (2018). «Trading Costs». Working paper, AQR Capital Management. https://www.aqr.com/Insights/Research/Working-Paper/Trading-Costs
- McLean, R. D., & Pontiff, J. (2016). «Does Academic Research Destroy Stock Return Predictability?». The Journal of Finance, 71(1), 5–32. https://onlinelibrary.wiley.com/doi/10.1111/jofi.12365
- Pardo, R. (2008). The Evaluation and Optimization of Trading Strategies, ۲nd edition. Wiley Trading. (معرفی سیستماتیک تحلیل واکفوروارد.) https://onlinelibrary.wiley.com/doi/book/10.1002/9781119196969
- Politis, D. N., & Romano, J. P. (1994). «The Stationary Bootstrap». Journal of the American Statistical Association, 89(428), 1303–1313. https://www.tandfonline.com/doi/abs/10.1080/01621459.1994.10476870
- White, H. (2000). «A Reality Check for Data Snooping». Econometrica, 68(5), 1097–1126. https://onlinelibrary.wiley.com/doi/abs/10.1111/1468-0262.00152
- Hansen, P. R. (2005). «A Test for Superior Predictive Ability». Journal of Business & Economic Statistics, 23(4), 365–380. https://www.tandfonline.com/doi/abs/10.1198/073500105000000063
- Li, W. W., Kim, H., Cucuringu, M., & Ma, T. (2025). «Can LLM-based Financial Investing Strategies Outperform the Market in Long Run?». arXiv:2505.07078. https://arxiv.org/abs/2505.07078
- ESMA (۲۷ مارس ۲۰۱۸). «ESMA agrees to prohibit binary options and restrict CFDs to protect retail investors» — اطلاعیهی رسمی ESMA71-98-128. https://www.esma.europa.eu/press-news/esma-news/esma-agrees-prohibit-binary-options-and-restrict-cfds-protect-retail-investors
- Chague, F., De-Losso, R., & Giovannetti, B. (2020). «Day Trading for a Living?». Working paper, University of São Paulo. SSRN 3423101. https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3423101