اولین ربات فارکس MQL5 خود را بسازید
تصور کنید استراتژی معاملاتی شما ۲۴/۵ بدون احساسات یا خستگی اجرا شود. این راهنما پیچیدگی MQL5 را ساده کرده و رویکردی عملی برای ساخت اولین ربات معاملاتی کاربردی و آگاه به ریسک ارائه میدهد.
Kenji Watanabe
مدیر تحلیل تکنیکال

تصور کنید استراتژی معاملاتی شما بینقص، ۲۴ ساعته و ۵ روز هفته، بدون دخالت احساسات، خستگی یا نیاز به نظارت مداوم بر صفحه نمایش اجرا شود. این یک رویای دور برای برنامهنویسان حرفهای نیست؛ این قدرت معاملات خودکار است که از طریق زبان MQL5 در متاتریدر ۵ قابل دسترسی است. برای معاملهگران سطح متوسط که به دنبال ارتقای سطح خود هستند، تبدیل یک استراتژی دستی به یک اکسپرت ادوایزر (EA) ممکن است دلهرهآور به نظر برسد. برای پر کردن شکاف بین ایده معاملاتی و کد قابل اجرا، از کجا باید شروع کرد؟ این راهنما پیچیدگیها را کنار میزند و یک رویکرد عملی و گام به گام برای ساخت اولین ربات معاملاتی MQL5 کاربردی و آگاه به ریسک شما ارائه میدهد. ما محیط MQL5 را رمزگشایی میکنیم، شما را با ساختارهای ضروری کدنویسی آشنا میکنیم و به شما قدرت میدهیم تا معاملات خود را با اطمینان خودکار کنید، حتی اگر هرگز یک خط کد هم ننوشته باشید.
تسلط بر MQL5: پایههای ربات شما
قبل از اینکه بتوانید به ربات خود فرمان دهید، باید زبان و محیط آن را درک کنید. MQL5 (MetaQuotes Language 5) زبان برنامهنویسی بومی برای متاتریدر ۵ است. این زبان به شما امکان میدهد قوانین معاملاتی خود را به دستورالعملهایی تبدیل کنید که پلتفرم بتواند به طور خودکار اجرا کند. آن را به عنوان مغز متفکر پشت قدرت ربات خود در نظر بگیرید.
درک اکسپرت ادوایزرها (EAs)
یک اکسپرت ادوایزر یا EA، فقط یک نام فانتزی برای یک ربات معاملاتی است که با MQL5 نوشته شده است. این ربات به یک نمودار خاص در ترمینال MT5 شما متصل میشود و با هر تیک قیمت جدید اجرا میگردد. تنها هدف آن نظارت بر بازار بر اساس قوانین از پیش تعریفشده شما و اجرای معاملات از طرف شماست—باز کردن، مدیریت و بستن پوزیشنها بدون دخالت مستقیم شما.
کار با MetaEditor و MT5
مرکز فرماندهی کدنویسی شما MetaEditor است. میتوانید آن را مستقیماً از ترمینال MT5 خود با کلیک بر روی آیکون 'IDE' یا فشردن کلید F4 باز کنید. اینجاست که کد MQL5 خود را مینویسید، ویرایش میکنید و کامپایل میکنید. وقتی کد خود را کامپایل میکنید (با کلیک بر روی دکمه 'Compile')، یک فایل اجرایی ایجاد میشود که MT5 میتواند آن را بفهمد و اجرا کند. EAهای کامپایل شده شما در پنجره 'Navigator' در MT5 زیر بخش 'Expert Advisors' ظاهر میشوند. از آنجا، فقط کافی است آن را روی یک نمودار بکشید و رها کنید تا زنده شود.
چرخه حیات اصلی: OnInit، OnTick، OnDeinit
هر EA کاربردی بر پایه سه تابع رویداد حیاتی ساخته شده است. درک آنها کلید ساخت یک ربات پایدار است.
OnInit()- راهاندازی: این تابع دقیقاً یک بار زمانی که EA برای اولین بار مقداردهی اولیه میشود (یعنی زمانی که آن را روی نمودار میاندازید) اجرا میشود. این تابع برای کارهای راهاندازی یکباره مانند تنظیم متغیرهای اولیه، چاپ یک پیام خوشامدگویی یا بررسی آمادگی محیط معاملاتی عالی است.OnTick()- حلقه اصلی: این قلب EA شماست. تابعOnTick()هر بار که یک تیک قیمت جدید برای نمادی که EA شما به آن متصل است، دریافت میشود، اجرا میگردد. تمام منطق اصلی معاملاتی شما—بررسی مقادیر اندیکاتور، جستجو برای شرایط ورود/خروج و مدیریت معاملات باز—اینجا قرار میگیرد. اینجاست که استراتژی شما واقعاً زنده میشود.OnDeinit()- پاکسازی: این تابع یک بار زمانی که EA از نمودار حذف میشود یا ترمینال بسته میشود، اجرا میگردد. از آن برای کارهای پاکسازی مانند حذف اشیاء گرافیکی از نمودار یا ارسال یک بهروزرسانی وضعیت نهایی استفاده میشود.
ربات شما به طور مداوم در یک حلقه دیوانهوار اجرا نمیشود؛ بلکه رویداد-محور است. صبورانه منتظر یک تیک جدید میماند، منطق موجود در OnTick() را اجرا میکند و سپس دوباره منتظر میماند. این کارایی همان چیزی است که معاملات خودکار را بسیار قدرتمند میکند.
خودکارسازی معاملات: باز کردن، تغییر و بستن

