x32x01
  • بواسطة x32x01 ||
قدمت لنا لغة الميتاتريدر 5 المزيد من الخصائص والمواصفات التي يمكن تعريفها للبرنامج .
يتم تعريف الخاصية من خلال التعليمة البرمجية property# ومن ثم ذكر اسم الخاصية ومن ثم قيمتها بدون اشارة مساواة .
مثلا السطر التالي
Code:
#property copyright "Copyright 2023, Dev.Mostafa Elghayesh"
#property link      "HTTPS://WwW.TabCode.Net"
#property version   "1.00"

يعرف الخاصية copyright التي يكتب بها المبرمج قيمة نصية تعبر عن حقوق الملكية وتظهر هذه المعلومات للمستخدم من خلال نافذة خصائص البرنامج نفسه كما سنرى بعد قليل .

فيما يلي سرد لهذه الخصائص وشرحها :
- link وهي قيمة نصية تعبر عن رابط لموقع الشركة أو ايميل المبرمج ويظهر هذا الرابط من خلال نافذة خصائص البرنامج .
- copyright وهي قيمة نصية تعبر عن حقوق الملكية للمبرمج أو للشركة المنتجة للبرنامج ويظهر هذا النص من خلال نافذة خصائص البرنامج .
- version وهي قيمة نصية تعبر عن الإصدار الحالي للبرنامج وذلك لكي يتسنى للمستخدم من معرفة إصدار النسخة الحالية التي يستخدمها من البرنامج ومعرفة أي النسخ أحدث من الأخرى لنفس البرنامج ويظهر الإصدار من خلال نافذة خصائص البرنامج .
أقصى عدد أحرف مقبول هو 31 حرف .
- description
قيمة نصية تعبر عن وصف مختصر للبرنامج. يمكن كتابة أكثر من سطر واحد للوصف بحيث لا يتجاوز الوصف مجتمعا أكثر من 511 حرف بما في ذلك أحرف التحكم للسطر الجديد .
يظهر هذا الوصف أيضا في نافذة الخصائص .
وهذا المثال كاملا :
AacK4mR.png
من هنا توجد بعض الأسماء والأكواد التى لابد من دراستها جيدأ

stacksize
تحديد حجم مخصص من الذاكرة لعمل هذا البرنامج .

library
لا توجد قيمة مدخلة مع هذه الخاصية . فقط عند تحديد هذه الخاصية فإن البرنامج سوف يتم التعامل معه على أنه مكتبة من الوظائف يمكن استدعائها من خلال برامج أخرى وليس برنامج مستقل بذاته .
وهذا النوع من البرامج يجب أن لا يحتوي الوظيفة start .

indicator_chart_window
لتحديد أن المؤشر سوف يظهر على النافذة الرئيسية .

indicator_separate_window
لتحديد أن المؤشر سوف يظهر في نافذة مستقلة .

indicator_buffers
عدد البفرات ( مصفوفة محجوزة في الذاكرة ) التي سوف يتم استخدامها في المؤشر .

indicator_plots
عدد الخطوط التي سيتم رسمها من خلال المؤشر .

indicator_minimum
عند رسم المؤشر في نافذة مستقلة يمكن تحديد القيمة الدنيا لمقياس المؤشر العمودي .
مثلا تكون القيمة صفر فلا يظهر المؤشر أقل من هذه القيمة في مقياسه .

indicator_maximum
عند رسم المؤشر في نافذة مستقلة يمكن تحديد القيمة العليا لمقياس المؤشر العمودي .
مثلا تكون القيمة 100 فلا يظهر المؤشر أكثر من هذه القيمة في مقياسه .

indicator_colorN
تحديد لون افتراضي لكل خط من خطوط المؤشر حيث يعبر الرمز N عن رقم الخط .
مثلا indicator_color1 و indicator_color2 وهكذا .

indicator_widthN
تحديد سماكة افتراضية لكل خط من خطوط المؤشر . أيضا يدل الرمز N على رقم الخط .

indicator_styleN
تحديد شكل الخط الافتراضي هل هو مستمر أو منقط وهكذا .

