====================================
هذا الدرس سألخص فيه كل المعلومات الأساسية عن اللغة MQL4 بحيث يجب على الجميع فهم هذه المعلومات واستيعابها بشكل جيد.
ستكون هذه المعلومات على شكل نقاط لسهولة الطرح والفهم وطرح الأسئلة.
1- هذه اللغة خاصة لبرامج التداول ميتاتريدر الإصدار الرابع وهو الإصدار الأحدث ( لأن لغة الإصدارات السابقة مختلفة وملغية ).
2- هيكلية هذه اللغة مشابهة ومطابقة للغة السي ( C ) بحيث سيجد مبرمج السي سهولة أكبر في تعلمها ولكن يجب أن لا يخاف
من لا يعرف السي أو البرمجة بشكل عام. لأنه يستطيع بسهولة مجاراة مبرمج السي مع قليل من الجهد.
3- اللغة MQL4 حساسة لحالة الأحرف يعني مثلا الوظيفة OrderSend لن تتعرف عليها اللغة إذا ما كتبتها
ordersend. وسيعطيك رسالة خطأ. لذلك يجب الانتباه جيدا عند كتابة الكود.
4- الكود والسورس والنص البرمجي ونص البرنامج كلها مرادفات لنفس المعنى.
5- لهذه اللغة MQL4 محرر برامج يسمى ميتا إيديتور ****Editor ومن خلاله نستطيع كتابة برامجنا وعمل نسخة تنفيذية لها ينفذها برنامج التداول.
6- برنامج التداول ميتاتريدر ****Trader لا يتعرف على النص البرمجي مباشرة mq4 بل يتعرف فقط على النسخة التنفيذية ex4.
7- هناك ثلاثة أنواع من البرامج التي يمكن كتابتها مع هذه اللغة: برنامج مؤشر - برنامج اكسبيرت - برنامج سكريبت.
8- هناك أنواع إضافية مساعدة من أنواع الكود الذي يمكن كتابته أيضا مثل قوالب البرامج ومكتبات الأكواد الجاهزة.
9- يحتوي برنامج الميتاإيديتور على نظام مساعدة قوي. فقط ضع الكورسر على أي كلمة في النص البرمجي واضغط F1 ليظهر لك مباشرة طريقة
استخدام الوظيفة مع الشرح والبارامترات وأي وظائف أخرى مشابهة.
شرح برنامج التداول من وجهة نظر لغة البرمجة MQL4:
سأقوم هنا بشرح المفاهيم والمصطلحات التي سبق وأن تعرفت عليها في برنامج التداول والتي لها أهمية خاصة في لغة البرمجة MQL4 والتي سوف
تراها كثيرا كوظائف أو متحولات في نص اللغة نفسها.
بكلام آخر كل هذه المصطلحات ستراها في اللغة MQL4 لذلك ركز معها قليلا وحاول أن تنظر لها على أساس أنها مفاهيم برمجية.
- رمز العملة Symbol وهو يمثل اسم العملة أو السلعة مثل GBPUSD أو EURUSD.
- سعر الطلب Ask وهو يمثل السعر الذي تشتري به.
- سعر العرض Bid وهو يمثل السعر الذي تبيع به.
- أعلى سعر High وهو يمثل أعلى سعر وصل إليه في الشمعة المحددة.
- أدنى سعر Low وهو يمثل أدنى سعر وصل إليه في الشمعة المحددة.
- سعر الإفتتاح **** وهو يمثل سعر الافتتاح في الشمعة المحددة.
- سعر الإغلاق Close وهو يمثل سعر الإغلاق في الشمعة المحددة.
- حجم التداول Volume وهو يمثل حجم التداول الحاصل في الشمعة المحددة.
- الزمن Time وهو يمثل وقت وتاريخ الشمعة الحالية.
- الفترة Period وهو يمثل الفترة التي نعمل عليها هل هي يوم أو أربع ساعات وهكذا.
- عدد الشموع Bars وهو يمثل عدد الشموع الموجودة على الشارت الحالي.
- الخانات العشرية Digits وهو يمثل عدد الخانات العشرية لكل نوع من زوج العملات. فمثلا الباوند دولار له أربع خانات بعد الفاصلة بينما الذهب له خانتان فقط.
- قيمة النقطة Point وهي تمثل قيمة النقطة العشرية. فهي مثلا في الباوند دولار تساوي 0.0001 وفي الذهب تساوي 0.01.
- معلومات كاملة عن الصفقات المفتوحة تجدها أسفل البرنامج في صفحة Trades حيث نجد رقم الصفقة وتاريخ فتحها وسعر الفتح والهدف
والستوب وغيرها من المعلومات الأخرى.
كل هذه المعلومات نستطيع الوصول لها برمجيا من خلال وظائف خاصة بالصفقات.
- في الصفحة المجاورة Account History سوف نجد كل المعلومات عن صفقاتنا المغلقة والمحذوفة وأيضا نستطيع الوصول لهذه المعلومات
برمجيا بواسطة نفس الوظائف الخاصة بالصفقات.
- كل المؤشرات القياسية والمؤشرات الخاصة والأدوات الرسومية الموجودة داخل برنامج الميتا تريدر نستطيع الوصول لها برمجيا واستخدامها داخل برامجنا.
- كل المعلومات عن الحساب الحالي كرقمه واسمه واسم الشركة واسم السيرفر والربح أو الخسارة وغيرها من معلومات الحساب يمكن الوصول لهذه المعلومات برمجيا من خلال وظائف خاصة.
وفيما يلي شرح نظري بحت عن لغة البرمجة MQL4
وهو أيضا ينطبق على أي لغة برمجية أخرى.
والغرض من هذا الشرح هو بناء أساس قوي لتعلم لغة البرمجة MQL4 وجعل أي معلومات مستقبلية مبنية على أساس متين من الفهم العميق لما تعنيه لغة البرمجة أصلا.
- هذه اللغة مثل أي لغة برمجية أخرى كالفيجول بيسك أو الدلفي أو السي لها قواعد يجب أن تتعلمها وتمشي عليها.
- لا يمكن بأي حال أن تخرج عن هذه القواعد قيد أنملة.
- كل حرف أو فاصلة أو قوس له معنى وإن أي إخلال بهذه القواعد يعني عدم القدرة على تنفيذ البرنامج أصلا.
- لغة البرمجة تستطيع أن تنظر لها على أنها لغة محكية مثل أي لغة موجودة عالميا كاللغة العربية أو الانجليزية.
- فللغات المحكية قواعد للكتابة والقراءة وأسماء وجمل وحروف وهكذا. وهذه هي عناصر اللغة.
- لن تستطيع البدء في كتابة برنامج قبل الإلمام التام بالعناصر الأساسية ونسبة كبيرة من العناصر الفرعية.
- يعني يمكن البدء بالبرمجة بعد تمكنك من جميع العناصر الرئيسية للغة ومن ثم تثري خبرتك ومهاراتك بمزيد من الفهم للعناصر الإضافية المتنوعة.
- وقد تصبح مبرمجا بارعا ولكنك مثلا لا تعرف طريقة إرسال بريد الكتروني أو كيفية نشر معلومات صفقاتك على النت مباشرة.
- ولكن يجب عليك أن تعرف أن هناك هذه الإمكانية على الأقل في حال احتجت إليها.
- نعود للغة البرمجة من جديد... كذلك فإن للغة البرمجة عناصر هي عبارة عن كلمات محجوزة وهيكلية معينة لكتابتها.
- إن عناصر اللغة البرمجية تقريبا واحدة في كل لغات البرمجة ولكن تختلف كل لغة عن الأخرى بطريقة الكتابة وهيكلية اللغة.
- كل اللغات البرمجية تتعامل مع الأرقام وحصرا مع الأرقام ولا تفهم إلا لغة الأرقام.
- أي معلومة تتعامل معها اللغة البرمجية هي في النهاية رقم حتى ولو رأيتها أنت على أنها نص أو صورة أو رقم.
- فمثلا لعرض نص معين على الشاشة نستخدم الأمر Print على الشكل التالي:
- Print "Welcom World" فأنت هنا ترى نصا ولكنه في الحقيقة كله أرقام حيث أن الحرف W يمثله الرقم كذا والحرف e يمثله رقم آخر وهكذا.
- وعند تنفيذ الأمر حقيقة يقوم الأمر Print بإعادة رقم الحرف W إلى حرف W على الشاشة وهلم جرا.
- حتى الصور والأصوات يتم تحويلها إلى أرقام لتخزينها أو التعامل معها وعند عرضها أو عزفها بالنسبة للصوت يتم تحويل هذه الأرقام إلى صورة على الشاشة أو صوت يمرر إلى كرت الصوت.
- لذلك يجب أن تفكر أنت أيضا بنفس طريقة لغة البرمجة بحيث ترى الأشياء أمامك على أنها أرقام.
- خذ مثلا الشارت الذي أمامك كله عبارة عن أرقام في أرقام يقوم برنامج التداول بعرض هذه الأرقام على شكل شموع مرتبطة بالزمن. حتى الزمن هو عبارة عن أرقام أيضا.
- لذلك سنتعلم في الدروس القادمة إن شاء الله أن نجعل طريقة تفكيرنا رقمية بحتة وأن نحول أي فكرة أو استراتيجية إلى مجرد أرقام لكي نستطيع أن نبرمج هذه الفكرة إلى مؤشر أو إلى اكسبيرت.
- هذه المعلومات قد تبدو للوهلة الأولى بديهية لكنها على قدر كبير من الأهمية. ويجب التنبه لها جيدا.
إن أي لغة برمجية تتكون من العناصر التالية:
== الثوابت أو القيم الثابتة Constant: فكما قلنا سابقا بما أن اللغة البرمجية تتعامل مع الأرقام فقط ولأن العقل البشري لن يستطيع حفظ مدلولات كل الأرقام التي يحتاجها. فقد تطور مفهوم برمجي هام هو الثوابت.
بمعنى بدل أن نستخدم الرقم 255 للدلالة على اللون الأحمر فإننا نكتب بدلا عن الرقم 255 الكلمة Red والتي هي عبارة عن متحول ثابت قيمته 255.
وهكذا تم حل مشكلة التعامل مع مدلولات الأرقام بتحويل الأرقام إلى ثوابت ليتعامل معها المبرمج ثم يقوم البرنامج بتحويل هذه الثوابت إلى أرقام مرة أخرى عندما يتعامل هو معها.
وسوف نجد الكثير من الثوابت في لغة البرمجة MQL4 والتي تسهل العملية البرمجية بشكل كبير.
يمكننا طبعا إذا كانت ذاكرتنا قوية جدا أن نستخدم الأرقام مباشرة بدلا من استخدام الثوابت ولكن هذا الأمر شاق جدا عند كتابة الكود أو عند تعديله أيضا.
== المتحولات Variables: وهي عبارة عن متحولات نستطيع تخزين قيم رقمية صحيحة دون فاصلة أو قيم رقمية بفاصلة أو قيم نصية أو قيم منطقية.
والمتحولات هي عبارة أسماء نختارها نحن لحفظ المعلومات التي نريد فيها ويمكننا تغيير محتوياتها في أي لحظة نريد وذلك بعكس الثوابت التي لا يمكن تغيير محتواها.
وهذه المتحولات ضرورية جدا لعمل البرنامج ولا يمكن أن يخلو أي برنامج منها.
== المصفوفات Arrays: هي عبارة عن متحولات من نوع خاص مثل المصفوفات التي درسناها أيام الثانوي. بحيث تكون عبارة عن متحول له بعد واحد أو أكثر.
يمكن تخزين قيم مختلفة في كل خلية من هذه المصفوفة ونستطيع العمل عليها مع الحلقات وبذلك نوفر الكثير من الوقت والجهد.
مثال عن مصفوفات سوف نتعامل معها كثيرا في دروسنا القادمة هي مصفوفة سعر الإغلاق Close. حيث أن [Close[0 تعطينا سعر الإغلاق للشمعة الحالية.
و [Close[1 تعطينا سعر الإغلاق للشمعة التي تسبقها وهكذا.
وكذلك فإن لأسعار الفتح والأعلى والأدنى مصفوفات خاصة بها كما سنرى في الدروس القادمة بإذن الله.
الشروط Conditions: تمكننا تعليمة الشروط من تنفيذ أمر برمجي أو كتلة من الأوامر البرمجية عند تحقق شرط أو شروط معينة.
وعند عدم تحقق الشروط فإن الأوامر البرمجية الخاصة بهذه الشروط لن تنفذ. وهذه الخاصية الموجودة في كل اللغات هي ما تعطي لبرنامجنا نوع من الذكاء البشري.
لأن معظم حياتنا تنطلق من تنفيذ شيء معين عند تحقق شروطه. فنحن نصلي العصر مثلا إذا أذن العصر أي أن الشرط قد تحقق. ولا نأكل حتى نجوع أي تحقق شرط الأكل ( نظريا ).
فنحن دائما نتحقق من الشرط الخاص بالفعل لنقوم بهذا العمل في حال تحقق شرطه.
وهكذا هي لغات البرمجة تبحث دائما عن تحقق شروط معينة لتنفيذ الأوامر المرتبطة بهذه الشروط. وإن قوة أي برنامج هي إحاطته الشاملة بكل الشروط والاحتمالات الممكنة والتي يعرف البرنامج عندها ماذا يفعل عند تحقق كل شرط منها.
فمثلا من القصص الطريفة عن أحد البرامج المستخدمة في الحماية هو أن نظام حماية لأحد البنوك يديره برنامج وظيفته الاتصال بالطواريء عند تحقق أي شرط من شروط التسلل إلى هذا البنك بواسطة أجهزة حساسة.
المهم هو أن أحد اللصوص قام بالتسلل إلى البنك وعندها شعر هذا البرنامج الذكي بذلك فقام بالاتصال بالطواريء. ولكن الخط كان مشغولا. ولأنه لم يعالج هذا الشرط أو هذا الاحتمال أن يجد الخط مشغولا فلم يعيد الاتصال مرة أخرى .
وتصورا عندها انهيار كامل لهذا النظام الامني لأن البرنامج لم يعالج كل الاحتمالات الممكنة والتي سهلت على اللص مهمته.
( أنا أتوقع أن اللص هو المبرمج نفسه )
== الحلقات Loops: تعتبر الحلقات من الأمور الضرورية في أي لغة برمجية ولا يمكن الاستغناء عنها أبدا. وهي عبارة عن طريقة نستطيع من خلالها تكرار عمل روتيني موحد عدد محدد من المرات.
فمثلا لرسم مؤشر على الشارت فإننا نستخدم حلقة تمر على كل الشموع شمعة شمعة لرسم مؤشرنا على شمعة وفقا لشروطها. ولولا الحلقات لاضطررنا إلى تكرار الأمر البرمجي عددا مساويا لعدد الشموع وهذا أمر عقيم طبعا.
== الوظائف Functions: الوظائف هي عبارة عن كتل برمجية يتم تجميعها في وظيفة واحدة يمكننا عندها استدعاء وتنفيذ كل هذه الكتلة البرمجية بكتابة اسم الوظيفة فقط.
هذا الأمر يوفر على المبرمج كتابة الكود بشكل متكرر كما أنها تسمح له بسهولة التعديل والتنقيح في الكود.
MQL4.