Arrays in MQL
- المصفوفات في لغة MQL4
- مقدمة
تعتبر المصفوفات (Arrays) من أهم المفاهيم في أي لغة برمجة، ولغة MQL4 المستخدمة في منصة MetaTrader 4 ليست استثناءً. فهم كيفية استخدام المصفوفات ضروري لتطوير برامج تداول (Expert Advisors) ومؤشرات مخصصة فعالة. تتيح المصفوفات تخزين مجموعة من القيم من نفس النوع تحت اسم واحد، مما يسهل التعامل مع البيانات وتنظيمها. هذه المقالة موجهة للمبتدئين وتهدف إلى شرح كل ما تحتاج إلى معرفته حول المصفوفات في MQL4، مع أمثلة عملية وتوضيحات مفصلة.
- ما هي المصفوفة؟
المصفوفة هي هيكل بيانات يخزن مجموعة من العناصر من نفس النوع (مثل الأعداد الصحيحة، الأرقام العشرية، السلاسل النصية) في مواقع متجاورة في الذاكرة. كل عنصر في المصفوفة يتم الوصول إليه عن طريق فهرس (Index) يبدأ عادةً من الصفر.
تصور المصفوفة كخزانة تحتوي على عدة أدراج. كل درج يمثل عنصرًا في المصفوفة، ورقم الدرج يمثل فهرسه.
- أنواع المصفوفات في MQL4
توجد أنواع مختلفة من المصفوفات في MQL4، بناءً على أبعادها:
- **مصفوفة أحادية البعد (One-Dimensional Array):** هي أبسط أنواع المصفوفات، وتتكون من صف واحد من العناصر. مثال: مصفوفة لتخزين أسعار الإغلاق لآخر 10 شموع.
- **مصفوفة ثنائية البعد (Two-Dimensional Array):** تشبه جدولًا يتكون من صفوف وأعمدة. مثال: مصفوفة لتخزين أسعار الفتح والإغلاق والقمة والقاع لكل شمعة في فترة زمنية معينة.
- **مصفوفات متعددة الأبعاد (Multi-Dimensional Arrays):** يمكن أن تحتوي على أكثر من بعدين، ولكن استخدامها أقل شيوعًا في MQL4.
- تعريف المصفوفات في MQL4
لتعريف مصفوفة في MQL4، يجب تحديد نوع البيانات التي ستخزنها المصفوفة وحجمها (عدد العناصر التي يمكن أن تحتويها).
- تعريف مصفوفة أحادية البعد
```mql4 int MyArray[]; // تعريف مصفوفة من الأعداد الصحيحة، الحجم غير محدد. double Prices[10]; // تعريف مصفوفة من الأرقام العشرية، الحجم ثابت ويساوي 10. string Names[5] = {"Apple", "Banana", "Orange", "Grape", "Mango"}; // تعريف مصفوفة من السلاسل النصية مع تهيئة القيم. ```
- `int MyArray[];`: هذا يعلن عن مصفوفة من النوع `int` (عدد صحيح). لاحظ أننا لم نحدد الحجم. سيتم تحديد الحجم لاحقًا عند تخصيص الذاكرة للمصفوفة.
- `double Prices[10];`: هذا يعلن عن مصفوفة من النوع `double` (رقم عشري) بحجم ثابت هو 10. ستحتوي هذه المصفوفة على 10 عناصر.
- `string Names[5] = {"Apple", "Banana", "Orange", "Grape", "Mango"};`: هذا يعلن عن مصفوفة من النوع `string` (سلسلة نصية) بحجم 5 ويقوم بتهيئة قيم العناصر مباشرةً.
- تعريف مصفوفة ثنائية البعد
```mql4 double MyMatrix[10][5]; // تعريف مصفوفة ثنائية الأبعاد، 10 صفوف و 5 أعمدة. ```
- `double MyMatrix[10][5];`: هذا يعلن عن مصفوفة ثنائية الأبعاد من النوع `double` (رقم عشري). تحتوي المصفوفة على 10 صفوف و 5 أعمدة.
- الوصول إلى عناصر المصفوفة
للوصول إلى عنصر معين في المصفوفة، نستخدم الفهرس (Index) الخاص به. تذكر أن الفهرس يبدأ من الصفر.
- الوصول إلى عناصر المصفوفة أحادية البعد
```mql4 int MyArray[]; MyArray = new int[5]; // تخصيص الذاكرة للمصفوفة MyArray[0] = 10; // تعيين القيمة 10 للعنصر الأول (الفهرس 0). MyArray[1] = 20; // تعيين القيمة 20 للعنصر الثاني (الفهرس 1). int Value = MyArray[2]; // الحصول على قيمة العنصر الثالث (الفهرس 2). Print("Value: ", Value); // طباعة القيمة. ```
- الوصول إلى عناصر المصفوفة ثنائية البعد
```mql4 double MyMatrix[10][5]; MyMatrix[0][0] = 1.23; // تعيين القيمة 1.23 للعنصر في الصف الأول والعمود الأول. MyMatrix[2][3] = 4.56; // تعيين القيمة 4.56 للعنصر في الصف الثالث والعمود الرابع. double Value = MyMatrix[1][2]; // الحصول على قيمة العنصر في الصف الثاني والعمود الثالث. Print("Value: ", Value); // طباعة القيمة. ```
- حجم المصفوفة
لحساب حجم المصفوفة، نستخدم الدالة `ArraySize()`.
```mql4 int MyArray[]; MyArray = new int[5]; int Size = ArraySize(MyArray); // Size سيكون قيمته 5. Print("Array size: ", Size); ```
بالنسبة للمصفوفات متعددة الأبعاد، يجب تحديد البعد الذي تريد حساب حجمه.
```mql4 double MyMatrix[10][5]; int Rows = ArraySize(MyMatrix); // Rows سيكون قيمته 10. int Columns = ArraySize(MyMatrix, 1); // Columns سيكون قيمته 5. Print("Rows: ", Rows); Print("Columns: ", Columns); ```
- تهيئة المصفوفات
يمكن تهيئة المصفوفة عند تعريفها أو لاحقًا باستخدام حلقة `for`.
- التهيئة عند التعريف
كما رأينا في المثال السابق:
```mql4 string Names[5] = {"Apple", "Banana", "Orange", "Grape", "Mango"}; ```
- التهيئة باستخدام حلقة for
```mql4 int MyArray[]; MyArray = new int[5]; for(int i = 0; i < ArraySize(MyArray); i++) {
MyArray[i] = i * 10; // تعيين القيم 0, 10, 20, 30, 40.
} ```
- نسخ المصفوفات
يمكن نسخ محتويات مصفوفة إلى مصفوفة أخرى باستخدام الدالة `ArrayCopy()`.
```mql4 int SourceArray[] = {1, 2, 3, 4, 5}; int DestinationArray[]; ArrayResize(DestinationArray, ArraySize(SourceArray)); // يجب أن يكون حجم المصفوفة الوجهة هو نفس حجم المصفوفة المصدر. ArrayCopy(SourceArray, DestinationArray); // الآن DestinationArray يحتوي على نفس القيم الموجودة في SourceArray. ```
- البحث في المصفوفات
يمكن البحث عن قيمة معينة في المصفوفة باستخدام حلقة `for` والتحقق من كل عنصر.
```mql4 int MyArray[] = {10, 20, 30, 40, 50}; int SearchValue = 30; int Index = -1; // قيمة افتراضية للإشارة إلى أن القيمة لم يتم العثور عليها. for(int i = 0; i < ArraySize(MyArray); i++) {
if(MyArray[i] == SearchValue) { Index = i; break; // الخروج من الحلقة بمجرد العثور على القيمة. }
} if(Index != -1) {
Print("Value found at index: ", Index);
} else {
Print("Value not found.");
} ```
- استخدام المصفوفات في التداول
تستخدم المصفوفات على نطاق واسع في تطبيقات التداول، على سبيل المثال:
- **تخزين بيانات الأسعار:** يمكن استخدام مصفوفة لتخزين أسعار الفتح والإغلاق والقمة والقاع لكل شمعة في الرسم البياني. هذا مفيد لحساب المؤشرات الفنية مثل المتوسطات المتحركة و مؤشر القوة النسبية.
- **تخزين نتائج التحليل الفني:** يمكن استخدام مصفوفة لتخزين نتائج تطبيق استراتيجية تداول معينة على مجموعة من الأصول.
- **إدارة الصفقات:** يمكن استخدام مصفوفة لتخزين معلومات حول الصفقات المفتوحة، مثل سعر الدخول ووقف الخسارة وجني الأرباح.
- **تحليل حجم التداول:** يمكن استخدام المصفوفات لتخزين وتحليل بيانات حجم التداول لفترات زمنية مختلفة.
- **تطبيق استراتيجيات التداول المعقدة:** تساعد المصفوفات في تنظيم البيانات اللازمة لتنفيذ استراتيجيات تداول متطورة.
- **تحليل الاتجاهات:** يمكن استخدام المصفوفات لتخزين بيانات الاتجاهات وتحديد نقاط الدخول والخروج المحتملة.
- **تطوير نظام إدارة المخاطر:** تساعد المصفوفات في حساب وتقييم المخاطر المرتبطة بالصفقات.
- **تنفيذ تداول الخوارزمي:** تعتبر المصفوفات أساسية في بناء خوارزميات التداول الآلية.
- **تحديد نقاط الدعم والمقاومة:** يمكن استخدام المصفوفات لتخزين مستويات الدعم والمقاومة المحتملة.
- **تحليل أنماط الشموع:** تساعد المصفوفات في تخزين بيانات الشموع وتحليل الأنماط المختلفة.
- **تحسين أداء الخيارات الثنائية:** يمكن استخدام المصفوفات لتحليل البيانات التاريخية وتحسين استراتيجيات الخيارات الثنائية.
- **تطبيق استراتيجية مارتينجال:** تستخدم المصفوفات لتتبع حجم الصفقة وتعديله وفقًا لاستراتيجية مارتينجال.
- **تحليل تقلبات الأسعار:** يمكن استخدام المصفوفات لتخزين بيانات التقلبات وتحديد فرص التداول.
- **تطوير نظام التداول الآلي:** تعتبر المصفوفات جزءًا أساسيًا من بناء نظام تداول آلي كامل.
- **تحسين إدارة رأس المال:** تساعد المصفوفات في تنظيم وتتبع رأس المال المستخدم في التداول.
- **تطبيق استراتيجية المضاربة:** تستخدم المصفوفات لتحديد نقاط الدخول والخروج السريعة في استراتيجية المضاربة.
- **تحليل حركة السعر:** يمكن استخدام المصفوفات لتخزين بيانات حركة السعر وتحديد الاتجاهات.
- **تطوير مؤشر مخصص:** تستخدم المصفوفات لتخزين البيانات اللازمة لحساب قيم المؤشر المخصص.
- **تحسين سرعة التنفيذ:** تساعد المصفوفات في تنظيم البيانات وتسريع عملية تنفيذ الصفقات.
- **تطبيق استراتيجية التداول المتأرجح:** تستخدم المصفوفات لتحديد نقاط الدخول والخروج في استراتيجية التداول المتأرجح.
- **تحليل العلاقات المتبادلة:** يمكن استخدام المصفوفات لتحليل العلاقات المتبادلة بين الأصول المختلفة.
- **تطوير نظام تنبيهات التداول:** تستخدم المصفوفات لتخزين شروط التنبيهات وإرسالها عند تحققها.
- **تحسين دقة التنبؤ:** تساعد المصفوفات في تحليل البيانات التاريخية وتحسين دقة التنبؤات.
- **تطبيق استراتيجية التداول على الأخبار:** تستخدم المصفوفات لتخزين بيانات الأخبار وتحليل تأثيرها على الأسعار.
- الخلاصة
المصفوفات هي أداة قوية في لغة MQL4، وفهمها ضروري لتطوير برامج تداول فعالة. من خلال تعلم كيفية تعريف المصفوفات والوصول إلى عناصرها وتهيئة قيمها، يمكنك الاستفادة من إمكاناتها الكاملة في تطوير استراتيجيات التداول الخاصة بك. تذكر أن الممارسة والتجربة هما المفتاح لإتقان استخدام المصفوفات في MQL4.
ابدأ التداول الآن
سجل في IQ Option (الحد الأدنى للإيداع $10) افتح حساباً في Pocket Option (الحد الأدنى للإيداع $5)
انضم إلى مجتمعنا
اشترك في قناة Telegram الخاصة بنا @strategybin للحصول على: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات باتجاهات السوق ✓ مواد تعليمية للمبتدئين