indicator_typeN
تحديد نوع الخط هل هو على شكل شموع أو بارات أو متعرج وهكذا .

indicator_levelN
تحديد مستويات مختلفة يمكن إظهارها في نافذة المؤشر المستقلة .

indicator_levelcolor
تحديد لون كل مستوى على حدة .

indicator_levelwidth
تحديد سماكة المستوى .

indicator_levelstyle
تحديد شكل خط المستوى .

script_show_confirm
لإظهار نافذة تأكيدية للمستخدم لتنفيذ البرنامج على الشارت أو لا .

script_show_inputs
إظهار نافذة مدخلات البرنامج للمستخدم قبل تنفيذ البرنامج فعليا على الشارت .

كما رأيتم فإن هذا شرح مبسط لهذه المواصفات وفائدتها وسوف نتعرف أكثر عليها من خلال عملنا في صناعة مؤشر حقيقي إن شاء الله .
والأن نبدأ الشغل اللى بجد ونتعرف على اهم وبداية عالم البرمجة وهى المتغيرات
أضافت لغة الميتاتريدر 5 الكثير من أنواع المتغيرات الجديدة بالنسبة للغة نفسها .
هذه الأنواع معروفة لمبرمجي السي أو المبرمجين المحترفين بشكل عام .
في هذا الشرح سنقوم بتوضيحها بشكل كامل إن شاء الله .
قبل أن نبدأ يجب أن نعرف أن المتغيرات هي عبارة عن أسماء نختارها نحن لنسند لها قيم رقمية أو نصية أو تاريخ أو لون وهكذا .
يمكننا قراءة قيمة المتغير أو كتابة قيمة مختلفة لقيمته السابقة أو مقارنته مع متغير آخر وهكذا .
Code:
 int BarCount=500;
في المثال السابق قمنا بتعريف متحول اسمه BarCount على أنه متحول رقمي من النوع الصحيح integer
وأسندنا له قيمة ابتدائية هي 500 .

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

وسنبدأ الآن بشرح أنواع المتغيرات المتوفرة بهذه اللغة الجديدة .

أولا المتغيرات الرقمية الصحيحة :
وهي أحد عشر نوع ( لا تخف من كثرتها فهي لصالحك ) .
النوع char ( حرف بايت ) .
يستخدم بايت واحد في الذاكرة .
مجاله من -128 إلى 127 .

النوع uchar ( الحرف u يرمز إلى unsigned )
يستخدم بايت واحد في الذاكرة .
مجاله من 0 إلى 255 .

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

النوع short ( رقم صحيح قصير ) .
يستخدم بايتان في الذاكرة .
مجاله من -32768 إلى 32767 .

النوع ushort ( رقم صحيح قصير بدون إشارة )
يستخدم بايتان في الذاكرة .
مجاله من 0 إلى 65535 .

النوع int ( رقم صحيح ) .
يستخدم أربع بايتات في الذاكرة .
مجاله من - 2147483648 إلى 2147483647 .

النوع uint ( رقم صحيح بدون إشارة ) .
يستخدم أربع بايتات في الذاكرة .
مجاله من 0 إلى 4294967295 .

النوع color ( لون ) .
يستخدم أربع بايتات في الذاكرة .
مجاله من -1 إلى 16777215 .

النوع long ( رقم صحيح طويل ) .
يستخدم ثمان بايتات في الذاكرة .
مجاله من -9223372036854775808 إلى 9223372036854775807 .

النوع ulong ( رقم صحيح طويل بدون إشارة ) .
يستخدم ثمان بايتات في الذاكرة .
مجاله من 0 إلى 18446744073709551615 .

النوع datetime ( تاريخ زمن ) .
يستخدم ثمان بايتات في الذاكرة .
مجاله من 0 (1970.01.01 0:00:00) إلى 32535244799 (3000.12.31 23 : 59 : 59) .

كما تلاحظون فإن الأنواع السابقة الرقمية الصحيحة قد شملت تقريبا كل مجالات الأرقام بإشارة أو بدون إشارة .

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

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

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

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

