این ربات معاملاتی با نام SidewaysMartingale، یک اکسپرت هوشمند متاتریدر ۵ است که از یک مدل یادگیری عمیق ONNX برای تشخیص وضعیت روند بازار (صعودی، نزولی یا خنثی) استفاده میکند و در شرایط بازار رنج و بدون روند قوی (Sideways) با استراتژی مارتینگل وارد معامله میشود؛ بدین صورت که در برخورد قیمت با باندهای پایینی یا بالایی اندیکاتور Envelopes و تأیید بازار خنثی توسط هوش مصنوعی، پوزیشن اولیه را باز کرده و در صورت ادامه حرکت قیمت در خلاف جهت، با ضریب لات تصاعدی و رعایت سقف تعداد معاملات، پوزیشنهای جدید اضافه میکند تا با بازگشت قیمت و رسیدن سود کل به هدف دلاری تعیینشده، تمام معاملات را یکجا ببندد.
معماری هوش مصنوعی و تشخیص بازار
هسته اصلی این ربات یک مدل یادگیری عمیق ONNX به نام “trend_detector.onnx” است که در زمان مقداردهی اولیه (OnInit) بارگذاری میشود. این مدل بر اساس ۹ ویژگی (Feature) که در تابع CalculateFeatures از دادههای بازار استخراج میشوند، عمل میکند. این ویژگیها شامل نرخ تغییرات EMA200، فاصله قیمت از EMA200، مقدار ATR، نسبت دامنه کندل به ATR، قدرت شکست سقف قبلی، نسبت بدنه به سایه کندل، روز هفته، ساعت معاملاتی و جهت کندل قبلی هستند. خروجی مدل شامل سه برچسب (روند صعودی، نزولی یا خنثی/رنج) به همراه احتمال هر کدام است. ربات تنها زمانی اجازه ورود به معامله را دارد که احتمال تشخیص بازار خنثی (Sideways) از آستانه InpAISidewayThreshold (پیشفرض ۷۰٪) فراتر رود؛ این فیلتر هوشمند باعث میشود استراتژی مارتینگل صرفاً در شرایطی فعال شود که احتمال بازگشت قیمت به میانگین بالاست، نه در بازارهای رونددار قدرتمند.
تولید سیگنال ورود با تلفیق اندیکاتور Envelopes و AI
پس از تأیید بازار رنج توسط مدل ONNX، ربات برای یافتن نقاط ورود به سراغ اندیکاتور Envelopes (پاکتهای قیمتی با انحراف معیار قابل تنظیم) میرود. اگر قیمت بسته شدن کندل قبلی به زیر باند پایینی Envelopes نفوذ کرده باشد و همزمان بازار خنثی تشخیص داده شده باشد، یک پوزیشن خرید (Buy) با لات اولیه باز میشود. بالعکس، اگر قیمت بالای باند بالایی رفته باشد، پوزیشن فروش (Sell) فعال میگردد. منطق این کار بر این فرض استوار است که در بازار رنج، قیمت پس از برخورد با سطوح افراطی (باندهای انولوپ) تمایل به بازگشت به سمت میانگین دارد. نکته مهم این است که ربات تنها در صورتی وارد معامله اولیه میشود که هیچ پوزیشن بازی از سری قبل وجود نداشته باشد (openTrades == 0).
مکانیزم مارتینگل و فیلتر ایمنی هوش مصنوعی
پس از باز شدن پوزیشن اولیه، ربات وارد فاز مدیریت مارتینگل میشود. اگر قیمت به اندازه DistanceMartingalePips (بر حسب پیپ) در خلاف جهت پوزیشن اولیه حرکت کند، یک پوزیشن جدید با حجمی برابر با آخرین لات ضربدر LotMultiplier (پیشفرض ۲) باز میکند. این فرآیند میتواند حداکثر تا MaxTradesInSeries مرتبه تکرار شود. اما یک لایه ایمنی حیاتی مبتنی بر AI نیز وجود دارد: قبل از باز کردن هر پوزیشن جدید در شبکه، ربات بررسی میکند که آیا مدل ONNX احتمال روند قوی در خلاف جهت را نشان میدهد یا خیر. اگر در سری خرید، احتمال روند نزولی از InpAISafetyThreshold (پیشفرض ۷۵٪) فراتر رفته باشد، یا در سری فروش احتمال صعودی از این حد گذشته باشد، ربات از باز کردن پوزیشن جدید خودداری میکند تا از گرفتار شدن در یک روند قوی و متحمل شدن زیان سنگین جلوگیری کند.
مدیریت ریسک، خروج و کنترل حساب
ربات سه مکانیزم اصلی برای خروج و کنترل ریسک دارد. اول، حد سود هدف: در ابتدای هر کندل جدید، مجموع سود شناور تمام پوزیشنهای متعلق به ربات (با شناسایی از طریق Magic Number اختصاصی ۹۱۹۱) محاسبه شده و اگر به TakeProfitTargetUSD (هدف دلاری) برسد، تمام پوزیشنها بلافاصله بسته شده و سری معاملاتی ریست میشود. دوم، حد ضرر بر اساس مارجین: ربات به طور مداوم نسبت کاهش بالانس به اکوئیتی را بررسی میکند و اگر درصد زیان شناور از StopLossByMarginPercent (پیشفرض ۵۰٪) فراتر رود، تمام پوزیشنها را به عنوان یک توقف اضطراری میبندد. سوم، کنترل حجم معاملات: در تابع ExecuteOrder، ربات قبل از ارسال سفارش، حجم لات را با محدودیتهای کارگزار (حداقل، حداکثر، گام لات و محدودیت حجم کل) تطبیق داده و همچنین از کافی بودن مارجین آزاد برای باز کردن پوزیشن جدید اطمینان حاصل میکند تا از خطای کسر مارجین جلوگیری شود.

