اپیزود ۷- یادگیری ماشین Walk-Forward در فارکس برای پرهیز از Look‑ahead (Case: EURUSD)

اپیزود ۷- یادگیری ماشین Walk-Forward در فارکس برای پرهیز از Look‑ahead (Case: EURUSD)

سطح: مبتدی تا نیمه‌حرفه‌ای
هدف: یاد می‌گیریم ارزیابی مدل را «زمان‌محور و واقع‌گرایانه» انجام دهیم تا به دام Look‑ahead  (نگاه به آینده) و خوش‌بینی کاذب نیفتیم.


مقدمه یادگیری ماشین Walk-Forward در فارکس

در اپیزود ۶ اولین مدل کدنویسی را ساختیم (درخت تصمیم) و روی دادهٔ «train/valid/test» ارزیابی کردیم. اما یک مشکل مهم وجود دارد: بازار تغییر می‌کند. اگر فقط یک‌بار مدل را آموزش دهیم و یک‌بار تست کنیم، ممکن است خوش‌بینانه قضاوت کنیم.

Walk-Forward در فارکس دقیقاً برای حل این مشکل است:

  1. پنجرهٔ آموزش را جلو می‌بریم،
  2. روی بازهٔ بعدی پیش‌بینی می‌کنیم،
  3. نتایج را ذخیره،
  4. بعد دوباره یک پله جلو می‌رویم… تا کل دوره پوشش داده شود.

نتیجهٔ نهایی یک بردار پیش‌بینی زنده است که هر نقطه‌اش با اطلاعاتِ فقط «تا دیروز» ساخته شده—مثل دنیای واقعی.لینک مربوط به محتوای پایه سری مقالات یادگیری ماشین در فارکس.


اینفوگرافی Walking-Forward در فارکس

۱- Look‑ahead چیست؟

Look‑ahead  یعنی از اطلاعات آینده—حتی ناخواسته—برای ساخت ویژگی، تنظیم مدل یا انتخاب پارامتر استفاده کنیم. مثال‌های رایج:

  • محاسبهٔ اندیکاتور با میانگین دوطرفه یا استفاده از «close آینده» برای ساخت یک ویژگی.
  • اسکیلینگ/نرمال‌سازی روی کل داده، نه فقط train.
  • تقسیم تصادفی دادهٔ زمانی.

اثر: دقتِ ظاهراً عالی روی کاغذ، اما در عمل ضعیف. Walk‑Forward این ریسک را کم می‌کند.


۲- دو الگوی رایج Walk-Forward در فارکس

Expanding Window پنجرهٔ توسعه‌یاب: از ابتدای تاریخ تا t آموزش می‌دهیم و روی بازهٔ بعدی (مثلاً یک ماه بعدی) پیش‌بینی می‌کنیم؛ سپس t جلو می‌رود و پنجره بزرگ‌تر می‌شود.

Rolling Window پنجرهٔ لغزنده: فقط آخرین N روز/میله را برای آموزش نگه می‌داریم (مثلاً ۵۰۰ کندل اخیر) تا مدل همیشه «به‌روز» بماند.

برای شروع، Expanding ساده‌تر و باثبات‌تر است. بعداً می‌توانید Rolling را امتحان کنید.


۳- طرح آزمایش ما (Case: EURUSD)

  • داده: date, open, high, low, close, volume (D1)
  • ویژگی‌ها: sma20, rsi14, atr14, return_1d (مثل اپیزود ۶)
  • هدف: target_up = 1 if close[t+1] > close[t] else 0
  • مدل پایه: DecisionTreeClassifier با تنظیمات محافظه‌کارانه (max_depth, min_samples_leaf)
  • گام Walk-Forward در فارکس: پیش‌بینی به صورت یک‌روز جلوتر؛ ارزیابی تجمیعی روی کل دورهٔ آزمایش

۴- شبه‌کد ساده (Expanding) Walk-Forward در فارکس

  • داده را بر حسب تاریخ مرتب کنید و ویژگی‌ها را بسازید.
  • یک نقطهٔ شروع برای آموزش تعیین کنید (مثلاً ۷۰% اولِ داده—یا حداقل ۲ سال اول).
  • برای هر گام t از نقطهٔ شروع تا انتها:
    • آموزش روی [start … t]
    • پیش‌بینی برای t+1
    • ذخیرهٔ پیش‌بینی و برچسب واقعی
  • در پایان، معیارها را روی تمامی پیش‌بینی‌های انباشته محاسبه کنید.

