چرا بهینهسازی یک شمشیر دولبه است
هر معاملهگری که با اکسپرت ادوایزر کار میکند، دیر یا زود به یک وسوسهی آشنا میرسد: باز کردن Strategy Tester، زدن دکمهی Optimize و رها کردن MetaTrader تا بهترین ترکیب پارامترها را پیدا کند — آن ترکیبی که یک منحنی سرمایهی چشمنواز میسازد. بکتست بینقص به نظر میرسد. افت سرمایه (Drawdown) ناچیز است. Profit Factor رشکبرانگیز است. بعد EA وارد معاملات واقعی میشود — و بلافاصله شروع به ضرر کردن میکند.
این همان دام overfitting است و یکی از رایجترین دلایل شکست استراتژیهای الگوریتمی در بازار واقعی به شمار میرود. درک اینکه چرا این اتفاق میافتد و چگونه میتوان فرآیند بهینهسازی را به گونهای طراحی کرد که از این دام بگریزد، از ارزشمندترین مهارتهایی است که یک توسعهدهنده یا معاملهگر EA میتواند کسب کند.
Overfitting دقیقاً یعنی چه؟
Overfitting زمانی رخ میدهد که پارامترهای یک استراتژی آنقدر دقیق بر اساس دادههای تاریخی تنظیم شده باشند که EA در واقع گذشته را حفظ کرده، نه اینکه یک مزیت تکرارپذیر واقعی آموخته باشد. مدل به جای الگوی اصلی بازار، نویز دادهها را یاد گرفته است.
این را تصور کنید: فرض کنید تمام سؤالات امتحان سال گذشته را مطالعه کرده و جوابها را حفظ کردهاید. نمرهی ۱۰۰ از تمرین با همان سؤالات میگیرید. اما وقتی امتحان جدید با سؤالات متفاوت پیش میآید، جوابهای حفظشدهتان هیچ فایدهای ندارند. استراتژی شما درک واقعی نداشته — فقط الگوبرداری سطحی بوده است.
در معاملهگری، این موضوع خودش را در قالب بکتستهای درخشانی نشان میدهد که در فوروارد تستینگ فرو میپاشند؛ چون نویز بازار هرگز دو بار کاملاً یکسان نیست.
نشانههایی که نشان میدهند EA شما احتمالاً Overfitted است
- مقادیر پارامتر بیش از حد خاص: اگر بهترین نتیجه با دورهی ۴۷ و آستانهی ۰.۰۰۳۱۲ به دست میآید، از خود بپرسید چرا این اعداد؟ مقادیر رایج مثل ۱۴، ۲۰ یا ۵۰ احتمال بیشتری دارند که ساختار واقعی بازار را نشان دهند.
- لبهی تیز در عملکرد: اگر با تغییر یک واحد پارامتر، سودآوری فرو میریزد، استراتژی روی لبهی تیغ ایستاده — نشانهای واضح از curve fitting.
- متریکهای غیرواقعی: Profit Factor بالای ۳.۰ یا Sharpe Ratioهایی که در بکتست خیلی تمیز به نظر میرسند، به ندرت در معاملات زنده دوام میآورند.
- نتایج ضعیف خارج از نمونه: واضحترین سیگنال — وقتی استراتژی روی دادههای آموزشی خوب عمل میکند اما روی دادههای دیدهنشده ضعیف است.
ساختن فرآیند بهینهسازی مقاوم
دادهها را همیشه تقسیم کنید
مهمترین اصل در بهینهسازی EA این است که پیش از شروع، دادههای تاریخی خود را به بخشهای مجزا تقسیم کنید. یک رویکرد رایج این است که تقریباً ۷۰ تا ۸۰ درصد دادهها را برای بهینهسازی دروننمونهای (in-sample) اختصاص دهید و ۲۰ تا ۳۰ درصد باقیمانده را به عنوان مجموعهی تست خارج از نمونه (out-of-sample) نگه دارید — دادههایی که بهینهساز هرگز آنها را نمیبیند.
پس از شناسایی مجموعه پارامترهای امیدوارکننده از دورهی in-sample، همان پارامترها را — بدون هیچ تغییری — روی دادههای out-of-sample اجرا کنید. اگر عملکرد به شدت افت کرد، پارامترها overfitted هستند. اگر عملکرد به شکل قابل قبولی حفظ شد — نه لزوماً یکسان، اما از نظر ساختاری مشابه — یک کاندیدا برای بررسی بیشتر دارید.
برخی توسعهدهندگان یک گام فراتر میروند و از تقسیم سهگانه استفاده میکنند: in-sample، اعتبارسنجی out-of-sample و یک تست کور نهایی. این روش یک لایهی محافظتی اضافی در برابر overfitting ناخواسته به مجموعهی اعتبارسنجی فراهم میکند.
محدودههای پارامتر گسترده را به مقادیر دقیق ترجیح دهید
هنگام بررسی نتایج بهینهسازی، به طور خودکار بهترین مجموعه پارامتر را انتخاب نکنید. به جای آن، به دنبال مناطق پایداری بگردید — خوشههایی از ترکیب پارامترها که همه نتایج محکم و یکنواختی تولید میکنند.
برای مثال، اگر دورهی میانگین متحرک شما در هر جایی بین ۱۸ تا ۲۶ عملکرد خوبی دارد، این یک محدودهی مقاوم است. بازار به شما میگوید که مفهوم کلی در تنظیمات مختلف پابرجاست. اگر تنها یک مقدار خاص نتایج خوب میدهد، استراتژی شکننده است.
تمرین مفیدی این است که یک نقشهی عملکرد سهبعدی برای دو پارامتر کلیدی بسازید. استراتژیهای مقاوم تپههای صاف نشان میدهند؛ استراتژیهای overfitted قلههای تیز دارند.
از آنالیز Walk-Forward استفاده کنید
بهینهسازی walk-forward یکی از قدرتمندترین ابزارهای موجود در Strategy Tester متاتریدر است. به جای بهینهسازی یکباره روی یک پنجرهی تاریخی ثابت، این روش به طور مکرر روی یک پنجرهی in-sample متحرک بهینهسازی میکند و سپس روی دورهی out-of-sample بلافاصله پس از آن تست میکند — شبیهسازی اینکه در واقعیت چطور یک EA را در طول زمان مجدداً بهینه میکنید.
نسبت کارایی walk-forward (WFE) حاصل از این فرآیند، معیاری کمی از اینکه چقدر از عملکرد بکتست در تست out-of-sample باقی میماند به شما میدهد. WFE بالای ۵۰ تا ۶۰ درصد معمولاً قابل قبول تلقی میشود؛ پایینتر از آن، استراتژی نیاز به بازنگری دارد.
تعداد پارامترهای آزاد را کم نگه دارید
هر پارامتر آزاد اضافی که به EA اضافه میکنید، یک بُعد دیگر به بهینهساز میدهد تا در دادههای تاریخی از آن سوءاستفاده کند. استراتژی با ۱۰ پارامتر قابل تنظیم، حتی روی دادههای حجیم نیز امکان curve fitting گستردهای دارد. به عنوان یک اصل کلی، سعی کنید پارامترهای آزاد معنادار را به حداقل برسانید — معمولاً سه تا پنج پارامتر — و بقیه را ثابت یا به شکل منطقی محدود کنید.
پارامترها باید دلیل معاملاتی داشته باشند، نه اینکه صرفاً بکتست را بهتر نشان دهند. اگر نمیتوانید وجود یک پارامتر را به زبان بازار توضیح دهید، حذفش را در نظر بگیرید.
نگاهی فراتر از اعداد
بهینهسازی مقاوم در نهایت به صداقت فکری بستگی دارد. یعنی پذیرفتن یک بکتست کمتر چشمگیر در ازای استراتژیای که شانس واقعی عملکرد در شرایط زنده را دارد. یک منحنی سرمایه که به آرامی و با افت متعادل بالا میرود — و در چندین دورهی out-of-sample و رژیمهای مختلف بازار پایدار میماند — بسیار ارزشمندتر از بکتستی است که مثل موشک به نظر میرسد.
استراتژی خود را در صورت مناسب بودن روی جفتارزها و تایمفریمهای مختلف هم تست کنید. یک EA روندیاب که فقط روی یک جفتارز در یک دورهی تاریخی خاص کار میکند، یک نشانهی هشداردهنده است؛ اما EAای که در بازارهای متعدد منطق یکنواختی نشان میدهد، بسیار معتبرتر است.
بهینهسازی به معنای پیدا کردن کمال در گذشته نیست. بلکه به معنای یافتن ثبات برای آینده است. با انضباط، تردید سالم و احترام واقعی به دادههای out-of-sample به آن نزدیک شوید، تا EAهایتان پایهای بسیار محکمتر در معاملات زنده داشته باشند.
سلب مسئولیت: این مقاله صرفاً برای اهداف آموزشی است و توصیهی مالی یا سرمایهگذاری محسوب نمیشود. معاملات فارکس ریسک قابل توجهی دارد و عملکرد گذشته نشانهای از نتایج آینده نیست.