بررسی نتایج بک تست ربات Sideways Martingale
بکتست این ربات در مجموع سودده بوده است. مهمترین شاخص، Net Profit = 17,770.73 است که نشان میدهد استراتژی در پایان دوره مورد آزمون توانسته سود خالص مثبت تولید کند. همچنین Profit Factor = 1.66 ثبت شده که معمولاً نشانهی قابلقبول بودن نسبت سود به زیان است؛ یعنی سودهای ایجادشده از زیانها بیشتر بودهاند.


از نظر تعداد معاملات، ربات 1,761 معامله انجام داده که برای ارزیابی اولیه، نمونهی مناسبی است. نرخ برد نیز 61.95% بوده؛ یعنی 1,091 معامله سودده در برابر 670 معامله زیانده. این عدد نشان میدهد استراتژی در این بازه عملکرد خوبی داشته و بیش از 60 درصد معاملات را با سود بسته است. همچنین هر دو سمت بازار هم بازده مثبت داشتهاند: معاملات فروش 60.47% و معاملات خرید 63.10% برد داشتهاند.


با این حال، ریسک استراتژی کاملاً صفر نیست و باید به افت سرمایه توجه کرد. Balance Drawdown Maximal = 3,408.33 (3.23%) و Equity Drawdown Maximal = 7,466.55 (7.35%) گزارش شده است. تفاوت بین دراودان بالانس و اکوئیتی نشان میدهد که در برخی مقاطع، معاملات باز فشار بیشتری روی حساب وارد کردهاند و نوسان شناور از زیانهای بستهشده بیشتر بوده است. این موضوع الزاماً بد نیست، اما نشان میدهد مدیریت پوزیشنهای باز نقش مهمی در ریسک کلی ربات دارد.

در جمعبندی، این بکتست تصویر یک استراتژی سودآور اما با ریسک متوسط را نشان میدهد. از یک طرف، سود خالص مثبت، Profit Factor بالاتر از 1، و نرخ برد بالای 60% نکات مثبت مهمی هستند؛ از طرف دیگر، Equity Drawdown 7.35% هشدار میدهد که باید روی کنترل ریسک، حدضرر، و ثبات عملکرد در بازار واقعی دقت بیشتری شود. اگر بخواهی، در مرحله بعد میتوانم نمودار بالانس، عملکرد ماهانه، یا توزیع معاملات بر اساس ساعت و روز را هم از همین فایل استخراج و تحلیل کنم.
توضیحات ربات معامله گر Sideways Martingale
گروه General Parameters (پارامترهای عمومی)
InpMagic (Magic Number): یک عدد یکتا (پیشفرض 9191) که به تمام پوزیشنهای باز شده توسط ربات اختصاص داده میشود. این شناسه باعث میشود ربات فقط پوزیشنهای خود را مدیریت کند و با معاملات دستی یا سایر اکسپرتها تداخل نداشته باشد. در صورت اجرای همزمان چند نسخه از ربات روی یک نماد، حتماً باید این عدد برای هر نسخه متفاوت باشد.
InpLotSize (حجم اولیه معامله): لات پایه برای اولین پوزیشن هر سری معاملاتی (پیشفرض 0.08). این حجم متناسب با موجودی حساب و میزان ریسک پذیری باید تنظیم شود.
TakeProfitTargetUSD (هدف سود به دلار): حد سود کل بر حسب دلار آمریکا (پیشفرض 12). وقتی مجموع سود شناور تمام پوزیشنهای باز ربات به این مقدار برسد، کل شبکه معاملاتی یکجا بسته میشود.