حالا به بخش هیجانانگیز میرسیم: وادار کردن ربات به انجام یک کار واقعی. MQL5 از یک سیستم درخواست ساختاریافته برای ارسال سفارشات معاملاتی استفاده میکند. شما یک ساختار 'request' را با تمام جزئیات معامله پر میکنید و سپس آن را با استفاده از یک دستور ارسال میکنید. بیایید آن را بررسی کنیم.
ارسال سفارشات جدید با OrderSend
برای باز کردن یک معامله، از تابع OrderSend() استفاده خواهید کرد. ابتدا، باید ساختار MqlTradeRequest را پر کنید. شاید پیچیده به نظر برسد، اما در واقع فقط یک چکلیست از جزئیات سفارش شماست.
در اینجا پارامترهای اساسی که باید پر کنید آمده است:
action: نوع عمل (مثلاًTRADE_ACTION_DEALبرای یک سفارش بازار).symbol: جفت ارز (مثلاً_Symbolبرای استفاده از نماد نمودار).volume: حجم لات (مثلاً0.10).type: نوع سفارش (مثلاًORDER_TYPE_BUYیاORDER_TYPE_SELL).price: قیمت ورود. برای سفارش بازار، ازSymbolInfoDouble(_Symbol, SYMBOL_ASK)برای خرید وSYMBOL_BIDبرای فروش استفاده کنید.sl: قیمت استاپ لاس (Stop Loss).tp: قیمت تیک پرافیت (Take Profit).magic: یک شماره منحصربهفرد برای شناسایی معاملات EA شما. این بسیار مهم است تا ربات شما با معاملات دستی شما یا سایر EAها تداخل پیدا نکند!
مثال کد (برای یک سفارش خرید):
تنظیم پوزیشنها: OrderModify
نیاز به جابجایی استاپ لاس یا تغییر تیک پرافیت دارید؟ OrderModify() ابزار شماست. فرآیند مشابه است: شما پوزیشنی را که میخواهید تغییر دهید شناسایی میکنید (با استفاده از شماره تیکت آن) و سپس درخواستی با مقادیر جدید SL و/یا TP ارسال میکنید.
خروج از معاملات: OrderClose
بستن یک معامله تقریباً مشابه باز کردن آن است، اما شما شماره تیکت پوزیشن را مشخص کرده و از نوع سفارش مخالف استفاده میکنید (ORDER_TYPE_SELL برای بستن خرید و بالعکس). یک راه سادهتر این است که فیلد position را در درخواست خود با شماره تیکت معاملهای که میخواهید ببندید، تنظیم کنید. سیستم به اندازه کافی هوشمند است که بقیه کار را انجام دهد.
نکته حرفهای: همیشه
result.retcodeرا پس از ارسال سفارش بررسی کنید. این کد بازگشتی به شما میگوید که آیا سفارش موفقیتآمیز بوده است یا خیر. اگر نه، میتوانید پیام خطا را در ژورنال خود چاپ کنید تا بفهمید چه مشکلی پیش آمده است. مدیریت خطای اولیه، نشانه یک EA قوی است.
کدنویسی استراتژی: اندیکاتورها و شرایط
یک EA بدون استراتژی فقط یک ماشین ثبت سفارش است. هوش واقعی از ترجمه قوانین تحلیل تکنیکال شما به کد ناشی میشود. MQL5 دسترسی به دادههای صدها اندیکاتور داخلی را به طرز شگفتآوری آسان کرده است.

