کپی تریدر یک اکسپرت پیشرفته برای 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 است که با مدیریت دقیق سیگنالها و پوزیشنها، ریسک خطا را کاهش میدهد و به تریدرها کمک میکند معاملات خود را به راحتی مدیریت کنند. با افزودن بهبودهایی مانند مدیریت خطا، هشدارهای لحظهای و پشتیبانی چند حساب، این ربات میتواند به یک ابزار حرفهای و قابل اعتماد برای تمامی تریدرها تبدیل شود.



