x32x01
أدارة أكتب كود
- بواسطة x32x01 ||
أولا أحب أن أبشركم بأن إمكانيات هذه اللغة الجديدة صارت قوية جدا وأصبحت لغة برمجة حقيقية مقادة بالأحداث على عكس اللغة السابقة القاصرة نوعا ما .
ولكن هذه التطويرات الهامة لها سلبية وهي عدم التوافق مع الإصدار السابق لهذه اللغة .
يعنى MQL4 مختلفة بعض الشئ عن MQL5 ولابد من برمجة اى مؤشر أو اكسبرت كان بعمل على اللغة القديمة إلى اللغة الجديدة
يعنى يجب أن يتعلم المبرمج لغة MQL5 من جديد كأنها لغة جديدة تماما .
طبعا ستستفيد من خبرتك السابقة ولكن يجب عليك تعلم منهجية جديدة للبرمجة ووظائف وأوامر برمجية جديدة بالمرة .
لذلك قررت فتح هذا الموضوع لنبدأ سوية تعلم هذه اللغة من أولها لآخرها إن شاء الله .
سنبدأ أولا بشرح بعض الفوارق الجوهرية بين اللغة السابقة واللغة الجديدة لكي نفهم أسلوب اللغة الجديدة في البرمجة التي كما قلت هي مقادة بالأحداث .
أي أن المبرمج يستطيع برمجة مؤشر أو اكسبيرت يستجيب لأحداث خارجية مثل حركة الماوس والضغط على لوحة المفاتيح من قبل المستخدم .
كما أنه يستطيع كتابة أحداث مرتبطة بالعمليات على الصفقات مثل فتح وإغلاق الصفقة أو عند الوصول للهدف أو إلى الوقف .
وهذه الأمور كانت شبه مستحيلة في اللغة السابقة .
يمكن توضيح منهجية عمل أي برنامج ( اكسبيرت أو مؤشر أو سكريبت ) في الميتاتريدر 5 بأنها برمجة منهجية مقادة بالأحداث .
والحدث Event هو عبارة عن وظيفة محددة يتم تنفيذها ضمن سياقها البرمجي في حال حدوث شرطها .
فمثلا عند بدء تشغيل مؤشر وذلك بوضعه على الشارت فإن برنامج الميتاتريدر 5 سوف يطلق حدث التهيئة وهو المتمثل
بالوظيفة OnInit .( خلى بالكم من أسم الدالة ديه)
يقوم المبرمج بوضع كل التعليمات البرمجية التي يريد تنفيذها لمرة واحدة فقط عند بدء تشغيل المؤشر في هذه الوظيفة .
وعادة تكون هذه التعليمات البرمجية عبارة عن تهيئة البارامترات والبفرات وجميع خصائص المؤشر الرسومية .
طبعا كما هو واضح فإن هذه الوظيفة هي البديل لوظيفة Init في اللغة السابقة MQL4 .
بشكل معاكس فإن هناك حدث يتم إطلاقه عند إزالة المؤشر من الشارت أو عند إغلاق الميتاتريدر نفسه والمؤشر على أحد شارتاته .
وهذا الحدث هو حدث إزالة التهيئة وهو المتمثل بالوظيفة OnDeinit .
يقوم المبرمج بوضع التعليمات البرمجية التي يريد تنفيذها عند انتهاء عمل المؤشر .
وغالبا تكون هذه التعليمات عبارة عن كتابة نتائج معينة إلى ملف نصي وإغلاق ملفات مفتوحة وما شابه ذلك .
من خلال ما سبق تعلمنا أن الوظيفة OnInit يتم بها البدء بتنفيذ المؤشر أو الاكسبيرت أو السكريبت .
والوظيفة OnDeinit يتم تنفيذها عند إغلاق المؤشر أو الاكسبيرت أو السكريبت عند انتهاء عمله في الذاكرة .
هاتين الوظيفتين هما عامتين لكل برامج الميتاتريدر 5 .
لأننا سنتعرف لاحقا على وظائف أخرى خاصة لكل نوع من أنواع البرامج وهي إما مؤشر أو اكسبيرت أو سكريبت .
وبشكل سريع نقول أن المؤشر هو عبارة عن برنامج وظيفته الرسم على الشارت ولا يمكنك من خلاله تنفيذ صفقات أبدا .
وأن الاكسبيرت هو عبارة عن برنامج لإدارة الصفقات ولا يمكنك الرسم من خلاله على الشارت .
أما السكريبت فهو عبارة عن برنامج ينفذ لمرة واحدة فقط يمكنك من خلاله إدارة صفقاتك أو عمل أشياء أخرى سنراها لاحقا .
كما هو الحال مع أية لغة برمجة أخرى فإن البرنامج الذي نكتبه عبارة عن ملف نصي عادي .
بمعنى أن ما نكتبه هو تعليمات برمجية معينة بتركيب نحوي خاص بكل لغة .
لغتنا التي سوف نتعلمها هو لغة الميتاتريدر 5 وهي قريبة في تركيبها النحوي من لغة سي ++.
ولكن قبل اى شى دعونا نعرف كيف ننشأ على سبيل المثال أكسبرت جديد .. تابع معى
أول شى نضغط على New
ونختار Expert Advisor
وفى خانه الأسم نكتب أسم الاكسبرت بجانب Expert/ ( نكتب اى أسم )
ونكتب أسم الكاتب أو اسم مطور الأكسبرت
وتالث خانة أسم اللينك الخاص بمطور الأكسبرت
ثم نضغط Next
نضغط الان على نكست وسنعرف كل شئ فى أوانه
ثم Next ثم Finish
ستظهر أمامنا هذه الشاشة ..
وهيا الى سوف نكتب فيها أكوادنا ان شاء الله
دعونا نتعرف عليها خطوة خطوة
أول وأبسط شيء سنتعلمه حاليا هو سطر الملاحظات Comments .
هذا السطر يمكننا من كتابة أي شرح داخل الكود نفسه ولا يعتبر ما بداخله أوامر برمجية .
بل هو فقط شرح داخل الكود ويعتبر كتوثيق للكود وشرحه للمبرمج نفسه أو لغيره .
سطر الملاحظات يجب أن يبدأ بحرفي // ثم نستطيع بعده كتابة الشرح الذي نريده .
مثال :
كما تلاحظون أن أول كل سطر يبدأ بحرفي // .
طبعا هذا التوثيق والشرح لا يؤثر على عمل البرنامج نفسه أبدا .
وذلك لأن برنامج الميتاتريدر يتجاهل كل الأسطر التي تبدأ بالحرفين // .
هناك فائدة أخرى لكتابة الملاحظات داخل الكود نفسه وهي :
أن المبرمج يحتاج أحيانا إلى تجربة شيء معين داخل سطر برمجي معين أو عدة أسطر .
فبدل أن يحذف السطر الأساسي من الكود الذي سيرجع له لاحقا .
فإنه يقوم بوضع حرفي // قبل السطر البرمجي الأساسي الذي يريد إلغائه وتجربة سطر برمجي آخر .
وعند الانتهاء من تجربته فإنه يقوم بإعادة السطر البرمجي وذلك بحذف // من أوله .
هناك طريقة أخرى لكتابة الشروحات والتعليقات وهي خاصة ببلوك كامل أي عدة أسطر متتالية .
فمثلا لو أردنا أن يكون الشرح على أكثر من سطر أو أردنا إيقاف عمل أكثر من سطر برمجي متتالي في نفس الوقت .
فبدل أن نضع أول كل سطر // وهذه العملية قد تكون مجهدة نوعا ما .
فإننا ببساطة نقوم بكتابة */ أول البلوك و /* نهاية البلوك .
مثال :
هذا كل شيء عن التعليقات وكيفية كتابتها والاستفادة منها برمجيا .
أذا كان لديك اى استفسار لا تترد فى مناقشتة معنا هنا فى التعليقات وشكرا
ولكن هذه التطويرات الهامة لها سلبية وهي عدم التوافق مع الإصدار السابق لهذه اللغة .
يعنى MQL4 مختلفة بعض الشئ عن MQL5 ولابد من برمجة اى مؤشر أو اكسبرت كان بعمل على اللغة القديمة إلى اللغة الجديدة
يعنى يجب أن يتعلم المبرمج لغة MQL5 من جديد كأنها لغة جديدة تماما .
طبعا ستستفيد من خبرتك السابقة ولكن يجب عليك تعلم منهجية جديدة للبرمجة ووظائف وأوامر برمجية جديدة بالمرة .
لذلك قررت فتح هذا الموضوع لنبدأ سوية تعلم هذه اللغة من أولها لآخرها إن شاء الله .
سنبدأ أولا بشرح بعض الفوارق الجوهرية بين اللغة السابقة واللغة الجديدة لكي نفهم أسلوب اللغة الجديدة في البرمجة التي كما قلت هي مقادة بالأحداث .
أي أن المبرمج يستطيع برمجة مؤشر أو اكسبيرت يستجيب لأحداث خارجية مثل حركة الماوس والضغط على لوحة المفاتيح من قبل المستخدم .
كما أنه يستطيع كتابة أحداث مرتبطة بالعمليات على الصفقات مثل فتح وإغلاق الصفقة أو عند الوصول للهدف أو إلى الوقف .
وهذه الأمور كانت شبه مستحيلة في اللغة السابقة .
يمكن توضيح منهجية عمل أي برنامج ( اكسبيرت أو مؤشر أو سكريبت ) في الميتاتريدر 5 بأنها برمجة منهجية مقادة بالأحداث .
والحدث Event هو عبارة عن وظيفة محددة يتم تنفيذها ضمن سياقها البرمجي في حال حدوث شرطها .
فمثلا عند بدء تشغيل مؤشر وذلك بوضعه على الشارت فإن برنامج الميتاتريدر 5 سوف يطلق حدث التهيئة وهو المتمثل
بالوظيفة OnInit .( خلى بالكم من أسم الدالة ديه)
يقوم المبرمج بوضع كل التعليمات البرمجية التي يريد تنفيذها لمرة واحدة فقط عند بدء تشغيل المؤشر في هذه الوظيفة .
وعادة تكون هذه التعليمات البرمجية عبارة عن تهيئة البارامترات والبفرات وجميع خصائص المؤشر الرسومية .
طبعا كما هو واضح فإن هذه الوظيفة هي البديل لوظيفة Init في اللغة السابقة MQL4 .
بشكل معاكس فإن هناك حدث يتم إطلاقه عند إزالة المؤشر من الشارت أو عند إغلاق الميتاتريدر نفسه والمؤشر على أحد شارتاته .
وهذا الحدث هو حدث إزالة التهيئة وهو المتمثل بالوظيفة OnDeinit .
يقوم المبرمج بوضع التعليمات البرمجية التي يريد تنفيذها عند انتهاء عمل المؤشر .
وغالبا تكون هذه التعليمات عبارة عن كتابة نتائج معينة إلى ملف نصي وإغلاق ملفات مفتوحة وما شابه ذلك .
من خلال ما سبق تعلمنا أن الوظيفة OnInit يتم بها البدء بتنفيذ المؤشر أو الاكسبيرت أو السكريبت .
والوظيفة OnDeinit يتم تنفيذها عند إغلاق المؤشر أو الاكسبيرت أو السكريبت عند انتهاء عمله في الذاكرة .
هاتين الوظيفتين هما عامتين لكل برامج الميتاتريدر 5 .
لأننا سنتعرف لاحقا على وظائف أخرى خاصة لكل نوع من أنواع البرامج وهي إما مؤشر أو اكسبيرت أو سكريبت .
وبشكل سريع نقول أن المؤشر هو عبارة عن برنامج وظيفته الرسم على الشارت ولا يمكنك من خلاله تنفيذ صفقات أبدا .
وأن الاكسبيرت هو عبارة عن برنامج لإدارة الصفقات ولا يمكنك الرسم من خلاله على الشارت .
أما السكريبت فهو عبارة عن برنامج ينفذ لمرة واحدة فقط يمكنك من خلاله إدارة صفقاتك أو عمل أشياء أخرى سنراها لاحقا .
كما هو الحال مع أية لغة برمجة أخرى فإن البرنامج الذي نكتبه عبارة عن ملف نصي عادي .
بمعنى أن ما نكتبه هو تعليمات برمجية معينة بتركيب نحوي خاص بكل لغة .
لغتنا التي سوف نتعلمها هو لغة الميتاتريدر 5 وهي قريبة في تركيبها النحوي من لغة سي ++.
ولكن قبل اى شى دعونا نعرف كيف ننشأ على سبيل المثال أكسبرت جديد .. تابع معى
أول شى نضغط على New
ونكتب أسم الكاتب أو اسم مطور الأكسبرت
وتالث خانة أسم اللينك الخاص بمطور الأكسبرت
ثم نضغط Next
ثم Next ثم Finish
وهيا الى سوف نكتب فيها أكوادنا ان شاء الله
دعونا نتعرف عليها خطوة خطوة
Code:
//+------------------------------------------------------------------+
//| FirstExpert.mq5 |
//| Copyright 2023, Dev.Mostafa Elghayesh |
//| HTTPS://WwW.TabCode.Net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, Dev.Mostafa Elghayesh"
#property link "HTTPS://WwW.TabCode.Net"
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
أول وأبسط شيء سنتعلمه حاليا هو سطر الملاحظات Comments .
هذا السطر يمكننا من كتابة أي شرح داخل الكود نفسه ولا يعتبر ما بداخله أوامر برمجية .
بل هو فقط شرح داخل الكود ويعتبر كتوثيق للكود وشرحه للمبرمج نفسه أو لغيره .
سطر الملاحظات يجب أن يبدأ بحرفي // ثم نستطيع بعده كتابة الشرح الذي نريده .
مثال :
Code:
//+------------------------------------------------------------------+
//| FirstExpert.mq5 |
//| Copyright 2023, Dev.Mostafa Elghayesh |
//| HTTPS://WwW.TabCode.Net |
//+------------------------------------------------------------------+
كما تلاحظون أن أول كل سطر يبدأ بحرفي // .
طبعا هذا التوثيق والشرح لا يؤثر على عمل البرنامج نفسه أبدا .
وذلك لأن برنامج الميتاتريدر يتجاهل كل الأسطر التي تبدأ بالحرفين // .
هناك فائدة أخرى لكتابة الملاحظات داخل الكود نفسه وهي :
أن المبرمج يحتاج أحيانا إلى تجربة شيء معين داخل سطر برمجي معين أو عدة أسطر .
فبدل أن يحذف السطر الأساسي من الكود الذي سيرجع له لاحقا .
فإنه يقوم بوضع حرفي // قبل السطر البرمجي الأساسي الذي يريد إلغائه وتجربة سطر برمجي آخر .
وعند الانتهاء من تجربته فإنه يقوم بإعادة السطر البرمجي وذلك بحذف // من أوله .
هناك طريقة أخرى لكتابة الشروحات والتعليقات وهي خاصة ببلوك كامل أي عدة أسطر متتالية .
فمثلا لو أردنا أن يكون الشرح على أكثر من سطر أو أردنا إيقاف عمل أكثر من سطر برمجي متتالي في نفس الوقت .
فبدل أن نضع أول كل سطر // وهذه العملية قد تكون مجهدة نوعا ما .
فإننا ببساطة نقوم بكتابة */ أول البلوك و /* نهاية البلوك .
مثال :
Code:
/*
#property copyright "Copyright 2023, Dev.Mostafa Elghayesh"
#property link "HTTPS://WwW.TabCode.Net"
#property version "1.00"
*/
أذا كان لديك اى استفسار لا تترد فى مناقشتة معنا هنا فى التعليقات وشكرا