بازارهای پیشبینی در نگاه اول سادهترین چیز دنیا برای بکتست به نظر میرسند. قیمت بین [0, 1] است. پرداخت یا 1 دلار است یا هیچ. نه اهرمی در کار است، نه فاندینگ، نه مبنا و نه عجایب قراردادهای دائمی در ساعت 00:00 UTC. بکتستری داشتیم که از قبل قراردادهای دائمی رمزارز را با کارمزد، فاندینگ و اثر بازار مدیریت میکرد؛ برنامه این بود که 2 روز صرف تطبیقش کنیم و بعد ساخت استراتژیها را شروع کنیم.
8 روز طول کشید. این گزارش روزانه ماست، تقریباً به ترتیب وقوع؛ از جمله روزی که منحنی سرمایه فوقالعاده به نظر میرسید و واقعاً هم همینطور بود.
روز 1: آداپتری که قرار بود بدیهی باشد
نگاشت اولیه یکبهیک و تمیز به نظر میرسید. هر بازار یک ابزار مالی است. قیمت YES همان قیمت است. خرید YES یعنی موقعیت خرید، خرید NO یعنی موقعیت فروش. تسویه یعنی بستن اجباری در 1.00 یا 0.00. سری قیمت ساعتی را به همان حلقه رویداد میدهیم و کار تمام است.
این نگاشت حدود 90 دقیقه پس از برخورد با داده واقعی دوام آورد. اولین چیزی که از کار افتاد سری بازده بود. کل لایه ریسک ما — اندازهگذاری موقعیت، هدفگذاری نوسان و گزارش Sharpe — فرض میکرد با بازده لگاریتمی یک ابزار مالی پیوسته سروکار دارد. بازاری که از 0.04 به 0.00 میرسد بازده لگاریتمی تعریفنشده، اما زیانی قطعی و کامل دارد. بازاری هم که 3 روز مانده به تسویه روی 0.04 است، از اساس با بازاری که 4 دقیقه مانده به تسویه روی 0.04 است فرق دارد، هرچند هر دو ردیف میگویند 0.04.
در نهایت کل سری را بر مبنای زمان باقیمانده تا تسویه بازپارامتردهی کردیم، نه ساعت تقویمی، و PnL را نهایی در نظر گرفتیم، نه ارزشگذاریشده در لحظه. این تصمیم درستی بود و تمام کدهای گزارشدهیِ وابسته به آن را از کار انداخت.
روز 2: فرمول کارمزد خودِ استراتژی است
در Kalshi کارمزد معامله کاهشی بر حسب واحد پایه نیست. در قیمت رابطهای درجهدو دارد: تقریباً 0.07 × contracts × P × (1−P)، که در سطح سفارش به سنت رو به بالا گرد میشود. یعنی کارمزد دقیقاً جایی بیشترین است که بازار شیر یا خط جذابتر میشود و نزدیک دو سر طیف تقریباً رایگان است.
| قیمت | کارمزد هر قرارداد | لبه لازم (واحد درصد احتمال) | کارمزد بهعنوان درصدی از مبلغ درگیر |
|---|---|---|---|
| 5¢ | 0.33¢ | 0.33 | 6.7% |
| 10¢ | 0.63¢ | 0.63 | 6.3% |
| 25¢ | 1.31¢ | 1.31 | 5.3% |
| 50¢ | 1.75¢ | 1.75 | 3.5% |
| 75¢ | 1.31¢ | 1.31 | 1.8% |
| 90¢ | 0.63¢ | 0.63 | 0.7% |
| 95¢ | 0.33¢ | 0.33 | 0.35% |
ستون سوم را بهعنوان نکته اصلی بخوانید: برای سربهسر شدن با خرید در 50¢ و نگهداری تا تسویه، برآورد احتمال شما باید 1.75 واحد درصد از بازار بهتر باشد. نه 1.75 درصد بهصورت نسبی؛ بلکه مطلق. اگر پیش از تسویه خارج شوید، این هزینه را 2 بار میپردازید، بهعلاوه اسپرد.
دفتر سفارش متمرکز Polymarket در گذشته ساختار کارمزدی بسیار متفاوتی داشته؛ کارمزد خود معامله نزدیک به صفر بوده و هزینه عمدتاً در اسپرد و عمق بازار قرار گرفته است. بنابراین منطق یک استراتژی واحد بسته به محل معامله، اقتصادی کاملاً متفاوت دارد و هر مقایسه بین پلتفرمها با یک مدل کارمزد، خیالی است. حالا برای هر پلتفرم تابع کارمزد جداگانه داریم، نه یک عدد ثابت.
اگر قرار است فقط یک سطر از گزارش بکتست بازار پیشبینی را بخوانید، سطر کارمزد را بر حسب واحد درصد احتمال بخوانید. استراتژیای که ادعا میکند در بازارهای 50¢ لبه پیشبینی 1.2 واحد درصدی دارد، در Kalshi پیش از محاسبه هر هزینه دیگری زیانده است. این واقعیت باید در صفحه اول دیده شود، نه اینکه خواننده خودش آن را حساب کند.
روز 3: دفتر سفارش پلکانی است و کوتاه
مدل اثر بازار ما تابع ریشه دوم بود که با دفتر سفارش قراردادهای دائمی BTC کالیبره شده بود. اینجا شکلش اشتباه است. در ابزار مالی 1 دلاری با گام قیمت 1¢، در کل دفتر فقط 99 سطح قیمت ممکن وجود دارد و ممکن است در بازاری با نقدشوندگی متوسط چند صد قرارداد در بهترین سطح سفارش نشسته باشد و بعد از آن فاصلهای بزرگ بیاید.
این تصویری است از بازاری درباره دادههای اقتصادی که نمونهبرداری میکردیم، سمت YES، حدود 30 ساعت مانده به تسویه:
| سطح | حجم (قراردادها) | هزینه تجمعی خرید |
|---|---|---|
| 42¢ | 310 | 310 با میانگین 42.0¢ |
| 43¢ | 85 | 395 با میانگین 42.2¢ |
| 45¢ | 140 | 535 با میانگین 42.9¢ |
| 49¢ | 600 | 1,135 با میانگین 46.1¢ |
یک سفارش 1,000 قراردادی — ریسک 500 دلاری، که در رمزارز خطای گرد کردن محسوب میشود — قیمت مؤثر را 4 سنت جابهجا میکند. 4 سنت بیش از 2 برابر کارمزد است. اینجا تابع همواری برای برازش وجود ندارد؛ باید سطحبهسطح در دفتر سفارش پیش بروید، وگرنه دارید عدد میسازید. مدل ریشه دوم را برای این دسته دارایی حذف کردیم و یک پیمایشگر واقعی دفتر سفارش نوشتیم؛ کندتر است، اما درست کار میکند.
جایی در این میان متوجه شدم از اینکه این بازارها «آنقدر کوچکاند که اهمیتی ندارند» کلافه شدهام. کوچکاند چون چیزی که قیمتگذاری میشود یک پرسش واقعی و مشخص با مهلت پاسخ است و افراد محدودی درباره درخواست اولیه بیمه بیکاری آمریکا در یک چهارشنبه نظر دارند. اندازه خودِ بازار است. شکایت از آن مثل شکایت از این است که دور میز پوکر فقط 9 نفر جا میشوند.
روز 4: روزی که منحنی سرمایه زیبا بود
Sharpe برابر 4.1 در 1,400 بازار. صاف و یکدست. دل هر پژوهشگری باید با دیدنش فرو بریزد و دل من هم فرو ریخت؛ البته سرانجام، حدود 40 دقیقه پس از آنکه از نمودار عکس گرفته بودم.
باگ در بازنمونهگیر بود. تاریخچه قیمت بازارهای کمنقدشونده با زمانمهرهای نامنظم برمیگردد، بنابراین آن را روی شبکه ساعتی یکنواخت بازاندیسگذاری کردیم. آخرین نقطه هر سری بایگانیشده، مقدار تسویه است: 1.00 یا 0.00. بازاندیسگذاری ما از پرکردن نزدیکترین همسایه استفاده میکرد، بدون محدودیت جهت؛ بنابراین در هر بازاری که آخرین معاملهاش ساعتها پیش از تسویه انجام شده بود، مقدار تسویه در فاصله به سمت گذشته پخش میشد. مدل پاسخ فردا را در ردیف امروز میخواند، دقیقاً در بازارهای کمنقدشوندهای که میتوانست بدون برخورد به محدودیت عمق، اندازه موقعیت را بالا ببرد.
پرکردن با نزدیکترین همسایه برای ابزار مالی پیوسته خوب است. اما برای ابزاری که آخرین مشاهدهاش حقیقت نهایی است، این روش دستگاهی برای نگاه به آینده میشود. حالا با یک شرط اجرایی تضمین میکنیم که پرکردن فقط رو به جلو باشد و ردیف تسویه برچسب بخورد و از هر محاسبه ویژگی کنار گذاشته شود. آن شرط 9 خط کد است و ارزشمندترین کدی است که در آن هفته نوشتیم.
روزهای 5–6: 1,412 بازار، حدود 180 شرط
حجم نمونه در بازارهای پیشبینی دامی با چهرهای دوستانه است. 1,412 بازار تسویه میکنید، حس میکنید 1,412 مشاهده دارید و بر همان اساس آماره t را حساب میکنید. اما 14 بازی NFL در یکشنبهای واحد، سامانه آبوهوایی، انتشار گزارش مصدومیتها و جریان مشترک معاملهگران دارند. 51 بازار انتخاباتی در سطح ایالت، یک موج ملی را به اشتراک میگذارند. «آیا X تا 31 مارس رخ میدهد؟» و «آیا X تا 30 ژوئن رخ میدهد؟» با سررسیدهای متفاوت، همان شرطاند و با هم تسویه میشوند.
بازارها را بر اساس منبع رویداد و تاریخ تسویه خوشهبندی کردیم و به تعداد مؤثر مشاهدات مستقل در حدود 180 رسیدیم. برای تمایز لبه واقعی از نویز، با اندازه اثرهایی که بررسی میکردیم، این تعداد کافی نیست؛ و هیچ میزان بازنمونهگیری بهازای هر بازار هم مشکل را حل نمیکند، چون بوتاسترپ باید خوشهها را بازنمونهگیری کند، نه ردیفها را. اشتباه در این کار، سطح معناداری را بیسروصدا 2 یا 3 برابر بزرگتر نشان میدهد.
روز 7: تسویه هم یک توزیع احتمال است
چیزهایی که اصلاً مدل نکرده بودیم و بهسختی کشف کردیم:
- تسویه زودهنگام. بازاری با مهلت «تا 31 دسامبر» ممکن است در 4 اوت، وقتی رویداد واقعاً رخ میدهد، تسویه شود. سرمایه شما زودتر آزاد میشود و دوره نگهداریتان هیچوقت آن چیزی نبود که نام قرارداد القا میکرد.
- اختلافها. بازارهایی که اوراکل تسویه میکند، مهلت اعتراض دارند. موقعیت ممکن است چند روز پس از رویداد در بلاتکلیفی بماند و در موارد معدودی، نتیجه برخلاف برداشت بدیهی تغییر کند.
- ابطال. دادههای مبهم منبع باعث لغو بازار و بازپرداخت پول همه میشود. در نمونه ما این موارد کمتر از 1% بازارهاست، اما دقیقاً در پرسشهای مبهمی خوشهبندی میشوند که مدل آنها را بدقیمت تشخیص میدهد.
- قفلشدن سرمایه. لبه 3 واحد درصدی که طی 90 روز محقق شود با لبه 3 واحد درصدی که طی 6 ساعت محقق شود قابل مقایسه نیست؛ بکتستی که لبه کل را بدون مخرجِ زمان سرمایه گزارش کند، همیشه گزینه کندتر را ترجیح میدهد.
یک جمله هزینه نگهداری و نوسان تصادفی تاریخ تسویه به شبیهساز اضافه کردیم. هیچکدام دقیق نیستند. هر دو از این فرض ضمنی بهترند که تسویه دقیقاً در تاریخ اعلامشده و با قطعیت رخ میدهد.
روز 8: چه چیزی را کنار میگذاشتیم و اول چه میکردیم
- زیرساخت مبتنی بر بازده را کلاً کنار بگذارید. لایه ریسکِ هدفگذاری نوسان را برای ابزاری با پرداخت نهایی تطبیق ندهید. لایه اندازهگذاری شرطی بنویسید که با احتمال و مبلغ شرط کار کند. 2 روز را صرف تلاش برای جا دادن ابزار قدیمی کردیم.
- تابع کارمزد را پیش از استراتژی بسازید. منحنی لبه سربهسر را برای هر پلتفرمی که قصد معامله در آن را دارید رسم کنید و جلوی چشم تیم بگذارید. این کار حدود نیمی از ایدهها را پیش از آنکه هزینه اجرای یک بکتست را تحمیل کنند، حذف میکند.
- از همان روز اول دفتر سفارش را پیمایش کنید. هر مدل پارامتری اثر بازار که از بازار پیوسته وارد شود، به شکلی اشتباه خواهد بود که به نفع شما تمام میشود.
- پیش از شمارش، خوشهبندی کنید. کلید خوشهبندی برای اندازه مؤثر نمونه را همزمان با تعیین مجموعه بازارها مشخص کنید، نه پس از آنکه به Sharpe دلخواهتان رسیدید.
- جهت پرکردن را با شرط اجرایی کنترل کنید. برای هر پیوند یک خط. اگر سری با حقیقت نهایی تمام میشود، پرکردن رو به عقب را از اساس باگ بدانید، نه چیزی که شاید در بازبینی متوجهش شوید.
این 8 روز ارزشش را داشت؛ عمدتاً چون بازارهای پیشبینی ابهامی را کنار میزنند که فریبدادن خودمان با بکتست رمزارز را آسان میکند. اینجا نرخ فاندینگ نیست که بشود سرسری از آن گذشت، یا قرارداد قیمت مرجع که بشود دربارهاش بحث کرد. فقط یک پرسش، یک مهلت و یک پاسخ. وقتی بکتست اینجا اشتباه است، میتوانید دقیقاً به اشتباهش اشاره کنید.
← همهٔ مطالب