دسترسی به اندیکاتورهای داخلی
بیشتر اندیکاتورهای استاندارد یک تابع متناظر در MQL5 دارند که معمولاً با 'i' شروع میشود. برای مثال:
iMA(): میانگین متحرک (Moving Average)iRSI(): شاخص قدرت نسبی (Relative Strength Index)iMACD(): واگرایی همگرایی میانگین متحرک (Moving Average Convergence Divergence)iStochastic(): اسیلاتور استوکاستیک (Stochastic Oscillator)
این توابع یک 'handle' برمیگردانند که مانند یک اشارهگر به دادههای اندیکاتور است. سپس شما از تابع دیگری به نام CopyBuffer() برای کپی کردن مقادیر اندیکاتور (مانند خط MA یا مقدار RSI) برای کندلهای خاص در یک آرایه استفاده میکنید تا بتوانید با آن کار کنید.
ساخت سیگنالهای معاملاتی ساده
هنگامی که دادههای اندیکاتور را در اختیار دارید، میتوانید از دستورات ساده if برای تعریف سیگنالهای معاملاتی خود استفاده کنید. به عنوان مثال، یک استراتژی ساده RSI ممکن است به این صورت باشد:
- سیگنال خرید:
if (rsi_value < 30) - سیگنال فروش:
if (rsi_value > 70)
ترکیب اندیکاتورها میتواند سیگنالهای قویتری ایجاد کند. به عنوان مثال، شاید بخواهید یاد بگیرید چگونه اندیکاتورهای فارکس را هوشمندانه ترکیب کنید تا نویز بازار را کاهش دهید، که یک مهارت کلیدی برای هر معاملهگر خودکار است.
ساخت یک استراتژی تقاطع میانگین متحرک
یک استراتژی کلاسیک برای خودکارسازی، تقاطع میانگین متحرک (MA) است. منطق ساده است: وقتی یک MA سریع از بالای یک MA کند عبور میکند، این یک سیگنال خرید است. وقتی از زیر آن عبور میکند، یک سیگنال فروش است. در اینجا نحوه کدنویسی این منطق در داخل تابع OnTick() شما آمده است.
مثال: منطق تقاطع MA
در این کد،
fastMA[1]مقدار MA سریع در کندل قبلی است وfastMA[0]مقدار آن در کندل فعلی و اخیرترین کندل است. این به ما امکان میدهد لحظه دقیق وقوع تقاطع را تشخیص دهیم.
ریسک هوشمند: مدیریت ضروری ربات
یک استراتژی سودآور میتواند با مدیریت ریسک ضعیف نابود شود. EA شما باید قوانین آهنین برای محافظت از سرمایه شما داشته باشد. خوشبختانه، MQL5 تمام ابزارهای مورد نیاز برای ساخت یک ربات آگاه به ریسک را در اختیار شما قرار میدهد.
تعیین قطعی استاپ لاس و تیک پرافیت
ابتداییترین شکل مدیریت ریسک، تعیین استاپ لاس (SL) و تیک پرافیت (TP) برای هر معامله است. همانطور که در مثال OrderSend دیدیم، ساختار MqlTradeRequest فیلدهای مشخصی برای sl و tp دارد. هرگز، هرگز سفارشی را بدون آنها ارسال نکنید. این اولین و مهمترین خط دفاعی شما در برابر حرکات غیرمنتظره بازار است.
![A diagram showing the logic for a Moving Average Crossover. On the left, a chart shows a fast MA crossing above a slow MA. On the right, a simple logic tree shows 'Is fastMA[1] < slowMA[1]?' and 'Is fastMA[0] > slowMA[0]?' leading to a 'BUY' signal.](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2F1tyytg47%2Fproduction%2Ffbc10e9c2a9c1570894c26d67da6c3c1fc9c4833-2400x1792.png%3Fw%3D800%26fm%3Dwebp%26q%3D80&w=3840&q=75)
تعیین حجم پوزیشن پویا
به جای معامله با یک حجم لات ثابت مانند ۰.۱۰ در هر معامله، رویکرد هوشمندانهتر محاسبه حجم پوزیشن بر اساس درصد ثابتی از موجودی حساب شماست. این بدان معناست که وقتی حساب شما در ضرر است کمتر ریسک میکنید و وقتی در حال رشد است بیشتر.
در اینجا یک فرمول ساده آمده است:
حجم لات = (موجودی حساب * درصد ریسک) / (استاپ لاس به پوینت * ارزش هر پوینت)
مثال:
حجم لات = (10000 * 0.01) / (500 * 1) = 100 / 500 = 0.20 لات
شما میتوانید این محاسبه را مستقیماً در EA خود برنامهریزی کنید تا مدیریت ریسک آن پویا و پاسخگو باشد. در حالی که این یک رویکرد ابتدایی است، مدلهای پیشرفتهتری برای تعیین حجم وجود دارد که میتوانید در موضوعاتی مانند مقایسه روشهای حجمدهی مارتینگل و آنتی-مارتینگل آنها را بررسی کنید.
اجتناب از دامهای رایج ریسک
در اینجا چند قانون سریع برای ساخت یک ربات ایمنتر آورده شده است:
- از یک مجیک نامبر (Magic Number) استفاده کنید: همیشه یک شماره جادویی منحصربهفرد به معاملات EA خود اختصاص دهید. این کار از بستن تصادفی معاملهای که به صورت دستی باز کردهاید، جلوگیری میکند.
- محدود کردن معاملات باز: کدی برای بررسی اینکه EA بیش از تعداد معینی معامله را به طور همزمان باز نکند، بنویسید (
PositionsTotal()). - اسپرد را بررسی کنید: قبل از باز کردن یک معامله، بررسی کنید که آیا اسپرد فعلی بیش از حد زیاد است یا خیر. اسپردهای بالا میتوانند سودآوری یک استراتژی را از بین ببرند. میتوانید این مقدار را با
SymbolInfoInteger(_Symbol, SYMBOL_SPREAD)بدست آورید.
برای جزئیات بیشتر، مستندات رسمی MQL5 در مورد توابع معاملاتی یک منبع عالی و معتبر است.
اعتبارسنجی ربات: تست، بهینهسازی و اشکالزدایی
نوشتن کد تنها نیمی از راه است. یک معاملهگر حرفهای هرگز یک ربات را بدون تست دقیق روی حساب واقعی اجرا نمیکند. Strategy Tester داخلی MT5 آزمایشگاه شما برای این مرحله حیاتی است.
بکتست با Strategy Tester
Strategy Tester (Ctrl+R) به شما امکان میدهد EA خود را بر روی دادههای تاریخی قیمت اجرا کنید تا ببینید عملکرد آن چگونه بوده است. شما میتوانید نماد، تایمفریم و بازه زمانی تست خود را انتخاب کنید. پس از اتمام، یک گزارش دقیق با معیارهای کلیدی دریافت خواهید کرد:
- سود خالص کل (Total Net Profit): سودآوری کلی.
- فاکتور سود (Profit Factor): سود ناخالص تقسیم بر ضرر ناخالص. هر مقداری بالاتر از ۱.۵ به طور کلی خوب در نظر گرفته میشود.
- حداکثر افت سرمایه (Maximal Drawdown): بزرگترین افت از قله به دره در موجودی حساب. این یک معیار حیاتی برای ریسک است.

