کپی تریدر یک اکسپرت پیشرفته برای MetaTrader 5 است که به شما امکان میدهد معاملات یک حساب معاملاتی را به صورت خودکار روی حساب دیگر کپی کنید. این ربات با مدیریت دقیق سیگنالها و کنترل پوزیشنها، روند معاملات شما را بهینه میکند و از اشتباهات انسانی جلوگیری میکند. در ادامه، عملکرد دقیق این ربات را به شکل ساده و قابل فهم توضیح میدهیم.
راهاندازی ربات – OnInit()
زمانی که اکسپرت فعال میشود، ابتدا فرآیند راهاندازی اولیه انجام میشود. در این مرحله، ربات پایگاه داده خود را ایجاد یا باز میکند و زیرساخت مدیریت سیگنالها را آماده میسازد.
ایجاد پایگاه داده SQLite 🗄️
ربات یک پایگاه داده SQLite به نام "CopyTrader.sqlite" ایجاد میکند یا اگر از قبل وجود داشته باشد آن را باز میکند. این پایگاه داده شامل دو جدول اصلی است:
- signals: برای ذخیره سیگنالهای فعال
- signals_history: برای ذخیره تاریخچه سیگنالها
این ساختار باعث میشود که ربات بتواند تمام معاملات باز، تغییرات و پوزیشنهای بسته شده را به دقت ثبت و مدیریت کند.
بررسی اولیه پوزیشنها
پس از ایجاد پایگاه داده، ربات همه پوزیشنهای باز را بررسی میکند. برای هر پوزیشن که MAGIC_NUMBER صحیح داشته باشد، اقدامات زیر انجام میشود:
- ثبت سیگنال
"NEW"در بانک مرکزی - ذخیره پوزیشنها در آرایههای کنترل (previous_orders و previous_positions)
این بررسی اولیه باعث میشود هیچ پوزیشن باز از دید ربات جا نماند و همه معاملات به درستی در بانک ثبت شوند.
مدیریت تراکنشها – OnTradeTransaction()
این بخش قلب عملکرد ربات است. هر زمان که تغییرات در معاملات ایجاد شود یا پوزیشن جدید باز یا بسته شود، ربات این تغییرات را شناسایی کرده و در بانک ثبت میکند.
تغییر SL و TP ️
زمانی که سطح توقف ضرر (SL) یا حد سود (TP) یک پوزیشن تغییر کند، ربات این تغییر را تشخیص میدهد.
- ابتدا بررسی میکند که پوزیشن متعلق به EA است یا نه (MAGIC_NUMBER)
- سپس سیگنال
"MODIFY"با مقادیر جدید به بانک ارسال میشود
این فرآیند تضمین میکند که همیشه آخرین تغییرات معاملات به حسابهای کپی شده منتقل شود و همه تریدرها از تغییرات مهم مطلع شوند.
باز شدن پوزیشن جدید
هر زمان یک پوزیشن جدید باز شود، ربات به سرعت آن را شناسایی میکند. سپس موارد زیر بررسی میشود:
- آیا پوزیشن خرید است (DEAL_TYPE_BUY) یا فروش (DEAL_TYPE_SELL)
- بررسی MAGIC_NUMBER برای اطمینان از تعلق پوزیشن به ربات
- اگر ورودی پوزیشن باشد (DEAL_ENTRY_IN) سیگنال
"NEW"با جزئیات کامل شامل تیکت، نماد، نوع، حجم، قیمت، SL و TP به بانک ارسال میشود
این فرآیند باعث میشود تمام پوزیشنهای جدید در زمان واقعی به حسابهای دیگر کپی شوند.
بستن پوزیشنها
زمانی که پوزیشن بسته میشود، ربات تاریخچه معاملات را بررسی میکند. اگر پوزیشن خروج پیدا کرد (DEAL_ENTRY_OUT)، سیگنال "CLOSE" به بانک ارسال میشود و پوزیشن به عنوان بسته شده علامتگذاری میشود.
این کار باعث جلوگیری از هرگونه خطای کپی و ثبت دقیق تاریخچه معاملات میشود.
توابع مدیریت سیگنالها
ربات دارای سه تابع اصلی برای مدیریت سیگنالها است:
۱. SendNewOrderSignal
- ثبت سفارش جدید در بانک
- ذخیره اطلاعات کامل سفارش شامل تیکت، نماد، نوع، حجم، قیمت، SL و TP
۲. SendModifySignal ✏️
- ثبت تغییرات سفارش در بانک
- بروزرسانی SL و TP پوزیشنها
۳. SendCloseSignal
- ثبت بستن سفارش در بانک
- علامتگذاری سفارش به عنوان بسته شده
این توابع باعث میشوند که تمامی مراحل معاملات از ورود تا خروج تحت کنترل ربات باشد و هیچ اطلاعاتی از دست نرود.
پایگاه داده و مدیریت سیگنالها – CSignalDB

