شبیهسازی بکتست استراتژیهای معاملاتی در پایناسکریپت
توسعه ابزار اختصاصی برای شبیهسازی معاملات و ارزیابی عملکرد ایدههای معاملاتی
یکی از قابلیتهای مهم پایناسکریپت و پلتفرم تریدینگویو، امکان توسعه و بکتستگیری از استراتژیهای معاملاتی است. با این حال، Strategy Engine تریدینگویو در برخی سناریوهای معاملاتی محدودیتهایی دارد که میتواند پیادهسازی یا ارزیابی برخی ایدههای پیچیده را دشوار کند.
در پروژههایی که ساختار معاملاتی موردنظر فراتر از یک استراتژی استاندارد باشد، استفاده از یک اندیکاتور اختصاصی برای شبیهسازی معاملات میتواند راهکار مناسبتری باشد.
در این پروژه، یک سیستم اختصاصی در پایناسکریپت توسعه داده شد که بهجای استفاده مستقیم از سیستم سفارشگذاری استراتژی، فرآیند ورود، خروج و مدیریت معاملات را بهصورت داخلی شبیهسازی میکند و نتیجه معاملات را برای بررسی و ارزیابی روی نمودار در قالب یک جدول نمایش میدهد. بر اساس خواسته کارفرما، امکان باز بودن چند معامله buy و sell به صورت همزمان وجود داشت، که به همین دلیل نوشتن strategy معمولی در پایناسکریپت مقدور نبود و تمام استراتژی در قالب یک اندیکاتور شبیهسازی گردید.
توجه: به دلیل ماهیت اختصاصی پروژه، جزئیات مربوط به منطق معاملاتی، شرایط ورود و خروج و سایر بخشهای استراتژی در این نمونهکار ارائه نمیشود. آنچه در این صفحه معرفی شده، صرفاً قابلیتها و ساختار فنی پروژه است.
چرا شبیهسازی معاملات؟
در حالت عادی، یک استراتژی در تریدینگویو بر اساس منطق داخلی Strategy Engine عمل میکند. این ساختار برای بسیاری از استراتژیهای متداول کاملاً مناسب است، اما زمانی که ایده معاملاتی دارای ساختارهای خاصتری باشد، ممکن است محدودیتهای آن نمایان شود.
برای مثال، در یک استراتژی معمولی، مدیریت همزمان موقعیتهای Long و Short در یک نماد مانند یک سیستم Hedge مستقل امکانپذیر نیست. همچنین سفارشهای واقعی یک استراتژی در نهایت بر اساس نماد و چارت مربوط به همان اسکریپت مدیریت میشوند و استفاده از دادههای چند نماد یا چند تایمفریم، نیازمند طراحی و مدیریت جداگانه دادهها و منطق معاملاتی است.
از طرف دیگر، در برخی پروژهها هدف تنها بررسی یک استراتژی منفرد نیست؛ بلکه لازم است چند مجموعه منطق معاملاتی، سیگنال یا سیستم مستقل در کنار یکدیگر قرار گرفته و عملکرد آنها بهصورت همزمان مورد بررسی قرار گیرد.
در چنین شرایطی، میتوان بهجای وابستگی کامل به سیستم سفارشگذاری Strategy، فرآیند معاملات را در کدنویسی اندیکاتور شبیهسازی کرد.
این رویکرد انعطاف بسیار بیشتری برای طراحی ساختار بکتست ایجاد میکند.
ساخت یک سیستم معاملاتی شبیهسازیشده
در این پروژه، منطق اصلی معاملات بهصورت مستقیم در قالب یک استراتژی معمولی پیادهسازی نشد.
در عوض، یک Indicator اختصاصی توسعه داده شد که رفتار معاملات را در هر کندل بررسی کرده و بر اساس شرایط تعریفشده، وضعیت معاملات را بهصورت داخلی مدیریت میکند.
به این ترتیب، سیستم میتواند یک یا چند موقعیت معاملاتی را در طول تاریخ نمودار ایجاد، مدیریت و بستهشدن آنها را شبیهسازی کند.
در واقع، بهجای آنکه تریدینگویو مسئول ثبت و مدیریت سفارشها باشد، این فرآیند در داخل اسکریپت کنترل میشود.
این ساختار امکان پیادهسازی سناریوهایی را فراهم میکند که ممکن است با مدل استاندارد Strategy بهسادگی قابل اجرا نباشند.
شبیهسازی ورود و خروج
یکی از بخشهای اصلی پروژه، شبیهسازی کامل چرخه عمر معاملات بود.
سیستم میتواند بر اساس منطق تعریفشده:
- شرایط ورود را بررسی کند؛
- معاملات Long و Short را بهصورت مستقل مدیریت کند؛
- زمان و قیمت ورود را ثبت کند؛
- شرایط خروج را بررسی کند؛
- معاملات باز را در طول بکتست مدیریت کند؛
- معاملات بستهشده را ثبت و محاسبه کند؛
- سود و زیان هر معامله را محاسبه کند؛
- چند استراتژی با مدیریت سرمایه متفاوت رو به صورت همزمان و موازی در نظر بگیرد؛
- و در نهایت مجموعهای از آمار عملکرد را ارائه دهد.

