أتمتة ملفات Batch في MT5: سكربتات اختبار متقدمة
تشغيل اختبارات فردية في مختبر استراتيجيات MT5 جيد للفحص السريع. لكن عندما تحتاج لاختبار 5 إكسبرتات عبر 10 رموز على 3 أطر زمنية — ذلك 150 اختبار. القيام بذلك يدوياً يستغرق أياماً. أتمتة ملفات Batch تحولها إلى أمر واحد.
المتطلبات
- MetaTrader 5 مثبت (terminal64.exe)
- إكسبرت مجمّع واحد على الأقل (.ex5)
- معرفة أساسية بملفات
.ini
هيكل المشروع
D:\MT5_Automation\
├── Configs\ # قوالب .ini الأساسية
├── Scripts\ # سكربتات Batch و Python
├── Reports\ # مخرجات التقارير
├── Params\ # ملفات معلمات الإكسبرت
└── Logs\ # سجلات التنفيذ
قوالب Config الأساسية
base_optimize.ini (تحسين)
[Tester]
Expert=MyEAs\__EA_NAME__
ExpertParameters=__PARAM_FILE__
Symbol=__SYMBOL__
Period=__TIMEFRAME__
Deposit=10000
Currency=USD
Leverage=1:100
Model=4
Optimization=2
OptimizationCriterion=5
FromDate=2023.01.01
ToDate=2025.01.01
ForwardMode=2
Report=D:\MT5_Automation\Reports\__REPORT_NAME__
ReplaceReport=1
ShutdownTerminal=1
UseLocal=1
Visual=0
Port=__PORT__
base_backtest.ini (اختبار فردي)
[Tester]
Expert=MyEAs\__EA_NAME__
ExpertParameters=__PARAM_FILE__
Symbol=__SYMBOL__
Period=__TIMEFRAME__
Deposit=10000
Currency=USD
Leverage=1:100
Model=4
Optimization=0
FromDate=2023.01.01
ToDate=2025.01.01
Report=D:\MT5_Automation\Reports\__REPORT_NAME__
ReplaceReport=1
ShutdownTerminal=1
UseLocal=1
Visual=0
Port=__PORT__
سكربت اختبار متعدد الإكسبرتات
@echo off
setlocal enabledelayedexpansion
set MT5="C:\Program Files\MetaTrader 5\terminal64.exe"
set CONFIG_DIR=D:\MT5_Automation\Configs
set REPORT_DIR=D:\MT5_Automation\Reports
set EAS=TrendFollower GridMaster ScalperPro
set SYMBOLS=EURUSD GBPUSD USDJPY
set TIMEFRAMES=M15 H1 H4
set PORT=2000
set TOTAL=0
for %%E in (%EAS%) do (
for %%S in (%SYMBOLS%) do (
for %%T in (%TIMEFRAMES%) do (
set /a TOTAL+=1
set REPORT_NAME=%%E_%%S_%%T
set CONFIG_OUT=%CONFIG_DIR%\run_!REPORT_NAME!.ini
powershell -Command "(Get-Content %CONFIG_DIR%\base_optimize.ini) `
-replace '__EA_NAME__', '%%E' `
-replace '__SYMBOL__', '%%S' `
-replace '__TIMEFRAME__', '%%T' `
-replace '__PORT__', '!PORT!' `
| Set-Content '!CONFIG_OUT!'"
echo [!TOTAL!] اختبار %%E على %%S %%T ...
%MT5% /config:"!CONFIG_OUT!"
set /a PORT+=1
)
)
)
echo اكتملت جميع الاختبارات!
python D:\MT5_Automation\Scripts\parse_results.py
تحسين متوازي (4 وكلاء)
@echo off
set MT5="C:\Program Files\MetaTrader 5\terminal64.exe"
start "" %MT5% /config:D:\MT5\Configs\optimize_eurusd.ini /port:2000
start "" %MT5% /config:D:\MT5\Configs\optimize_gbpusd.ini /port:2001
start "" %MT5% /config:D:\MT5\Configs\optimize_usdjpy.ini /port:2002
start "" %MT5% /config:D:\MT5\Configs\optimize_audusd.ini /port:2003
echo تم إطلاق 4 تحسينات متوازية.
سكربت PowerShell (أكثر قوة)
# run_optimizations.ps1
$MT5 = "C:\Program Files\MetaTrader 5\terminal64.exe"
$ConfigDir = "D:\MT5_Automation\Configs"
$ReportDir = "D:\MT5_Automation\Reports"
$TestMatrix = @(
@{ EA = "TrendFollower"; Symbol = "EURUSD"; TF = "H1"; Port = 2000 }
@{ EA = "TrendFollower"; Symbol = "GBPUSD"; TF = "H1"; Port = 2001 }
@{ EA = "GridMaster"; Symbol = "EURUSD"; TF = "M15"; Port = 2002 }
@{ EA = "GridMaster"; Symbol = "USDJPY"; TF = "H4"; Port = 2003 }
)
foreach ($test in $TestMatrix) {
$configFile = Join-Path $ConfigDir "base_optimize.ini"
$outputConfig = Join-Path $ConfigDir "run_$($test.EA)_$($test.Symbol)_$($test.TF).ini"
# توليد config
$content = Get-Content $configFile
$content = $content -replace '__EA_NAME__', $test.EA
$content = $content -replace '__SYMBOL__', $test.Symbol
$content = $content -replace '__TIMEFRAME__', $test.TF
$content = $content -replace '__PORT__', $test.Port
$content | Set-Content $outputConfig
Write-Host "بدء $($test.EA) على $($test.Symbol) $($test.TF)..."
# تشغيل في الخلفية
Start-Process -FilePath $MT5 -ArgumentList "/config:$outputConfig" -Wait
}
Write-Host "اكتملت جميع التحسينات!"
تحليل النتائج بـ Python
import xml.etree.ElementTree as ET
import pandas as pd
import glob
import os
def parse_optimization_xml(xml_path):
tree = ET.parse(xml_path)
root = tree.getroot()
results = []
for item in root.findall('.//Item'):
row = {
'profit': float(item.findtext('Profit', 0)),
'sharpe': float(item.findtext('SharpeRatio', 0)),
'drawdown': float(item.findtext('EquityDrawdown', 0)),
'trades': int(item.findtext('TotalTrades', 0)),
}
for inp in item.findall('.//Input'):
row[f'inp_{inp.get("Name")}'] = float(inp.text)
results.append(row)
return pd.DataFrame(results)
def analyze_all_reports(report_dir):
all_dfs = []
for xml_file in glob.glob(os.path.join(report_dir, '*.xml')):
df = parse_optimization_xml(xml_file)
df['source'] = os.path.basename(xml_file)
all_dfs.append(df)
combined = pd.concat(all_dfs, ignore_index=True)
filtered = combined[
(combined['profit'] > 0) &
(combined['trades'] >= 50) &
(combined['drawdown'] < 25)
].sort_values('sharpe', ascending=False)
print(f"إجمالي: {len(combined)} | نجح: {len(filtered)}")
print(filtered.head(10))
return filtered
تكامل IDE لسير عمل Batch
VS Code: تشغيل التحسين الدفعي كمهمة
أضف إلى .vscode/tasks.json:
{
"label": "تحسين دفعي لجميع الإكسبرتات",
"type": "shell",
"command": "D:\\MT5_Automation\\Scripts\\run_all.bat",
"group": {"kind": "build", "isDefault": true},
"problemMatcher": []
}
Windsurf / Cursor: تحسين دفعي بالذكاء الاصطناعي
"اقرأ جميع ملفات .mq5 في مجلد الإكسبرتات، جمّع كل واحد بـ MetaEditor، ثم شغّل التحسين لكل منها عبر EURUSD و GBPUSD و USDJPY على H1 و H4. حلل جميع نتائج XML وأنشئ جدول ملخص بأفضل المعلمات لكل إكسبرت."
الذكاء الاصطناعي سي:
- سرد جميع ملفات
.mq5في مجلد الإكسبرتات - استدعاء
metaeditor64.exe /compileلكل واحد - توليد ملفات
.iniconfig لكل تركيبة إكسبرت/رمز/إطار زمني - تشغيل
terminal64.exe /config:بالتسلسل أو بالتوازي - تحليل جميع تقارير
.xmlبـ Python - عرض جدول ملخص بأفضل المعلمات
التحكم في إصدارات EA باستخدام Git
my-ea-project/
├── EAs/ # كود مصدر MQL5
├── Configs/ # ملفات .ini
├── Params/ # ملفات .set
├── Scripts/ # سكربتات Batch و Python
└── Reports/ # .gitignore
كل تشغيل تحسين قابل لإعادة الإنتاج من المستودع. استخدم وسوم مثل v1.2-best-sharpe.
تكامل CI/CD
مثال GitHub Actions
name: MT5 EA Backtest CI
on:
push:
paths:
- 'EAs/**'
- 'Configs/**'
schedule:
- cron: '0 2 * * 0' # أسبوعياً يوم الأحد 2 صباحاً
jobs:
backtest:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Install MT5
run: |
choco install metatrader5 --version=5.0
- name: Compile EAs
run: |
Get-ChildItem EAs/*.mq5 | ForEach-Object {
& "C:\Program Files\MetaTrader 5\MetaEditor64.exe" /compile:$_.FullName /log
}
- name: Run Backtests
run: python Scripts/run_all.py
- name: Upload Reports
uses: actions/upload-artifact@v4
with:
name: backtest-reports
path: ./Reports/
جدولة Windows Task Scheduler
تشغيل التحسين تلقائياً بشكل دوري:
$action = New-ScheduledTaskAction -Execute "D:\MT5_Automation\Scripts\run_all.bat"
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At 2am
Register-ScheduledTask -TaskName "MT5_Weekly_Optimization" -Action $action -Trigger $trigger
مشاكل شائعة وحلولها
| المشكلة | الحل |
|---|---|
| MT5 يغلق فوراً | تحقق من ترميز ملف config (ANSI أو UTF-8 بدون BOM) |
| لا يوجد تقرير | تأكد من صلاحيات الكتابة في مسار Report= |
| تعارض المنفذ | استخدم قيم Port= فريدة للتشغيل المتوازي |
| التحسين بطيء | استخدم Optimization=2 (جيني) بدلاً من 1 |
| ملف .set غير موجود | تحقق من مسار ExpertParameters= في MQL5\\Profiles\\Tester\\ |
| التجميع لا ينتج .ex5 | تحقق من ملف .log لأخطاء MQL5 |
| نتائج التحسين فارغة | تأكد من أن ملف .set يحتوي على أعلام Y على المعلمات المراد تحسينها |
الأسئلة الشائعة
كم تحسين متوازي يمكنني تشغيله؟
يعتمد على أنوية المعالج. كل وكيل MT5 يستخدم نواة واحدة. معالج 8 أنوية يمكنه تشغيل 4-6 تحسينات متوازية.
هل يمكنني تشغيل الأتمتة على VPS؟
نعم. Windows VPS مثالي للتحسين الدفعي — يعمل 24/7. اختر VPS بـ 4 أنوية على الأقل و 8GB RAM.
ماذا لو أنتج التحسين آلاف النتائج؟
استخدم محلل Python مع مرشحات الجودة: profit > 0، trades >= 50، drawdown < 25%، sharpe > 0.5. هذا يقلل الآلاف إلى 10-50 مجموعة قابلة للتطبيق.
كيف أتعامل مع إصدارات مختلفة من الإكسبرت؟
استخدم Git للتحكم في الإصدارات. وسم كل إصدار (مثل v1.0-stable، v1.1-better-risk). خزّن ملفات .set و .ini configs بجانب كود الإكسبرت المصدر. هذا يجعل كل تشغيل تحسين قابل لإعادة الإنتاج.
هل يمكنني أتمتة خط الأنابيب بالكامل (تجميع → تحسين → نشر)؟
نعم. أنشئ سكربت رئيسي يقوم بـ: (1) تجميع الإكسبرت، (2) تشغيل التحسين، (3) تحليل النتائج، (4) اختيار أفضل المعلمات، (5) نسخ ملف .set الفائز إلى مجلد الإكسبرت الحي. راجع دليل تحسين CLI لفئة MT5Optimizer في Python التي تتعامل مع الخطوات 1-3.
أدلة ذات صلة
إفصاح التسويق بالعمولة: تحتوي هذه الصفحة على روابط تسويق بالعمولة. قد نحصل على عمولة عند النقر على روابط معينة أو التسجيل لدى الوسطاء المميزين على هذا الموقع، دون أي تكلفة إضافية عليك. مراجعاتنا وتوصياتنا مبنية على بحث شامل وتبقى محايدة.اعرف المزيد
تحذير بشأن المخاطر: تداول الفوركس وعقود الفروقات ينطوي على مخاطر كبيرة للخسارة. الأداء السابق لا يدل على النتائج المستقبلية. عقود الفروقات هي أدوات معقدة وتنطوي على مخاطر عالية لخسارة الأموال بسرعة بسبب الرافعة المالية. تأكد من فهمك للمخاطر قبل التداول. هذا المحتوى لأغراض تعليمية فقط ولا يشكل نصيحة مالية.
فريق Pips Growth
فريق التعليم والأبحاث في التداول
فريق Pips Growth هو مجموعة من المتداولين ذوي الخبرة والمحللين الماليين ومعلمي التداول المكرسين لتقديم تعليم فوركس دقيق وعملي. يجمع فريقنا بين عقود من الخبرة العملية في الأسواق والمعرفة التقنية العميقة لإنشاء أدلة شاملة ومراجعات صادقة للوسطاء واستراتيجيات تداول مجربة. يتم البحث في كل مقال بدقة والتحقق من صحته ومراجعته من قبل عدة أعضاء في الفريق لضمان أعلى جودة ودقة.