پایگاه داده ربات (CSignalDB) وظایف مهمی دارد که عملکرد ربات را حرفهای و دقیق میکند:
- WriteSignal: افزودن سیگنالهای جدید به پایگاه داده و بررسی سیگنالهای
"NEW"تکراری - UpdateSignalStatus: بروزرسانی وضعیت سیگنالها در بانک
- MoveToHistory: انتقال سیگنالهای تکمیل شده به جدول تاریخچه
- GetPendingSignals: دریافت سیگنالهای در انتظار از بانک
این بخش از ربات باعث میشود هیچ سیگنال یا پوزیشنی بدون ثبت باقی نماند و تاریخچه معاملات همیشه قابل دسترسی باشد.
نکات بهبود و پیشنهادات
ربات CopyTrader به صورت پایهای عملکرد خوبی دارد، اما برخی بهبودها میتواند تجربه کاربری و امنیت معاملات را بالاتر ببرد:
- مدیریت خطا: اضافه کردن لاگ دقیق خطاها هنگام ثبت سیگنال در بانک یا پایگاه داده
- هشدارهای لحظهای: ارسال پیام به تریدر هنگام بروز خطا یا تغییر مهم در معاملات
- کنترل حجم معاملات: جلوگیری از ورود یا خروج ناخواسته پوزیشنهای بزرگ
- پشتیبانی از چند حساب: امکان کپی همزمان معاملات روی چند حساب بهینهتر
این بهبودها کمک میکند که ربات قابل اعتمادتر و حرفهایتر عمل کند.
مشکل تیکت منفی در حساب واقعی
یکی از مشکلات رایج کاربران، نمایش تیکت منفی هنگام دریافت شماره پوزیشن در حساب واقعی است. دلایل احتمالی عبارتند از:
- خطا در تشخیص MAGIC_NUMBER یا عدم تطابق با پوزیشنها
- دریافت اطلاعات از حساب واقعی قبل از ثبت کامل پوزیشن توسط سرور
- تفاوت بین شماره تیکت واقعی و عدد نمایش داده شده در محیط تست
برای حل این مشکل، بهتر است ربات بررسی مقدار تیکت قبل از ارسال سیگنال را انجام دهد و همچنین از توابع HistoryDealGetTicket یا PositionGetInteger(POSITION_TICKET) استفاده شود تا مقدار صحیح تیکت دریافت شود.کپی تریدر یک ابزار قدرتمند برای کپی کردن معاملات در MetaTrader 5 است که با مدیریت دقیق سیگنالها و پوزیشنها، ریسک خطا را کاهش میدهد و به تریدرها کمک میکند معاملات خود را به راحتی مدیریت کنند. با افزودن بهبودهایی مانند مدیریت خطا، هشدارهای لحظهای و پشتیبانی چند حساب، این ربات میتواند به یک ابزار حرفهای و قابل اعتماد برای تمامی تریدرها تبدیل شود.





