احتمالاً سیگنال ورود شما کماهمیتترین بخش بکتستتان است. میتوانم یک قاعدهٔ مومنتوم متوسط را بردارم، همهٔ زمانهای ورود و خروج را دستنخورده بگذارم، فقط تابعی را عوض کنم که تعداد قراردادهای قابل نگهداری را تعیین میکند، و شارپ خالص را از 0.41 به 0.71 و حداکثر افت سرمایه را از 31% به 13% برسانم. همان معاملات. همان اجراها. استراتژی متفاوت.
این حرف مردم را کلافه میکند، و باید هم بکند، چون یعنی بیشتر وقتی که صرف تنظیم بازههای بازنگری و آستانههای فیلتر میشود، صرف جزء کوچکتر ماجرا شده است. پس بگذارید اجراهای واقعی را نشان بدهم و بعد هم حق منتقدان را ادا کنم، چون نسخهای از این استدلال وجود دارد که اشتباه است و بد نیست بدانید من از کدام نسخه دفاع میکنم.
یک سیگنال، ۶ روش نگهداری موقعیت
سیگنال: قرارداد دائمی ETHUSDT در Binance USDⓈ-M، کندلهای 1 ساعته، خرید وقتی EMA 12 ساعته بالاتر از EMA 96 ساعته است و در غیر این صورت بدون موقعیت، بدون فروش استقراضی. از ژوئیهٔ 2022 تا ژوئن 2026. 431 معاملهٔ رفتوبرگشت. کارمزد taker در هر دو سمت 5.0 bps، پرداخت یا دریافت funding هر ۸ ساعت بر مبنای موقعیت واقعی، و مدلسازی لغزش بر اساس عمق بهترین قیمتهای خریدوفروش. این سیگنالی عمداً کسلکننده است؛ انتخابش کردم چون هیچکس از آن دفاع نمیکند و همین، آن را به آزمونی تمیز تبدیل میکند.
زمان کندل ورود و خروج در همهٔ ردیفهای زیر یکسان است. تنها تفاوت، تابع تعیین اندازه است.
| قاعدهٔ تعیین اندازه | شارپ خالص | حداکثر افت سرمایه | ارزش اسمی معاملهشده در سال (× میانگین موقعیت) | هزینهها بهعنوان درصدی از سودوزیان ناخالص | اوج اهرم |
|---|---|---|---|---|---|
| ارزش اسمی ثابت $10k | 0.41 | 18.2% | 246× | 14% | 1.0× |
| سهم ثابت، 100% از ارزش حساب | 0.44 | 30.8% | 251× | 15% | 1.0× |
| معکوس نوسان تحققیافتهٔ 20 روزه | 0.68 | 14.1% | 690× | 29% | 4.4× |
| هدف نوسان سالانهٔ 20%، بازتنظیم ساعتی، بدون سقف | 0.71 | 12.9% | 1,180× | 41% | 6.3× |
| هدف نوسان 20%، محدودهٔ عدم معاملهٔ 20%، سقف اهرم 3× | 0.66 | 15.3% | 402× | 19% | 3.0× |
| نیمکلی بر مبنای میانگین/واریانس لغزان 60 روزه | 0.52 | 24.6% | 830× | 33% | 8.1× |
به فاصلهها نگاه کنید. بین بدترین و بهترین ردیف، اختلاف نسبی شارپ 73% است و افت سرمایه 2.4 برابر تفاوت دارد. حالا در این مجموعهداده یک پارامتر سیگنال ورود پیدا کنید که شارپ را 0.30 جابهجا کند، بیآنکه نشانهٔ آشکار بیشبرازش باشد. گشتهام. طول جفت EMA در کل شبکهٔ مقادیر معقول حدود 0.12 تغییر ایجاد میکند و بیشتر این تغییر هم نویزی است که خارج از نمونه نمیتوانید حفظش کنید.
چرا وزندهی معکوس بر اساس نوسان اینقدر خوب به نظر میرسد، و چه مقدارش واقعی است
سازوکارش پیچیده نیست. در ارزش اسمی ثابت، اندازهٔ موقعیت شما با نوسان تحققیافته همبستگی ندارد؛ یعنی ریسک دلاری هر معامله متناسب است با هر نوسانی که آن هفته پیش بیاید. در این بازه، نوسان تحققیافتهٔ 20 روزهٔ ETH بین 31% تا 118% سالانه بود. اجرای ارزش اسمی ثابت در مارس 2024 نسبت به ژوئیهٔ 2023، 3.8× ریسک دلاری بیشتری پذیرفت؛ نه چون سیگنال اطمینان بیشتری داشت، بلکه چون بازار پرنوسانتر بود. تقریباً تمام افت سرمایهاش در پنجک بالایی نوسان متمرکز است. تعیین اندازهٔ معکوس بر اساس نوسان این پیوند را حذف میکند و حذف آن واقعاً شکل جریان بازده را بهتر میکند.
اما بخشی از بهبود شارپ خطای سنجش است و اگر این دو را از هم جدا نکنید، بعداً تصمیمهای بدی خواهید گرفت. شارپ بازده را بر انحراف معیار بازده تقسیم میکند. هدفگذاری نوسان، بنا به تعریف، عملیاتی است که انحراف معیار بازده را باثبات میکند. دارید مستقیماً مخرج کسر را بهینه میکنید. قاعدهای که موقعیتها را برای رسیدن به نوسان پیشینی ثابت مقیاس میکند، شارپ تقریباً هر جریان بازدهی دارای خوشهبندی نوسان را بهبود میدهد، حتی جریانهایی که هیچ مزیتی ندارند. این را روی سیگنالهای درهمریخته بررسی کردهام: زمانهای ورود را تصادفی کنید، پوشش هدفگذاری نوسان را نگه دارید، و شارپ نسبت به ارزش اسمی ثابت همچنان حدود 0.06 بهتر میشود، آن هم روی مبنایی با میانگین صفر. کم است، اما صفر نیست و کاملاً حاصل سازوکار است.
پس وقتی قواعد تعیین اندازه را درون تیم مقایسه میکنم، شارپ هیچوقت تنها عدد برگه نیست. Calmar را میخواهم، سودوزیان خالص بهازای هر واحد از میانگین ارزش اسمی بهکارگرفتهشده را میخواهم، و مسیر تبدیل ناخالص به خالص را هم میخواهم؛ چون دستکاری هر سه با ترفند مخرج خیلی دشوارتر است.
برآورد نوسان یک مدل است و مثل هر مدل دیگری نشت میکند
رایجترین دلیل جعلی از آب درآمدن یک نتیجهٔ خوب در تعیین اندازه این است: برآورد نوسان از اطلاعات همان کندلی استفاده میکند که اندازهٔ موقعیتش را تعیین میکند. اگر سری نوسان با پنجرهٔ مرکزدار محاسبه شود، یا `rolling().std()` پیشفرض pandas بعد از بازنمونهگیریای اعمال شود که کندل ناقص جاری را در بر میگیرد، یا از استانداردسازی کل نمونه استفاده شود، نشت اطلاعات دارید. ظریف است، چون نوسان تداوم دارد؛ بنابراین نشت در هر ردیف کوچک است و منحنی ارزش حساب همچنان باورپذیر به نظر میرسد. فقط دقیقاً در هفتههای مهم کمی بیش از حد صاف است.
عاملهای ما پیش از اینکه نتیجهای وارد صف معاملات کاغذی شود، در هر قاعدهٔ تعیین اندازه ۴ مورد را بررسی میکنند:
- در دسترس بودن هنگام تصمیمگیری. اندازهای که در کندل آغازشونده در ساعت 14:00 استفاده میشود، باید از دادههایی قابل محاسبه باشد که زمان بستهشدنشان ≤ 13:59:59.999 است. این را با محاسبهٔ دوبارهٔ سری اندازه از قاب دادهٔ بریدهشده در نمونهای تصادفی شامل 200 نقطهٔ تصمیمگیری و مقایسهٔ اختلافها تأیید میکنیم.
- دورهٔ بازنگری برآورد، پارامتری واقعی است. پنجرهٔ نوسان 20 روزه و پنجرهٔ نوسان 60 روزه دو استراتژی متفاوتاند. بازهٔ بازنگری همراه با همهچیز وارد شبکهٔ آزمون پیشرونده میشود و اگر نتیجه فقط با یک طول پنجره جواب بدهد، آن یافتهای دربارهٔ شکنندگی است.
- مسیر اهرم، نه فقط اوج اهرم. کل توزیع اهرم ناخالص را چاپ کنید. اجرای هدفگذاری نوسان بدون سقف بالا، 4% از ساعتها را بالاتر از 5× گذراند؛ چیزی که هرگز در جدول خلاصه دیده نمیشود و کاملاً تعیین میکند استراتژی قابل اجرا هست یا نه.
- حساسیت تعیین اندازه بهعنوان آزمون استحکام. اگر با تغییر هدف نوسان از 20% به 25% شارپ فروبپاشد، استراتژی هدفگذاری نوسان نشده، بلکه اهرمش تنظیم شده است؛ و مزیتتان را با انتخاب یک عدد پیدا کردهاید.
سقف اهرم تزئینی برای مدیریت ریسک نیست؛ بخشی از تعریف استراتژی است. ردههای ETHUSDT در Binance با افزایش ارزش اسمی موقعیت، حداکثر اهرم را کاهش میدهند و نرخ مارجین نگهداری هم پلهای بالا میرود. بکتستی که به قاعدهٔ هدفگذاری نوسان اجازه میدهد در ارزش اسمی $400k به 6.3× برسد، موقعیتی را توصیف میکند که صرافی با آن مارجین اجازهٔ نگهداریاش را نمیدهد. ردیف سقفدار 0.05 شارپ هزینه دارد و تنها مورد از این دو است که چیزی واقعی را توصیف میکند.
پول کجا میرود؟ پای بازتنظیم در میان است
به ستون هزینهها توجه کنید. بازتنظیم ساعتی برای رسیدن به هدف نوسان، بهترین شارپِ ظاهری را داد و در عین حال 41% از سودوزیان ناخالص را به صرافی سپرد. این یعنی ارزش اسمی میانگین موقعیت در سال 1,180× معاملهشده، با کارمزد 5 bps در هر سمت، بهعلاوهٔ اسپرد و اثر قیمتی. راهحل سادهانگارانه این است که طبق برنامه، کمتر بازتنظیم کنید. راهحل بهتر، محدودهٔ عدم معامله است: فقط وقتی اندازه را تغییر دهید که موقعیت فعلی بیش از آستانهای مشخص از هدف فاصله گرفته باشد.
محدودهٔ 20% ارزش اسمی سالانهٔ معاملهشده را از 1,180× به 402× رساند؛ کاهشی 66%؛ و 0.05 از شارپ کم کرد. حالا این را روی ۸ سیگنال اجرا کردهام و الگو تکرار میشود: محدودههای بین 15% تا 25% بیشترِ مزیت کنترل ریسک را با یکسوم گردش معاملات حفظ میکنند، و هر چیزی زیر 10% یعنی پرداخت کارمزد برای دقت ظاهری در کمیتی که به هر حال با پنجرهٔ 20 روزه برآورد میکنید. نمیشود در عددی که خطای معیارش 15% است، تا ۳ رقم اعشار بازتنظیم کرد.
در فوریه اجرایی داشتیم که گزارش نوشتهشده بهدست یک عامل، بهبود شارپ 0.22 را به «فیلتر ورودی بهبودیافته» نسبت میداد. تفاوت، یک خط در ماژول تعیین اندازه بود. فیلتر تغییر نکرده بود. حالا گزارش را طوری تنظیم میکنم که هش پیکربندی تعیین اندازه را بالای صفحه چاپ کند، چون انتساب نتیجه یک انضباط است و مدلها هم مثل هر کس دیگری مشتاقاند داستانی مرتب تعریف کنند.
معاملات کاغذی با قاعدهٔ تعیین اندازهٔ شما چه میکنند
اینجا فاصلهٔ بکتست و معاملهٔ کاغذی به بیشترین حد میرسد و علتش عمدتاً حسابوکتاب است. تعیین اندازهٔ واکنشگرا به نوسان باعث میشود اندازهٔ موقعیت در نمونه بین 4 تا 8 برابر نوسان کند. هر دو سر این بازه با محدودیتهای صرافی روبهرو میشوند که بکتست هرگز مدل نکرده بود.
در سمت کوچکتر: گام اندازه و حداقل ارزش اسمی. قرارداد دائمی ETHUSDT گام مقداری 0.001 و حداقل $5 دارد. اگر اندازهٔ شما در رژیم نوسان پایین 0.0004 ETH باشد، بکتست آن را نگه میدارد و معاملهٔ کاغذی هیچ موقعیتی نمیگیرد. شاید حالت حاشیهای به نظر برسد، تا وقتی متوجه شوید قاعدهٔ هدفگذاری نوسان، اندازههای کوچکترین را در آرامترین بازارها قرار میدهد؛ بازاری که در سیگنال روند اغلب بهترین نقاط ورود را دارد. در سمت بزرگتر: محدودیت موقعیت، ردههای مارجین، و این واقعیت که موقعیت 6× به انضباط مارجین ایزوله نیاز دارد، در حالی که مدل لیکوییدیشنش را در بکتست نداشتید.
یک مورد را پیدا کردیم که منحنی ارزش حساب معاملات کاغذی برای ۶ هفته با اختلافی کمتر از 3% از بکتست پیروی کرد و بعد بهشدت واگرا شد. علت گرد کردن بود: بریدن با `int()` بهجای گرد کردن به گام سفارش در تعیینکنندهٔ اندازهٔ سفارش، برای موقعیتهایی با میانگین 1.4 گام. بکتست اندازه را در فضای پیوسته تعیین میکرد و سامانهٔ زنده در هر معاملهٔ کوچک 20-30% از موقعیت موردنظر را از دست میداد. خبری از پیچیدگی مدل اجرا نبود، خبری از داستان تأخیر نبود. فقط بریدن.
منتقدان کجا حق دارند
سه ایراد واردند و نمیخواهم فراتر از آنها ادعا کنم.
اول و مهمتر از همه: تعیین اندازه مزیت را تخصیص میدهد، نمیتواند آن را بسازد. اگر امید ریاضی ناخالص سیگنال شما پس از کارمزد و funding واقعبینانه صفر یا منفی باشد، همهٔ قواعد این جدول ضرر میدهند؛ قواعد پیچیدهتر فقط با نمایهٔ واریانس زیباتری ضرر میدهند. سیگنالی را انتخاب کردم که در این بازه مزیت خالصی کوچک اما مثبت دارد. همین ۶ قاعده را روی سیگنالی با −1.2 bps خالص بهازای هر معامله اجرا کنید، رتبهبندی حفظ میشود اما ارزش پایانی حساب در همهٔ موارد پایینتر از نقطهٔ شروع است. تعیین اندازه ضریبی برای چیزی است. هنوز به آن چیز نیاز دارید.
دوم، هدفگذاری نوسان یک حالت شکست واقعی و مستند دارد: در بخش پایانی یک ریزش سریع، اهرم را کم میکند و پس از بازگشت ناگهانی دوباره بالا میبرد. در یک سقوط تند Vشکل، ارزش اسمی ثابت برنده میشود، گاهی با اختلاف زیاد. ریزش سهام در مارس 2020 و افت بازار رمزارز در اوت 2024 هر دو در بخش بازیابی به تعیین اندازهٔ واکنشگرا به نوسان ضربه زدند. بازهٔ چهارسالهٔ ETH من اتفاقاً بیشتر شامل حرکتهای فرسایشی با خوشهبندی نوسان است تا نوسانهای رفتوبرگشتی Vشکل، و همین ردیفهای نوسان معکوس را مطلوبتر نشان میدهد. بازهای دیگر بخشی از ترتیب را وارونه میکند و اگر با جدولی از 2020 شروع میکردم، نسخهٔ ضعیفتری از این استدلال را مطرح میکردم.
سوم، قاعدهٔ تعیین اندازه هم بهاندازهٔ هر چیز دیگری در معرض بیشبرازش است. نیمکلی بر مبنای برآوردهای لغزان، نکتهٔ گویا در جدول من است: پیچیده به نظر میرسد، پشتوانهٔ نظری دارد، اما دومین افت سرمایهٔ بدتر را ایجاد کرد، چون برآورد میانگین لغزان از یک سری بازده پرنویز بیارزش است و کلی به آن بهشدت حساس است. هر قاعدهٔ تعیین اندازهای که برآورد بازده موردانتظار را ورودی بگیرد، خطای همان برآورد را با شدتی بیشتر به ارث میبرد. قواعدی که فقط از برآورد واریانس استفاده میکنند رفتار بسیار بهتری دارند، چون واریانس تنها گشتاوری است که واقعاً میتوانید از ۴ سال دادهٔ ساعتی برآورد کنید.
چیزی که از همهٔ اینها نگه میدارم این است: وقتی نتیجهٔ بکتست غافلگیرتان کرد، پیش از آنکه دنبال راهحلهای زیرکانه در سیگنال بگردید، ماژول تعیین اندازه را بررسی کنید. و وقتی شارپ را گزارش میکنید، مسیر اهرم و روند تبدیل هزینهها را هم کنارش بیاورید، چون عددی که تا این حد به تصمیمی دربارهٔ تعیین اندازه وابسته است، اصلاً ویژگی خود سیگنال نیست.
← همهٔ مطالب
