استراتژیای که سیگنال خود را از قیمت پایانی روز دوشنبه محاسبه میکند، نمیتواند در همان قیمت پایانی دوشنبه سفارش بگذارد. پس از مشخصشدن آن قیمت میتواند سفارش را ارسال کند و در قیمتی اجرایی در زمانی بعد معامله کند. همین انتخاب کوچک در زمانبندی میتواند بیش از یک اندیکاتور هوشمندانه نتیجه را تغییر دهد.
برای بکتست روزانه، پیش از نوشتن سیگنال، توالی رویدادها را مشخص کنید: کندل چه زمانی کامل میشود، استراتژی چه زمانی محاسبه را انجام میدهد، سفارش چه زمانی به بازار میرسد و با چه قیمتی میتوان انتظار داشت پر شود. اگر همه این رویدادها در یک لحظه اتفاق میافتند، بخش دشوار کار از بکتست حذف شده است.
آیا میتوانم از قیمت پایانی امروز برای معامله در قیمت پایانی امروز استفاده کنم؟
معمولاً نه. سیگنالی که به قیمت پایانی نهایی وابسته است، فقط پس از برگزاری حراج پایانی یا انجام آخرین معامله در دسترس قرار میگیرد. پرشدن سفارش در همان قیمت فرض میکند استراتژی نتیجه را آنقدر زود میدانسته که بتواند در قیمتی شرکت کند که خودش در شکلگیری نتیجه نقش داشته است.
یک قاعده ساده را در نظر بگیرید: وقتی قیمت پایانی بالاتر از میانگین متحرک 20روزه است، خرید کنید. در قیمت پایانی دوشنبه، شرط برقرار میشود. بکتستی که در قیمت پایانی دوشنبه خرید میکند، از قیمت کاملشده دوشنبه هم برای تصمیمگیری استفاده کرده و هم برای پرشدن سفارش. در یک مدل پایه مبتنی بر کندل روزانه، فرض واقعبینانه این است که سفارش پس از کاملشدن کندل دوشنبه ایجاد شود و زودتر از قیمت بازگشایی سهشنبه پر نشود؛ با احتساب هزینههای مربوطه.
بعضی استراتژیها با استفاده از اطلاعات در دسترس پیش از مهلت حراج پایانی، سفارش را در این حراج ثبت میکنند. میتوان اینها را بکتست کرد، اما سیگنال باید فقط از دادههای پیش از مهلت استفاده کند و مدل پرشدن سفارش هم باید اجرای حراج را بازتاب دهد. صرفاً گفتن «سیگنال روزانه» هیچکدام از این دو شرط را مشخص نمیکند.
قیمت مناسب برای پرشدن سفارش در بکتست روزانه چیست؟
یک قیمتِ درستِ همگانی وجود ندارد. وقتی سیگنال از یک کندل روزانه کاملشده به دست میآید و سفارش پس از آن ارسال میشود، قیمت بازگشایی جلسه بعد نقطه شروع روشنی است. البته تضمینی نیست: شکاف قیمتی شبانه ممکن است بازار را جابهجا کند و سفارش بازار هزینه اسپرد، کارمزد و احتمالاً اثر قیمتی را به همراه دارد.
برای سیگنال دوشنبه بالا فرض کنید قیمت پایانی دوشنبه $100 و قیمت بازگشایی سهشنبه $103 است. بکتست پایانیبهپایانی ممکن است سودی اندک نشان دهد، اگر وانمود کند خرید در قیمت $100 انجام شده است. ورود در قیمت بازگشایی بعدی از $103 شروع میشود. اختلاف $3 «لغزش» نیست که با تنظیم پارامترها حذفش کنیم؛ این هزینه قیمتیِ آگاهشدن از سیگنال پس از قیمت پایانی دوشنبه است.
| زمان در دسترس قرار گرفتن سیگنال | اجرای احتمالی | فرض مدل |
|---|---|---|
| پس از قیمت پایانی روز | قیمت بازگشایی جلسه بعد | سفارش میتواند پیش از بازگشایی یا همزمان با آن به بازار برسد |
| پیش از مهلت حراج پایانی | حراج پایانی | سیگنال فقط از اطلاعات پیش از مهلت استفاده میکند؛ پرشدن در حراج مدلسازی میشود |
| پس از قیمت پایانی روز | قیمت دیرتر درونروزی | استراتژی صبر میکند؛ اجرا به دادههای درونروزی و برنامه زمانی مشخص نیاز دارد |
در بازارهای رمزارز، «قیمت پایانی روز» قراردادی است، چون معامله در زمان عبور از مرز زمانی هم ادامه دارد. استراتژی همچنان میتواند از کندل روزانه کاملشده UTC استفاده کند، اما باید تا کاملشدن کندل و رسیدن دادهها صبر کند. اگر خط لوله داده شما کندل را چند ثانیه دیرتر نهایی میکند، دفاع از فرض اجرا در قیمت مرزی دشوارتر هم میشود.
وقتی فقط کندلهای روزانه دارم، سفارشها را چطور مدل کنم؟
روشن کنید که کندل چه چیزی را نشان میدهد و چه چیزی را نه. دادههای OHLCV روزانه میتوانند مبنای تقریب قیمت بازگشایی بعدی باشند، اما اسپرد در زمان رسیدن سفارش، مسیر قیمت در طول روز، یا اینکه سفارش محدود پیش از برخورد قیمت به سطح موردنظر وارد صف شده است یا نه را نشان نمیدهند.
برای سفارش بازار روزانه، از قیمت بازگشایی جلسه بعد شروع کنید و سپس هزینههایی را که استراتژی واقعاً با آنها روبهرو میشود منظور کنید: کارمزد صرافی، برآورد اسپرد و برآورد اثر قیمتی متناسب با اندازه سفارش. این هزینهها را در سناریوهای مختلف بسنجید. اگر نتیجه به فرض اسپرد صفر یا اثر قیمتی ناچیز وابسته است، دادههای روزانه هنوز چنین اطمینانی را توجیه نمیکنند.
برای سفارش محدود، پایینترین قیمت روز که از قیمت سفارشتان عبور میکند، ثابت نمیکند سفارشتان پر شده است. شاید بازار پیش از رسیدن سفارش شما آن قیمت را معامله کرده باشد، یا مقدار سفارشهای جلوتر از شما بیشتر از حجم معاملهشده بوده باشد. کندلهای روزانه اغلب برای پشتیبانی از مدل صف معتبر بیش از حد درشت هستند. اگر ادعایتان به اجرای درونروزی وابسته است از دادههای دقیقتر استفاده کنید؛ یا فرض پرشدن را عمداً محافظهکارانه انتخاب و آن را مشخص کنید.
چه بررسیهایی نگاهبهآینده را در دادههای روزانه آشکار میکنند؟
چند بررسی ساده را ترجیح میدهم، چون فرضها را سریع آشکار میکنند:
- همه سفارشهایی را که از سیگنال مشتق شدهاند، یک جلسه جلوتر ببرید. اگر عملکرد افت شدیدی کرد، بررسی کنید آیا در حالت اولیه از قیمت پایانی کندل سیگنال برای پرشدن استفاده شده بود.
- زمان سیگنال، زمان ارسال سفارش و زمان پرشدن را جداگانه ثبت کنید. این مُهرهای زمانی باید بدون نیاز به تفسیر، روایتی باورپذیر نشان دهند.
- پرشدن در قیمت بازگشایی بعدی را با یک قیمت اجرای محافظهکارانهتر در زمانی دیرتر مقایسه کنید. اگر استراتژی فقط در مطلوبترین نقطه کندل جواب میدهد، مشکل از اجراست.
- بررسی کنید تعطیلات، کندلهای ازدسترفته و تعطیلی بازار چه اثری بر «جلسه بعد» میگذارند. روز تقویمی بعد ممکن است جلسه قابل معاملهای نباشد.
جابهجایی یکجلسهای ابزار تشخیصی است، نه مدل اجرایی همگانی. یک متعادلسازی مجددِ کندِ سبد، استراتژی حراج پایانی و سامانه رمزارزیِ فعال در تمام ساعات، به ساعتهای متفاوتی نیاز دارند. نکته این است که زمانبندی را آشکار کنید.
آیا داده روزانه بکتست را کمفایده میکند؟
نه. داده روزانه میتواند برای استراتژیای کاملاً مناسب باشد که تصمیمها و دورههای نگهداری آن بر حسب روز یا هفته سنجیده میشوند. این داده برای بررسی ارزش پژوهش بیشتر یک قاعده کلی مفید است. وقتی بکتست درباره قیمت پرشدنی ادعای دقت میکند که کندلها قادر به نشاندادنش نیستند، گمراهکننده میشود.
بیش از یک بار دیدهام که عملکرد یک استراتژی بهطرز چشمگیری بهتر ارزیابی شده، چون کسی عبارت «سیگنال در قیمت پایانی، پرشدن در قیمت پایانی» را به «سیگنال در قیمت پایانی، پرشدن در قیمت بازگشایی بعدی» تغییر داده است. این نتیجه شاید ناامیدکننده باشد، اما ارزشمند است: نشان میدهد ایده پس از قابلمعاملهشدن دوام میآورد یا نه. قرارداد زمانبندی را کنار کد استراتژی نگه دارید. وگرنه دور بعدی بهینهسازی بیسروصدا فرض پرشدن ناممکن را برمیگرداند.
← همهٔ مطالب


