01 / شرح پروژه
مسئله چه بود؟
مسئله اصلی، وابستگی راهکارهای کپیتریدینگ مبتنی بر ترمینال متاتریدر به یک کامپیوتر یا سرور همیشهروشن بود. برای ادامه کپی معاملات، باید متاتریدر و ربات کپی روی آن دستگاه فعال بمانند؛ خاموششدن دستگاه یا قطع اتصال آن میتواند فرایند کپی را متوقف کند. این وابستگی، هزینه تهیه و نگهداری VPS و راهاندازی و مراقبت از ترمینال را به کاربر تحمیل میکند. هدف این پروژه، انتقال عملیات کپی به یک سرویس ابری با اتصال مستقیم به بروکر بود تا کاربر برای کپی معاملات به روشن نگهداشتن دستگاه یا اجرای متاتریدر نیاز نداشته باشد. در کنار این مسئله، سرمایه، نوع حساب و تحمل ریسک مشترکها متفاوت است؛ بنابراین هر معامله باید پیش از اجرا با قواعد همان حساب، از میزان ریسک تا شرط وجود حد ضرر، بررسی شود.
نقش من در پروژه
برنامهنویس اصلی این پروژه بودم و کل سیستم را با C# و ASP.NET Core توسعه دادم؛ شامل اتصال مستقیم به بروکر، مسیر اتصال تریدرها و رباتها، اشتراک مشترکها و منطق کپی معاملات با تنظیمات مستقل حساب. موتور کپی روی MQL و اجرای اکسپرت داخل متاتریدر بنا نشده است؛ پردازش و اجرای سرویس در بستر ابری انجام میشود و نیازی به نصب متاتریدر روی سرور ندارد. برای حفظ محرمانگی، نام و اطلاعات شناسایی پروژه منتشر نشدهاند.
تریدر، ربات و مدل اشتراک
اتصال ارائهدهنده معاملات
تریدرها و صاحبان ربات، اطلاعات اتصال حساب یا ربات خود را به سیستم معرفی میکنند تا معاملات آنها بهعنوان منبع کپی در اختیار سرویس قرار بگیرد.
اشتراک در منبع انتخابشده
کاربران میتوانند اشتراک تهیه کنند و به تریدر یا ربات موردنظر متصل شوند. کپی معاملات برای حساب آنها بر اساس تنظیمات شخصی خودشان انجام میشود.
استقلال تنظیمات مشترکها
انتخاب یک منبع مشترک به معنی اجرای یکسان برای همه نیست؛ هر حساب میتواند قواعد متفاوتی برای پذیرش معامله و میزان ریسک داشته باشد.
کنترل ریسک پیش از ورود
کپی معامله پس از بررسی قواعد همان مشترک انجام میشود؛ وجود یک معامله در حساب مبدأ، بهتنهایی شرط ورود همه حسابها نیست.
میزان ریسک سرمایه
تعیین میزان ریسک قابل پذیرش از سرمایه حساب؛ برای هماهنگکردن اندازه ورود با تنظیمات مشترک، بهجای تکرار یک حجم ثابت در همه حسابها.
نوع حساب و حجم معامله
درنظرگرفتن نوع حساب و تنظیم اندازه معامله برای حساب مقصد. تصاویر نمونه، اجرای معاملات در حسابهای ECN و Standard و حجمهای متفاوت را نشان میدهند.
حد ضرر و اندازه آن
تنظیم قواعد مربوط به Stop Loss و اندازه حد ضرر؛ از جمله شرط عدم ورود به پوزیشنهایی که حد ضرر ندارند.
فیلتر موقعیتهای قابل پذیرش
محدودکردن ورود به موقعیتهایی که با معیارهای انتخابی مشترک سازگارند؛ منظور از موقعیت مناسب، تطابق با قواعد اوست و به معنی تضمین سود نیست.
اتصال مستقیم و اجرای ابری
ارتباط با خود بروکر
سرویس مستقیماً به بروکر متصل میشود و ارتباط حسابها و اجرای عملیات معاملاتی را از این مسیر مدیریت میکند.
موتور مستقل از MQL
منطق کپی و کنترل ریسک با C# و .NET Core پیادهسازی شده است؛ موتور سیستم به اجرای کد MQL داخل ترمینال متاتریدر متکی نیست.
بدون ترمینال روی سرور
نیازی به نصب و راهاندازی متاتریدر روی سرور نیست. اجرای سرویس و پردازش معاملات در بستر ابری انجام میشود.
زیرساخت فنی سرویس
نمونههای سورس ارائهشده، لایه اتصال و اجرای سفارش و یک نمونه صف پردازش پسزمینه را نشان میدهند.
اتصال چند حساب در C#
در نمونه اتصال، برای هر حساب یک کلاینت API ساخته میشود؛ سپس اتصال به بروکر و خواندن موجودی حساب انجام میگیرد. این بخش از کتابخانه ارتباط با MT5 استفاده میکند.
قیمت و ارسال سفارش
دریافت Quote نماد و استفاده از قیمت Ask برای ارسال سفارش خرید؛ نمونه سورس، دریافت نتیجه سفارش و استفاده از سیاست اجرای Immediate Or Cancel را نیز نشان میدهد.
صف پردازش پسزمینه
نمونه زیرساخت، از ConcurrentQueue برای صف وظایف، SemaphoreSlim برای محدودکردن تعداد اجراهای همزمان و BackgroundService برای پردازش کارها استفاده میکند.
میزبانی سرویس و چرخه اجرا
ساخت Host در .NET، ثبت سرویس پسزمینه در Dependency Injection و انتقال CancellationToken به وظایف در نمونه دیده میشود؛ برای اجرای منطق پردازش در قالب سرویس مستقل.
خروجیهای اجرایی و پیگیری معاملات
زمان و حجم ثبت معامله
نمونههای ارائهشده امکان مقایسه زمان ثبت و حجم سفارش در دو حساب را نشان میدهند؛ از جمله اجرای یک معامله با حجم متفاوت در حسابهای مختلف.
خواندن سابقه حساب
خروجی نمونه سرویس، خواندن سابقه معاملات و نمایش اطلاعات معامله و نتیجه آن را نشان میدهد.
پاسخ عملیات
در خروجی اجرایی، نتیجه بازشدن سفارش و پاسخهایی مانند بستهبودن بازار دیده میشوند؛ این اطلاعات برای مشاهده نتیجه درخواست معاملاتی در اختیار سرویس هستند.