ثانيا المتحولات الرقمية بفاصلة عائمة :
وهي نوعان فقط :
النوع Float ( رقم بفاصلة )
يستخدم أربع بايتات في الذاكرة .
مجاله من 1.175494351e-38 إلى 3.402823466e+38 .
أي من -1175494351 قبلها 38 صفر قبل الفاصلة .
إلى 3402823466 قبلها 38 صفر قبل الفاصلة .

النوع Double ( رقم بفاصلة دقة مضاعفة )
يستخدم ثماني بايتات في الذاكرة .
مجاله من 2.2250738585072014e-308 إلى
1.7976931348623158e+308
والشرح نفس السابق .

ثالثا المتحولات النصية :
وهي نوع واحد فقط هو النوع string .
وعدد البايتات المستخدمة في الذاكرة يعتمد على حجم النص الفعلي المخزن .
يتم تخزين كل حرف في بايتين بنظام اليونيكود الذي يتيح لك تخزين وإظهار الأحرف العربية والصينية والكورية وغيرها من اللغات .

قواعد تسمية المتغيرات :
يستطيع المبرمج تسمية متحولاته كما يريد بشرط التقيد ببعض الشروط الهامة .
يجب أن لا يبدأ اسم المتحول برقم مثل 12val ولكن يسمح أن ينتهي برقم مثل val12 .
يجب أن لا يتضمن اسم المتحول الأحرف التالية أو بعضها وهي ()+-*&^%$#@!~ .
يجب أن لا يكون اسم المتحول أحد الكلمات المحجوزة من قبل اللغة نفسها ويسمح فقط أن تكون جزءا من اسم المتحول .

وهذه الكلمات المحجوزة هي :
bool enum struct char float uchar class int uint color long ulong datetime short ushort double string void const private protected public virtual extern input static
break do return case else sizeof continue for switch default if while delete new
false #define #property this #import true #include

أيضا لا تقبل اللغة التعامل مع أي متغير قبل أن يتم تعريفه .
لكل متغير مجال Scope خاص به .
ففي حال أردنا أن يكون المتغير ظاهرا ومرئيا في كل البرنامج فإننا نقوم بتعريفه في بداية البرنامج .
أما لو أردنا أن يكون المتغير محليا فقط local أي مجاله ظاهرا فقط في وظيفة محددة فإننا نعرفه داخل هذه الوظيفة .
بالطبع لا يمكننا أن نتعامل مع هذا المتغير من خارج هذه الوظيفة .

مثال :
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"

double MaximumRisk = 0.02;    // Maximum Risk in percentage
string TheSite="iTabCode";
int BarsCandle = 500;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+

لقد قمنا بتعريف متغير اسمه TheSite في بداية البرنامج وهذا المتغير مجاله عام أي أننا نستطيع التعامل معه من خلال أي وظيفة في البرنامج .
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"

double MaximumRisk = 0.02;    // Maximum Risk in percentage
string TheSite="iTabCode";
int BarsCandle = 500;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   string TheSite2 = "iTabCode";
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+


في هذا المثال عرفنا متغير باسم TheSite2 داخل الوظيفة OnInit وهذا يجعل المتغير محليا أي أننا لن نستطيع التعامل معه إلا من خلال الوظيفة OnInit فقط .

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

المشاركات المتشابهة

x32x01
الردود
0
المشاهدات
7
x32x01
x32x01
x32x01
الردود
0
المشاهدات
7
x32x01
x32x01
x32x01
  • x32x01
الردود
0
المشاهدات
4
x32x01
x32x01
x32x01
الردود
0
المشاهدات
13
x32x01
x32x01
x32x01
الردود
0
المشاهدات
8
x32x01
x32x01
الوسوم : الوسوم
برمجة الفوركس تعلم mql5 تعلم برمجة الفوركس

الدخول أو التسجيل السريع

نسيت كلمة مرورك؟

آخر المشاركات

أحدث المنتجات

إحصائيات المنتدى

المواضيع
1,530
المشاركات
1,716
أعضاء أكتب كود
191
أخر عضو
Ahmed123132
عودة
أعلى