تقریباً هر ربات معاملهگری که به من نشان میدهند روی نمودار درخشان است: یک خط صاف رو به بالا، ضررهای کم و استراتژیای که «جواب میدهد». بعد پول واقعی وارد میشود و ظرف چند هفته نتیجه هیچ شباهتی به آزمون ندارد. در بیشتر موارد ایده مشکل نداشت؛ مشکل از بکتست بود. در این مقاله توضیح میدهم یک ربات قانونمحور با پایتون از چه بخشهایی ساخته میشود، یک بکتست صادقانه باید چه چیزهایی داشته باشد و یک استراتژی قبل از رسیدن به پول واقعی باید از چه نوع آزمونهایی بگذرد.
اول یک نکته تا سوءتفاهمی پیش نیاید: این مقاله توصیهٔ مالی نیست و هیچ ربات یا بکتستی نمیتواند سود را تضمین کند. بازارها تغییر میکنند و استراتژیای که در گذشته جواب داده ممکن است فردا ضرر بدهد. هدف یک بکتست خوب این نیست که ثابت کند برنده میشوید؛ این است که ارزان و زود بفهمید یک استراتژی احتمالاً میبازد. استراتژی و همهٔ عددهای این مقاله فرضی هستند.

ربات معاملهگر واقعاً چیست؟
اگر حرفهای تبلیغاتی را کنار بگذاریم، ربات معاملهگر چهار بخش ساده دارد: داده (قیمت و شاید حجم)، قانون (کی بخرد و کی بفروشد)، محدودیت ریسک (در هر معامله چقدر وارد شود و کی متوقف شود) و اجرا (ارسال سفارش به کارگزار یا صرافی). پایتون انتخاب خوبی است، چون همان کد میتواند قانونها را روی دادهٔ گذشته آزمایش کند و بعد همانها را بهصورت زنده اجرا کند. بخش سخت کد نیست؛ این است که با خودتان صادق باشید که آزمون واقعاً چه چیزی را نشان میدهد.
قدم ۱: قانونهایی بنویسید که ماشین بتواند اجرا کند
«وقتی روند قوی به نظر میرسد بخر» قانون نیست. قانون باید آنقدر دقیق باشد که دو نفر، یا یک کامپیوتر، هر بار همان تصمیم را بگیرند. یک مثال آموزشی کلاسیک تقاطع میانگین متحرک است: وقتی میانگین کوتاه بالای میانگین بلند است دارایی را نگه دار و وقتی پایین است بیرون بمان. این بهتنهایی استراتژی خوبی نیست و استراتژی واقعی خیلی بیشتر از این لازم دارد، اما نشان میدهد «دقیق» یعنی چه.
قدم ۲: بکتست را صادق کنید
بیشتر بکتستهای زیبا به یکی از دو شکل بیصدا اشتباهاند. اول نگاه به آینده: آزمون از قیمت بستهشدن امروز برای معاملهای استفاده میکند که در دنیای واقعی فقط بعد از بستهشدن بازار میتوانستید انجامش دهید. دوم معاملهٔ مجانی: بدون کارمزد، بدون اسپرد و بدون لغزش قیمت. هر دو نتیجه را خیلی بهتر از واقعیت نشان میدهند. راهحل اولی این است که ربات فقط بر اساس اطلاعاتی تصمیم بگیرد که در آن لحظه واقعاً در دسترس بوده؛ دومی به یک هزینهٔ واقعبینانه روی هر معامله نیاز دارد.
در آزمون فرضی نمودار بالا، همین قانونها بدون هزینه در سه سال ۳۴٪ بازده نشان دادند. با یک هزینهٔ واقعبینانه برای هر معامله، این عدد به ۱۶٪ رسید. در خود ایده هیچ چیز عوض نشد؛ فقط صداقت آزمون عوض شد.
| آزمون فرضی یک استراتژی ثابت | بازده | بدترین افت سرمایه |
|---|---|---|
| بکتست بدون هزینه، معامله روی همان کندل | ۳۴٪ | ۱۲٪ |
| بکتست با کارمزد و لغزش، معامله روی کندل بعدی | ۱۶٪ | ۱۵٪ |
| سال خارج از نمونه که استراتژی هرگز ندیده بود | منفی ۳٪ | ۱۹٪ |
قدم ۳: تلهٔ بیشبرازش
به ردیف آخر جدول نگاه کنید. بیشتر رباتها همینجا میمیرند. اگر به اندازهٔ کافی تنظیم امتحان کنید، طولها و آستانهها و حد ضررهای مختلف، همیشه یکی از آنها روی گذشته عالی به نظر میرسد، فقط از روی شانس. این همان بیشبرازش (overfitting) است: استراتژی نویز یک دوره را یاد گرفته، نه یک الگوی واقعی را. دفاع پایه این است که بخشی از دادهٔ گذشته را کنار بگذارید و هنگام تنظیم هرگز به آن دست نزنید. اینکه داده را چطور تقسیم کنید و نتیجه را چطور قضاوت کنید، همانجایی است که بیشتر کار واقعی انجام میشود. اگر نتیجه آنجا از هم پاشید، احتمالاً استراتژی هیچوقت واقعی نبوده است.
قدم ۴: معاملهٔ کاغذی قبل از پول واقعی
استراتژیای که از بکتست سالم بیرون آمده هنوز باید از دنیای واقعی هم جان سالم به در ببرد: دادهٔ با تأخیر، سفارشهایی که با قیمت بدتر پر میشوند، و اتصالی که درست در لحظهٔ بد قطع میشود. ربات را چند هفته با حساب آزمایشی یا دمو اجرا کنید و هر معاملهٔ کاغذی را با چیزی که بکتست میگوید باید اتفاق میافتاد مقایسه کنید. فاصلهٔ این دو اغلب مفیدترین عددی است که به دست میآورید.
قدم ۵: محدودیت ریسک بخشی از خود ربات است
محدودیت ریسک تنظیمی نیست که بعداً اضافه شود؛ از روز اول باید در کد باشد. دستکم: سقف اندازهٔ هر موقعیت، سقف ضرر روزانه یا هفتگی که بعد از آن ربات متوقف شود، و یک «کلید قطع» دستی. رباتی که محدودیت ندارد نمیفهمد کی خراب شده؛ فقط به معامله ادامه میدهد.
آزمونی که تعیین میکند به یک استراتژی اعتماد کنم یا نه
همهٔ آنچه گفتم بهداشت پایه است و همین حالا بیشتر استراتژیهای بد را حذف میکند. اما یک آزمون دیگر هم هست که همیشه قبل از اینکه اجازه بدهم استراتژیای به پول واقعی نزدیک شود انجامش میدهم، و در این سالها بیشتر از همهٔ آزمونهای دیگر روی هم، استراتژیهای «عالی» را رد کرده است. پیچیده نیست، اما نحوهٔ چیدنش به بازار، بازهٔ زمانی و دادهای که دارید بستگی دارد و اگر اشتباه چیده شود فقط آرامش کاذب میدهد. برای همین ترجیح میدهم آن را روی یک استراتژی واقعی و همراه با کسی که آن را ساخته انجام دهم، نه بهصورت یک نسخهٔ عمومی.
اشتباههای رایج
- آزمون بدون هزینه. کارمزد، اسپرد و لغزش قیمت باید در هر بکتستی باشند.
- استفاده از دادهای که هنوز نرسیده. در دنیای واقعی بعد از رسیدن داده اقدام میکنید، نه قبل از آن.
- تنظیم تا وقتی که بینقص به نظر برسد. هرچه تنظیمهای بیشتری امتحان کنید، احتمال اینکه برنده فقط شانس باشد بیشتر میشود.
- رد شدن از معاملهٔ کاغذی. چند هفته معاملهٔ دمو در برابر یک غافلگیری زنده هیچ هزینهای ندارد.
- نبودن توقف برای خود ربات. هر رباتی به سقف ضرر و راهی برای خاموش شدن نیاز دارد.
همین انضباط در کارهای دیگری که دربارهشان نوشتهام هم دیده میشود: مطالعهٔ امکانسنجی و تصمیم برو/نرو برای هر سرمایهگذاری، تمیز کردن داده قبل از اعتماد به آن و پایتون کاربردی روی دادهٔ واقعی کسبوکار.
استراتژی یا رباتی دارید که میخواهید قبل از پول واقعی آزمایشش کنید؟
توضیح کوتاهی برایم بفرستید: کدام بازار و چه بازهٔ زمانی، قانونها چیست و تا الان چطور آزمایشش کردهاید. به شما میگویم بکتست کجا ممکن است فریبتان بدهد و با هم آزمونهایی را که برای استراتژی شما مهم است مرور میکنیم، از جمله همان آزمون بالا.
تماس با من بخوانید: امکانسنجی و تصمیم برو/نرو بخوانید: پایتون روی دادهٔ کسبوکار
منابع
- سوگیری نگاه به آینده، هزینههای معامله و بیشبرازش از خطاهای شناختهشده در بکتست استراتژیهای معاملاتی هستند؛ کنار گذاشتن دادهای که در تنظیم استفاده نمیشود و معاملهٔ کاغذی قبل از اجرای زنده، روشهای استاندارد کاهش آنها هستند.
- عملکرد گذشته، چه در بکتست و چه در معاملهٔ واقعی، تضمینی برای نتیجهٔ آینده نیست.
- استراتژی و همهٔ عددهای این مقاله فرضی هستند. این مقاله توصیهٔ مالی نیست.