
بخش Optimization Profile and System Parameter Permutation
آوریل 6, 2025
ماتریس واکفوروارد (Walk-Forward Matrix)
آوریل 6, 2025بهینهسازی چیست؟ (What is optimization?)
ایدهی پشت بهینهسازی ساده است. ابتدا باید یک سیستم معاملاتی داشته باشید — بهعنوانمثال، یک کراس ساده میانگین متحرک: اگر EMA(10) بالای EMA(20) برود، پوزیشن خرید باز کن، در غیر اینصورت پوزیشن فروش بگیر.
در تقریباً تمام سیستمهای معاملاتی، برخی پارامترها (مثل دوره اندیکاتورها، مقادیر عددی برای مقایسه و …) وجود دارند که عملکرد سیستم را تحت تأثیر قرار میدهند. بهینهسازی یعنی یافتن بهترین مقادیر برای این پارامترها (مقدارهایی که بیشترین سود یا بهترین نسبت سود به افت سرمایه (Return/DD) یا هر معیار دلخواه دیگر را فراهم کنند).
مثلاً آیا استفاده از قانون “EMA(10) بالای EMA(20)” بهتر است یا “EMA(15) بالای EMA(50)”؟
بهینهسازی میتواند به شما کمک کند مقادیری را پیدا کنید که در گذشته بهترین عملکرد را داشتهاند.
بهینهسازی / تحلیل Walk-Forward چیست؟ (What is Walk-Forward optimization/analysis?)
Walk-Forward Optimization بهطور کلی یک نوع خاص از بکتست است که از چندین بکتست کوچکتر روی بازههای بهینهسازی تشکیل شده است. این بازههای بهینهسازی در کل دورهی بکتست تقسیم میشوند و همیشه با آزمونهای خارج از نمونه (Out of Sample) با پارامترهای بهینهسازیشده دنبال میشوند.
این تکنیکی است که در آن ابتدا پارامترهای استراتژی را روی بخشی از دادههای گذشته بازار بهینهسازی میکنید، سپس عملکرد سیستم را با استفاده از همان پارامترها روی دادههای آینده (بعد از بازهی بهینهسازی) آزمایش میکنید — و این فرایند میتواند روی بازههای زمانی بعدی تکرار شود.
بهینهسازی Walk-Forward چگونه کار میکند؟ (How Walk-Forward optimization works)
در Walk-Forward، دادهها به تعداد قابل تنظیمی از بازهها تقسیم میشوند (در این مثال ۵ بازه). هر بازه شامل یک بخش بهینهسازی و یک بخش اجرا (Run) است.
برنامه با بازهی بهینهسازی ۱ شروع میکند. در این بازه، بهینهسازی سادهای انجام میشود تا بهترین پارامترها مشخص شوند. سپس این پارامترها روی بازه اجرای ۱ اعمال میشوند — استراتژی با همین پارامترهای بهینهشده ترید میکند.
در پایان بازه اجرای ۱، دوباره روی بازهی بعدی (بازه بهینهسازی ۲) بهینهسازی انجام میشود. بهترین پارامترها پیدا شده و در بازه اجرای ۲ استفاده میشوند.
این روند تا بازهی پنجم ادامه دارد که پایان دادههای تاریخی تست محسوب میشود.
بهینهسازی Walk-Forward شبیهسازی میکند که چطور میتوانستید در عمل با استراتژی کار کنید — اینکه ابتدا آن را روی دادههای تاریخی بهینهسازی کنید، سپس مدتی با پارامترهای بهینه معامله کنید و پس از مدتی دوباره آن را بازبهینهسازی نمایید.
بهینهسازی / تحلیل Walk-Forward چه چیزی به شما میگوید؟ (What Walk-Forward optimization/analysis tells you?)
در اصل به شما میگوید که آیا استراتژی بهاندازه کافی قوی (robust) هست و آیا عملکرد آن با بازبهینهسازی قابل بهبود است یا نه؟
اگر عملکرد استراتژی در حین بازبهینهسازی بدتر از حالت غیر بهینه باشد، این میتواند نشانهای جدی از overfitting باشد.
در مقابل، اگر استراتژی بهینهشده با Walk-Forward عملکرد بهتری نسبت به نسخه اصلی (غیر بهینه) روی همان دادهها داشته باشد، این نتایج را میتوان گرفت:
- استراتژی شما از بهینهسازی سود میبرد، پس باید بهصورت دورهای آن را بازبهینه کنید تا عملکرد بهتری داشته باشد.
- همچنین این نشان میدهد که استراتژی بهاندازه کافی قوی هست تا با تغییرات بازار مقابله کند (با استفاده از بازبهینهسازی) و احتمال خوبی وجود دارد که در آینده نیز کار کند.
مثال بهینهسازی Walk-Forward در StrategyQuant
اجرای بهینهسازی Walk-Forward در StrategyQuant بسیار ساده است. در چند خط بعدی، کل این فرایند را نشان خواهم داد.
استراتژی برای بهینهسازی
برای سادگی، در این مثال از استراتژی EMA Cross استفاده خواهیم کرد. توجه داشته باشید که این استراتژی در فرم پایه خود سودآور نیست، و بازبهینهسازی هم آن را سودآور نخواهد کرد، اما برای نشاندادن نحوه کار بهینهسازی، استراتژی مناسبی است.
شما میتوانید این استراتژی را از لینک زیر دانلود کنید – روی لینک راستکلیک کرده و «ذخیره به عنوان…» را انتخاب کنید:
محتوا:
- بارگذاری استراتژی برای بهینهسازی
- تنظیم مقادیر بهینهسازی
- پیکربندی اجرای Walk-Forward
- بررسی نتایج
- تفسیر نتایج
- توضیح اجزای پیشرفته امتیاز Walk-Forward
مرحله ۱: بارگذاری استراتژی برای بهینهسازی (Step 1: Loading a strategy for optimization)
ابتدا باید به پنجره Optimizer بروید و استراتژیای را که میخواهید بهینهسازی کنید بارگذاری نمایید.
در این مثال، از استراتژی ساده EMA_Cross استفاده میکنیم که وقتی EMA سریعتر از EMA کندتر عبور میکند وارد پوزیشن خرید میشود و برعکس، وارد پوزیشن فروش میشود. پس از بارگذاری استراتژی، بهصورت خودکار بهعنوان «استراتژی اصلی» (Original strategy) به دیتابانک نتایج بهینهسازی اضافه میشود.
میتوانید روی استراتژی اصلی دوبار کلیک کرده و به بخش نتایج > کد منبع (Results -> Source code) بروید تا قوانین آن را مشاهده کنید.
مطمئن شوید که تیک گزینه Put values to parameters زده شده باشد تا ببینید که متغیرهای pLongEMA_1، pLongEMA_2، pShortEMA_1، pShortEMA_2 برای ذخیره پارامترهای اندیکاتور استفاده میشوند. در بهینهسازی، سعی خواهیم کرد مقادیر بهینه برای این پارامترها را پیدا کنیم.
یک مشکل کوچک باقیمانده: میبینیم که استراتژی برای جهتهای خرید و فروش از پارامترهای متفاوتی استفاده میکند. میتوانیم آن را همینطور بگذاریم اگر بخواهیم برای هر سمت پارامترهای جداگانه بیابیم، اما در این مثال میخواهیم از پارامترهای یکسان برای هر دو سمت استفاده کنیم.
میتوان این کار را در برنامه از مسیر Tools -> Options -> Strategy parameters انجام داد.
اگر اولین چکباکس را تیک بزنید، همان پارامترها برای جهت خرید و فروش استفاده خواهند شد (البته به شرطی که قوانین مشابه باشند). روی OK کلیک کنید تا تنظیمات ذخیره شوند و کد منبع مجدد بارگذاری شود.
مرحله ۲: تنظیم مقادیر بهینهسازی (Step 2: Setting optimization values)
برای تنظیم مقادیری که باید بهینهسازی شوند، باید به بخش Settings –> Parameters بروید.
در اینجا میتوانید لیستی از تمام پارامترهای استراتژی را که برای بهینهسازی در دسترس هستند ببینید. بهینهسازی بهسادگی یعنی امتحان کردن مقادیر مختلف برای پارامترهای ورودی.
برای هر پارامتری که میخواهید بهینهسازی شود، باید خط مربوط به پارامتر را فعال کنید و مقادیر Start، Stop و Step را تنظیم نمایید. بهینهساز مقدار را از Start تا Stop با گامهای Step پیش خواهد برد. مقدار Original نیز قابل تنظیم است و برای تست مجدد استراتژی اصلی استفاده میشود. شما میتوانید از این مقدار برای مقایسه عملکرد نتایج جدید با تنظیمات «اصلی» استفاده کنید.
مقدار Number of tests نشان میدهد که چند تست باید برای بررسی تمام ترکیبهای ممکن از مقادیر انجام شود.
نکته!
ممکن است جدول پارامترهای شما شامل پارامترهای بیشتری باشد، مانند تصویر زیر:
این یکی از قابلیتهای قدرتمند StrategyQuant است. این نرمافزار به شما امکان میدهد نه تنها پارامترهای استراتژی، بلکه سایر گزینههای معاملاتی مانند تعداد معاملات در روز یا بازه زمانی مجاز برای معامله را نیز بهینهسازی کنید. این تنظیمات معمولاً بخشی از Strategy Options هستند، اما میتوان مقادیر آنها را نیز بهینهسازی کرد.
اگر نمیخواهید این گزینهها را در جدول پارامترها ببینید، دوباره به مسیر Tools –> Options –> Strategy parameters بروید و گزینه Add parameters for strategy options را غیرفعال کنید.
مرحله ۳: پیکربندی اجرای Walk-Forward (Step 3: Configuring walk-forward runs)
باید تنظیمات Walk-Forward را نیز مشخص کنیم. در این مثال، ما از دوره ۳۰٪ برای Out Of Sample (Run) و ۶ مرحله بازبهینهسازی استفاده خواهیم کرد.
Out of Sample %
این مقدار مشخص میکند که چه درصدی از کل بازه زمانی برای مرحله اجرا (Run) اختصاص داده میشود. اگر روی ۳۰٪ تنظیم شود، یعنی در هر بازه، ۷۰٪ از دادهها برای بهینهسازی و ۳۰٪ برای اجرای استراتژی با مقادیر بهینهشده استفاده میشود.
Walk Forward Runs
این مقدار مشخص میکند چند بار استراتژی بازبهینهسازی شود، یعنی چند بار فرایند بهینهسازی در دادههای گذشته تکرار شود.
همچنین میتوانید دورههای بهینهسازی (In Sample) و اجرا (Out of Sample) را بهصورت دقیق برحسب روز مشخص کنید؛ فقط کافیست گزینه Define specific number of days را فعال کنید.
مرحله ۴: بررسی نتایج (Step 4: Checking the results)
بهینهسازی Walk-Forward زمان بیشتری نسبت به بهینهسازی ساده میگیرد، زیرا بهجای یک مرحله، چندین (مثلاً ۶) مرحله بهینهسازی انجام میشود.
پس از اتمام، میبینیم که فقط دو نتیجه در دیتابانک وجود دارد – استراتژی اصلی (Original strategy) و نتیجه Walk-Forward.
وقتی روی نتیجه در دیتابانک دوبار کلیک کنیم، نتایج استراتژی باز میشود.
در اینجا میبینیم که استراتژی در آزمون Walk-Forward شکست خورده است، بر اساس تنظیمات امتیاز پایداری (Robustness score).
امتیاز پایداری کاملاً قابل تنظیم است. میتوانیم تمام شرایطی که میخواهیم بررسی کنیم را در جدول Robustness score components (شماره ۱) تعریف کنیم و مقدار آستانه آنها را مشخص نماییم.
مقدار آستانه کلی امتیاز پایداری (شماره ۲) مشخص میکند که چه تعداد از این شرایط باید برقرار باشند تا نتیجه Walk-Forward بهعنوان موفق در نظر گرفته شود.
در سمت راست این جدول، میتوانیم نتایج مربوط به هر مرحله بهینهسازی و اجرا را بررسی کنیم:
میبینیم که فقط ۲ مورد از ۶ اجرای Walk-Forward به سود منتهی شدهاند.
همچنین میتوانیم نمودار equity را بررسی کنیم:
خط آبی نمایانگر استراتژی بازبهینهسازیشده (reoptimized) است، در حالی که خط خاکستری باریکتر نمایانگر استراتژی اصلی (بدون بهینهسازی) میباشد.
تفسیر نتایج (Interpreting the results)
چطور باید این نتایج را تفسیر کنیم؟
در وهله اول، واضح است که این استراتژی خاص با استفاده از بازبهینهسازی (reoptimization) عملکرد بهتری نداشته است.
بدیهی است که این استراتژی در شکل اولیه خود سودده نیست و با بازبهینهسازی نیز سودده نشده است.
اما اگر این استراتژی را در بازههای زمانی کوتاهتری بازبهینهسازی کنیم چه؟ یا اگر درصد Out of Sample را تغییر دهیم چه اتفاقی میافتد؟ چطور میتوانیم بفهمیم بهترین دوره بازبهینهسازی برای این استراتژی چیست؟
اینجاست که ویژگی Walk-Forward Matrix به کمک ما میآید – برای آشنایی با آن مقاله بعدی را بررسی کنید.
نکته: همچنین مقاله Description of advanced Walk-Forward values را نیز بررسی کنید؛ در این مقاله مقادیر پیشرفتهای که میتوان در فیلترها یا در دیتابانک نمایش داد، توضیح داده شدهاند.