- تعداد کل معاملات (Total Trades): تعداد معاملات انجام شده.
تحلیل این نتایج به شما کمک میکند تا نقاط قوت و ضعف استراتژی خود را درک کنید. استراتژیای که روی کاغذ عالی به نظر میرسد، مانند یک رویکرد معاملات پوزیشن بلندمدت، ممکن است در یک بکتست افت سرمایه غیرمنتظرهای را نشان دهد.
بهینهسازی پارامترهای پایه
چه میشود اگر تقاطع MA شما با دورههای ۱۲ و ۴۵ بهتر از ۱۰ و ۵۰ کار کند؟ حالت 'Optimization' در Strategy Tester میتواند به این سوال پاسخ دهد. این حالت بکتست شما را صدها یا هزاران بار اجرا میکند و ترکیبات مختلفی از پارامترهای ورودی شما (مانند FastMAPeriod و SlowMAPeriod) را امتحان میکند تا قویترین تنظیمات را پیدا کند.
هشدار: مراقب باشید که 'بیش از حد بهینهسازی' (over-optimize) نکنید. پیدا کردن پارامترهای عالی برای دادههای گذشته، موفقیت آینده را تضمین نمیکند. از بهینهسازی برای یافتن محدودههای پایدار استفاده کنید، نه یک تنظیم 'جام مقدس' واحد.
عیبیابی کد MQL5 شما
باگها بخش عادی از توسعه هستند. در اینجا نحوه از بین بردن آنها آمده است:
- خطاهای کامپایل: MetaEditor خطاهای نحوی (syntax errors) را در کد شما حتی قبل از کامپایل شدن برجسته میکند. تب 'Errors' در پایین به شما شماره خط و مشکل را میگوید.
- تابع
Print(): بهترین دوست شما برای اشکالزدایی. دستوراتPrint()را در سراسر کد خود قرار دهید تا مقادیر متغیرها را خروجی بگیرید، بررسی کنید که آیا یک تابع فراخوانی میشود یا تأیید کنید که منطق شما به درستی جریان دارد. خروجی در تب 'Experts' ترمینال MT5 ظاهر میشود. - تب Journal: متاتریدر ۵ تمام عملیات معاملاتی و خطاها را در تب 'Journal' ثبت میکند. اگر
OrderSend()شما با شکست مواجه شود، این اولین جایی است که باید برای یافتن دلیل آن جستجو کنید.
با ترکیب بکتست، بهینهسازی و اشکالزدایی دقیق، میتوانید قبل از ریسک کردن حتی یک دلار، به EA خود اطمینان پیدا کنید.
نتیجهگیری: سفر شما به دنیای خودکارسازی آغاز میشود
شما به تازگی یک جهش قابل توجه داشتهاید و از یک استراتژی معاملاتی دستی به یک اکسپرت ادوایزر MQL5 ملموس و خودکار رسیدهاید. این سفر، از درک محیط MQL5 گرفته تا پیادهسازی مدیریت ریسک قوی و اشکالزدایی، شما را به مهارتهای بنیادی برای به واقعیت پیوستن ایدههای معاملاتیتان مجهز میکند. قدرت خودکارسازی نه تنها در کارایی آن، بلکه در توانایی حذف احساسات از تصمیمات معاملاتی شما و اجرای استراتژیتان با انضباط تزلزلناپذیر نهفته است. به یاد داشته باشید، ساخت یک ربات معاملاتی یک فرآیند تکراری از یادگیری، تست و اصلاح است. اصولی که در اینجا آموختید تنها آغاز راه است. برای تعمیق درک خود و کشف مفاهیم پیشرفتهتر MQL5، FXNX منابع فراوانی از آموزشهای پیشرفته تا انجمنهای گفتگو را فراهم میکند که در آن میتوانید بینشهای خود را به اشتراک بگذارید و پشتیبانی دریافت کنید. شما بیشتر از همه برای خودکارسازی کدام جنبه از استراتژی معاملاتی خود هیجانزدهاید؟
آماده شروع هستید؟ متاتریدر ۵ را دانلود کنید، MetaEditor را باز کنید و با استفاده از اصول آموخته شده در این راهنما، همین امروز کدنویسی اولین اکسپرت ادوایزر MQL5 خود را آغاز کنید!
سوالات متداول
تفاوت اصلی بین MQL4 و MQL5 چیست؟
MQL5 یک زبان برنامهنویسی پیشرفتهتر و شیءگرا است که برای متاتریدر ۵ طراحی شده و عملکرد و انعطافپذیری بیشتری ارائه میدهد. تفاوتهای کلیدی شامل نحوه مدیریت سفارشات (MQL5 از یک سیستم مبتنی بر پوزیشن استفاده میکند، در حالی که MQL4 مبتنی بر تیکت است) و دسترسی آسانتر به ویژگیهای پیشرفته مانند تقویم اقتصادی داخلی و عمق بازار بیشتر است.
آیا میتوانم بیش از یک اکسپرت ادوایزر را روی حساب MT5 خود اجرا کنم؟
بله، شما میتوانید چندین EA را به طور همزمان اجرا کنید. میتوانید EAهای مختلف را به نمودارهای مختلف متصل کنید، یا حتی چندین EA را به یک نمودار واحد متصل کنید. بسیار مهم است که اطمینان حاصل کنید هر EA از یک 'مجیک نامبر' (Magic Number) منحصربهفرد در کد خود استفاده میکند تا از تداخل آنها با معاملات یکدیگر جلوگیری شود.
برای ساخت یک ربات فارکس MQL5 به چه میزان تجربه کدنویسی نیاز دارم؟
در حالی که تجربه قبلی کدنویسی مفید است، اما کاملاً ضروری نیست. MQL5 دارای سینتکسی شبیه به C++ است که با پشتکار میتوان آن را یاد گرفت. این راهنما بلوکهای بنیادی را فراهم میکند و با وجود منابع آنلاین فراوان و پشتیبانی جامعه، یک معاملهگر مصمم میتواند کدنویسی یک EA پایه و کاربردی را بیاموزد.
بهتر است ربات فارکس خودم را بسازم یا یکی بخرم؟
ساختن ربات خودتان به شما کنترل و درک کاملی از استراتژی میدهد که یک مزیت قابل توجه است. خرید یک ربات آماده میتواند مانند یک جعبه سیاه با ریسکهای پنهان باشد. برای معاملهگرانی که در مورد خودکارسازی جدی هستند، یادگیری ساخت EA یک مهارت ارزشمند است که امکان سفارشیسازی بیپایان و انطباق با شرایط متغیر بازار را فراهم میکند.
همین حالا شروع کنید
با اسپرد ۰.۰ پیپ و بیش از ۵۰۰ ابزار معاملاتی، به هزاران تریدر حرفهای بپیوندید.
درباره نویسنده

Kenji Watanabe
مدیر تحلیل تکنیکالKenji Watanabe is the Technical Analysis Lead at FXNX and a former researcher at the Bank of Japan. With a Master's degree in Economics from the University of Tokyo, Kenji brings 9 years of deep expertise in Japanese candlestick patterns, yen crosses, and Asian trading session dynamics. His meticulous approach to charting and pattern recognition has earned him a loyal readership among technical traders worldwide. Kenji writes with precision and clarity, turning centuries-old Japanese trading techniques into modern actionable strategies.
ترجمه توسط
داریوش محمدی مترجم جوان فینتک در FXNX است. او فارغالتحصیل رشته مالی بینالمللی از دانشگاه صنعتی شریف تهران بوده و در حال حاضر به عنوان کارآموز در FXNX مشغول ترجمه محتوای معاملاتی جهانی برای مخاطبان فارسیزبان است. اشتیاق او به پل زدن میان دانش مالی بینالمللی و جهان فارسیزبان، رویکرد دقیق و حرفهای او در ترجمه مالی را شکل داده است.