بهینهیابی و بکتست، یک روح در دو بدن
در مقالهی پیشین از سری مقالات مرتبط با بهینه یابی به شرح و بررسی «چگونه برازش ناخواسته یا اصطلاحا overfitting را در بکتست یک استراتژی معاملاتی تشخیص دهیم؟» پرداختیم در این مقاله به شرح و بررسی «بهینهیابی و بکتست، یک روح در دو بدن» میپردازیم.
در صورت برقراری شرایط معاملات الگوریتمی در بازار هدف برای سنجش بازده استراتژیهای معاملاتی میتوانید از سفارش کد پایتون، سفارش کد mql و … برای کد کردن و بهینه یابی استراتژیهای خود استفاده کنید. و در عین حال سوای امکان سفارش اکسپرت میتوانید از سفارش اندیکاتور برای دریافت یک نمایش گرافیکی از محاسبات استراتژی خود بهره ببرید.
– – –
در مقالات گذشته اشارههایی به نزدیکی بکتست و بهینهیابی داشتیم. حقیقت امر آن است که اعتبار یک بکتست تاثیر قابل توجهی بر نتایج بهینهیابی خواهد داشت. چرایی چنین رابطهای مشخص است دلیل این همبستگی آن است که پروسهی بهینهیابی، یک استراتژی را از دریچه بکتست یا همان تست گذشته نگر بررسی میکند پس میتوان گفت که هرچه عملیات بکتست اصولیتر باشد نتایج بهینهیابی و انتظار سوددهی نیز بالاتر خواهد بود به عبارتی هرچه ورودی و متریال پروسهی بهینهیابی دقیق تر باشد نتایج نیز مورد اعتماد تر خواهند بود. در کل دسترسی به یک مرجع مطلوب آموزش بهینه یابی میتواند بسیار مسیر را هموار سازد. همچنین میتوان از سفارش کد بهینه یابی و نرم افزار بهینه یابی نیز استفاده کرد.
بر طبق آموزش بکتست یکی از عوامل بسیار موثر در اعتبار و کیفیت بکتست طول پنجرهی زمانی یا به بیان ساده تر طول دورهی آن است. اگر به صورت فعال در زمینهی معاملات الگوریتمی مطالعه داشته باشید متوجه خواهید شد که بسیاری از منابع، قوانین کیفی و غیردقیقی را در اختیار شما خواهند گذاشت. این بدان معناست که پژوهش در چنین موضوع مهمی به شما واگذار شده. یکی از مهمترین بند هایی که در اغلب منابع علمی مشاهده خواهید کرد آن است که یک بازهی زمانی مورد قبول برای یک بکتست تمامی سطوح بازار از جمله روند صعودی، روند نزولی و سطوح بدون روند را شامل میشود به بیان دیگر باید اطمینان حاصل کرد که استراتژی در بازهی بکتست از یک چرخهی بازار عبور خواهد کرد. این قانون میتواند نقطهی خوبی برای شروع باشد. دستهی دیگری از منابع رویکرد آماری و ریاضیاتی به این موضوع دارند. این دسته از منابع برای پاسخ به این سوال مهم که چه پنجرهی زمانی ای بکتست مورد اعتمادی به ما خواهد داد به این موضوع اشاره میکنند که بازهی مورد نظر باید تعداد قابل اطمینانی از معاملات را شامل شود و برای توضیح واژه ی قابل اطمینان از مفهوم خطای نمونه استفاده میکنند. این مفهوم اشاره به آن دارد که هرچه تعداد معاملات در بازهی تعیین شده برای بکتست بیشتر باشد خطای نمونه کمتر و در نتیجه نتایج نیز از اعتبار بالاتری برخوردار خواهند بود. برای محاسبهی خطای نمونه میتوانید از فرمول زیر استفاده کنید :
بنابراین بازهی زمانیای که تنها یک معامله از استراتژی را شامل شده دارای خطای 100 درصدی، دو معامله دارای خطای 50 درصدی و همینطور الی آخر خواهد بود. بنابراین برای رسیدن به خطای 5 درصدی به 400 معامله نیاز خواهیم داشت این راهنمای خوبی برای انتخاب بازهی مورد نیاز برای بکتست خواهد بود . باید دو نکته را در نظر بگیرید ذات این فرمول یک ذات بدبین است و من فکر میکنم این نوع از رفتار برای یک فرمول سنجش خطا رفتار مناسبی است بدین معنا که هرچه تعداد معاملات افزایش یابد توان هر معامله در کاهش خطای نمونه کاهش مییابد به بیان دیگر تبدیل خطایی صد درصدی به خطایی پنجاه درصدی بسیار ساده تر از تبدیل خطای پنج درصدی به خطای چهار درصدی خواهد بود، این موضوع کار را برای استراتژی های پیرو روندی سخت و افزایش اعتبار را برای استراتژی های سریع دشوار خواهد کرد.
در کنار این معیار ها معیار مورد علاقهی من درجهی آزادی نام دارد. با وجود اینکه شهرت این مبحث بیشتر مربوط به مباحث آماری است اما در نظر من درجه های آزادی بی ارتباط با فیزیک کوانتوم نیستند جایی که کوانتوم ها بسته هایی از انرژی هستند ولی در علم آمار درجهی آزادی مبین وجود بسته هایی از جنس داده است. به منظور انتخاب بازه ای مورد قبول برای بکتست فهم درجهی آزادی استراتژی موضوعی حیاتی است. میتوان اینگونه گفت که داده ی نمونهی ما از واحد هایی تغییر پذیر با نام درجه های آزادی تشکیل شده است .این ذرات سوخت پارامتر ها و قوانین استراتژی هستند. برای یک پنجرهی زمانی مطلوب و معتبر برای بکتست داشتن حداقل درجه آزادی 90 درصد الزامی است. شما را بیش از این به پیچ و خم محاسبات وارد نخواهم کرد با این حال در حال طراحی محاسبهگری هستم که به شما در محاسبه ی درجهی آزادی و خطای نمونه کمک خواهد کرد فراموش نکنید که انتخاب بازه ی زمانی درست برای پروسهی بک تست حیاتی و برای اعتبار پروسهی بهینهیابی الزامیست. برای استفاده از این محاسبهگر کافی است در فیلد اول تعداد دادههای نمونه را وارد کنید یعنی برای مثال درصورت اجرای تست برروی 100 روز داده عدد 100 هم چنین برای 100 ساعت یا 100 دقیقه تست .
در فیلد دوم تعداد قوانین معاملاتی را وارد کنید برای مثال اگر با ورود rsi به منطقه ای مشخص معامله میکنید می توانید این را یک قانون در نظر بگیرید هر حالت از استراتژی شما که به یک معامله ختم میشود را یک قانون محسوب کنید در استراتژی های اندیکاتوری معمولا میتوان تعداد اندیکاتور ها را وارد کرد، با تایید فیلد دوم به تعداد قوانین شما فیلد خالی جدید اضافه خواهد شد دوره ی زمانی هر اندیکاتور را در این فیلد ها وارد کنید برای مثال یک استراتژی دارای میانگین متحرک با دورهی 50 و rsi با دوره ی 14 دو قانون و با مقادیر 50 و 40 خواهد داشت. درصورتی که اندیکاتور دارای بیش از یک پارامتر است و تنها در یک قانون معاملاتی کاربرد دارد پارامتر هارا جمع بزنید و در یکی از فیلد های زیر مجموعهی فیلد دوم وارد کنید و اگر اجزای آن به طور جداگانه در قوانین معاملاتی مختلف نقش دارند به تعداد قوانین اضافه کرده و میزان پارامتر مورد استفاده در آن بخش از اندیکاتور را به صورت جداگانه در یکی از فیلد های زیرمجموعهی فیلد دوم وارد کنید. به طور خلاصه باید تعداد داده های درگیر در هر قانون را به دست آورید.
در فیلد بعدی فرمولی که برای محاسبه ی خطای نمونه توضیح دادیم را به شکل راحتی محاسبه کرده ایم فقط کافیست تعداد معاملات را در فیلد وارد کنید در صورتی که DOF دارای مقداری بالاتر از 90 درصد و SAMPLE ERROR دارای مقداری کمتر از 5 درصد باشد میتوان گفت بکتست شما با توجه به میزان پیچیدگی استراتژی و ریتم ذاتی آن از نظر زمانی معتبر و قابل قبول است.
– – –
در صورت برقراری شرایط معاملات الگوریتمی در بازار هدف، سوای این بحث که میتوان استراتژیهای معاملاتی خود را به وسیلهی سفارش کد پایتون یا سفارش کد mql و سفارش اکسپرت کد کرد و در پروسهی بک تست اعتبار سنجی نمود. همچنین میتوان از طریق سفارش اندیکاتور به آنها یک جنبهی نمایشی نمایانتری برای تسهیل تحلیل در سابقهی نماد داد.
– – –
در مقالهی بعدی به بررسی «تابع هدف، چشم بصیرت طراحی استراتژی در بهینه یابی» میپردازیم که به راه های تشخیص برازش خواهیم پرداخت و به زودی محصولاتی مرتبط با تحلیل و بهینهیابی استراتژی های معاملاتی در اختیار شما عزیزان قرار خواهد گرفت.