۵- کدنویسی گام‌به‌گام Walk-Forward در فارکس

اگر از Anaconda استفاده می‌کنید: محیط forex-ml  اپیزود ۶ کافی است. در VS Code هم همان پکیج‌ها را دارید.

 

 

۱- خواندن داده و ساخت ویژگی‌ها (مثل اپیزود ۶)

 

۲- نقطهٔ شروع Walk-Forward در فارکس

 

۳- حلقهٔ  (Expanding) Walk-Forward در فارکس

نکات مهم کد بالا

  • در هر گام، مدل فقط تا همان روز آموزش می‌بیند و سپس برای روز بعد پیش‌بینی می‌کند.
  • خروجی‌ها در walk_df جمع می‌شود؛ این خروجی «واقعی‌ترین» تصویر از عملکرد مدل است.

۶- آستانهٔ دوطرفه + منطقهٔ خنثی به سبک اپیزود ۶

همان ایده را اینجا هم داریم؛ با احتمالات  proba_up سیگنال بسازید:

 

بعداً در اپیزودهای بعدی (بک‌تست) این سیگنال را با هزینه‌های معاملاتی می‌سنجیم.


۷- نسخهٔ Rolling Window اختیاری

برای «فراموش کردن قدیمی‌ها» و تمرکز روی رژیم فعلی بازار:

window = 500  فقط ۵۰۰ کندل آخر را برای آموزش نگه می‌داریم

 

مقایسه: Expanding معمولاً پایدارتر است؛ Rolling واکنش‌پذیرتر به تغییر رژیم.


Walking-Forward در فارکس یورو دلار

 

۸- خطاهای رایج و دام‌ها

  • اسکیل/نرمال‌سازی روی کل داده: اگر بعداً مدل دیگری (مثل لجستیک) استفاده کردید، فقط روی train هر گام fit کنید.
  • تنظیم‌های اغراق‌آمیز: max_depth زیاد → قوانین شکننده.
  • گام‌های بسیار کوتاه یا بسیار بلند: اگر گام ارزیابی خیلی کوچک باشد، نویز زیاد می‌شود؛ اگر خیلی بزرگ باشد، تعداد نقاط ارزیابی کم می‌شود.
  • جاانداختن ذخیرهٔ نتایج هر گام: یادتان باشد پیش‌بینی‌های هر گام را نگه دارید تا آمار نهایی معنادار باشد.

۹- تمرین‌های کوچک 

  1. Expanding و Rolling را با هم مقایسه کنید (Accuracy/Precision/Recall/F1).
  2. آستانه‌ها را ۰.۶۰/۰.۴۰ بگذارید و تعداد سیگنال‌ها را بسنجید.
  3. max_depth را بین ۳ و ۷ تغییر دهید؛ پایداری کدام بهتر است؟
  4. یک ویژگی سادهٔ دیگر اضافه کنید (مثلاً sma50) و اثرش را روی نتایج Walk‑Forward ببینید.

منابع پیشنهادی

  • Scikit‑learn: Time Series Split — برای ایده‌های تقسیم زمانی
  • ISL — مباحث ارزیابی مدل‌ها
  • Babypips / Investopedia — مفاهیم مقدماتی فارکس و اندیکاتورها
  • Depth Market Pro — اپیزودهای ۶ و قبل‌تر برای ساخت ویژگی‌ها

♦ FAQ

سؤالات متداول

Expanding همهٔ تاریخچه تا امروز را می‌بیند (پایدارتر). Rolling فقط آخرین N کندل را می‌بیند (واکنش‌پذیرتر).

طبیعی است—Walk-Forward سختگیرانه‌تر و واقعی‌تر است. به‌جای فقط Accuracy به پایداری و کیفیت سیگنال نگاه کنید.

می‌توانید آستانه‌ها را تغییر دهید یا در مدل‌های بعدی از class_weight یا روش‌های بالانس استفاده کنید (اپیزود ۹).

به کانال تلگرام عـــمق بــــازار حــرفه‌ای بپیوندید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *