30 اوت 2026 · آمار

بک‌تست به چند معامله نیاز دارد تا شارپ معنایی پیدا کند؟

بک‌تست به چند معامله نیاز دارد تا شارپ معنایی پیدا کند؟

این پرسشی است که بیشتر از همه، به شکل‌های مختلف، از سوی کسانی می‌شنوم که تازه نخستین استراتژی‌شان را تمام کرده‌اند: چند معامله لازم دارم تا نتیجه واقعی باشد؟ معمولاً یک عدد هم کنارش می‌آید: «1,200 معامله دارم؛ کافی است، نه؟» و پاسخ صادقانه همه را کلافه می‌کند، چون اصلاً تعداد معاملات مطرح نیست.

خلاصه‌اش در یک خط است؛ بعد باقی این نوشته را صرف توضیح این می‌کنم که چرا آزاردهنده است.

1/√Tخطای معیار شارپ سالانه‌شده؛ T برحسب سال
±0.88بازه 95% پیرامون هر شارپ 5ساله
1.4شارپی که خوش‌شانس‌ترینِ 100 استراتژیِ نویزی طی همان 5 سال نشان می‌دهد

خطای معیار نسبت شارپ چیست؟

برای شارپی که بر اساس n بازده دوره‌ای محاسبه شده، با فرض استقلال بازده‌ها و تقریباً نرمال بودنشان، خطای نمونه‌گیری چنین است:

SE(s) ≈ √((1 + s²/2) / n)

که در آن s شارپ محاسبه‌شده در همان بسامد است. اگر هر دو طرف را سالانه کنیم، رابطه ساده‌ای به دست می‌آید. با k مشاهده در سال و T سال، شارپ سالانه‌شده S چنین خطایی دارد:

SE(S) ≈ √((1 + S²/(2k)) / T)

به 2k در مخرج دقت کنید. برای بازده روزانه، k = 252 است؛ پس حتی شارپ 2 هم فقط 4/504 ≈ 0.008 به صورت اضافه می‌کند. کل عبارت به 1 فرو می‌ریزد. خطای معیار شارپ سالانه‌شده تقریباً 1/√T است؛ T همان تعداد سال تقویمی داده شماست. این مقدار به‌ندرت به خود شارپ وابسته است، به بسامد نمونه‌گیری وابسته نیست و مطلقاً به تعداد معاملات انجام‌شده هم ربطی ندارد.

پس:

سال‌های دادهSE(شارپ)CI با اطمینان 95% در صورت اندازه‌گیری 1.5
11.00−0.46 تا 3.46
20.710.11 تا 2.89
30.580.37 تا 2.63
50.450.62 تا 2.38
100.320.88 تا 2.12

بک‌تستی که شارپ 1.5 را روی دو سال سابقه نشان می‌دهد، در سطح اطمینان 95% نمی‌تواند از نظر آماری خود را از شیر یا خط متمایز کند. این وضعیت پایه در بیشتر پژوهش‌های کریپتو است؛ چون داده‌های پاک، با اصلاح سوگیری بقا و کارمزد دقیق، برای بیشتر افراد از حوالی 2022 شروع می‌شود و نیمی از نمادهای جالب پیش از 2023 اصلاً وجود نداشتند.

اما من 40,000 معامله دارم. این مشکل را حل نمی‌کند؟

نه؛ و این همان سوءبرداشتی است که بیش از هر چیز می‌خواهم از بین ببرم.

تعداد معاملات و طول نمونه کمیت‌های متفاوتی‌اند و فقط یکی از آن‌ها در فرمول آمده است. اگر استراتژی شما طی شش ماه 40,000 بار معامله کند، T = 0.5 و SE ≈ 1.41 است. بازه 95% برای شارپ اندازه‌گیری‌شده 2.0 از −0.8 تا 4.8 می‌رسد. نتیجه صادقانه با چهل‌هزار معامله این است: «شاید خوب باشد، شاید هم منفی.»

