بکتست ممکن است پرشدن سفارش را در قیمتی گزارش کند که بازار هرگز نمایش نداده است. معمولاً شبیهساز بر پایه دادههای ناقص، اجرایی محتملنما حدس زده است: سقف و کف یک کندل، قیمت میانی، یا قیمت سفارشی محدود که فقط یک معامله به آن رسیده است. در نتیجه گزارش معاملات دقیق به نظر میرسد، اما آنچه بازار واقعاً عرضه کرده پنهان میماند.
اول بپرسید سفارش شما با کدام قیمت میتوانسته تعامل داشته باشد. کندل مبتنی بر آخرین معامله نشان میدهد در یک بازه زمانی چه قیمتهایی معامله شدهاند. اما نمیگوید هنگام رسیدن سفارشتان قیمت خرید و فروش چه بوده، چه حجمی در آن قیمت موجود بوده، یا سفارش شما میتوانسته به ابتدای صف برسد یا نه.
چرا بکتست من پرشدن سفارش را بیرون از قیمت بازار نشان میدهد؟
اول، منظور از «بیرون» را دقیق روشن کنید. پرشدن سفارش خرید پایینتر از کف کندل یا فروش بالاتر از سقف آن، خطای آشکار حسابداری یا زمانبندی است. اما پرشدن در محدوده سقف و کف هم میتواند خیالی باشد: شاید قیمت پیش از ثبت سفارش معامله شده، در سمت دیگر فاصله خرید و فروش بوده، یا حجم معاملهشده برای پرکردن سفارش شما کافی نبوده است.
کندل 1دقیقهای را در نظر بگیرید که قیمت آغازین آن 100.00، کمینهاش 99.80 و قیمت پایانیاش 100.10 است. استراتژی شما کندل کاملشده را میبیند، سفارش خرید میفرستد و شبیهساز آن را در 99.80 پر میکند. ممکن است قیمت 99.80 نزدیک شروع آن دقیقه، 50 ثانیه پیش از تولید سیگنال، ثبت شده باشد. کندل هیچ مدرکی نمیدهد که 99.80 پس از تصمیمگیری هم در دسترس بوده است.
| دادهای که دارید | چه چیزی را نشان میدهد | چه چیزی را نشان نمیدهد |
|---|---|---|
| کندل OHLCV | محدوده قیمت معاملات مشاهدهشده و حجم در یک بازه | توالی قیمت، قیمت خرید و فروش، یا موجودی هنگام رسیدن سفارش |
| گزارش معاملات | معاملات گزارششده همراه با زمان و قیمت | نقدینگی ثبتشده در دفتر سفارش یا جایگاه شما در صف |
| مظنههای بهترین قیمت | بهترین قیمت خرید و فروش ثبتشده در زمانهای نمونهبرداری | عمق فراتر از بهترین سطح یا تداوم مظنه بین نمونهبرداریها |
| رویدادهای دفتر سفارش | تغییرات عمق ثبتشده و رویدادهای صف، با توجه به پوشش دادهرسان | نقدینگی پنهان، دسترسی به محل معامله یا اولویت تضمینشده |
یک علت رایج دیگر، اشتباه گرفتن قیمت میانی با قیمت قابل اجراست. اگر مظنه 99.99 برای خرید و 100.01 برای فروش باشد، خرید در قیمت میانی 100.00 در گزارش مرتب و تمیز به نظر میرسد. خریدی که بلافاصله قابل اجرا باشد معمولاً با قیمت فروش انجام میشود، بهعلاوه اثر احتمالی حجم سفارش. اگر قیمت میانی را قیمت پرشدن بدانیم، نیمی از فاصله خرید و فروش را بیسروصدا حذف کردهایم.
آیا صرفاً رسیدن بازار به قیمت سفارش محدود برای پرشدنش کافی است؟
رسیدن قیمت نشان میدهد معاملهای در قیمت سفارش محدود ثبت شده است. اما ثابت نمیکند سفارش شما که در دفتر ثبت بوده اجرا میشد. اگر سفارشهای دیگری جلوتر از شما بودند، ممکن است حجم معاملهشده در آن قیمت برای رسیدن به جایگاه شما در صف کافی نبوده باشد. همچنین ممکن است معامله در محل دیگری انجام شده باشد، درحالیکه سفارش شما در محل دیگری منتظر بوده است.
فرض کنید سفارش خرید محدود شما 50.00 است و پس از ثبت آن، بازار 200 سهم را با همین قیمت معامله میکند. شبیهساز مبتنی بر رسیدن قیمت، هر 500 سهم را پر میکند. مدل محتاطانهتر میپرسد پس از رسیدن سفارش چه حجمی با قیمت 50.00 یا بهتر از آن معامله شده، سپس حجم تخمینی صف پیش روی شما را هم در نظر میگیرد. بدون داده دفتر سفارش در سطح تکسفارش، این صف یک فرض است. باید در نتایج آشکار باشد، نه اینکه بهعنوان قطعیت پنهانی وارد شود.
برای یک سامانه پژوهشی کوچک، ترجیح میدهم آن فرض را آشکار کنم و چند مقدار متفاوت را بیازمایم، نه اینکه وانمود کنم دادههای کندلی جایگاه صف را نشان میدهند. بازه مناسب به محل معامله، اندازه سفارش و دفعات معامله استراتژی بستگی دارد. سهام کممعامله در آغاز روز با قرارداد کمعمق رمزارزی در 03:00 UTC مسئله اجرایی یکسانی ندارد.
برای دادههای کندلی چطور مدل پرشدن سفارش انتخاب کنم؟
مدل را هم با دادهها و هم با ادعای استراتژی هماهنگ کنید. بکتست مبتنی بر کندل همچنان برای استراتژیهای کند میتواند مفید باشد، اما پرشدن سفارشها باید با آنچه کندلها واقعاً نشان میدهند سازگار باشد.
- زمان تصمیمگیری و رسیدن سفارش را مشخص کنید. اگر سیگنال از قیمت پایانی کندل استفاده میکند، سفارش را پس از بستهشدن آن بفرستید. اجرا را بر اساس بازه یا مظنه بعدیِ در دسترس مدل کنید، نه بر اساس کف زودترِ کندل کاملشده.
- سمت درست فاصله خرید و فروش را به کار ببرید. برای خریدهای قابل اجرا، از قیمت فروش شروع کنید؛ برای فروش، از قیمت خرید. اگر فقط کندلهای معاملاتی را دارید، فاصله خرید و فروش را از منبعی جداگانه تخمین بزنید یا گزارش کنید که مدل آن را نادیده میگیرد.
- پرشدن را به نقدینگی محتمل محدود کنید. برای حجم مشاهدهشده سقف مشارکت اعمال کنید و کارمزد و اثر بازار را هم لحاظ کنید. حجم کل یک کندل به این معنا نیست که تمام آن با قیمت انتخابی شما در دسترس بوده است.
- فرضها را تحت فشار بگذارید. پرشدن در آغاز بازه بعدی را با لغزش محافظهکارانه مقایسه کنید و بیازمایید که آیا نتیجه با اجرای بدتر هم دوام میآورد. مدل پرشدن را آنقدر تنظیم نکنید تا استراتژی برنده شود.
اینها انتخابهای مدلسازیاند، نه روشی برای بازیابی تنها قیمت واقعی پرشدن از دادههای ناقص. اگر استراتژی به شکار چند واحد پایه وابسته است، دادههای کندلی شاید برای اثبات این ادعا کافی نباشند.
چطور پیدا کنم پرشدن ناممکن از کجا وارد بکتست شده است؟
یک معامله مشکوک را از سیگنال تا دفتر ثبت معاملات دنبال کنید. زمان تصمیم، زمان ارسال سفارش، زمان رسیدن شبیهسازیشده، مشاهده بازار انتخابشده، قیمت و حجم پرشدن و کارمزد را در فیلدهای جداگانه نگه دارید. سپس بهترتیب بررسی کنید:
- آیا ویژگی با استفاده از دادههای کندلی محاسبه شده که هنگام تصمیمگیری هنوز کامل نشده بود؟
- آیا پرشدن از سقف، کف یا قیمت پایانی کندل استفاده کرده، با اینکه آن قیمت پیش از رسیدن سفارش رخ داده بود؟
- آیا سفارش خرید با قیمت خرید تطبیق داده شد، یا سفارش فروش با قیمت فروش؟
- آیا حجم شبیهسازیشده از اندازه مظنه موجود یا سقف مشارکت مدل بیشتر بود؟
- آیا گردکردن قیمت، اندازه گام قیمتی قرارداد و کارمزدها پس از تعیین قیمت پرشدن اعمال شدند؟
اگر پاسخ این پرسشها را از سابقه معامله پیدا نمیکنید، بکتست فاقد شواهد اجرایی است. فیلدها را اضافه کنید، چند معامله را با دادههای خام دستی بازسازی کنید و بررسی کنید که قیمت گزارششده تحت مدل مورد نظرتان امکانپذیر بوده است. منحنی سرمایه صافوصوف نمیتواند قیمتی را شناسایی کند که فقط درون شبیهساز وجود داشته است.
← همهٔ مطالب