گروه AI & ONNX Config (تنظیمات هوش مصنوعی)
InpModelName (نام فایل مدل): نام فایل مدل ONNX که باید در پوشه Files متاتریدر قرار داشته باشد (پیشفرض "trend_detector.onnx"). این مدل مسئول تشخیص وضعیت بازار (صعودی، نزولی یا خنثی) است.
InpAISidewayThreshold (آستانه تشخیص بازار رنج): حداقل احتمال مورد نیاز برای تشخیص بازار خنثی (پیشفرض 0.70 یعنی ۷۰٪). ربات تنها زمانی وارد معامله اولیه میشود که مدل ONNX بازار را با احتمالی بالاتر از این مقدار، خنثی تشخیص دهد. افزایش این عدد، تعداد معاملات را کاهش اما دقت فیلتر را افزایش میدهد.
InpAISafetyThreshold (آستانه ایمنی هوش مصنوعی): حداکثر احتمال مجاز برای روند مخالف هنگام اضافه کردن پوزیشنهای مارتینگل (پیشفرض 0.75 یعنی ۷۵٪). اگر در یک سری خرید، مدل روند نزولی را با احتمالی بالاتر از این حد تشخیص دهد، یا در سری فروش روند صعودی را، ربات از باز کردن پوزیشن جدید خودداری میکند. این پارامتر حکم فیوز ایمنی در برابر بازارهای رونددار را دارد.
گروه Envelopes – Scalper Mode (تنظیمات اندیکاتور انولوپ)
InpEnvPeriod (دوره انولوپ): تعداد کندلهای استفاده شده در محاسبه میانگین متحرک پایه اندیکاتور Envelopes (پیشفرض 8). دوره کوتاهتر باعث واکنش سریعتر به نوسانات قیمت و سیگنالهای بیشتر میشود.
InpEnvDeviation (انحراف معیار انولوپ): درصد انحراف باندهای بالایی و پایینی از خط میانگین (پیشفرض 0.06 یعنی ۰.۰۶٪). این مقدار تعیین میکند باندهای انولوپ چقدر از قیمت میانگین فاصله داشته باشند. مقادیر بزرگتر، سیگنالهای کمتر اما مطمئنتر تولید میکنند.
InpEnvMethod (روش هموارسازی انولوپ): نوع میانگین متحرک مورد استفاده در اندیکاتور Envelopes (پیشفرض MODE_SMA یا میانگین ساده). گزینههای دیگر شامل MODE_EMA (نمایی)، MODE_SMMA (هموار شده) و MODE_LWMA (وزنی خطی) هستند.
گروه Martingale Strategy (استراتژی مارتینگل)
LotMultiplier (ضریب افزایش لات): مشخص میکند هر پوزیشن جدید در شبکه چند برابر پوزیشن قبلی باشد (پیشفرض 2.0). برای مثال، اگر لات اولیه ۰.۰۸ باشد، پوزیشن دوم ۰.۱۶، سوم ۰.۳۲ و الی آخر خواهد بود. این پارامتر اصلیترین عامل کنترل ریسک و رشد تصاعدی حجم است و باید با احتیاط تنظیم شود.
DistanceMartingalePips (فاصله شبکه به پیپ): فاصله قیمتی بین پوزیشنهای متوالی در شبکه بر حسب پیپ (پیشفرض 15). ربات به صورت هوشمند این مقدار را برای بروکرهای ۳ و ۵ رقمی تنظیم میکند. اگر قیمت به اندازه این فاصله خلاف جهت پوزیشن قبلی حرکت کند، یک معامله جدید باز میشود.
MaxTradesInSeries (حداکثر تعداد معاملات در سری): سقف تعداد پوزیشنهای مجاز در یک سری معاملاتی (پیشفرض 8). پس از رسیدن به این تعداد، حتی اگر فاصله قیمتی کافی باشد، ربات دیگر پوزیشن جدیدی باز نمیکند. این محدودیت از رشد بیرویه حجم و مصرف کل مارجین جلوگیری میکند.
گروه Risk Management (مدیریت ریسک)
StopLossByMarginPercent (حد ضرر بر اساس درصد مارجین): درصد حداکثر زیان شناور مجاز نسبت به بالانس حساب (پیشفرض 50.0). ربات به طور مداوم نسبت کاهش اکوئیتی به بالانس را محاسبه میکند و اگر این نسبت به ۵۰٪ برسد، تمام پوزیشنها را بلافاصله به عنوان اقدام اضطراری میبندد. این مکانیزم جایگزین حد ضرر سنتی است و کل حساب را در برابر زیانهای فاجعهبار محافظت میکند.
نکته مهم: دقت کنید که مدل ONNX باید پیشآموزش دیده و در مسیر MQL5\Files قرار گرفته باشد، در غیر این صورت ربات در زمان راهاندازی با خطا مواجه شده و از کار میافتد.