دلیلش این است که آن 40,000 معامله، 40,000 شرط مستقل روی 40,000 وضعیت متفاوت بازار نیستند. این‌ها 40,000 نمونه از حدود 180 روز رفتار بازارند؛ روزها با هم هم‌بستگی دارند و رژیم‌ها هم درون خودشان هم‌بسته‌اند. یک پرتفوی بازگشت به میانگین با بسامد بالا که چهار ماه هر روز سود می‌دهد، در واقع یک شرط بسته است: این‌که بازگشت کوتاه‌مدت در این رژیم نقدشوندگی برقرار بماند. شاید فقط چند بار مستقل نتیجه آن شرط را دیده باشد.

جایگزینی ذهنی‌ای که به کار می‌برم: رژیم‌ها را بشمارید، نه اجراها را. این استراتژی از چند وضعیت واقعاً متفاوت بازار جان سالم به در برده است؟ یک استراتژی آربیتراژ فاندینگ که در یک دوره طولانیِ مثبت بودن بیسیس اجرا شده، n = 1 را تجربه کرده است؛ صرف‌نظر از تعداد تعدیل‌های ساعتی ثبت‌شده.

بررسی سریع: P&L روزانه‌تان را با بلوک‌های 20روزه بوت‌استرپ کنید و پراکندگی شارپ‌های بازنمونه‌گیری‌شده را ببینید. اگر صدک 5 از صفر پایین‌تر باشد، تعداد معاملاتتان بی‌ربط است. این کار حدود نه خط کد numpy می‌خواهد و بیش از هر بررسی دیگری مرا از دنبال کردن استراتژی‌ها منصرف کرده است.

آیا این فرمول برای استراتژی‌های واقعی جواب می‌دهد؟

نه دقیقاً؛ و خطایش در جهتی است که خوشتان نمی‌آید. نتیجه 1/√T فرض می‌کند بازده‌ها IID و نرمال‌اند. بازده استراتژی‌های واقعی خودهم‌بسته و چوله است و چولگی هر چیزی که شبیه آربیتراژ، فروش نوسان یا بازگشت به میانگین باشد، معمولاً منفی است. اصلاح Mertens این گشتاورها را دوباره وارد محاسبه می‌کند:

SE(s) ≈ √((1 + s²/2 − γ₃·s + (γ₄−3)·s²/4) / n)

که در آن γ₃ چولگی و γ₄ کشیدگی است. چولگی منفی، جمله −γ₃·s را مثبت می‌کند و بازه را گسترش می‌دهد. کشیدگی اضافی هم آن را بیشتر گسترش می‌دهد. برای P&L معمول آربیتراژ فاندینگ کریپتو با چولگی حدود −1.2 و کشیدگی حدود 9، دیده‌ام که خطای معیار اصلاح‌شده 30–40% بزرگ‌تر از مقدار ساده‌انگارانه می‌شود. مقاله Lo در سال 2002 بخش خودهم‌بستگی را بررسی می‌کند و اثر هم‌جهت است: هم‌بستگی سریالی مثبت در بازده، شارپ ساده‌انگارانه را بالا می‌برد و خطای ظاهری را کوچک‌تر می‌کند؛ ترکیب ناخوشایندی است.

پس 1/√T را کفِ عدم‌قطعیت در نظر بگیرید. این بهترین حالت است.

اگر 500 گونه را آزموده باشم، شارپ باید چقدر باشد؟

حالا می‌رسیم به بخشی که برای هرکسی با خط لوله پژوهشی خودکار اهمیت دارد؛ وضعیتی که هر روز در Stratmill با آن سروکار داریم: عامل تولیدکننده، یک گزینه تولید نمی‌کند، بلکه صدها گزینه می‌سازد.

بیشینه مورد انتظار M برداشت از توزیع نرمال استاندارد تقریباً √(2 ln M) است. آن را در خطای معیار ضرب کنید تا شارپی به دست آید که خوش‌شانس‌ترینِ M استراتژی واقعاً بی‌ارزش نشان می‌دهد.

استراتژی‌های آزموده‌شده√(2 ln M)شارپ بهترینِ نویز، 5 سال (SE 0.45)بهترینِ نویز، 2 سال (SE 0.71)
102.150.961.52
1003.031.362.16
5003.531.582.50
5,0004.131.852.93

