طراحی پنل مدیریت معاملات برای اکسپرت متاتریدر
مقدمه
در بسیاری از پروژههای توسعه اکسپرت برای متاتریدر، صرفاً پیادهسازی منطق ورود و خروج معاملات کافی نیست. زمانی که یک اکسپرت قرار است در شرایط واقعی بازار مورد استفاده قرار گیرد، نحوه تعامل کاربر با اکسپرت، مدیریت تنظیمات و کنترل معاملات نیز اهمیت بسیار زیادی پیدا میکند.
در یکی از پروژههای سفارشی، هدف طراحی و توسعه یک پنل مدیریت معاملات روی چارت بود؛ پنلی که کاربر بتواند بخش قابل توجهی از عملکرد اکسپرت و مدیریت معاملات را بدون نیاز به مراجعه مداوم به پنجره تنظیمات کنترل کند.
این پروژه از نظر ظاهری ممکن است در نگاه اول یک پنل معاملاتی معمولی به نظر برسد، اما چالش اصلی در بخش پشتصحنه و نحوه مدیریت همزمان تنظیمات، معاملات و وضعیت اکسپرت قرار داشت.
از آنجا که این پروژه بر اساس نیازهای اختصاصی مشتری طراحی شده بود، جزئیات مربوط به منطق معاملاتی و استراتژی استفادهشده در آن قابل انتشار نیست. در این نمونهکار، صرفاً روی چالشهای فنی و راهکارهای توسعه تمرکز میکنیم.
یک پنل، برای کنترل بخشهای مختلف اکسپرت
پنل طراحیشده به کاربر اجازه میداد بدون خروج از محیط چارت، بخشهای مختلف سیستم را کنترل کند.
از جمله قابلیتهای اصلی میتوان به موارد زیر اشاره کرد:
- فعال یا غیرفعال کردن اکسپرت
- ورود دستی به معاملات
- مدیریت پارامترهای مربوط به حجم معاملات
- انتخاب روش محاسبه حجم
- تعیین نحوه محاسبه حد سود و حد ضرر
- فعال یا غیرفعال کردن قابلیت ریسکفری
- فعال یا غیرفعال کردن تریلینگ
- تغییر پارامترهای مربوط به مدیریت معاملات
- نمایش یا مخفی کردن پنل از روی چارت
نکته مهم این بود که این گزینهها صرفاً برای نمایش در پنل طراحی نشده بودند؛ بلکه باید با ساختار داخلی اکسپرت ارتباط مستقیم داشته و تغییرات کاربر را در عملکرد واقعی سیستم اعمال میکردند.
در نتیجه، پنل عملاً به یک رابط کاربری کامل برای کنترل اکسپرت تبدیل شد.
چالش اصلی؛ هماهنگی پنل و تنظیمات اکسپرت
یکی از مهمترین چالشهای این پروژه زمانی ایجاد میشود که یک پارامتر هم از طریق پنجره تنظیمات اکسپرت و هم از طریق پنل روی چارت قابل تغییر باشد.
برای مثال، فرض کنید کاربر مقدار یک پارامتر را در پنل تغییر میدهد. این تغییر باید در عملکرد اکسپرت اعمال شود؛ اما مقدار تعریفشده در ورودیهای اولیه اکسپرت همچنان مقدار قبلی است.
این موضوع زمانی اهمیت بیشتری پیدا میکند که کاربر:
- نماد معاملاتی را تغییر دهد،
- تایمفریم چارت را تغییر دهد،
- اکسپرت را مجدداً روی چارت اجرا کند،
- یا چند نمونه از اکسپرت را به صورت همزمان روی چند چارت فعال داشته باشد.
اگر معماری مناسبی برای مدیریت این وضعیت در نظر گرفته نشود، امکان بازنویسی ناخواسته تنظیمات وجود دارد؛ به این معنی که مقدار جدیدی که کاربر از طریق پنل تعیین کرده، با تغییر وضعیت چارت دوباره با مقدار اولیه جایگزین شود.
بنابراین لازم بود مقادیر فعلی و قابل تغییر سیستم از ورودیهای اولیه اکسپرت مستقل شوند.
استفاده از متغیرهای Global برای مدیریت وضعیت
راهکار اصلی در این پروژه، ایجاد یک لایه مستقل برای نگهداری وضعیت فعلی پارامترها بود.
به جای اینکه منطق داخلی اکسپرت مستقیماً به مقادیر اولیه ورودیها وابسته باشد، برای پارامترهای قابل تغییر، متغیرهای مستقل در نظر گرفته شد.
به این ترتیب:
Input Parameters → مقدار اولیه
و
Runtime Variables → مقدار فعلی مورد استفاده اکسپرت
در زمان اجرای اکسپرت، مقادیر اولیه میتوانند به عنوان نقطه شروع مورد استفاده قرار گیرند؛ اما پس از آن، تغییرات انجامشده از طریق پنل در متغیرهای مربوط به وضعیت جاری ذخیره میشوند.
این معماری باعث میشود تغییر یک پارامتر در پنل، صرفاً یک تغییر ظاهری در رابط کاربری نباشد، بلکه به عنوان وضعیت جدید سیستم در نظر گرفته شود.
مدیریت همزمان چند نمونه از اکسپرت
یک چالش مهم دیگر، اجرای همزمان اکسپرت روی چند چارت بود.
فرض کنید یک اکسپرت روی چند نماد یا چند پنجره مختلف فعال باشد. اگر پارامترها بدون در نظر گرفتن شناسه مناسب در متغیرهای Global ذخیره شوند، نمونههای مختلف اکسپرت ممکن است به اطلاعات یکدیگر دسترسی پیدا کنند.
در چنین شرایطی تغییر یک پارامتر در یک چارت میتواند روی نمونه دیگری از اکسپرت نیز اثر بگذارد.
برای جلوگیری از این مشکل، ساختار نامگذاری و شناسهگذاری متغیرها باید به شکلی طراحی شود که هر نمونه از اکسپرت فضای مستقل خود را برای نگهداری وضعیت داشته باشد.
این موضوع خصوصاً در پروژههایی که امکان اجرای همزمان چند Instance از یک اکسپرت وجود دارد، اهمیت زیادی دارد.
در طراحی این بخش، علاوه بر مقدار پارامتر، شناسه مربوط به Instance نیز در معماری ذخیرهسازی مورد توجه قرار گرفت تا اطلاعات نمونههای مختلف با یکدیگر تداخل نداشته باشند.
مدیریت انواع مختلف پارامترها در پنل
یکی دیگر از چالشهای قابل توجه پروژه، تنوع زیاد نوع پارامترها بود.
در یک اکسپرت حرفهای، همه تنظیمات از یک نوع نیستند. ممکن است یک گزینه به صورت Boolean باشد، گزینه دیگر عدد اعشاری، گزینهای دیگر عدد صحیح یا تایمفریم و برخی پارامترها نیز از میان چند حالت مختلف انتخاب شوند.
برای مثال، روش تعیین حد سود میتواند بر اساس یکی از چند مدل مختلف تعریف شود؛ بدون اینکه وارد منطق اختصاصی پروژه شویم، این حالتها میتوانند شامل مواردی مانند:
- Point
- Pip
- Percentage
- Risk/Reward
- Monetary Value
- روشهای مبتنی بر دادههای گذشته بازار
باشند.
بنابراین طراحی پنل صرفاً به ایجاد چند فیلد عددی محدود نمیشود.
رابط کاربری باید بتواند نوع پارامتر، مقدار آن و رابطه میان گزینههای مختلف را نیز مدیریت کند.
برای نمونه، زمانی که کاربر یک روش محاسبه را انتخاب میکند، ممکن است ورودیهای مرتبط با همان روش فعال شوند و سایر گزینهها غیرفعال یا مخفی شوند.
این موضوع باعث میشود پنل هم از نظر ظاهری سادهتر باشد و هم احتمال ورود تنظیمات نامعتبر کاهش پیدا کند.
تبدیل و ذخیره انواع مختلف داده
از دیگر مسائل فنی پروژه، نحوه ذخیرهسازی پارامترهایی با انواع داده متفاوت بود.
متغیرهای Global در متاتریدر برای ذخیرهسازی مقادیر عددی طراحی شدهاند و در نتیجه، زمانی که لازم است اطلاعاتی مانند Boolean، حالت انتخابشده یک گزینه، تایمفریم یا سایر انواع داده در آنها ذخیره شود، نمیتوان مقدار را بدون در نظر گرفتن نوع داده به همان شکل اولیه ذخیره کرد.
برای حل این مسئله، از یک لایه تبدیل و رمزگذاری مقادیر استفاده شد تا انواع مختلف داده بتوانند به شکل مناسب در فضای ذخیرهسازی قرار گرفته و هنگام بازیابی نیز دوباره به نوع اصلی خود تبدیل شوند.
به این ترتیب، پنل میتواند با انواع مختلف پارامترها کار کند، در حالی که سیستم مدیریت وضعیت در پشت صحنه ساختاری یکپارچه دارد.
طراحی رابط کاربری در کنار معماری نرمافزار
در پروژههایی از این جنس، ظاهر پنل تنها بخشی از کار است.
ممکن است طراحی چند دکمه، فیلد عددی و منوی انتخابی از نظر ظاهری ساده به نظر برسد، اما زمانی که تعداد پارامترها افزایش پیدا میکند، مدیریت فضای محدود چارت، وضعیت دکمهها، فعال و غیرفعال شدن گزینهها و نمایش اطلاعات مرتبط به یک چالش جدی تبدیل میشود.
به همین دلیل در این پروژه، طراحی پنل از ابتدا با در نظر گرفتن ساختار داخلی اکسپرت انجام شد.
هر بخش از رابط کاربری باید بتواند:
- مقدار فعلی را نمایش دهد؛
- تغییر کاربر را دریافت کند؛
- مقدار جدید را اعتبارسنجی کند؛
- وضعیت داخلی اکسپرت را بهروزرسانی کند؛
- و در صورت نیاز، سایر بخشهای پنل را نیز متناسب با تغییر جدید بهروزرسانی کند.
در عین حال، امکان مخفی کردن کامل پنل نیز در نظر گرفته شد تا کاربر بتواند در مواقعی که به کنترلهای پنل نیاز ندارد، فضای بیشتری از چارت را در اختیار داشته باشد.
نتیجه پروژه
خروجی نهایی، یک اکسپرت با رابط کاربری تعاملی و سیستم مدیریت وضعیت مستقل بود که کاربر میتوانست بخش مهمی از تنظیمات و مدیریت معاملات را مستقیماً از روی چارت کنترل کند.
مهمترین بخش پروژه، نه صرفاً طراحی ظاهری پنل، بلکه ایجاد ارتباط صحیح میان سه لایه مختلف بود:
تنظیمات اولیه اکسپرت
↓
وضعیت فعلی و متغیرهای اجرایی
↓
رابط کاربری روی چارت
این ساختار کمک میکند تغییرات کاربر از طریق پنل به شکل پایدار مدیریت شوند و تغییر نماد، تایمفریم یا اجرای همزمان چند نمونه از اکسپرت باعث ایجاد تداخل یا بازنشانی ناخواسته تنظیمات نشود.
این پروژه نمونهای از مسائلی است که در توسعه ابزارهای معاملاتی سفارشی، معماری صحیح نرمافزار و مدیریت وضعیت به اندازه پیادهسازی منطق اصلی اهمیت پیدا میکند.
با توجه به ماهیت اختصاصی پروژه، جزئیات مربوط به استراتژی معاملاتی، منطق تصمیمگیری و سایر بخشهای محرمانه سیستم در این نمونهکار ارائه نشده است؛ تمرکز این مطلب صرفاً بر چالشهای فنی طراحی و پیادهسازی یک پنل مدیریت معاملات حرفهای برای اکسپرت متاتریدر است.