Donchian 20روزه در مشخصات بیخطر به نظر میرسد. ایجنت یک بیشینهٔ غلتان 20میلهای مینویسد، بکتست از ردیف یک فایل parquet شروع میشود، و در دو هفتهٔ اول «سقف 20روزه» فقط بیشینهٔ جاری همان میلههایی است که وجود دارند. در روز چهارم یک سقف چهارروزه است. استراتژیای که فکر میکردید در حال آزمودنش هستید همانی نیست که دوازده پُرشدگی اول را تولید کرده.
یک نوتبوک روی میلههای روزانهٔ ETHUSDT دارم که Sharpe کلنمونه در آن 1.4 است. 20 نشست اول را ببُرید، به 0.6 میافتد. همان 20 را نگه دارید و بقیهٔ سال اول را کنار بگذارید، 3.1 چاپ میکند. کسی فردا را لو نداده. استراتژی از گذشته استفاده کرده، فقط به اندازهٔ کافی نه، و گزارش آن معاملات نیمبند را شاهد گرفته.
بگذارید پنجره تا وقتی هنوز پُر میشود معامله کند
ویرانی معمول min_periods=1 است. Pandas اگر رهایش کنید میانگین غلتان را روی یک میله هم حساب میکند. ایجنتها مدام این کار را میکنند، چون NaN بالای فریم حس باگ میدهد و پُرکردنش آزمون واحد را سبز میکند.
هدف نوسانِ محققشدهٔ 20روزه با دو مشاهدهٔ بازده یک انفجار اندازه است. واریانس دو عدد یک شیر یا خط است، معکوسش میکنید، و اولین پوزیشن چند برابر ریسکِ موردنظر است. z-score در برابر انحرافمعیار نزدیک به صفر همان حقه را با یک علامت میزند: استراتژی طوری به نظر میرسد که ورود تیغتیزی دارد که وقتی پنجره صادق میشود دیگر هرگز ظاهر نمیشود.
بریکاوتها بدترند، چون شبیه قاعدهٔ واقعی به نظر میرسند. کانال 20میلهای روی میلهٔ ششم یک کانال ششمیلهای است. درست در شروع خوشهای از معاملات میگیرید، اغلب در بازهٔ آرامی که اندیکاتور تمامشده را فعال نمیکرد. بازارهای آرام کمی رانش دارند. کانال تنگ شلیک میکند. منحنی سرمایه استارت جلویی میگیرد که هیچ سال بعدی تکرارش نمیکند.
صفرپُری و پُرکردنِ روبهجلو دروغ دیگری اختراع میکنند. RSI روی 0 یعنی اشباع فروش. ATR غایبِ 0 اندازهٔ واحد را منفجر میکند و بکتست وظیفهشناسانه یک انبار میخرد. ترجیح میدهم NaN سفارش را بکشد تا 0 یکی اختراع کند.
هنوز خودم را میگیرم که از ردیف 0 رسم میکنم چون یک ماه خالی در سمت چپ نمودار ناتمام به نظر میرسد. ماه خالی بخش صادق است.
منحنی سرمایه را ببُرید، پوزیشن را نگه دارید
این یکی از بازبینی کد جان سالم به در میبرد. ویژگیهای 20روزه را درست حساب میکنید، 20 ردیف اول را از منحنی رسمشده حذف میکنید، و از 21 ژانویه منتشر میکنید. پوزیشن 21 ژانویه در 14 ژانویه باز شده بود. سقف تاریخی استاپ دنبالهرو، شمار هرم، نقد بعد از آن سوختها: همه وارد نمونهٔ «تمیز» شدند.
ویرانی یک استراتژی کاغذی است که نمیتوان آن را در تاریخ نوشتهشده شروع کرد. از حالت فلت در شروع گزارششده از نو شروع کنید و سفارشهای هفتهٔ اول با هم جور درنمیآیند. گاهی بکتست از قبل در معاملهای است که سیستم کاغذی دلیلی برای ورود به آن ندارد. گاهی سیستم کاغذی وارد میشود چون نگاهبهگذشتهاش سرد است، و بکتست کنار نشسته چون ماهِ پنهانش قبلاً بریکاوت را گرفته. دو دفتر گشایش، یک تاریخ شروع منتشرشده.
فولدهای walk-forward این کار را بیسروصدا میکنند. هر پنجرهٔ آزمون یک دمِ نگاهبهگذشته دارد که رسم نمیکنید. شبیهسازی آن دم را جا بیندازید و معاملات اول آزمون دوباره معاملات پنجرهٔ ناتماماند. شبیهسازیاش کنید و فقط روزهای آزمون را گزارش کنید، و پوزیشن روز آزمون مشروط به پُرشدگیهایی است که نشان نمیدهید. نسخهٔ دوم میتواند یک انتخاب پژوهشی مشروع باشد. صبح اول فولد را شروع سرد خواندن، در حالی که استاپ دنبالهرو از دم زنده است، همان است که دو پژوهشگر از یک پیکربندی دو Sharpe درمیآورند.
وقتی ویژگی روز نیست با روزهای تقویمی گرم کنید
«30 روز بهش بده» ویژگی را کممشخص میگذارد. سی روز تقویمی روی Donchian 5دقیقهای هزاران میله فراتر از نگاهبهگذشتهٔ 20دورهای است. سی روز روی ویژگی روزانه که به 20 نشست نیاز دارد، بسته به آخرهفتهها و حفرهها، یا چاق است یا لاغر.
یک z-score نرخ فاندینگ روی یکی از بازارهای perp ما گرمکردن 30روزه گرفت چون مشخصات گفته بود 30 دوره و کسی دورهها را به تقویم برگرداند. فاندینگ آنجا هر هشت ساعت ثبت میشود. سی روز حدود 90 تسویه است. سی دوره ده روز است. دو ماه اضافهٔ دورهٔ گرمکردن اتفاقاً یک هفتهٔ دیپگ را در برداشت. حذفش پنجرهٔ زنده را آرامتر از تاریخچهٔ واقعی استراتژی نشان داد. مردم حساسیت به تاریخ شروع را مقصر دانستند. گرمکردن رژیم را خورده بود.
و کریپتو در برابر سهام همان عدد را بدون اینکه کسی پارامتری را ویرایش کند معنا عوض میکند. بیست «روز» ETH شامل شنبههاست. بیست نشست سهام تقریباً یک ماه تقویمی است. نگاهبهگذشتهٔ 20روزه را از نوتبوک سهام روی کندلهای پرپچوال ساعتی کپی کنید و کانال 20ساعته با اسم 20روزه دارید. اولین میلهٔ معتبر آنوقت یا 20 ساعت داخل است، یا 20 روز داخل اگر تابعی بعدی resample کند، و هر دو را در یک diff ایجنت دیدهام.
نخستین برچسبزمان قابلمعامله را میخکوب کنید
گرمکردن یک نیاز داده است، نه یک نمونهٔ جایزه. هر ویژگی تعداد مشاهدات تمامشدهای را که لازم دارد، در واحدهایی که در آنها محاسبه میشود، نام میبرد. نخستین برچسبزمان قابلمعامله اولین میلهای است که همهٔ آنها برقرارند و یک حساب فلت اجازه میداشت سفارش بفرستد.
| ویژگی | مشخصات معمولاً چه میگوید | واقعاً چه باید وجود داشته باشد | جایگزین خاموش |
|---|---|---|---|
| Donchian 20روزه | 20 سقف روزانه | 20 نشست کامل | بیشینهٔ جاری با min_periods=1 |
| نوسان محققشدهٔ 30روزه | پنجرهٔ 30روزه | 30 بازده close-to-close | واریانس دوروزه، معکوسشده به اندازه |
| z-score فاندینگ 20چاپی | 20 روز | 20 تسویهٔ فاندینگ | 20 روز تقویمی (حدود 90 چاپ)، یا 20 میله از تایمفریم غلط |
| RSI 14دورهای روی 5m | 14 دوره | 14 میلهٔ پنجدقیقهای بستهشده | 14 روز، یا 14 میله با حفرههای پُرشدهٔ روبهجلو |
P&L قبل از آن برچسبزمان بیرون از سابقه میماند. وضعیت قبل از آن برچسبزمان شاید هنوز باید شبیهسازی شود، تا استاپ دنبالهرو یا دورهٔ خنکشدن وقتی ساعت به اولین میلهٔ قابلمعامله میخورد واقعی باشد، اما آن پُرشدگیها داخل Sharpe، تعداد معاملات، یا محاسبات ظرفیت نمیروند. بعد بررسی زشت را اجرا کنید: از حالت فلت در آن برچسبزمان از نو شروع کنید، با نگاهبهگذشته فقط بهعنوان داده. اگر سفارشها عوض شدند، معاملات پنهان میفرستادید.
معاملهٔ کاغذی با همان قرارداد شروع میشود. هر پنجرهٔ آزمون walk-forward هم همینطور. اگر نمودار یک ماهش کم به نظر میرسد، کم بگذارید.
← همهٔ مطالب