ردیف یکی مانده به آخر را بخوانید. اگر 500 گزینه را با دو سال داده تولید و برنده شارپ 2.4 نشان داده باشد، دقیقاً هیچ چیزی پیدا نکرده‌اید. این مقدار پایین‌تر از کف نویز است. معیار شارپ تعدیل‌شده Bailey و López de Prado این موضوع را رسمی می‌کند و واریانس شارپ‌های آزموده‌شده را جایگزین تقریب سرانگشتی √(2 ln M) می‌کند. پیاده‌سازی درستش ارزش دارد، اما همین نسخه سرانگشتی هم برای تغییر رفتار از همین امروز کافی است.

دو نکته وضعیت را از آنچه جدول نشان می‌دهد بدتر می‌کنند. اول، M تعداد استراتژی‌هایی نیست که ذخیره کرده‌اید؛ تعداد مواردی است که ارزیابی کرده‌اید، از جمله هر تغییر پارامتر، هر «بگذارید فقط دوره بازنگری 30تایی را امتحان کنم» و هر بار اجرای دوباره پس از رفع یک باگ. هیچ‌کس صادقانه نمی‌شمارد. دوم، گزینه‌های شما برداشت‌های مستقلی نیستند؛ بنابراین √(2 ln M) گستره مؤثر را بیش از اندازه نشان می‌دهد، هرچند آزمون‌های هم‌بسته هم باعث می‌شوند یک رژیم خوش‌شانس، یک خوشه کامل را با هم بالا بکشد.

خطرناک‌ترین عدد در پژوهش کوانت آن است که هیچ‌کس ثبت نکرده: چند بار نگاه کرده‌اید.

پس من عملاً چه کار می‌کنم؟

پنج کار، به ترتیبی که خودم انجام می‌دهم.

  1. هر ارزیابی را ثبت کنید. شمارنده‌ای که با هر اجرای بک‌تست یک واحد بالا می‌رود، مقدارش ذخیره می‌شود و هرگز بازنشانی نمی‌شود. اگر نتوانید M را بگویید، آستانه‌تان را هم نمی‌توانید مشخص کنید. این کار باارزش‌ترین یک ساعت مهندسی در کل این فهرست است.
  2. شارپ را همیشه همراه با بازه‌اش گزارش کنید. هیچ‌وقت فقط یک عدد چاپ نکنید. گزارش‌های بک‌تست ما 1.72 ± 0.51 (2.9y, skew-adjusted) را نمایش می‌دهند و ± اختیاری نیست. همین کار شیوه حرف‌زدن کل تیم درباره نتایج را تغییر می‌دهد.
  3. پیش از دیدن نتیجه، آستانه را بر اساس M و T تعیین کنید. عدد را از جدول بالا بیرون بکشید و یادداشت کنید. آستانه‌گذاری پس از دیدن نتیجه راهی است که همه با آن خودشان را به پذیرفتن برازش منحنی قانع می‌کنند.
  4. وقتی نمونه کم دارید، گستردگی را به بسامد ترجیح دهید. نمی‌توانید زمان تقویمی بیشتری بسازید، اما می‌توانید همان سیگنال را روی 40 نماد نامرتبط اجرا کنید. این کار واقعاً n مؤثر را بالا می‌برد؛ افزایش بسامد معاملات چنین اثری ندارد. البته مراقب هم‌بستگی‌ها باشید: 40 قرارداد پرپچوال کریپتو در یک ساعتِ گریز از ریسک، عملاً یک ابزارند.
  5. بعد آن را کاغذی معامله کنید. زمان خارج از نمونه روزی یک روز جمع می‌شود و میان‌بری ندارد؛ دقیقاً به همین دلیل تنها نمونه‌ای است که کسی نمی‌تواند بیش‌برازشش کند.

هیچ‌کدام از این‌ها نمونه‌های کوتاه را قابل‌استفاده نمی‌کند. کمک می‌کند درباره ادعایی که نمونه کوتاه می‌تواند پشتیبانی کند صادق باشید؛ ادعایی بسیار ضعیف‌تر از آنچه بیشتر گزارش‌های بک‌تست القا می‌کنند. شارپ 1.5 طی دو سال فرضیه‌ای است که ارزش معامله کاغذی دارد. یافته نیست.

نسبت شارپ، بیش‌برازش، بک‌تست، معناداری آماری، پژوهش کوانت
اشتراک‌گذاریXLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← همهٔ مطالب