اف اكس ارابيا..الموقع الرائد فى تعليم فوركس Forex

اف اكس ارابيا..الموقع الرائد فى تعليم فوركس Forex (https://fx-arabia.com/vb/index.php)
-   منتدى تعليم الفوركس (https://fx-arabia.com/vb/forumdisplay.php?f=3)
-   -   الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد (https://fx-arabia.com/vb/showthread.php?t=21198)

مازن المشهداني 19-05-2012 01:12 PM

الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
السلام عليكم ورحمة الله وبركاته
اخوتي الكرام اعضاء منتدى اف اكس ارابيا
اليوم جئتكم بموضوع هو ليس بالموضوع الجديد ولكنه مهم جدا جدا جدا
فهو يتحدث عن تعليم لغة MQL4 فقد وجدت العديد من الاخوة اعضاء المنتدى من اللذين يهتمون لموضوع البرمجة ويحاولون بشغف ان يتعلموا هذا العلم الرائع والجميل وانا احد هؤلاء اللذين يبحثون عن سبل التعلم لهذه اللغة الرائعة والمفيدة جدا جدا لكل شخص يتاجر في الفوركس
فقد بحثت كثيرا وابحرت طويلا في المنتديات التعليمية للفوركس وغير التعليمية سواء كانت متخصصة في الفوركس او غير متخصصة عن مواضيع تتحدث عن تعليم هذه اللغة الجميلة الى ان وجدت ضالتي في عدد من المواضيع المشروحة لهذه اللغة ووجدت كم هائل من الاخوة المبرمجين اللذين قاموا بشرحها وكل حسب اسلوبه وطريقته الخاصة.
علما ان اساسيات اللغة هي واحدة للجميع ولكن الفرق في الطريقة والاضافات التي يضيفها كل شخص منهم الى شرحه .
ناهيك عن اختلاف الاساليب فمنهم من يوصل لك المعلومة بيسر مستهدفا بذلك المبتدئين بل وحتى اللذين لا يملكون ادنى فكرة عن معنى كلمة برمجة ومنهم من ترى ان اسلوبه صعب جدا ولكن في الحقيقة هو ليس صعبا لكنه يستهدف في شرحه اشخاص ذوي خبرة او لديهم معلومات قوية عن البرمجة ومنهم من يكون بين هذا وذاك .
لذلك جمعت لكم عددا من الشروحات والمفاهيم الخاصة عن هذه اللغة وعلى يد عدد من المبرمجين واترك لكم انتم الاختيار ولو اني افضل ان تستمتعوا بقراءة جميع الشروحات فهي مفيدة جدا وممتعة وانا معكم ايضا ساحاول ان اتعلم هذه اللغة الرائعة فانا لست مبرمج ولكني احب وبشدة ان اكون مبرمج.
لذلك سنبدأ مستعينين بالله ومن باب الامانة العلمية ساضع اسماء الاخوة اللذين اعطوا الدروس والشروحات حتى لا يضيع حقهم او ان ينسب تعبهم وجهدهم شخص اخر لنفسه.
ولا تنسو اللايكات حتى يكون دافع لي في البحث المستمر عن شروحات اخرى علما اني ساحاول بكل جهدي ان اجد شروحات عربية للموضوع ذات مادة علمية ممتازة
لذلك لا تبخلوا علي بالتقييم واللايكات يا احبة.

مازن المشهداني 19-05-2012 01:25 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
بسم الله الرحمن الرحيم
نبدأ سلسلة الشروحات بتعليم لغة MQL4 للدكتور وليد سليمان ونبدا بالمقدمة


بسم الله الرحمن الرحيم

مرحبا بكم في مقدمة دروس لغة MQL4 ,

في هذه السلسلة من الدروس , سأحاول ان اكشف اسرار و غموض لغة MQL4 بمنحكم دروس شاملة مدعمة بالأمثلة الواضحة والفعالة .

في هذه السلسلة من الدروس سأريكم بأذن الله تعالى كيف تستخدمون MQL4 لبناء الكسبيرت والمؤشر والسكريبت الخاص بكم .

لو أحد المتابعين معي من مبرمجي لغة ال C (او اللغة المتقدمة ++C ) فسيفهم لغة MQL4 قبل حتى ان ابدأ الدروس , وعلى العكس من ذلك , لو لم تكتب اي برامج من قبل (وهم الأغلبية الساحقة) , ليس هناك اي مشكلة , فسأخذ بيدك وأساعدك لتفهم علم البرمجة بوجه عام

الأن دعونا نبدأ على بركة الله من البداية :

لغة MQL4 ؟ ما هي ولماذا نستخدمها واين نكتبها ؟

لغة MQL4 هي اختصار الحروف الأولى من MetaQuotes Language 4.
MetaQuotes هي اسم الشركة التي قامت ببناء برنامج الميتاتريدر الشهير للتداول.
ولجعله أقوى برنامج تداول على مستوى الشركات والبروكرز قامت بتزويده بلغة برمجية خاصة به(MQL4) تمكنك كمستخدم للبرنامج من صنع استراجيتك الخاصة على هيئة برنامج يقوم بالمتاجرة اليا بدلا منك

لماذا نستخدم لغة MQL4 ؟
في الحقيقة هناك 3 استخدامات رئيسية لهذه اللغة :

1- الخبير الألي (الإكسبيرت) .. Expert Advisor
2- المؤشرات الخارجية .. Custom indicator
3- البرامج المساعدة .. Scripts

** الخبير الألي (الأكسبيرت) .. Expert Advisor : وهو برنامج يقوم بالمتاجرة بدلا عنك وادارة صفقاتك بطريقة اوتوماتيكية , على سبيل المثال هو يفتح عقودك بيع او شراء على طريقتك الخاصة ويديرها من وضع او تغيير ستوب لوز او ليميت بطريقة الية بحتة

** المؤشرات الخارجية .. Custom indicator : وهو برنامج يقوم برسم اشارات لتحديد نقاط الدخول والخروج وسلوك محدد للسعر دون الدخول في متاجرة الية او فتح او ادارة صفقات .

** البرامح المساعدة .. Scripts : وهو برنامج مخصص للقيام بعمليات بعيدة عن المتاجرة بل لتسهيل بعض الأمور , على سبيل المثال برنامج ينبهك بوصول رسالة الى بريدك او اغلاق جميع الصفقات بضغطة زر واحد وغيرها من الأمور العادية .

والأن السؤال الأخير .. اين نكتب لغة MQL4 ؟

لكتابة اكواد لغة MQL4 وكأي شئ في العالم هناك طريقتين , الطريقة الصعبة والطريقة السهلة .

1- الطريقة الصعبة :

الطريقة الصعبة هي كتابة اكواد لغة MQL4 على اي محرر نصوص تفضله وبرنامج وسيط لعملية تجميع الكود Compile (تحويل الكود المكتوب بلغتنا التي نفهمها الى لغة الألة الثنائية , الصفر والواحد ) .
برنامج ال Notebad الموجود على اجهزتنا جميعا ليس سيئا , ويمكنك بعد ذلك حفظه يدويا على اي امتداد تحب وان كان في حالتنا هنا سيكون الأمتداد mq4. .

بعد ذلك نأتي لخطوة التجميع Compile .:

* ما هو التجميع او Compile ?
** هي عملية تحويل البرنامج المكتوب بلغتنا البشرية المفهومة والمقروءة (الأنجليزية) الى لغة الألة (اللغة الثنائية Binary system) وهي عملية مهمة للغاية فهي اللغة الوحيدة التي يفهمها الكومبيوتر لينفذ اوامرنا وبرامجنا وأفكارنا .

وخطوة التجميع Compile في هذه الطريقة معقدة بعض الشئ , فعليك استدعاء ملف MetaLang.exe من مجلد الميتاتريدر على جهازك لتحويل ملف mq4 الذي كتبته بيدك ليحوله الى ملف ذو امتداد ex4 المكتوب بلغة الألة والغير مفهومة لنا .

بعد تصنيع ملف ex4 لن يحتاج الميتاتريدر الملف الأصلي mq4 المكتوب بلغتنا والذي يحتوي على اكواد برنامجك الخاص.

*** الخبر الجيد هنا اننا لن نحتاج الى هذه الطريقة (للقراءة فقط) وانما تكلمت عنها فقط لمعرفة الية عمل البرنامج وسيكون عملنا كله بالطريقة الثانية الأتي الكلام عنها بعد قليل.

2- الطريقة البسيطة :

الميتاتريدر هنا يوفر علينا كل الخطوات السابقة ببرنامجه الرائع الميتااديتور MetaEditor والذي يحتوي على هذه المميزات:

* محرر نصوص متطور يقوم بتمييز مفردات اللغة ووضوح البناء التركيبي للأكواد والتفريق بين مفردات لغة MQL4 الخاصة ومفردات اكوادك الشخصية مما يوفر سهولة التعديل او الأضافة في الكود الخاص بك.

* سهولة عملية تجميع compile لبرنامجك فيكفي ان تضغط على F5 او اضغط على compile في اعلى صفحة الميتااديتور وسيقوم هو بكل العمل الصعب عليك بتحويل برنامجك الى ex4 , الى جانب انه خلال عملية التجميع compile يقوم باكتشاف الأخطاء البرمجية بسهولة واخبارك بها في جزء الأخطاء اسفل المحرر.

* سهولة معرفة مفردات اللغة الخاصة عن طريق تضليل الكلمة المراد شرح عملها في لغة MQL4 بالماوس والضغط على F1

http://www.fx-arabia.com/vb/uploaded...1337422949.jpg

في الدرس القادم بأذن الله سنعرف اكثر عن برنامج الميتا اديتور MetaEditor


لا تنسو اللايكات يا شباب لان عندي عدد كبير من الدروس لامهر المبرمجين فادفعونا وادعمونا باللايكات
تحياتي

tamer_taher22 19-05-2012 03:02 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
السلام عليكم

موضوع رئع

اتمنى التركيز على الخبير الآلى

shobra 19-05-2012 03:52 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
جزاك الله خيرا
لايك

Benisafcom 19-05-2012 04:30 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اهلا اخي مازن متابعين معك رد رد معلومة معلومة
ولك مني احلى لايكات ... ..
جزاك الله خيرا و جعلها اللله في ميزان حسناتك
متابعين معك يا غالي وختامها بورشة تطبيقية

مازن المشهداني 19-05-2012 05:31 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة tamer_taher22 (المشاركة 336897)
السلام عليكم

موضوع رئع

اتمنى التركيز على الخبير الآلى

وعليكم السلام
باذن الله سنتطرق الى جميع المواضيع الخاصة باللغة واكيد من ضمنها الخبير الالي
لكن فين اللايك يا بطل

مازن المشهداني 19-05-2012 05:32 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة shobra (المشاركة 336918)
جزاك الله خيرا
لايك

وجزاك الله بمثله

مازن المشهداني 19-05-2012 05:34 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة Benisafcom (المشاركة 336928)
اهلا اخي مازن متابعين معك رد رد معلومة معلومة
ولك مني احلى لايكات ... ..
جزاك الله خيرا و جعلها اللله في ميزان حسناتك
متابعين معك يا غالي وختامها بورشة تطبيقية

الله يرضى عليك يا اخ خالد
والله امنيتي ان اتقن العمل في البرمجة وباذن الله بعدها سنعمل جميعا على فتح ورشة العمل الخاصة بالبرمجة

مازن المشهداني 19-05-2012 05:40 PM

الدرس الأول .. القواعد الأساسية
 
السلام عليكم
اخوتي الافاضل نعود لاستكمال الدروس ودرس اليوم هو عن قواعد لغة mql4

بسم الله الرحمن الرحيم

مرحبا بكم في الدرس الأول ... قواعد لغة الميتا (Syntax)

سنتكلم اليوم عن القواعد النحوية للغة MQL4

* ما معنى كلمة SYNTAX بالنسبة للغة الميتا ؟
** هي القواعد النحوية للغة من مفردات خاصة بها (الكلمات المحجوزة) لأشاراتها لأعدادتها ووضع الأوامر والشروط (الأكواد) بطريقة صحيحة برمجيا .

(قواعد اللغة العربية من مبتدأ وخبر وحروف جر ومفعول به وعلامات ترقيم وأوزان .. الخ هي ما يسمى ب SYNTAX اللغة العربية اي البناء الهيكلي للغة العربية)

وهكذا سندرس ال Syntax للغة MQL4 اي سندرس قواعدها وسنكتب اساسياتها التي تتكون من :

* التنظيم Format
* التعليقات Comments
*المعرفات Identifiers
*الكلمات المحجوزة Reserved words

الأن دعونا نتكلم عنهم بشئ من التفصيل ..

1- التنظيم Format:

متى بدأت كتابة برنامجك فلك حرية تنظيم المسافات والسطور بين اكواد واوامر برنامجك لتجعلها واضحة ومنظمة بطريقتك الخاصة ولراحتك الشخصية .

على سبيل المثال ,
كل هذه السطور البرمجية صحيحة في MQL4 رغم اختلاف تنظيمها ولكنها تؤدي نفس الغرض :

كود PHP:
double MacdCurrent, MacdPrevious, SignalCurrent;


كود PHP:
double

MacdCurrent
,

MacdPrevious,

SignalCurrent;


كود PHP:
double MacdCurrent, MacdPrevious, SignalCurrent;


ولكن كما ترى فأول سطر هو اسهلهم قراءة وأكثرهم وضوحا برمجيا.

وككل شئ في هذا العالم هناك استثناءات من هذه القاعدة :

a- غير مسموح بعمل سطر جديد في ما يسمى ب "Controlling Compilation".

سنعرف اكثر عن "Controlling Compilation" في الدرس القادم ان شاء الله , وحتى ذلك الحين تذكر فقط انها استثناء.

على سبيل المثال , السطر التالي من الكود غير مسموح به في لغة MQL4 .. وخلال عملية التجميع compile سيعطي خطأ برمجي

كود PHP:
#property

copyright "Copyright © 2004, MetaQuotes Software Corp."


اما هذا السطر فمسموح به "Controlling Compilation" :

كود PHP:
#property copyright "Copyright © 2004, MetaQuotes Software Corp."


(لاحظ ان "Controlling Compilation" اعتبر جملة property copyright كلمة واحدة , وحين تم فصلهم في الكود الأول اخل بتوافق الجملة , وهي من الأستثناءات كما اسلفنا)

b- غير مسموح بأستخدام الفراغات space او سطور جديدة في منتصف قيم ثابتة او معرفات او كلمات محجوزة باللغة.

على سبيل المثال , هذا الكود مسموح به في لغة MQL4 :

كود PHP:
extern int MA_Period=13;


هنا كلمتا extern و int كلمتان محجوزتان في لغة MQL4 , كلمة MA_Period معرف , رقم 13 هنا قيمة ثابتة.
(سنعرف الكثير عنهم في الدروس القادمة)

الأكواد التالية غير مسموح بها في لغة MQl4:

كود PHP:
extern int MA_Period=1

3
;


وايضا :
كود PHP:
extern int MA_Period=1 3;


هل لاحظت الفراغ بين رقم 13

وايضا:
كود PHP:
ex

tern int MA_Period
=13;


(لاحظ اننا ليس لنا حرية استخدام الفراغات والسطور بين حروف الكلمة الواحدة فهي استثناء كما اسلفنا)

2- التعليقات Comments:

لجعل العالم البرمجي اسهل واقل تعقيدا , اي لغة برمجة لها ستايل التعليقات Comments الخاص بها.

نحن نستخدم التعليقات Comments لنضيف سطورا توضيحية لبعض اكواد البرنامج ويتم تجاهلها من قبل البرنامج خلال عمله. اي انها لا دخل لها بعمل البرنامج وانما يتم اضافتها للتوضيح فقط لأي قارئ للبرنامج.

لنفترض مثلا انك كتبت برنامجك الخاص في فصل الصيف , وجاء الشتاء واردت ان تقرأه , بدون التعليقات Comments , بالرغم من انك كاتب البرنامج الا انك لن تستطيع ان تفهم الألغاز التي كتبتها http://my.mec.biz/images/smilies/smile.png , ومن هنا نعرف اهمية التعليقات.

لغة MQL4 (وكذلك لغة ال C و ++C) تستحدم نوعين من التعليقات Comments:

a- تعليقات Comments السطر الواحد:

يبدأ تعليق Comment السطر الواحد بالعلامة // وينتهي بسطر جديد.

مثال:

كود PHP:
//This is a comment

extern int MA_Period=13;


كود PHP:
extern int MA_Period=13; //This is another comment


b- تعليقات Comments الأسطر المتعددة:

يبدأ تعليق Comment الأسطر المتعددة بالعلامة * / وتنتهي بالعلامة / * .

يمكنك استخدام اكثر من سطر او اكثر بوضع * / في بداية اول سطر , و / * في نهاية أخر سطر.

مثال:

كود PHP:
/ * this

is

multi

line

comment
* /


يمكنك ايضا وضع تعليق Comment السطر الواحد بداخل تعليق Comment الأسطر المتعددة .. هكذا مثلا:

كود PHP:
/ * this

is

multi
//another comment nested here.

line

comment
* /


هذا ايضا مسموح به في MQL4:

كود PHP:
extern int / *HELLO! I’m a comment* / MA_Period=13;


لكن هذا غير مسموح به في MQL4:

كود PHP:
extern int //test MA_Period=13;


(راجع شرط تعليق Comment السطر الواحد وكيف ينتهي)

3- المعرفات Identifiers:

المعرف Identifier هو اسم تختاره بنفسك (حتى لو كان اسمك شخصيا) لأطلاقه على المتغيرات variables والثوابت constants والوظائف functions.

على سبيل المثال , MA_Period هنا تعتبر معرف Identifier:

كود PHP:
extern int MA_Period=13;


هناك بعض القواعد والقيود لأختيار اسماء المعرفات Identifiers:

a- طول اسم المعرف Identifier لا يجب ان يتجاوز عدد حروفه 31 حرفا.

b- لابد ان يبدأ اسم المعرف Identifier بحرف او علامة _ .
وعليه لا يمكن ان يبدأ برقم او اي علامة أخرى غير _.

c- لا يمكن استخدام الكلمات المحجوزة reserved words كمعرفات Identifiers.
(سنرى قائمة بالكلمات المحجوزة reserved words قريبا)

d- المعرفات Identifiers حساسة جدا لحالة الأحرف.
مثلا MA_PERIOD مختلفة تماما عن ma_period او MA_Period.

سنأخذ بعض الأمثلة للمعرفات Identifiers:

كود PHP:
Name1 مسموح

_Name1 مسموح

1Name غير مسموح
(لا يمكن ان يبدأ برقم )

~
Name1 غير مسموح (لا يمكن ان يبدأ برقم او اي علامة أخرى غير _.)

N~ame1 غير مسموح (لا يمكن ان يبدأ برقم او اي علامة أخرى غير _.)

i_love_my_country_and_my_country_loves_all_the_wor ld

غير مسموح
( لا يجب ان يتجاوز عدد حروفه 31 حرفا)

Color مسموح

color غير مسموح
(لا يمكن استخدام الكلمات المحجوزة و color كلمة محجوزة)


4- الكلمات المحجوزة Reserved words:

هي كلمات خاصة تستخدمها لغة MQL4 في تنفيذ اوامر محددة خاصة باللغة,
ولا يمكن استخدامها كمعرفات او اي اعمال برمجية أخرى (غير المخصصة لها).

وهذه قائمة بالكلمات المحجوزة Reserved words:

http://www.moneyexpertsclub.net/foru...c5c1a0ea7e.jpg

وعلى سبيل المثال , هذه الأكواد غير مسموح بها في MQL4:

كود PHP:
extern int datetime =13;

int extern =20;

double continue = 0;






في الدرس القادم بأذن الله سنتكلم عن انواع البيانات في لغة MQL4

wolfkamikaz 19-05-2012 06:53 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
رائع اخي مازن فعلا البرمجة اصبحت شيء هام في الفوركس

مازن المشهداني 19-05-2012 09:13 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة wolfkamikaz (المشاركة 336992)
رائع اخي مازن فعلا البرمجة اصبحت شيء هام في الفوركس

اشكرك على المرور
ولكن اين اللايك ايها الذئب

wolfkamikaz 19-05-2012 09:17 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
طبعا اديتك 2 لايك يا غالي لايك للمقدمة و لايك للتكملة

مازن المشهداني 20-05-2012 02:44 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة wolfkamikaz (المشاركة 337037)
طبعا اديتك 2 لايك يا غالي لايك للمقدمة و لايك للتكملة

اشكرك جدا اخي العزيز على تقييمك للموضوع

مازن المشهداني 20-05-2012 02:49 PM

الدرس الثاني .. رموز البيانات في لغة MQL4
 
في لغة MQL4



بسم الله الرحمن الرحيم

مرحبا بكم في الدرس الثاني ... رموز البيانات في لغة MQL4.

ماذا نقصد برموز البيانات ؟
اي لغة برمجية في العالم تطلق اسماء محددة (تصنف ككلمات محجوزة)على شكل الذاكرة المناسب لرمز البيانات Data المستخدمة.

ما معنى هذا الكلام؟

لنعطي مثالا على ذلك:

لو ان الذاكرة تخزن الأرقام من -2147483648 الى 2147483648 , فمعظم لغات البرمجة العالمية ستطلق على رمز البيانات هذا اسم "Integer" اي عدد صحيح.

المتغيرات Variables ؟

هي اسماء تطلق على قطاع الذاكرة المخزن لنوع معين من البيانات.

لنفهم أكثر سنرسم صورة عامة للموضوع كمثال:

تخيل معي ان ذاكرة الكومبيوتر هي عبارة عن سلسلة من الصناديق مختلفة الأحجام , وحجم الصندوق هو مساحة التخزين بالبايت (وحدة البناء في الكومبيوتر)

* لكي نستخدم صندوقا ما لنخزن به احد البيانات يجب ان نطلق عليه اسم ما , هذه العملية تسمى اعداد declaration.

* خلال عملية الأعداد declaration نستخدم كلمة نخبر بها الكومبيوتر بنوع وحجم الصندوق المطلوب استخدامه , هذه الكلمة نطلق عليها keyword اي كلمة محجوزة تشير الى فئة معينة من البيانات .

* بعد تحديد رمز البيان بكلمة محجوزة , عليك الأن بأختيار اسم معرف خاص للصندوق (والأفضل ان تختار اسما يدل على رمز البيان ايضا لتسهيل البرنامج) ,, مثلا حددت Integer (كلمة محجوزة معتاها عدد صحيح) لتصنيف رمز البيان , وتطلق اسما من مخيلتك وليكن مثلا files (معناها ملفات وهي كلمة اخترعتها انت) وتطلقها على الصندوق , هكذا يعرف الكومبيوتر ان يخزن ارقام صحيحة(نوع البيانات) في صندوق الذاكرة المدعو files .. وهكذا ... هذه المعرفات يطلق عليها اسم ثابت المتغيرات Variables constant.

* الأن حددنا رمز البيانات واسم الصندوق , علينا الأن ان نضع هذه البيانات داخل الصندوق وذلك عن طريق ان ننسب assigning هذه البيانات الى هذا الصندوق (بكتابته برمجيا)

* الأن حددنا رمز البيان في صندوقه المناسب واطلقنا معرفا ثابتا لهذا الصندوق له قيمة افتراضية هي الصفر (هنا نقول ان عملية الأعداد declaration قد تمت) .

* عملية بدء عمل البرنامج بأدخال القيم (ادخال القيم في لغة MQL4 يكون عن طريق بيانات الأسعار القادمة من السيرفر) وتسمى هذه المرحلة ب عملية البدء initialization.

يمكن اختصار الخطوات السابقة بمعنى أخر ايضا لوضوح الفكرة هكذا:

متى انشأنا متغيرا (سمي متغير لتغير قيمه المستمر نتيجة تغير الأسعار المستمر مما يغير في النتائج ايضا) فنحن نخبر الكومبيوتر اننا نريده ان ينسب assigning حجم ذاكرة مخصصة (بوحدة البايت) لمتغيرنا هذه , ونظرا لأن الأرقام الصغيرة والحروف والأرقام الكبيرة لن تشغل نفس المساحة من الذاكرة , فسيسألنا الكومبيوتر عن رمز البيانات وحجم المساحة المطلوبة لتخزينها , ولهذا نشأ علم انواع البيانات في اللغات البرمجية.
(سنحاول ان نفهم اكثر مع كثرة الأمثلة والدروس القادمة)

على سبيل المثال , ماذا لو أخبرنا الكومبيوتر بهذا الكود :

كود PHP:
int MyVaraible=0;


معناه اننا نطلب من الكومبيوتر ان يوفر لنا حجم ذاكرة تبلغ 4 بايت(int تعني ذلك كما سيتضح في هذا الدرس) لمتغيرنا الذي اسميناه ب MyVaraibles.

في المثال السابق استخدمنا:

int ---------- Keyword

int ---------- Integer data type.

int ---------- Declaration

MyVaraible ---------- Variable’s constant.

=0 القيمة الأفتراضية

(راجع الكلمات السابقة بما سبق شرحه)

هناك انواع مختلفة من رموز البيانات :

*اعداد صحيحة int
*اعداد حقيقية(عشرية) double
*حروف char
*الوان color
*السلسلة النصية string
*قيم منطقية(صح وخطأ) bool
*التاريخ datetime

1- الأعداد الصحيحة (int) :

الأعداد الصحيحة هي اعداد يمكن ان تبدأ بأشارتي - او + وتأخذ صور الأرقام من صفر الى 9 , ويتم حجز 4 بايت للقيمة الواحدة , وتتراوح قيمها بين -2147483648 الى +2147483648

مثال:

كود PHP:
12, 3, 2134, 0, -230


ونستخدم int لننشئ متغير قيمه تكون اعداد صحيحة كما اسلفنا

مثال:

كود PHP:
int intInteger = 0;

int intAnotherIntger = -100;


2- الأعداد العشرية (double) :

وهي اعداد تحتوي على كسور عشرية مثل 1.0002 عكس الأعداد الصحيحة التي لا تحتوي على فواصل.

وهي تشبه الأعداد الصحيحة بالنسبة للأشارات ولكن اكبر في المساحة المحددة من الذاكرة لها اذ تأخذ قرابة 8 بايت.

ونستخدم double لننشئ متغيرا عشريا

3- الحروف (char) :

هذه الكلمة تحتوي على 256حرف ابجدي معروف والأشارات المختلفة ولوحة الأرقام (اي انه كل ما يمثل لوحة المفاتيح لجهازك)

القيم لهذا الرمز يجب ان توضع بين قوسين مفردين ' ' .

مثال :

كود PHP:
'a' , '$' , 'Z'


هذا الرمز لا يأتي منفردا وانما نستخدم الرمز int السابق ذكره لننشئه .

مثال:

كود PHP:
int chrA = 'A';

int chrB = '$';


(لاحظ انها حروف اي انها لن تدخل في عمليات حسابية وانما فقط تخرج اسماء او ما شابه)

لاحظ ان الكلمات المحجوزة في لغة MQL4 لا يمكن وضعها كقيمة لهذا الرمز فسيقرئها الكومبيوتر ككلمات محجوزة وليس كقيمة يتم التعامل معها , ولهذا يوجد هناك ما يسمى بالحروف الخاصة Special Characters وظيفتها اننا لو اردنا ان نطبع كلمة ما وصادف انها تشبه احدى الكلمات المحجوزة فيمكن استخدام هذه الحروف الخاصة للتمييز بينهم واخبار الكومبيوتر انها قيم وليست كلمات محجوزة.

مثال :

كود PHP:
int chrB = '\n'; //new line


هنا طبعنا سطر جديد في نتائج البرنامج

وهذه قائمة بالحروف الخاصة:

كود PHP:
carriage return r

new line n

horizontal tab t

reverse slash

single quote

double quote "

hexadecimal ASCII-code \xhh




(سيتم التعمق فيها مع الدروس القادمة لمن لم يستوعبها جيدا والكلام على كل الرموز وليس هذا فقط)

4- الألوان (color) :

رمز الألوان هو رمز خاص بلغة MQL4 فقط ووظيفته انه الرمز الذي يقوم بتخزين الألوان التي تظهر على الشارت من مؤشرات او شموع او حتى اكسبرتات ويتم تغييرها من الخصائص الخارجية لأي مؤشر او اكسبيرت.

يمكننا وضع الألوان كقيم في المتغيرات الخاصة بها بثلاثة طرق يمكنك اختيار ايا منها:

a- وضعها كأسماء الوان عادية مثل ازرق blue , احمر red ... الخ. ( وهي الطريقة الأسهل)

b- وضعها كأرقام صحيحة ( ويمكنك ان تاتي بأرقام الأوان من اي برنامج رسم على جهازك وخاصة الفوتوشوب)

c- بشفرتها الخاصة بلغة الميتا ( كل لون له شفرة خاصة به ويمكن ان تستمدها ايضا من الفوتوشوب)

أمثلة لشفرات الألوان:

كود PHP:
C'128,128,128' // gray

C'0x00,0x00,0xFF' // blue

// named color

Red

Yellow

Black

// integer-valued representation

0xFFFFFF // white

16777215 // white

0x008000 // green

32768 // green






ونستخدم الرمز color لننشئ متغيرا لونيا

مثال:

كود PHP:
color clr1= Red;

color clr1= C'128,128,128' ;

color clr1=32768;


5- التاريخ (datetime) :

هذا الرمز خاص ايضا بلغة MQL4 ويتميز بها , وهو يخزن بيانات التاريخ والوقت .

تخزن قيم هذا الرمز باستخدام الكلمة المحجوزة D ووضع التاريخ بعدها بين قوسين مفردين ' ' , وبين القوسين نكتب سطرا مكون من 6 اجزاء : السنة , الشهر , اليوم , الساعة , الدقيقة , الثانية .

مثال:

كود PHP:
D'2004.01.01 00:00' // New Year

D'1980.07.19 12:30:27'

D'19.07.1980 12:30:27'

D'19.07.1980 12' //equal to D'1980.07.19 12:00:00'

D'01.01.2004' //equal to D'01.01.2004 00:00:00'


نستخدم الرمز datetime لننشئ متغيرات التاريخ والوقت.

مثال:

كود PHP:
datetime dtMyBirthDay= D'1972.10.19 12:00:00';

datetime dt1= D'2005.10.22 04:30:00';


6- القيم المنطقية (bool) :

رمز المنطقية يأخذ قيمتين فقط هما صح (true) او خطأ (fulse). او نظرائهم الرقميين الصفر والواحد.

نستخدم bool لننشئ المتغيرات المنطقية ( مثلا لو اني اعطيت لخاصية في الكسبيرت مثل ادارة راس المال القيمة true سيقوم بتشغيلها والعكس)

مثال:

كود PHP:
bool I = true;

bool bFlag = 1;

bool bBool=FALSE;


7- السلسلة النصية (str) :

هذا الرمز عبارة عن سلسلة من الحروف او النصوص تكتب بين الأقواس الثنائية " " .

هذه السلسلة من الحروف تنفذ واحدة بعد الأخرى وبعد أخر حرف من السلسلة تأتي بعدها القيمة NULL ليتم تجاهل اي قيم تأتي بعد ذلك .

*ما هي NULL ؟
** هي قيمة خاصة يتم وضعها لتحدد نهاية هذه السلسلة النصية .

في الصورة تمثيل بسيط لسلسلة نصية " hello "

http://img144.imageshack.us/img144/7950/15kt1.jpg

هذا الرمز محدد له 255 حرف وان زاد عن ذلك يطلق تحذير بوجود خطأ برمجي بزيادة عدد الحروف المسموح بها.

نستخدم الرمز string لننشئ متغير سلسلة نصية .

مثال:

كود PHP:
string str1 = "Hello world1, with you coders guru”;

string str2 = "Copyright © 2005, "Forex-tsd forum\"."; //Notice the use of (") character.

string str3 = "1234567890";





في الدرس القادم بأذن الله سنتكلم عن العمليات والتعابير في لغة الميتا

مازن المشهداني 21-05-2012 02:23 PM

الدرس الثالث .. العمليات والتعبيرات
 
بسم الله الرحمن الرحيم

مرحبا بكم في الدرس الثالث ... العمليات والتعبيرات في لغة MQL4 .

* ماذا نعني بكلمتي العمليات Operations والتعبيرات Expressions ؟

انتم تعرفون ماهي العمليات Operations , لو اخبرتكم ان ( + , - , * , / ) هي العمليات الرياضية الأساسية , ستتذكر على الفور ماذا نعني بالعمليات.

حسنا , الأن عرفنا ما هي العمليات Operations , فما هي التعبيرات Expressions اذن ؟

التعبيرات Expressions هي الجمل البرمجية المتكونة من العمليات Operations والمعرفات Identifiers (هل تتذكرها ؟ لو لم تتذكرها راجع الدرس الأول Syntax ).

دعونا نرى مثالا:

كود PHP:
x = (y*z)/w;


w , z , y and x معرفات identifiers

* , / , = عمليات operators

السطر كله عبارة عن تعبير expression

عندما تتحد التعبيرات expressions فهم يشكلون جملة statement
وعندما تتحد الجمل statements فهم يشكلون وظيفة function
وعندما تتحد الوظائف functions فهم يشكلون البرنامج program.


سنتكلم في هذا الدرس عن انواع العمليات المستخدمة في لغة MQl4 .

دعونا نبدأ بأهم العمليات الرياضية :

1- العمليات الحسابية Arithmetical operators :

هناك 9 عمليات حسابية في لغة MQL4 .

وهذه قائمة بهم :

+ .. عملية الجمع .. مثال ( A=B+C ) .. اجمع B مع C وانسب الناتج الى A
- .. عملية الطرح .. مثال ( A=B-C ) .. اطرح C من B وانسب الناتج الى A
* .. عملية الضرب .. مثال (A=B*C ) .. اضرب B في C وانسب الناتج الى A
/ .. عملية القسمة .. مثال (A=B/C ) .. اقسم B على C وانسب الناتج الى A
+ - .. عملية تغيير الأشارة .. مثال (A=-A ) .. حول اشارة A من الموجب الى السالب
% .. عملية باقي القسمة .. مثال ( A=B%C ) .. اقسم Bعلى C وباقي القسمة انسبه الى A
++ .. عملية الزيادة .. مثال ( ++A ) .. قم بزيادة المتغير A رقم 1 (بمعنى ان كان A يساوي 1 اجعله يساوي 2)
-- .. عملية النقصان .. مثال ( --A ) .. انقص رقم 1 من المتغير A (بمعنى ان كان A يساوي 2 اجعله يساوي 1)


ملاحظة : لا يمكن اجتماع عمليات الزيادة ++ والنقصان -- مع بقية العمليات في تعبير واحد.

مثلا لا يمكننا كتابة هذا الكود ( كود خاطئ):

كود PHP:
A=(B++)*5;


ولكن يمكنك كتابته بطريقة صحيحة هكذا :

كود PHP:
A++;

B=A*5;


2- عمليات المساواة Assignment operators :

هدف اي تعبير expression هو اخراج نتيجة ما , وعمليات المساواة هي الأداة التي تقوم بهذه الوظيفة .

مثال:

كود PHP:
A = B * C;


هنا حاصل ضرب B مع C جاء بنتيجة وتم نسبها الى المتغير A.

علامة ( = ) هنا هي عملية المساواة assignment operator.

هناك 11 عملية مساواة في لغة MQL4 سنشرح منهم اهم 6 عمليات منهم (الباقي سيتم الكلام عنهم في الدروس التالية).

وهذه قائمة بهم :

= .. عملية المساواة .. مثال (A=B) .. اجعل A تساوي B
=+ .. عملية المساواة مع الجمع .. مثال (A+=B) .. معناها ان A=A+B
=- .. عملية المساواة مع الطرح .. مثال (A-=B) .. معناها ان A=A-B
=* .. عملية المساواة مع الضرب .. مثال (A*=B) .. معناها ان A=A*B
=/ .. عملية المساواة مع القسمة .. مثال (A/=B) .. معناها ان A=A/B
=% .. عملية المساواة وباقي القسمة .. مثال (A%=B) .. معناها ان A=A%B


3- عمليات المقارنة Relational operators :

عمليات المقارنة هي عمليات تقوم بمقارنة قيمتين وتنتهي بنتيجة من اثنين اما صح TRUE او خطأ FALSE

تماما كأننا نسأل .. هل محمد أطول من علي ؟ .. النتيجة واحدة من اثنين , اما نعم و اما لا .

النتيجة خطأ FALSE ستنتج فقط في حالة ان المقارنة جائت صفر ,, اما TRUE ستنتج من في حالة ان المقارنة جائت بأي قيمة غير الصفر. (صفر معناها هنا ان البرنامج لن ينفذ عملياته وهكذا نعرف ان المعطيات لم تحقق شروط التنفيذ FALSE)

مثال :

كود PHP:
4 == 4; //true

4 < 4; //false

4 <= 4 //true;


هناك 6 عمليات مقارنة في لغة MQL4 .

وهذه قائمة بها:

== .. عملية التطابق .. مثال(A==B) .. معناها اذا تطابقت قيمتي A و B فالنتيجة TRUE والا فهي FALSE
=! .. عملية عدم التطابق .. مثال (A!=B) .. معناها اذا لم تتطابق قيمتي Aو B فالنتيجة TRUE والا FALSE
> .. عملية اصغر من .. مثال (A<B) .. معناها اذا كانت A اصغر من B فالنتيجة TRUE والا FALSE
< .. عملية اكبر من .. مثال (A>B) .. معناها اذا كانت A اكبر من B فالنتيجة TRUE والا FALSE
=> .. عملية اصغر او يساوي .. مثال (A<=B) .. اعتقد معناها واضح
=< .. عملية اكبر من او يساوي .. مثال (A>=B) .. ايضا معناها واضح


4- عمليات منطقية (ادوات العطف) Logical operators :

وهي عمليات تشترط تحقق جميع الشروط او احداها ليعمل البرنامج

لغة MQL4 تستخدم اهم 3 عمليات (هذه العمليات فهمها سهل للغاية وسترى بنفسك)

وهذه قائمة بالعمليات :

&& .. اداة العطف ( و ) .. مثال (A&&B) .. وهنا وجب تحقق قيمتي A وB مع بعضهما
|| .. اداة العطف ( أو ) .. مثال (A||B) .. وهنا يكفي تحقق اي من الشرطين لتنفيذ البرنامج
! .. ليست عملية .. مثال (A!) .. ومعناها انه لا يوجد عملية مطلوبة من المتغير A


5- عمليات أخرى Other operators :

هناك بعض العمليات في لغة MQL4 ولا تتبع اي من الفئات السابقة

a- عملية فهرسة المصفوفات arreys ([])
b- عملية استدعاء الوظائف functions (())
c- عملية ترتيب عناصر الوظيفة function (,)


(سيتم شرحهم بالتفصيل في دروس الدوال والوظائف , فقط عليك ان تتذكرهم كعمليات أخرى)

** اسبقية العمليات :

فرضنا انك وضعت عمليتين جمع وقسمة مثلا لثلاثة ارقام , اي العمليات ستنفذ اولا؟

مثلا 5+6/4 هنا سيحسبها الكومبيوتر بمزاجه الخاص .

حسنا ماذا لو كتبناها هكذا 5+(6/4) , هنا نحن اجبرنا الكومبيوتر ان يحسب داخل القواس اولا ثم يضيف الناتج للخارج.

مثال اخر :

كود PHP:
x + y / 100


x + (y / 100)





في الدرس القادم بأذن الله سنتكلم عن الحلقات والقرارات ( جزء 1)

ارجو من الاخوة التفاعل مع الموضوع وتقييمه لاجل الاستمرار فيه

محمد مؤيد 29-05-2012 06:03 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
السلام عليكم
اخي لماذا توقفت عن تكملة الموضوع
ارجو منك الاستمرار فيه حتى تعم الفائدة
تحياتي

قيس ياسر 29-05-2012 07:12 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
موضوع رائع تشكر عليه
واحلا لايكات

السيد الجبالي 29-05-2012 07:20 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
موضوع رائع يا اخي ... متابع معك .. واحجزلي مكان في الصفوف الاوليه ... ومنسيتشي الايكات

مازن المشهداني 29-05-2012 08:01 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة محمد مؤيد (المشاركة 342600)
السلام عليكم
اخي لماذا توقفت عن تكملة الموضوع
ارجو منك الاستمرار فيه حتى تعم الفائدة
تحياتي

وعليكم السلام
والله يا اخي صراحةً توقفت عن الموضوع بسبب عدم الاهتمام والتقييم
فما فائدة ان تكتب موضوع لا يقرأه احد
ولكن بما انكم طلبتم الاستمرار فامركم عالعين والراس
ولا تنسو التقييم حتى يكون دافعا لنا

مازن المشهداني 29-05-2012 08:43 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة قيس ياسر (المشاركة 342636)
موضوع رائع تشكر عليه
واحلا لايكات

اشكرك جدا اخي

مازن المشهداني 29-05-2012 08:44 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة السيد الجبالي (المشاركة 342650)
موضوع رائع يا اخي ... متابع معك .. واحجزلي مكان في الصفوف الاوليه ... ومنسيتشي الايكات

الجبالي باشا
مشكور على تقييمك الموضوع
واكيد مكانك محجوز

ayoob 29-05-2012 09:22 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
مشكو اخي الكريم ولله ان كنت مستني موضيع مثل هد من زمان:1 (87):

مازن المشهداني 29-05-2012 09:36 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة ayoob (المشاركة 342744)
مشكو اخي الكريم ولله ان كنت مستني موضيع مثل هد من زمان:1 (87):

مشكور على مرورك الطيب
ولا تنسى اللايك

مازن المشهداني 29-05-2012 09:45 PM

الدرس الرابع .. الحلقات والقرارات (جزء 1)
 
السلام عليكم
نعود معكم اليوم لنتابع باقي الدروس

بسم الله الرحمن الرحيم

مرحبا بكم في الدرس الرابع ... الحلقات والقرارات (جزء 1) في لغة MQL4

اي برنامج تتم كتابته بلغة MQL4 (مؤشر او اكسبرت او اسكربت) او اي لغة برمجية أخرى يقوم بتنفيذ اوامره وشروطه بطريقة تسلسلية تنازلية ( من القمة الى القاع) .

بمعنى أخر ينفذ اوامره جملة statment بعد أخرى (أذكركم هنا ان الجملة statment تتكون من مجموعة تعبيرات expressions التي تتكون بالتالي من اتحاد المعرفات identefires والعمليات operations (راجع الدرس السابق))

يمكن تعريف الجملة statment ايضا بأنها سطر من الأكواد يخبر الكومبيوتر ان ينفذ امرا ما (اظهار اشارة بيع مثلا)

مثال :

كود PHP:
Print("Hello World");

return 0;


الفاصلة المنقوطة في نهاية الجملة statment هامة للغاية في قواعد هذه اللغة , ونسيانها مصدر 90% من الأخطاء البرمجية.

عملية التحكم في تنفيذ الأوامر تسلسليا من القمة الى القاع ليست هي الحالة الوحيدة بل هناك حالتين أخريين :

هما الحلقات Loops والقرارات Decisions.

البرامج التي نكتبها مثل قراراتنا البشرية تتغير تبعا لتغير الظروف من حولنا , في حالة البرامج عملية التحكم المتسلسل لتنفيذ الأوامر يمكن ان تقفز من جزء الى جزء أخر داخل البرنامج .

الجمل البرمجية statments التي تتحكم بهذه القفزات (تنقلنا من امر الى أخر في البرنامج) تسمى بالجمل المسيطرة control statments .

وتتركب من الحلقات loops والقرارات decisions

الحلقات Loops
----------------------


الحلقات loops تقوم بتكرار جزء ما من البرنامج لعدد محدد من المرات.

وهذا التكرار يستمر طالما الشروط صحيحة true , وستنتهي الحلقة او التكرار مع اول مخالفة للشروط (احد الشروط او كلهم اصبحوا يعطوا نتيجة خاطئة false)

متى انتهت الحلقة (التكرار) ستقوم بنقل التحكم في تنفيذ الأوامر الى الجملة التالية لتنفيذ امر أخر في البرنامج او الحلقة .. وهكذا.

هناك نوعين من الحلقات في لغة MQL4 :

1- الحلقة ( for ) :

الحلقة ( for ) تعتبر اسهل انواع الحلقات وذلك لأن جميع عناصرها مجتمعة في مكان واحد (كما سنرى) , كما تقوم بتنفيذ قسم معين من البرنامج لعدد معروف ومحدد من المرات.

دعونا نأخذ مثالا يوضح لنا هذا الكلام:

كود PHP:
int j;

for(j=0; j<15; j++)

Print(j);


كيف تعمل هذه الحلقة في هذا المثال ؟

السطر الأول قمنا بتعريف متغير ما واطلقنا عليه اسم ( j ) .... (راجع درس القواعد syntax)

السطر الثاني يحتوي على جملة ( for ) والتي تتكون من الكلمة المحجوزة ( for ) و قوسين ( ) يحتويان بداخلهما على ثلاثة تعبيرات expressions مفصولين عن بعضهما البعض بالفاصلة المنقوطة ( ; )

كود PHP:
for(j=0; j<15; j++)


هذه التعبيرات expressions الثلاثة هي : تعبير ابتداء الحلقة , تعبير اختبار قيمة المتغير , وتعبير زيادة قيمة المتغير .

j=0 ....... تعبير ابتداء الحلقة
j>15 ........ تعبير اختبار قيمة المتغير
++j ....... تعبير زيادة قيمة المتغير

جسد الحلقة هو الكود الذي سينفذ الشروط اعلاها لعدد محدد من المرات في هذه الحلقة وهذا الكود هو :

كود PHP:
Print(j);


وفي مثالنا هذا العدد المحدد لتنفيذ الحلقة هو 15 مرة.

ملاحظة : الجملة ( for ) لا تنتهي بفاصلة منقوطة وذلك لأنها تكون مع جسد الحلقة Print(j); جملة statment كاملة .

سنتكلم بشئ من التفصيل عن هذه التعبيرات الثلاثة :

* تعبير ابتداء الحلقة The initialization expression :

هذا التعبير ينفذ مرة واحدة فقط مع بداية تشغيل الحلقة ( البرنامج ) , ويعطى قيمة افتراضية للبدء ( وهي الصفر في مثالنا هنا j=0 )

يمكننا اعداد متغير الحلقة خارج (قبل) الحلقة نفسها كما في مثالنا :

كود PHP:
int j;


او يمكننا ايضا ان اعداد المتغير داخل الحلقة نفسها كما في هذا المثال:

كود PHP:
for(int j=0; j<15; j++)


السطران السابقان من الأكواد متساويان , لكن الغرض من كل منهم قد يختلف بعض الشئ ( سنعرف تفاصيل المتغيرات واهدافها في درس المتغيرات ان شاء الله )

ببساطة في حالة الأعداد الخارجي للمتغير يجعل كل سطور الحلقة تتعامل معه , اما في حالة الأعداد الداخلي فيجعل سطر جملة ( for ) فقط التي تتعامل معه .

يمكننا ايضا عمل تعبيرين ابتدائيين للحلقة (مع متغيرين) والفصل بينهم بفاصلة ( , ) فقط .

مثال:

كود PHP:
int i;

int j;

for(i=0 ,j=0;i<15;i++)

Print(i);


* تعبير الأختبار The Test expression:

تعبير الأختبار دائما يستخدم تعبيرات مقارنة باستخدام عمليات المقارنة ( رجاء راجع عمليات المقارنة في الدرس السابق )

هذا التعبير (في مثالنا هنا ( j>15 ) يقوم بعقد مقارنة بصفة مستمرة بين قيمة j ورقم 15 طوال فترة تشغيل الحلقة , ووظيفتها تحديد نتيجة المقارنة اما صحيحة true (اي ان قيمة j فعلا اصغر من 15) فيستمر جسد الحلقة ويقوم بتنفيذ الأمر ( print j) , او خاطئة false ( اي ان قيمة j ليست اصغر من 15 ) وهنا تتوقف الحلقة عن العمل وينتقل البرنامج الى الجملة البرمجية التالية . (سأشرح دورة حياة البرنامج في درس لاحق ان شاء الله بتفصيل افضل , هنا فقط ارجو الأنتباه لوظيفة كل جزء ومراجعته)

* تعبير الزيادة The Increment expression:

تعبير الزيادة يقوم بتغيير قيمة متغير الحلقة ( في مثالنا هنا j عن طريق ++j ) بزيادة قيمته 1 .

هذا التعبير ينفذ كأخر خطوة من خطوات الحلقة الثلاثة ( ابتداء الحلقة واختبارها وتنفيذ جسد الحلقة ).

وكما نستطيع ان نستخدم اكثر من تعبير ابتداء الحلقة (واكثر من متغير) يمكننا ايضا ان نستخدم اكثر من تعبير زيادة (او نقصان) والفصل بينهم بالفاصلة ( , ) .

مثال:

كود PHP:
int i;

int j;

for(i=0 ,j=0;i<15,i<;i++,j++)

Print(i);


لكن لا نستطيع ان نستخدم اكثر من تعبير اختبار واحد فقط في الجملة .

ملاحظة أخرى لتعبير الزيادة وهو اننا ممكن ان نستخدم تعبير نقصان ايضا كما في هذا المثال :

كود PHP:
int i;

for(i=15;i>0,i<;i--)

Print(i);


في هذا المثال سيبدأ المتغير i بأخذ القيمة 15 الأفتراضية ومن ثم يبدأ الحلقة , وفي مراحل التنفيذ كل مرة ينقص القيمة بمقدار 1 ومن ثم يعمل لها اختبار i>0 ... وهكذا دواليك

في النهاية سيخرج لنا البرنامج (الحلقة) هذه النتائج : 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 .

** جسد الحلقة Loop body:

يمكننا استخدام عدة جمل statments في جسد الحلقة لأخراج نتائج الحلقة .

في مثالنا السابق استخدمنا جملة واحدة فقط ( print j ) في جسد الحلقة , ويمكننا اضافة اكثر من جملة عليها .

عند اضافة اكثر من جملة في جسد الحلقة نحددهم بهذه الأقوس { } .

مثال:

كود PHP:
for(int i=1;i<=15;i++)

{

Print(i);

PlaySound("alert.wav");

}


في هذا المثال , جسد الحلقة يحتوي على جملتين برمجيتين , البرنامج سينفذ الأولى اولا وبعدها ينفذ الثانية في كل مرة.

ولا تنسى ان تضع الفاصلة المنقوطة ( ; ) في نهاية كل جملة .

** جملة الكسر The Break statment :

هي كلمة محجوزة من كلمات لغة MQL4 وظيفتها انهاء الحلقة عند قيمة محددة .

يتم وضعها كجملة تنفيذ في جسد الحلقة لتنهي الحلقة عند وصول المتغير لقيمة محددة ونقل البرنامج الى حلقة اخرى او جزء اخر .

مثال توضيحي :

كود PHP:
for(int i=0;i<15;i++)

{

if((i==10)

break;

Print(i);

}


في هذا المثال سيتم تنفيذ الحلقة حتى يصل المتغير i الى القيمة 10 , وبعدها تقوم الكلمة المحجوزة ( break ) بانهاء الحلقة.

في النهاية سينتج البرنامج هذه النتائج : 0 1 2 3 4 5 6 7 8 9.

** جملة الأستمرار The Continue Statement:

جملة الكسر أخرجتنا من الحلقة , ولكن جملة الأستمرار هذه ستعيدنا الى الحلقة في حالة خروجنا منها .

مثال توضيحي:

كود PHP:
for(int i=0;i<15; i++)

{

if(i==10) continue;

Print(i)

}


في هذا المثال سيتم تنفيذ الحلقة حتى تصل قيمة المتغير i الى 10 وبعدها يجد الكلمة المحجوزة ( continue ) لتعيدنا ثانية الى الحلقة دون اخراج النتيجة ( 10 ) من الحلقة .

وتخرج النتائج هكذا من البرنامج : 0 1 2 3 4 5 6 7 9 11 12 13 14 ( لاحظ عدم وجود النتيجة 10 ).

2- الحلقة ( while ) :

الحلقة ( for ) نستخدمها عادة في حالات التكرار لمرات انت تعرف عددها وتبرمج على اساسها , حسنا ماذا سيحدث لو لم تعرف عدد مرات التكرار التي تود استخدامها ( قد يستمر التكرار الى الأبد ) .

لهذا السبب ظهرت الحلقة ( while ) .

الحلقة ( while ) تشبه الحلقة ( for ) في تعبير الإختبار فقط , ولكنها لا تملك تعبير ابتداء الحلقة وتعبير الزيادة .

دعونا نرى مثالا توضيحيا :

كود PHP:
int i=0;

while(i<15)

{

Print(i);

i++;

}


في هذا المثال ستلاحظ الأتي :

a- متغير الحلقة تم اعداده declaration وابتداؤه قبل الدخول في الحلقة , لا يمكنك ان تعد او تبدأ المتغير داخل الحلقة بين القواس مثل الحلقة ( for ).

b- ال ( ++i ) ليست تعبير زيادة كما تظن , وانما يجب على جسد الحلقة ان يحتوي على اي جملة يمكنها من تغيير قيمة المتغير والا لن تنتهي ابدا ( مثلا لو لم تكن ++i موجودة سيقوم البرنامج بأطلاق النتيجة صفر الى ما لا نهاية )

* كيف يعمل المثال السابق ؟

جملة while تحتوي فقط على تعبير الأختبار فقط , وستظل تختبر الشرط كل مرة بدخول الحلقة , لو كانت نتيجة الأختبار ( المقارنة ) صحيحة true ستستمر الحلقة , وان كانت خاطئة ستنتهي الحلقة ويتم انتقال الى جملة لخرى في البرنامج .. وهكذا .

في مثالنا ستسمر الحلقة بتنفيذ اوامرها حتى تصل الى 16 , ففي هذه الحالة i<15 تكون خاطئة false وتنتهي الحلقة .

وكما اخبرتكم بتشابه الحلقتين هناك ايضا اوجه شبه اخرى مثل :

1- نستطيع ان نستخدم جملة الكسر وجملة الأستمرار في كليهما .

2- يمكنك وضع جملة واحدة او اكثر في جسد الحلقتين , وفي حالة وضع اكثر من واحدة يجب وضعهم داخل الأقواس { } .



في الدرس القادم بأذن الله سنتكلم عن الحلقات والقرارات ( جزء 2)

نسألكم الدعاء ولا تنسو تقييم الموضوع باللايكات

مازن المشهداني 31-05-2012 09:39 PM

الدرس الخامس .. الحلقات والقرارات (جزء 2)
 
بسم الله الرحمن الرحيم

مرحبا بكم في الدرس الخامس ... الحلقات والقرارات (جزء 2)

تحدثنا في الدرس السابق عن الحلقات

وكما ذكرنا من قبل , فالحلقات هي احدى طريقتين تقومان على تغيير التسلسل الطبيعي لتنفيذ اوامر البرنامج من القمة للقاع ( راجع الدرس السابق ).

حسنا , الطريقة الأخرى هي القرارات decisions .

القرارات decision هي جملة برمجية تقوم بعمل انتقال امر برمجي لمرة واحدة لجزء أخر من البرنامج معتمدا على قيمة المتغير.

(هذا الدرس اسهل من الدرس السابق وستروا بأنفسكم )

هناك عدة انواع من القرارات في لغة MQL4 :

1- الجملة الشرطية ( إذا ) .. ( if ) :

( إذا أخطأ علي فاضربوه ) .. حسنا ماذا لو لم يخطئ علي ؟ فلن يتم تنفيذ البرنامج (هذا مثال سريع قبل الدخول في التفاصيل )

الجملة ( if ) هي اسهل انواع الجمل الشرطية ( القرارات ).

دعونا نأخذ مثالا :

كود PHP:
if( x < 100 )

Print("hi");


هنا الكلمة المحجوزة ( if ) جاء بعدها القوسان ( ) وبداخلهم جاء تعبير الأختبار ( هل تتذكروه ) على هذه الصورة ( X<100 ) , متى جاءت النتيجة بين القوسين صحيحة true سيقوم جسد الجملة بتنفيذ الأمر (Print("hi")http://my.mec.biz/images/smilies/wink.png ,, وكمتى جاءت خاطئة false فسينتقل التسلسل التنفيذي للأوامر الى جزء أخر من البرنامج .

* الجمل المتعددة في جسد الجملة ( if ) (الأوامر ) :

مثل ما رأينا في الحلقات , فالجملة ( if ) يمكن ان تتكون من اكثر من جملة تنفيذية ويحاطون بالقوسين { }.

( لاحظ انه لو وجدت جملة واحدة لن نحتاج الى هذه الأقواس { } )

مثال :

كود PHP:
if(current_price==stop_lose)

{

Print("you have to close the order");

PlaySound("warning.wav");

}


ملاحظة : العلامة == الموجودة في تعبير الأختبار , هي احد عمليات المقارنة وليست = عملية مساواة (راجع درس العمليات والتعبيرات) ... هذه مصدر العديد من أخطاء الكتابة البرمجية نظرا للتشابه بينهم .

* التداخل Nesting :

يمكن للحلقات والقرارات ان يتداخلوا في بعضهم البعض , بمعنى انه يمكنك كتابة حلقة ( for ) داخل جملة شرطية ( if ) والعكس بالعكس ... تسمى هذه العملية بالتداخل Nesting .

مثال :

كود PHP:
for(int i=2 ; i<10 ; i++)

if(i%2==0)

{

Print("It's not a prime nomber");

PlaySound("warning.wav");

}




في هذا المثال تم وضع الجملة الشرطية (القرار) ( if ) بداخل الحلقة ( for ) .

2- الجملة الشرطية ( إذا .. وإلا ) .. ( if .. else ) :

( اذا أخطأ علي فاضربوه والا فأكرموه ) هنا البرنامج سينفذ ايا من الأمرين , ان أخطأ علي true سيتم ضربه , وان لم يخطئ false سيتم تنفيذ الأمر الثاني وهو الأكرام . http://my.mec.biz/images/smilies/smile.png .

هذه الجملة تختلف عن سابقتها ان لها نتيجيتين واحدة في حالة true والأخرى false ( في الجملة if كانت هناك نتيجة واحدة فقط في حالة صحة تعبير الأختبار true اما الحالة false فينتقل البرنامج الى جزء أخر منه )

تتكون هذه الجملة من الكلمة المحجوزة if متبوعة بجملة تنفيذ او اكثر , وكلمة محجوزة أخرى هي else متبوعة بجملة تنفيذ او اكثر .

مثال :

كود PHP:
if(current_price>stop_lose)

Print("It’s too late to stop, please stop!");

else

Print("you playing well today!");



ترجمة هذا المثال على النحو التالي :

إذا (السعر الحالي > وقف الخسارة )

اطبع جملة ("انت متأخر جدا , ارجوك اغلق العقد")

والا

اطبع جملة ("انت تضارب جيدا اليوم")

اعتقد الترجمة هذه تشرح الموضوع كاملا http://my.mec.biz/images/smilies/smile.png

* التداخل Nesting في جملة ( if .. else ) :

لايمكن لجملة ( if .. else ) ان تتداخل مع جملة ( if ) , ولكن يمكن ان نجعل جملة ( if .. else ) تتداخل مع جملة ( if .. else ) أخرى ... وهكذا .

في هذا المثال :

كود PHP:
if(current_price>stop_lose)

Print("It’s too late to stop, please stop!");

if(current_price==stop_lose)

Print("It’s time to stop!");

else

Print("you playing well today!");




توجد مشكلة برمجية هنا , حيث الجملتين الشرطيتين هنا متعارضتين وسيواجه الكومبيوتر مشكلة ايهما ينفذ ؟

ان جاء السعر اعلى من وقف الخسارة هناك امران احداهما "انتا متاخر جدا , ارجوك اغلق العقد " في الجملة الأولى ,, والأخرى "انت تضارب جيدا اليوم" ( نتيجة انه false ان لم يحدث == في الجملة الثالثة .

وهذا خطا برمجي ان يكون هناك اكثر من امر شبيه عند تحقق شروط متشابهة ( فأيهما ينفذ ؟)

هناك حل لهذا الأمر :

* ان نحيط الجملة ( if.. else ) بكاملها بالقوسين { }

مثال :

كود PHP:
if(current_price>stop_lose)

{

Print("It’s too late to stop, please stop!");

if(current_price==stop_lose)

Print("It’s time to stop!");

else

Print("you playing well today!");

}




ومن الأفضل تجنب التداخل مع جملة ( if .. else )

3- الجملة الشرطية ( التوزيع ) .. ( switch ) :

تستخدم هذه الجملة في حالة تعدد القيم لمتغير واحد فكل قيمة لها تنفيذ برمجي محدد .

دعونا نرى مثالا :

كود PHP:
switch(x)

{

case 'A':

Print("CASE A");

break;

case 'B':

case 'C':

Print("CASE B or C");

break;

default:

Print("NOT A, B or C");

break;

}




كيف يعمل هذا الكود (الجملة البرمجية في المثال) ؟

تبدا الجملة بالكلمة المحجوزة switch لتوزع اوامر التنفيذ لقيم النتغير x المختلفة .

وتاتي الأوامر بين القوسين { } .

الجملة switch تربط المتغير x بجميع القيم الداخلة للبرنامج وتتعامل معها على هذا النحو :

في حالة x==A سيخرج الكومبيوتر الناتج ( case A ) والا سينفذ الأمر Break (راجع هذا الأمر في الدرس السابق)

في حالة x==B او x==C سيخرج الكومبيوتر الناتج ( case B or case C ) وذلك لعدم وجود الأمر Brea.

في حالة !==x اي ان x لا تتطابق مع اي من القيم السابقة سيخرج الكومبيوتر النتيجة الأفتراضية ( Not caseA,caseB or case C )



في الدرس القادم بأذن الله سنتكلم عن الوظائف في لغة MQL4

Benisafcom 31-05-2012 10:55 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
الله الله عليك يا مازن تتحفنا بطريقتك المميزة
مشكور ولك مني احلى لايك
متابعين معك يا غالي

محمد مؤيد 01-06-2012 06:38 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
مشكور جدا اخي الكريم
وفي انتظار القادم
وعلى فكرة ما نسيت اللايكات ولك في كل درس لايك مني
تحياتي لك على مجهودك الطيب

مازن المشهداني 02-06-2012 04:52 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة Benisafcom (المشاركة 343980)
الله الله عليك يا مازن تتحفنا بطريقتك المميزة
مشكور ولك مني احلى لايك
متابعين معك يا غالي

مشكور جدا على اهتمامك اخي العزيز خالد

مازن المشهداني 02-06-2012 04:53 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة محمد مؤيد (المشاركة 344389)
مشكور جدا اخي الكريم
وفي انتظار القادم
وعلى فكرة ما نسيت اللايكات ولك في كل درس لايك مني
تحياتي لك على مجهودك الطيب

اشكرك جدا اخي الكريم على اهتمامك

مازن المشهداني 02-06-2012 05:00 PM

الدرس السادس .. الدوال
 
بسم الله الرحمن الرحيم

مرحبا بكم في الدرس السادس ... عالم الدوال في لغة MQL4

الدوال في اي لغة برمجية هي عصب البرنامج وقارب النجاة لكل مبرمج.

الدوال functions هي عبارة عن جمل statements متجمعة (هناك جمل مستقلة ولا تحتاج للتجمع لتكوين دالة مثل الحلقات والقرارات)

دعونا نبدأ الدرس .

* ماذا نعني بالدوال functions ?

الدالة تشبه في طريقة عملها طريقة عمل مشواة اللحم , فأنت عليك ان تضع اللحم والبهارات وهي عليها ان تخرج لك الكباب المشوي

اللحم والبهارت هما المعرفات والتغيرات واسم الدالة , والكباب هو ناتج الدالة والذي يمثل بقيمة return , اما المشواة ذاتها فهي جسد الدلة .

هناك اختلاف وحيد بين المشواة والدالة وهو ان بعض الدوال لها ناتج خالي (لاشئ) (ويمثلها في لغة MQL4 بالكلمة المحجوزة void)

دعونا نأخذ بعض الأمثلة :

كود PHP:
double

my_func (double a, double b, double c) // المعرفات والمتغيرات ( اللحم والبهارت)
{

return (a*b + c); // ناتج الدالة (الكباب)

}




كما نرى في المثال اعلاه , الدالة بدأت بتحديد نوع الناتج (الكلمة المحجوزة double) , وبعدها اسم الدالة متبوعة بالقوسين ( ) .

بداخل تلك الأقواس ( ) سنضع اللحم والبهارات . اسف اقصد المعرفات ومتغيراتهم http://my.mec.biz/images/smilies/smile.png

هنا عندنا 3 معرفات double a , double b , double c .

تبدأ الدالة عملها وتنتهي داخل القوسين { }

الكلمة المحجوزة ( return ) هي المسئولة عن اخراج الناتج النهائي للدالة .

* الكلمة المحجوزة ( Return ) :

الكلمة المحجوزة ( return ) كما قلنا هي المسئولة عن انهاء الدالة ( مثل الكلمة المحجوزة Break في الحلقات والقرارات) , كما تعطينا التحكم في نداء الدالة function call (سنعرفها بعد قليل)

الكلمة المحجوزة ( return ) يمكن ان تحتوي على تعبير ما بين اقواسها ( ) كما في مثالنا هنا ( التعبير هو اتحاد العمليات والمعرفات , راجع درس العمليات والتعبيرات ) وهنا وظيفتها ان تنهي الدالة وتخرج لنا نتائج العمليات بداخلها (كما في المثال (a*b + c);

ويمكن ايضا ان لا تحتوي على تعبير ما وهنا تكون وظيفتها فقط انهاء الدالة .

ملاحظة : ليس كل الدوال تنتهي بالكلمة المحجوزة ( return ) خاصة لو لم يكن هناك اي قيمة ناتجة عن عمليات او ما شابه .

مثال عن ذلك :

كود PHP:
void // void mean there’s no sausage – returned value.

my_func (string s) // function name and parameters list (meat & spices)

{

Print(s);

}




تذكروا هنا ان الكلمة المحجوزة void معناها انه لا يوجد هناك نتيجة للمعطيات.

في هذا المثال لم تخرج لنا الدالة قيمة الناتج بل فقط أخرجت لنا المعرف ( s ) كما ادخلناه دون تغيير

متى لم تستخدم الدالة الكلمة المحجوزة ( return ) يجب علينا استخدام الكلمة المحجوزة ( void ) لنحدد طبيعة الدالة .

هذه الأنواع من الدوال تسمى في بعض اللغات البرمجية بالطرق (methods) ولكنها في لغة MQL4 تسمى دوال functions

* استدعاء الدالة function call :

كلنا عرفنا ماهي الدالة functin ( كما اتمنى ) , حسنا كيف نقوم باستدعاء واستخدام الدالة في لغة MQL4 ؟

هناك عدة طرق بعد كتابة الدالة الخاصة بك تمكنك من استخدامها (استدعائها) في برنامجك .

افترض معي انك كتبت دالة تقوم بجمع عددين صحيحين ( integers )

هذه هي الدالة :

كود PHP:
int collect (int first_number, int second_number)

{

return(first_number+ second_number);

}



انت تعرف كيف تعمل هذه الدالة , لكنك تريد استخدامها في البرنامج .

يمكنك استخدامها ( استدعائها ) هكذا :

كود PHP:
int a = 10;

int b = 15;

int sum = collect(a,b);

Print (sum);



في المثال السابق سيخرج البرنامج والكومبيوتر الناتج 25 ( نتيجة جمع العددين 10 , 15 ) داخل الدالة التي كتبتها. !!

هل هذا سحر ام خيال !! كيف قامت السطور السابقة باستخدام ( باستدعاء ) الدالة الخاصة بك ؟؟؟

لا حظ انك سميت الدالة الخاصة بك بالأسم collect , وقيمة الكلمة المحجوزة ( return ) بها عملية الجمع .

السطر الخيالي ( int sum = collect(a,b); ) هو من قام باستخدام الدالة ( استدعائها ) بإضافة القيمة ( collelct ) اسم الدالة الى المتغير ( sum ) وأعطى الدالة القيمتين 10 و 15 .

فعند طباعة المتغير sum ستقوم بأستداء الدالة واخراج نتيجتها .

بمعنى شامل : انك كتبت الدالة وأعطيتها اسما ما , ثم كتبت امر استخدامها بكتابة اسمها داخل الأمر فقط (وتم تعريف اسم الدالة كمتغير ) , انت هكذا اساسا استدعيت الدالة الخاصة بك .

لغة MQL4 حين ترى اسم الدالة الخاصة بك ستقوم بأخذ القيم ( 10 و 15 في المثال ) وتذهب بهم الى الدالة تبعك وتقوم بمعالجتهم حسب قيمة الكلمة المحجوزة ( return ) وتعود بالقيمة الناتجة الى السطور السابقة لتقوم بطبعها او اخراجها في المكان السابق .

هذه العملية تماما كأنك نسخت سطور الدالة داخل كلمة collect في سطور البرنامج في المثال . سهلة العملية , اليس كذلك ؟

* تداخل دالة في دالة أخرى Nesting.

يمكننا ان ندخل دالة ما بداخل دالة جديدة وذلك بمعالجة سطر استدعاء الدالة برمجيا كجملة برمجية statement ( في الحقيقة كلهم يعتبروا سطور برمجية )

لنرى مثالا يوضح ذلك :

كود PHP:
void print_collection (int first_number, int second_number)

{

int sum = collect(first_number, second_number);

Print(sum);

}




في المثال نحن استخدمنا دالة collect ووضعناها داخل دالة جديدة والناتج هو خلاصة الدالتين .

تفصيلا نحن وضعنا الدالة collect داخل جسد الدالة print_collect وطبعنا نتيجتهما , void في المثال معناها انه لا توجد ( return ) , هل لازلت تتذكرها ؟

** دوال لغة MQL4 الأساسية ( ()init() , deinit() , start ):

كل برنامج في لغة MQL4 سواء كان مؤشر , اكسبرت او اسكربت فهو يبدا دائما بالدالة " ()init " اختصار كلمة بدأ (initialize) وهي تعمل بمجرد وضع البرنامج ( اكسبرت او مؤشر او اسكربت) على شارت الميتاتريدر , ووظيفتها بدء عمل المتغيرات الرئيسية بالبرنامج ( سنعرف الكثير عن المتغيرات في الدرس القادم ان شاء الله )

متى انتهى عمل البرنامج بأغلاق الشارت او مسح المؤشر او الكسبرت او اغلاق الميتا تريدر تقوم الدالة " ()deinit " بعملها لأنهاء البرنامج .

الدالة الثالثة " ()start " ( اهم الدوال على الإطلاق ) تعمل بصفة دائمة كلما استقبلت معطيات وقيم جديدة في متغيراتها ( تحرك السعر يعطي قيم جديدة للهاي واللو والكلوز وقيم المؤشرات المختلفة هي قيم تتغير طوال الوقت ) , احب ان اخبرك هنا انك ستقضي 90% من حياتك البرمجية داخل هذه الدالة .

سنعرف الكثير عن هذه الدوال الأساسية في حياتنا العملية عندما نبرمج ونكتب المؤشرات والإكسبرتات الخاصة بنا ان شاء الله .



في الدرس القادم بأذن الله سنتكلم عن المتغيرات في لغة MQL4

اخوتي الكرام لا تنسوا دعمنا باللايكات وتقييم الموضوع

عمر عبد المجيد 04-06-2012 10:05 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
موضوع رائع واحلا لايكات

غشيم فوركس 04-06-2012 11:07 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
موضوع جميل
بارك الله فيك

مازن المشهداني 05-06-2012 04:15 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة عمر عبد المجيد (المشاركة 345887)
موضوع رائع واحلا لايكات

مشكور على مرورك والتقييم

مازن المشهداني 05-06-2012 04:15 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة غشيم فوركس (المشاركة 345920)
موضوع جميل
بارك الله فيك

وفيك بارك الله
مشكور عالمرور

عمر عبد المجيد 07-06-2012 05:38 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
السلام عليكم
اخي الكريم ارجو ان تواصل الدروس وموضوعك القيم لانني بحاجة ماسة لتعلم هذه اللغة
وعلى فكرة لك مني على كل درس لايك لاجل جهودك المبذولة في خدمة المنتدى
تحياتي

مازن المشهداني 07-06-2012 08:56 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
اقتباس:

المشاركة الأصلية كتبت بواسطة عمر عبد المجيد (المشاركة 347484)
السلام عليكم
اخي الكريم ارجو ان تواصل الدروس وموضوعك القيم لانني بحاجة ماسة لتعلم هذه اللغة
وعلى فكرة لك مني على كل درس لايك لاجل جهودك المبذولة في خدمة المنتدى
تحياتي

مشكور اخي الكريم على متابعتك وتقييمك الموضوع
وباذن الله سنكمل الدروس

مازن المشهداني 08-06-2012 05:19 PM

الدرس السابع .. المتغيرات
 
بسم الله الرحمن الرحيم

مرحبا بكم في الدرس السابع ... المتغيرات في لغة MQL4 :


المتغيرات Variables ؟

هي اسماء تطلق على قطاع الذاكرة المخزن لنوع معين من البيانات.

لنفهم أكثر سنرسم صورة عامة للموضوع كمثال:

تخيل معي ان ذاكرة الكومبيوتر هي عبارة عن سلسلة من الصناديق مختلفة الأحجام , وحجم الصندوق هو مساحة التخزين بالبايت (وحدة البناء في الكومبيوتر)

* لكي نستخدم صندوقا ما لنخزن به احد البيانات يجب ان نطلق عليه اسم ما , هذه العملية تسمى اعداد declaration.

* خلال عملية الأعداد declaration نستخدم كلمة نخبر بها الكومبيوتر بنوع وحجم الصندوق المطلوب استخدامه , هذه الكلمة نطلق عليها keyword اي كلمة محجوزة تشير الى فئة معينة من البيانات .

* بعد تحديد رمز البيان بكلمة محجوزة , عليك الأن بأختيار اسم معرف خاص للصندوق (والأفضل ان تختار اسما يدل على رمز البيان ايضا لتسهيل البرنامج) ,, مثلا حددت Integer (كلمة محجوزة معتاها عدد صحيح) لتصنيف رمز البيان , وتطلق اسما من مخيلتك وليكن مثلا files (معناها ملفات وهي كلمة اخترعتها انت) وتطلقها على الصندوق , هكذا يعرف الكومبيوتر ان يخزن ارقام صحيحة(نوع البيانات) في صندوق الذاكرة المدعو files .. وهكذا ... هذه المعرفات يطلق عليها اسم ثابت المتغيرات Variables constant.

* الأن حددنا رمز البيانات واسم الصندوق , علينا الأن ان نضع هذه البيانات داخل الصندوق وذلك عن طريق ان ننسب assigning هذه البيانات الى هذا الصندوق (بكتابته برمجيا)

* الأن حددنا رمز البيان في صندوقه المناسب واطلقنا معرفا ثابتا لهذا الصندوق له قيمة افتراضية هي الصفر (هنا نقول ان عملية الأعداد declaration قد تمت) .

* عملية بدء عمل البرنامج بأدخال القيم (ادخال القيم في لغة MQL4 يكون عن طريق بيانات الأسعار القادمة من السيرفر) وتسمى هذه المرحلة ب عملية البدء initialization.

يمكن اختصار الخطوات السابقة بمعنى أخر ايضا لوضوح الفكرة هكذا:

متى انشأنا متغيرا (سمي متغير لتغير قيمه المستمر نتيجة تغير الأسعار المستمر مما يغير في النتائج ايضا) فنحن نخبر الكومبيوتر اننا نريده ان ينسب assigning حجم ذاكرة مخصصة (بوحدة البايت) لمتغيرنا هذه , ونظرا لأن الأرقام الصغيرة والحروف والأرقام الكبيرة لن تشغل نفس المساحة من الذاكرة , فسيسألنا الكومبيوتر عن رمز البيانات وحجم المساحة المطلوبة لتخزينها , ولهذا نشأ علم انواع البيانات في اللغات البرمجية.
(سنحاول ان نفهم اكثر مع كثرة الأمثلة والدروس القادمة)

على سبيل المثال , ماذا لو أخبرنا الكومبيوتر بهذا الكود :

كود PHP:
int MyVaraible=0;


معناه اننا نطلب من الكومبيوتر ان يوفر لنا حجم ذاكرة تبلغ 4 بايت(int تعني ذلك كما سيتضح في هذا الدرس) لمتغيرنا الذي اسميناه ب MyVaraibles.

في المثال السابق استخدمنا:

int ---------- Keyword

int ---------- Integer data type.

int ---------- Declaration

MyVaraible ---------- Variable’s constant.

=0 القيمة الأفتراضية

(راجع الكلمات السابقة بما سبق شرحه)

هناك انواع مختلفة من رموز البيانات :

*اعداد صحيحة int
*اعداد حقيقية(عشرية) double
*حروف char
*الوان color
*السلسلة النصية string
*قيم منطقية(صح وخطأ) bool
*التاريخ datetime

لقد قمت بنسخ السطور السابقة من درس رموز البيانات في لغة MQL4 لكم , لتتذكروا فقط ما هي المتغيرات , والأن كيف نقوم بعملية اعداد للمتغير ؟

* الإعداد declaration :

عملية اعداد المتغير تعني تقديم وتعريف هذا المتغير للبرنامج والمبرمج والمستخدمين وتحديد نوعه ومساحة التخزين الخاصة به , وذلك باستخدام الكلمات المحجوزة التي ذكرناها في درس رموز البيانات (int, double, char, bool, string, color and datetime) مع معرفات نختارها لها .

مثال :

كود PHP:
int MyVaraible;


هنا قمنا بعملية اعداد declaration للمتغير ( الذي عرفناه بالأسم MyVaraible ) وحددنا نوعه كعدد صحيح integer بالكلمة المحجوزة ( int ) .

لا يمكننا ان نستخدم المتغير في البرنامج دون عملية الإعداد تلك ( الكود في المثال اعلاه ) , فلو قمنا مثلا باستخدام المتغير في اكواد اللغة دون عملية اعداده ( الكود اعلاه هو مثال لعملية الإعداد ) ستعطي عملية التجميع compile خطأ برمجي : ( 'MyVaraible' - variable not defined. 1 error(s), 0 warning(s). )

* الإبتداء Initialization :

هذه العملية للمتغير تعني ربط قيمة ما لهذا المتغير

مثال :

كود PHP:
MyVaraible=0;


يمكنك وضع القيمة مع الإعداد في نفس السطر , مثال :

كود PHP:
int MyVaraible=0;


كما يمكنك ان تضع إعداد declaration المتغير في سطر وعملية الأبتداء ( وضع القيمة ) Initialization في سطر أخر , مثال :

كود PHP:
int MyVaraible;





MyVaraible=5;


لكن تذكر دائما ان عملية الإعداد declaration يجب ان تسبق عملية الأبتداء Initialization دائما .

* مجالات المتغيرات في البرنامج Scopes :

المتغيرات يتم وضعها بطريقتين : موضعي Local وعام Global .

ماهو مجال المتغير ؟

هو مكان الكود الذي سيتعرف على المتغير ويستطيع ان يتعامل معه .

ما معنى هذا الكلام ؟

سنشرح بتفصيل اكثر :

a- متغيرات المجال الموضعي local scope :

هي المتغيرات التي يتم إعدادها داخل الدالة و لا يتم التعامل معها الا داخل الدالة او الحلقة او الجملة الشرطية الخاصة بها فقط ( من اسمها "موضعي")

مثال :

كود PHP:
double my_func (double a, double b, double c)

{

int d ;

return (a*b + c);

}



في هذا المثال a ,b ,c and d هم متغيرات موضعية ( داخلية ) اي انهم يستخدمون داخل قالب الدالة فقط ولا يمكن لأي دالة أخرى استخدامهم , حسنا كيف تعرف الدالة والبرنامج انهم خاصين بها وحدها فقط ؟ . الأجابة هي انهم وضعوا داخل القوسين ( ) بعد اسم الدالة ( مما يعني بالضرورة انهم لها وحدها) .

b- متغيرات المجال العام global scope :

وهي المتغيرات التي يتم إعدادها خارج الدوال والحلقات والقرارات ويكن استخدامها من اي مكان داخل البرنامج .

مثال :

كود PHP:
int Global_Variable;

double my_func (double a, double b, double c)

{

return (a*b + c + Global_Variable);

}



هنا في هذا المثال تم إعداد المتغير Global_Variable خارج الدالة ( خارج القوسين ( ) ) وهكذا يمكن استخدامه من اي دالة في البرنامج ككل .

تأخذ متغيرات المجال العام دائما القيمة الأفتراضية صفر , هذا اذا لم تستلم اي قيم أخرى .


* المتغيرات الخارجية Extern variables :


الكلمة المحجوزة ( extern ) تستخدم لإعداد انواع خاصة من المتغيرات , هذه الأنواع هي التي تعرف الإعدادات الرئيسية للبرنامج ( بمعنى اخر هي خصائص المؤشر او الكسبرت التي تظهر للمستخدمين عند فتحها )

مثال :

كود PHP:
extern color Indicator_color = C'0x00,0x00,0xFF'; // blue

int init()

{

...

}




هنا في هذا المثال , المتغير Indicator_color تم تعريفه على انه متغير خارجي .

هذه المتغيرات الخارجية هي المتغيرات التي تظهر على النافذة التي تظهر لك عندما تقوم بتشغيل المؤشر او الكسبرت على الشارت , ونافذة الخصائص ايضا .
ي متغير تريد ان يتم تغييره من قبل المستخدمين العاديين عرفه على انه متغير خارجي extern variable .


في الدرس القادم بأذن الله سنتكلم عن بيانات ما قبل المعالجة في لغة MQL4
اراكم على خير مجددا

مازن المشهداني 08-06-2012 05:23 PM

الدرس الثامن .. بيانات ما قبل المعالجة
 
بسم الله الرحمن الرحيم

مرحبا بكم في الدرس الثامن ... بيانات ما قبل المعالجة في لغة MQL4

ماذا نعني بهذه البيانات ؟

هذه البيانات هي تعليمات يقوم المبرمج بتزويدها للمجمع compiler ليقوم بحفظها كما هي قبل معالجة الكود .

بمعنى اخر , خلال عملية التجميع compile (راجع مقدمة الدروس) يقوم المجمع compiler بتحويل برنامجك (بعد انتهائك منه) من لغتنا البشرية الى لغة الألة (الواحد والصفر) ليقوم بعمله .

حسنا ماذا لو اردت منه ان لا يقوم بتحويل بعض التعليمات الى لغة الألة واخراجها كما هي بلغتنا ( كرابط موقع مثلا او تعريف بصانع الكسبرت وحقوقه .. الخ) ؟

هذه البيانات وتسمى preprossesors ( اي قبل المعالجة ) تقوم بهذه الوظيفة .

مثال :

كود PHP:
#include <win32.h>


هذا الأمر( كما سنعرف لاحقا) يقوم بأخذ محتويات الملف win32.h (ملف به عنوانك مثلا) ووضعه داخل البرنامج دون تغيير فيه , فقط يقوم بفتح محتوياته داخل البرنامج ايا كانت .

هناك 4 انواع من هذه البيانات في لغة MQL4 :

1- بيان التعريف define directive :

وهو الأمر الذي ينتج ثابت ما ..

لا حظ الفرق بين المتغير والثابت فالأول يأخذ قيم متغيرة طوال الوقت سواء من المبرمج او المستخدم او الشارت , اما الثابت فهو ذو قيمة محددة لا تتغير ابدا .

مثال :

كود PHP:
#define my_constant 100


كما تلاحظ في المثال اعلاه لا توجد علامة المساواة ( = ) فقط فراغ space بين اسم الثابت (my_constant ) وبين قيمته ( 100 )

كما يمكنك ان تلاحظ ايضا عدم انتهاء الجملة بأي من علامات الترقيم مثل الفاصلة المنقوطة مثلا ; . وانما انتهت بمجرد انتقالنا الى سطر جديد في البرنامج .

اسم الثابت يخضع لجميع القواعد الخاصة التي تعلمتها الخاصة بتسمية المعرفات ( راجع درس ال SYNTAX ) , مثلا لا يمكنك ان تبدأ برقم او تزيد عدد الأحرف اكثر من 31 حرف مثلا .

يمكنك ان تضع اي قيمة تريدها من اي نوع لهذا الثابت في البداية .

ان استخدمته في كود ما سيتامل معه البرنامج كقيمة ثابتة كما تمت كتاتها .

وهكذا يمكن كتابته على النحو التالي :

كود PHP:
sum = constant1 * 10;


2- بيان الملكية property directive :

هل تتذكرون عبارة “Controlling Compilation” السابق ذكرها في الدرس الأول وأخبرتكم وقتها ان شرحها سيأتي لاحقا .

حسنا , هي احد خواص لغة MQL4 التي تسمح لك بوضع البيان ( prperty ) وامامه اي جملة ( او قيمة ) وسيخرجها المجمع compiler كما هي في ملف البرنامج المستخدم من قبل الألة ( ex4. ) .

امثلة :

كود PHP:
#property link "http://www.forex-tsd.com"

#property copyright "Anyone wants to use"


وهذه قائمة بمعرفات هذا البيان :

http://www.moneyexpertsclub.net/foru...c59bc5f381.jpg

3- بيان الإحتواء include directive :

عندما تخبر البرنامج بالأمر (include) لملف خارجي ما , فكأنك تماما تقوم بنسخ محتويات هذا الملف داخل سطر ( include ) داخل البرنامج .

مثال :

كود PHP:
#include <win32.h>


في المثال اعلاه انت اخبرت الكومبيوتر بفتح الملف (win32.h) وقراءته ونسخ محتوياته داخل جملة ( include ).

حسنا , ما معنى القوسين < > في المثال اعلاه ؟

هما لتحديد مكان الملف المراد قراءته ( win32.h ) , وهنا القوسين < > يحددان المكان (المجلد) الإفتراضي لأي ملف داخل الميتاتريدر على هذا الأمتداد : (metatrader 4\experts\include) .

طيب ماذا لو كان الملف المراد قراءته في مكان أخر ؟

لو كان في نفس مجلد البرنامج , نضع اسمه مباشرة بين العلامتين " " .

مثال :

كود PHP:
#include “mylib.h”


ولو كان في مجلد أخر ( مثلا داخل مجلد D:\books ) نضع اسمه هكذا :

كود PHP:
#include “D:\books\mylib.h”


وفي جميع الحالات ان لم يجد البرنامج الملف في مكانه سيقوم بإصدار رسالة ( error ) اي خطأ في البرنامج .

يمكننا استخدام الأمر ( include ) في اي سطر من البرنامج ولكن جرت العادة ان يكون في رأس البرنامج .

4- بيان الإستيراد import directive : (هذا الأمر للقراءة وهو للمتخصصين فقط )

هو يشبه تماما الأمر السابق ( include ) من حيث جلبه لملف خارجي .

ولكنه يختلف عنه في نوع الملف , فهو يقوم بقراءة الملفات ذات الأمتدادات ( dll. ) و ( ex4. ) لوضعها داخل اكواد البرنامج .

مثال :

كود PHP:
#import "user32.dll"

int MessageBoxA(int hWnd,string lpText,string lpCaption,

int uType);

int MessageBoxExA(int hWnd,string lpText,string lpCaption,

int uType,int wLanguageId);

#import "melib.ex4"

#import "gdi32.dll"

int GetDC(int hWnd);

int ReleaseDC(int hWnd,int hDC);

#import





متى ادخلت دوال خاصة بملف ( ex4 ) فلن تحتاج ان تقوم بإعداداها declaration داخل البرنامج الأصلي.

لكن متى ادخلت دوال من ملف ( dll ) فيجب عليك اعداداها اولا داخل البرنامج الأصلي ( وذلك لأختلاف اللغة فقد يكون الملف مصدره لغة ال C مثلا فيجب وقتها ان توافق بين اللغتين )

مثال :

كود PHP:
int MessageBoxA(int hWnd,string lpText,string lpCaption,

int uType);


وستعمل الدوال التي اعددتها فقط في البرنامج .

يجب ان تنهي امر ( import ) بسطر ( import ) مجرد و خالي من اي اقواس او اسماء

كود PHP:
#import




في الدرس القادم بأذن الله ستبدأ ببرمجة مؤشرك الأول (جزء 1)
اراكم على خير مجددا

wolfkamikaz 10-06-2012 05:54 AM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
واصل الله يوفقك

قيس ياسر 10-06-2012 07:35 PM

رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
 
واصل اخي الكريم
واحلى لايكات حتى تكون حافز لك ولو اني اعلم انك تحب ان تفيد اخوانك كثيرا
تحياتي


الساعة الآن 02:21 AM

Powered by vBulletin® Copyright ©2000 - 2024

جميع الحقوق محفوظة الى اف اكس ارابيا www.fx-arabia.com