در نتیجه، چیزی که روی نمودار مشاهده میشود صرفاً تعدادی سیگنال خرید و فروش نیست؛ بلکه یک سیستم شبیهسازی معاملات است که وضعیت معاملات را در طول تاریخ نمودار دنبال میکند.
مدیریت همزمان موقعیتهای مختلف
یکی از مزیتهای اصلی این روش، آزادی بیشتر در تعریف ساختار معاملات است.
در یک سیستم شبیهسازیشده میتوان منطق مدیریت موقعیتها را مستقل از محدودیتهای معمول Strategy طراحی کرد.
برای مثال، ساختار پروژه میتواند برای سناریوهایی که نیاز به بررسی همزمان موقعیتهای مختلف دارند، انعطاف بیشتری داشته باشد.
همچنین در پروژههای پیچیدهتر، میتوان چند منطق یا سیستم معاملاتی را در یک ساختار واحد قرار داد و وضعیت خروجی هرکدام را بهصورت مستقل مدیریت کرد.
این قابلیت بهخصوص زمانی اهمیت پیدا میکند که هدف، بررسی عملکرد ترکیبی از چند ایده یا چند سیستم معاملاتی باشد.
بررسی دادههای چند نماد و چند تایمفریم
یکی دیگر از نیازهای متداول در پروژههای معاملاتی، استفاده همزمان از اطلاعات مربوط به تایمفریمها یا نمادهای مختلف است.
در پایناسکریپت امکان دریافت دادههای بازار از نمادها و تایمفریمهای دیگر وجود دارد؛ اما زمانی که این دادهها قرار است در یک ساختار معاملاتی پیچیده مورد استفاده قرار گیرند و ورودها محدود به نماد و تایمفریم چارت نباشد، مدیریت منطق ورود، خروج و وضعیت معاملات نیازمند طراحی دقیقتری است.
در این پروژه، ساختار شبیهسازی بهگونهای طراحی شد که منطق معاملاتی بتواند از دادههای موردنیاز خود استفاده کرده و نتیجه را در قالب یک سیستم یکپارچه محاسبه کند.
بنابراین تمرکز پروژه تنها بر تولید سیگنال نبود؛ بلکه هدف، ایجاد یک محیط قابلکنترل برای ارزیابی رفتار معاملاتی در طول تاریخ بازار بود.
تلفیق چند منطق معاملاتی
در برخی پروژهها، یک سیستم معاملاتی از چند بخش مستقل تشکیل میشود.
ممکن است هر بخش منطق، شرایط یا رفتار معاملاتی متفاوتی داشته باشد و لازم باشد عملکرد آنها در کنار یکدیگر بررسی شود.
در چنین شرایطی، میتوان بهجای اجرای چند استراتژی مستقل، منطقهای مختلف را در یک ساختار شبیهسازیشده تلفیق کرد.
هر بخش میتواند سیگنالهای خود را تولید کند و سیستم مرکزی وظیفه مدیریت وضعیت معاملات و محاسبه نتایج را بر عهده داشته باشد.
این معماری، امکان ایجاد ساختارهایی انعطافپذیرتر برای بکتست ایدههای معاملاتی پیچیده را فراهم میکند.
در این پروژه، ورود و خروجهای مستقل بر اساس موجهای اصلی و ریزموجها به صورت موازی در کدها اعمال شدهاند.
نمایش نتایج روی نمودار
یکی از اهداف مهم پروژه، ارائه نتایج به شکلی بود که کاربر بتواند عملکرد سیستم را مستقیماً روی نمودار بررسی کند.
به همین دلیل، اطلاعات حاصل از فرآیند شبیهسازی در قالب یک پنل آماری روی چارت نمایش داده میشوند.
بسته به ساختار پروژه، این اطلاعات میتوانند شامل مواردی مانند موارد زیر باشند:
- تعداد معاملات؛
- تعداد معاملات باز؛
- تعداد معاملات بستهشده؛
- تعداد معاملات موفق و ناموفق؛
- سود و زیان کلی؛
- سود و زیان معاملات؛
- وضعیت فعلی معاملات؛
- و سایر شاخصهای موردنیاز برای ارزیابی عملکرد.
به این ترتیب، کاربر میتواند بدون نیاز به خروجی گرفتن از اطلاعات یا بررسی دستی معاملات، نتیجه کلی سیستم را مستقیماً روی نمودار مشاهده کند.
نمایش معاملات روی چارت
علاوه بر جدول آماری، معاملات شبیهسازیشده میتوانند روی نمودار نیز نمایش داده شوند.
نقاط ورود و خروج، جهت معاملات و سایر اطلاعات بصری موردنیاز، در محل مربوط به خود روی نمودار قرار میگیرند تا امکان بررسی دقیق رفتار سیستم در طول تاریخ فراهم شود.
این قابلیت به کاربر اجازه میدهد علاوه بر مشاهده نتیجه نهایی، مسیر رسیدن سیستم به آن نتیجه را نیز بررسی کند.
به عبارت دیگر، هدف فقط پاسخ به این سؤال نیست که «این ایده چقدر سود کرده است؟»، بلکه امکان بررسی این موضوع نیز وجود دارد که:
«این سیستم در طول مسیر چگونه معامله کرده است؟»
نتیجه پروژه
خروجی نهایی، یک ابزار اختصاصی برای شبیهسازی و ارزیابی عملکرد یک ساختار معاملاتی در تریدینگویو بود که بدون وابستگی مستقیم به محدودیتهای سیستم سفارشگذاری استاندارد Strategy، امکان مدیریت و محاسبه معاملات را در سطح اسکریپت فراهم میکند.
این نوع ابزار میتواند برای ایدههایی که ساختار معاملاتی آنها با بکتست استاندارد تریدینگویو بهسادگی قابل پیادهسازی نیست، راهکاری انعطافپذیر ارائه دهد.
مهمترین بخش این پروژه، نه ظاهر ابزار، بلکه طراحی منطق داخلی برای ثبت، مدیریت و محاسبه معاملات و تبدیل یک ایده معاملاتی به یک محیط قابلبررسی و قابلاندازهگیری بود.
دیگر مشخصههای این پروژه
ارسال آلرتهای ورود و خروج معاملات با فرمت استاندارد
قابلیت تعیین بازه زمانی بکتست
قابلیت فعال/غیرفعالسازی هر یک از استراتژیها که به صورت موازی در کد اعمال شدهاند
دور زدن محدودیت تعداد آلرت (در تریدینگیو هر اندیکاتور در هر 3 دقیقه، میتواند حداکثر 15 آلرت ارسال کند)
حفظ محرمانگی پروژه
این پروژه بر اساس ایده و نیازمندیهای اختصاصی مشتری توسعه داده شده است. از آنجا که ایدههای معاملاتی، استراتژیها و منطق ورود و خروج میتوانند بخش مهمی از دارایی فکری صاحب پروژه باشند، جزئیات مربوط به منطق معاملاتی این پروژه در این نمونهکار منتشر نشده است.
آنچه در این صفحه مشاهده میکنید، صرفاً معرفی راهکار فنی، قابلیتهای پیادهسازی و ساختار کلی ابزار است و هیچیک از اطلاعاتی که بتواند ایده یا استراتژی اختصاصی مشتری را بازسازی یا افشا کند، ارائه نشده است.
حفظ محرمانگی ایدههای مشتریان، بخشی جداییناپذیر از همکاری ماست.