تست استراتژی معاملاتی

آیا استراتژی معاملاتی به صرفه است؟
در حرفه معاملهگری همیشه باید به ارتقا و توسعه سیستم معاملاتی توجه کرد. این امر بدون ارتقا دانش فنی معاملهگر امکانپذیر نیست. در این مقاله میخواهیم با مبحث جدیدی آشنا شویم که به معاملهگر در درک عملکرد برنامه معاملاتی کمک میکند. دو فرمول محاسباتی ساده به ما کمک میکنند تا با چشمی باز استراتژی معاملاتی را انتخاب و آن را ارتقا دهیم. این مقاله به شما کمک میکند تا خیلی سریع مشخص کنید که آیا سیستم معاملاتی جدید به صرفه است یا خیر؟ علاوه بر این متوجه خواهید شد که چه پارامترهایی در موفقیت کلی شما تأثیر دارند؟ آیا امکان دارد معاملهگری در ۶۰ درصد مواقع اشتباه کند، اما باز هم سرمایه خود را چند برابر کند؟
سود انتظاری معاملات
کار را با ارائه مثال سادهای شروع میکنیم. این مثال کمک میکند تا قوانین مدیریت ریسک را بهتر درک کنید و آنها را در معاملات پیاده کنید. همچنین سعی میکنیم با ارائه این مثال به شما کمک کنیم تا به سؤالات ابتدای مقاله پاسخ دهید.
فرض کنید که هر معاملهای که انجام میدهید ۱۰ دلار ریسک و ۱۰ دلار سود دارد. آیا انجام چنین معاملهای به صرفه است؟
برای پاسخ به این سؤال باید شانس یا احتمال معاملات سود ده و زیان ده را بدانیم. اما مشکل اساسی که در معاملات و استراتژیهای معاملاتی وجود دارد، این است که تا وقتیکه معاملهای انجام نشده، نمیتوان آمار و احتمالات استراتژی معاملاتی را محاسبه کرد. یعنی شما تنها زمانی میتوانید دادههای تاریخی را بررسی کنید که ریسک کرده باشید. به همین دلیل است که همیشه از حسابهای آزمایشی برای تست استراتژی استفاده میکنند. چونکه اگر معاملهای انجام نشود، شانس سود و زیان استراتژی هم مبهم باقی خواهد ماند.
از دید فرمول ریاضی، عملکرد یک سیستم معاملاتی را میتوان از فرمول زیر محاسبه کرد:
نتیجه معاملات برابر است با (تعداد معاملات) ضرب در (متوسط سود یا زیان هر معامله)
در فرمول بالا میتوان متوسط سود یا زیان هر معامله را از فرمول پایینی پیدا کرد:
بازده انتظاری برابر است با: (زیان هر معامله ناموفق * شانس معاملات زیان ده) – (سود هر معامله موفق * شانس معاملات سود ده)
فرض کنید که شانس موفقیت معاملات سود ده ۵۰ درصد باشد. اگر در هر معامله ۱۰ دلار سود کنید و ریسک هر معامله هم ۱۰ دلار باشد، آنگاه متوسط سود انتظاری از سیستم معاملاتی برابر صفر خواهد بود:
(۰٫۵ * ۱۰) – (۰٫۵ * ۱۰) = صفر دلار
یعنی اگر بازدهی انتظاری از معاملات صفر دلار باشد، معامله کردن در بازار توجیهی نخواهد داشت. حتی اگر ۱۰۰۰ معامله هم انجام شود، باز هم بازدهی انتظاری معامله صفر دلار خواهد بود. چنین معاملاتی بیشتر به نفع کارگزار خواهد بود تا خود معاملهگر! اگر در مثال بالا شانس معاملات ناموفق تنها ۱ درصد افزایش یابد، بازدهی انتظاری هم منفی خواهد شد:
۰٫۲۰ = (۱۰ * ۰٫۵۱) – (۱۰ * ۰٫۴۹)
این یعنی متوسط بازدهی انتظاری از هر معاملهای منفی ۲۰ سنت خواهد بود. یعنی در بلندمدت، حساب معاملهگر پاک خواهد شد.
- پس میتوان گفت که اگر بازدهی انتظاری هر معامله صفر یا کمتر از صفر باشد، معامله توجیهی ندارد و با انجام معاملات بیشتر هم تغییری در بازدهی انتظاری صورت نخواهد گرفت و حساب معاملاتی خالی خواهد شد.
- نکته دیگری که از بازدهی انتظاری میتوان یاد گرفت این است که اگر متوسط سود به دست آمده از هر معامله مساوی یا کمتر از ریسک (زیان) هر معامله باشد، معاملهگر باید تعداد معاملات موفق بیشتری داشته باشد تا بتواند با برآیند مثبت از بازار خارج شود.
معاملهگری در ۶۰ درصد مواقع به حد ضرر میخورد، چگونه سرمایه او ۱۲۰ درصد افزایش یافته است؟
فرض کنید که حساب معاملاتی با موجودی ۱۰ هزار دلار داریم. ریسک یا زیان هر معاملهای حداکثر ۲۰۰ دلار است. نسبت ریسک به ریوارد معاملات هم یک به دو است. یعنی حد سود حداقل دو برابر حد ضرر است. پس سود هر معامله موفقی به طور متوسط ۴۰۰ دلار خواهد بود.
حال فرض کنید که معاملهگری در طول سه ماه ۳۰۰ معامله انجام داده است. این معاملهگر در ۱۸۰ معامله اشتباه کرده و معامله در حد ضرر بسته شده است. یعنی شانس معاملات زیان ده او ۶۰ درصد است. مابقی معاملات یا همان ۱۲۰ معامله (۴۰ درصد) هم به حد سود رسیدهاند. اجازه دهید بازدهی انتظاری هر معامله را محاسبه کنیم:
بازدهی انتظاری هر معامله برابر است با:
(زیان هر معامله ناموفق * شانس معاملات زیان ده) – (سود هر معامله موفق * شانس معاملات سود ده)
۴۰ = (۲۰۰ * ۰٫۶۰) – (۴۰۰ * ۰٫۴۰)
اگر اعداد را در فرمول بالایی بگذاریم، بازدهی انتظاری از هر معامله برابر ۴۰ دلار خواهد بود. حال برای محاسبه عملکرد کلی معاملات کافی است که بازدهی انتظاری از هر معامله را در کل تعداد معاملات انجام شده ضرب کنیم: یعنی
۴۰ دلار * تعداد کل معاملات (۳۰۰) که برابر است با ۱۲ هزار دلار
این یعنی با اینکه معاملهگر در ۶۰ درصد مواقع اشتباه میکند، اما سرمایه او بعد از ۳۰۰ معامله به اندازه ۱۲ هزار دلار یا ۱۲۰ درصد رشد میکند! این مثال ساده نشان میدهد که مدیریت ریسک چه تأثیری بر عملکرد معاملات دارد.
در واقع اگر حد سود معاملات حداقل دو برابر حد ضرر باشند، معاملهگر این فرصت را دارد که با وجود درصد خطای بالا، باز هم سود قابل توجهی کسب کند!
بک تست استراتژی معامله و تست استراتژی معاملاتی اهمیت آن
بک تست استراتژی معامله یعنی یک استراتژی را روی دادههای قیمتی گذشته تست کنیم و ببینیم اگر طبق آن معامله میکردیم چه نتیجهای میگرفتیم. اهمیت بک تست در این است که قبل ازسرمایهگذاری و معامله متوجه شویم که یک استراتژی در گذشته چه عملکردی داشته است و روی چه مبنایی داریم سرمایهگذاری میکنیم.
اهمیت بک تست
اگر شخصی نیاز به عمل جراحی داشته باشد دانستن اینکه یک جراح در گذشته ۹۰ درصد عملهایش موفق بوده و دیگری ۷۰ درصد در انتخاب اینکه خود را بدست کدام جراح تست استراتژی معاملاتی بسپارد کمک قابل توجهی میکند. البته درست است که با اطلاعات گذشته نمیتوان به صورت کامل آینده را پیشبینی کرد اما این اطلاعات تمام چیزی است که ما به آن دسترسی داریم.
بنابراین اگر شما یک استراتژی را از ابتدا ساخته باشید ، اهمیت این فرآیند مشخص است، زیرا مطمئناً می خواهید بدانید که این استراتژی در گذشته چه عملکردی داشته است. اما حتی اگر شخص دیگری یک استراتژی به شما معرفی کرده باشد و اطمینان داشته باشید که در مورد عملکرد آن دروغ نگفته است، باز هم ضروری است که به طور مستقل از استراتژی بک تست بگیرید. دلایل متعددی برای این کار وجود دارد.
سودآوری یک استراتژی اغلب به جزئیات اجرای آن بستگی دارد. مثلا، سفارشات سهام کی ارسال میشود؟ بعد از باز شدن بازار یا قبل از بسته شدن بازار؟ نقاط ورود و خروج استراتژی در چه قیمتی در نظر گرفته شده است؟ قیمت باز شدن؟ بسته شدن؟ میانگین قیمت؟
تنها راه برای مشخص کردن دقیق این جزئیات، به منظور پیادهسازی آنها در سیستم خود ، این است که خودمان استراتژی را بک تست کنیم.
وقتی همه جزئیات یک استراتژی را در بک تست اجرا کردیم، میتوانیم آنها را زیر ذرهبین قرار دهیم و به دنبال مشکلات بک تست یا خود استراتژی باشیم. به عنوان مثال، در بک تست این واقعیت که خرید برخی سهام به علت صف خرید سخت بوده و نمیتوان آنها را به راحتی خرید را در نظر گرفتهایم؟
یکی دیگر از اهمیتهای بک تست این است که به بهبود خود استراتژی نیز کمک میکند. مثلا وقتی یک استراتژی را بک تست میگیریم و نتایج راضی کننده نیست با تغییر پارامترهای استراتژی و تست دوباره میتوان به نتایج بهتر رسید. البته مشکلاتی نیز در بک تست گرفتن وجود دارد که در زیر به آنها اشاره میکنیم. باید سعی کنیم تا حد ممکن با استفاده از روشهای مختلف این مشکلات را کاهش دهیم.
مشکلات رایج بک تست
اگرچه تقریباً هر استراتژی ممکن است بک تست را گرفتار اشتباهات منحصر به فردی کند، اما تعدادی از مشکلات مشترک وجود دارد که در همه بازارها و استراتژیها امکان رخ دادن آنها وجود دارد.
خطای نگاه به جلو (Look-ahead Bias)
همانطور که از نامش پیداست، خطای نگاه به جلو به این معنی است که در بک تست از قیمتهای آینده برای تعیین سیگنال خرید و فروش امروز استفاده میکند. یک مثال رایج از سوگیری نگاه به جلو، استفاده از بالاترین قیمت یا پایینترین قیمت یک روز برای تعیین سیگنال ورود در همان روز هنگام بک تست است. (به این دلیل که قبل از بسته شدن روز معاملاتی، نمیدانیم قیمت بالا و پایین آن روز چقدر است.)
برای جلوگیری از این خطا معمولا تست را با میانگین قیمت فردا انجام میدهند. مثلا در استراتژی مشخص میکنیم که اگر بر اساس قیمت بسته شدن امروز سیگنال خرید صادر شده است قیمت خرید را میانگین قیمت روز بعد در نظر بگیرد.
خطای صید داده (Data-Snooping Bias)
این خطا به این معنی است که با مشاهده دادهها، آزمایش را طوری طراحی کنیم که در نهایت استراتژی معامله با یک مجموعه از پارامتر، نتایج دلخواه ما را نشان دهد. خطای صید داده در واقع ناشی از داشتن پارامترهای آزاد زیاد است که با الگوهای تصادفی گذشته بازار متناسب شده است تا عملکرد تاریخی استراتژی خوب به نظر برسد. بعید است که این الگوهای تصادفی در آینده تکرار شوند، بنابراین بعید است مدلی که با این الگوها تست استراتژی معاملاتی تطبیق داده شود قدرت پیش بینی زیادی داشته باشد.
روش جلوگیری از این خطا نیز شناخته شده است: باید استراتژی را روی دادههای خارج از نمونه تست کنیم و مدلی که در آزمون خارج از نمونه مورد قبول نیست را رد کنیم.
تقسیم سود، افزایش سرمایه و تعدیل قیمتها
افزایش سرمایه و تقسیم سود باعث شکاف قیمت در نمودار سهم میشوند و باعث اشتباه شدن نتایج بک تست میگردند. برای بک تست باید از قیمتهای تعدیل شده استفاده کنیم.
خطای بقا در پایگاه داده سهام (Survivorship Bias)
در جنگ جهانی دوم نیروهای متفقین مشاهده میکردند که “هواپیماهایی که از نبرد به خانه برمیگردند در همه جا سوراخ گلوله دارند به جز موتور و کابین خلبان، بنابراین نتیجه گرفتند که باید در همه جا بجز موتور و کابین خلبان زره محافظ قرار دهیم.”
آبراهام والد ریاضیدان به نقص موجود در این نتیجهگیری پی برد. آنها فقط هواپیماهایی تست استراتژی معاملاتی را بررسی میکردند که از جنگ برگشته بودند. هواپیماهایی که به موتور و کابین خلبان آنها گلوله میخورد سقوط میکردند و بر نمیگشتند.
اگر برای عملکرد سهمهای مختلف عمل بک تست را انجام میدهیم باید حواسمان باشد که سهامی که ورشکسته شده و دیگر نیستند را در نظر بگیریم.
محدودیت در فروش استقراضی (Short-Sale Constraints)
اگر دارایی را بک تست میگیرید که امکان فروش استقراضی در آن هست(کریپتوکارنسی، فارکس) توجه داشته باشید که این کار ممکن است محدودیتهایی داشته باشد و فروش استقراضی به هر میزان و در همه شرایط ممکن نباشد. بنابراین اگر این نکته را لحاظ نکنیم نتایج تست دارای اشتباه خواهد بود.
در پایان توجه داشته باشید که تست کردن یک چیز قبل از استفاده از آن امر مهمی است اما به شرطی که تست درست انجام شود که نتایج گمراهکننده به بار نیاورد. تصمیمگیری بدون اطلاعات از تصمیمگیری بر مبنای اطلاعات غلط بهتر است.
در حال حاضر امکان بک تست از ۱۱ استراتژی در چهار بازه زمانی در اپلیکیشن نماد من برای تمام سهمها و چند ارز دیجیتال فراهم شده است که به آسانی می توانید از آن استفاده کرده و پارامترهای بهینه برای هر یک از استراتژیها را نیز مشاهده کنید.
روش بک تست (تست در گذشته) تست استراتژی معاملاتی در متا تریدر 5
یکی از کارهای بسیار مهم در آموزش اکسپرت نویسی تست استراتژی در گذشته بازار بهمنظور بررسی رفتار استراتژی در گذشته است. به همین منظور در این مقاله به روش بک تست گیری در متا تریدر 5 و توضیح پارامترهای آن میپردازم.
تصویر زیر عکس استراتژی تستر در متا تریدر 5 است.
برای آن که بدانید معاملات الگوریتمی چیست باید با قسمتهای مختلف آن که به شرح زیر می باشد آشنا شوید
در این قسمت، اکسپرت معاملاتی خود را که قرار است آن را در تست استراتژی معاملاتی گذشته بهینهسازی کنیم را انتخاب میکنیم.
نام نمادی را انتخاب میکنیم که میخواهیم اکسپرت در گذشته آن نماد (محصول) تست را انجام دهد.
تایم فریم معاملاتی خود را انتخاب میکنیم.
بازه زمانی که میخواهیم بک تست خود را در آن انجان دهیم انتخاب میکنیم.
در بکتست، فرض بر این بود که اطلاعات گذشته بازار را در اختیار داریم؛ ولی در فوروارد تست موضوع متفاوت است.
در فوروارد تست، ابتدا بازه زمانی تست خود را به دو قسمت تقسیم میکنیم که لزوماً مساوی نیستند؛ سپس، استراتژی خود را در قسمت اول بازه زمانی تست میکنیم و پارامترهای بهینه را به دست میآوریم. حال، با همان پارامترهای بهدستآمده، در قسمت دوم معامله میکنیم و نتیجه را با خروجی قسمت اول مقایسه میکنیم. در حقیقت، هنگامیکه استراتژی را در قسمت دوم بررسی میکنیم، فرض بر این است که از آینده خبر نداریم و با توجه به اطلاعات بهدستآمده تست استراتژی معاملاتی در گذشته، در آینده معامله میکنیم.
• استراتژی تستر به شما این امکان را میدهد که در back test زمانی برحسب میلیثانیه برای تأخیر تعریف کنید.
• در شرایط واقعی بین زمانی که شما دستور خرید یا فروش یا بستن معامله را ایجاد میکنید و زمان اجرای آن روی سرور کارگزاری، فاصله زمانی وجود دارد. در استراتژی تستر شما این امکان را دارید که این زمان را برحسب میلیثانیه وارد کنید.
• در طول زمانی که شما دستوری را برای سرور میفرستید تا زمانی که سرور آن را دریافت میکند ممکن است تغییری در قیمت به وجود بیاید. ازآنجاکه ما اکسپرت را در بدبینانهترین شرایط تست میکنیم پسازاین پارامتر همیشه استفاده کنید.
• توصیه من گزینه ping است (گزینه دوم) در این گزینه خود استراتژی تستر، فاصله زمانی سرور تا کامپیوتر شمارا برحسب میلیثانیه حساب میکند.
• اگر در کد نویسی خود از دستور ORDER_FILLING_FOK استفاده کرده باشید میتوانید تا حدی از delay صرفنظر کنید ولی بازهم توصیه من استفاده از آن است.
چهار حالت مدلینگ داده داریم:
هر زمان که معاملهای بین خریدار و فروشنده در بازار انجام میشود، یک تیک معاملاتی به وجود میآید و اگر حالت مدلینگ را بر روی این گزینه قرار دهیم، استراتژی تستر با هر تیک به بررسی شرایط بازار میپردازد.
2. Every tick based on real ticks
این حالت بسیار شبیه حالت واقعی بازار است ولی نسبت به حالات دیگر کندتر است و همچنین حجم اطلاعات بیشتری را نیز در حافظه اشغال میکند.
3. 1 minute OHLC
در این حالت استراتژی تستر در open, high,low,close کندل یک دقیقه به بررسی شرایط بازار میپردازد.
4. Open price only
در این حالت تنها در open کندل در تایم فریم مشخصشده به بررسی شرایط بازار میپردازد.
5. Math calculation
این حالت برای برنامههای هستند که در آنها از توابع ریاضی مانند سینوس، کسینوس و . استفادهشده است.
محدودیتهای استفاده از open price only
• شما نمیتوانید از Random delay استفاده کنید.
• شما نمیتوانید به دیتای تایم فریمهای پایینتر از تایم فریم معاملاتی خود دسترسی داشته باشید. مثلاً روی h1 تست میگیرید، میتوانید به دیتای تایمهای h2,h3وh4 به بالا دسترسی داشته باشید
• در ضمن تایم فریمهای بالاتری که دسترسی دارید حتماً باید ضریب صحیحی از تایم فریم اصلی باشند. مثلاً اگر تایم فریم اصلی شما m20 است، به دیتای تایم فریم m30 دسترسی ندارید ولی به h1 دسترسی دارید.
• اگر در اکسپرت خود با بیش از 1 محصول مانند آتی زعفران کار میکنید، اکسپرت به تایم فریمها و ضرایب صحیح از آنها دسترسی دارد که اولین بار از آنها استفاده میکند.
مثلاً اگر در اکسپرت اولین بار در محصول EURUSD با تایم h1 کارکنید و در همان اکسپرت در GBPUSD با تایم h4 کارکنید، در محصول EURUSD به تایمهای h1,h2,h3,… دسترسی دارید و در محصول GBPUSD به تایمهای h4,h8,h12,…
• درصورتیکه از Open Price Only استفاده کنید، اکسپرت فقط در لحظه باز شدن کندل (تایم فریم مورداستفاده اکسپرت) به بررسی شرایط میپردازد و مانند حالت OHLC ممکن است دستورهای شرطی و TP و SL در قیمتهای متفاوتی ازآنچه شما مشخص کردهاید، اجرا شود. همچنین در remove کردن دستورهای شرطی به مشکل برمیخورد.
• در تایم فریمهای w1 و mn1، در ابتدای کندل D1 به بررسی شرایط میپردازد
• 1 minute OHLC از every tick بسیار سریعتر است ولی دقت داشته باشید که قیمت فقط در OHLC کندل 1 دقیقه بررسی میشود و ممکن است دستورات شرطی و TP و SL شما در قیمتهای متفاوتی انجام شوند و این دقت back test را پایین میآورد
میزان پولی که اکسپرت با آن در گذشته بازار بک تست میگیرد.
میزان اهرمی که حساب شما برای بک تست از آن استفاده میکند. اهرم معاملاتی به ضریبی گفته میشود که کارگزاری بهعنوان اعتبار به شما میدهد. بهعنوانمثال اگر leverage=100 باشد یعنی شما میتوانید 100 برابر موجودی حساب خود معامله کنید.
درصورتیکه بخواهید همزمان با بکتست، بهینهسازی را نیز انجام دهید از این گزینه استفاده میکنید. این گزینه 4 حالت برای انتخاب دارد:
1. Slow Complete Algorithm
وقتی انتخاب را بر روی این گزینه قرار میدهیم، استراتژی تستر به ما اجازه میدهد تا بتوانیم پارامترهای ورودی را بهصورت بازهای از مقادیر، مقداردهی کنیم. این حالت، تمام حالات به وجود آمده از تغییرات ورودی را در گذشته تست میکند و نتیجه آن را در برگه Optimization Results به ما نشان میدهد.
2. Fast Genetic Based Algorithm
این گزینه مانند گزینه بالا است با این تفاوت که با استفاده از الگوریتم ژنتیک به انتخاب حالت بهینه میپردازد و تنها میتواند 10 هزار حالت را بررسی کند.
3. All Symbols Selected In Market Watch
با انتخاب این گزینه، استراتژی ما بر روی تمام محصولهای قابلنمایش در market watch اجرا میشود و نتیجه آن در برگه Optimization Results نمایش داده میشود.
با انتخاب این گزینه اجرای استراتژی بهصورت visual و در پنجره جدید به شما نمایش داده میشود و شما این امکان را دارید که بهصورت کامل از عملکرد اکسپرت خود مطلع شوید.
** این محتوا صرفا جنبه تبلیغاتی دارد و توسط سفارش دهنده آن تهیه و تنظیم شده است