النتائج 61 إلى 75 من 237
- 25-12-2007, 10:20 PM #61
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
بسم الله الرحمن الرحيم
تعلمنا في الدروس السابقة كل الأساسيات اللازمة لعمل فكرة مؤشرنا الجديد.
بقي عندنا مفهوم واحد فقط ( ضروري لهذه المرحلة ) لم نشرحه حتى الآن وهو مفهوم الحلقات Loops.
والحلقات ببساطة هي عبارة عن كتلة برمجية يتم تنفيذها عدد محدد من المرات.
أي أن هذه الكتلة البرمجية سوف تنفذ n مرة بحيث n هي العدد المطلوب لتكرار تنفيذ هذه الكتلة البرمجية.
عناصر الحلقة البرمجية:
- متحول رقمي ( عداد ) قد يكون من النوع int أو من النوع double فقط.
- شرط استمرار الحلقة وهو الشرط اللازم تحققه لاستمرار الحلقة. وبمجرد عدم تحقق الشرط للمرة الأولى يتم الخروج من الحلقة.
- مقدار التزايد في عداد الحلقة في كل مرة يتم تنفيذ الكتلة البرمجية للحلقة.
أمر الحلقة هو for وله ثلاثة بارامترات من نوع خاص.
- البارامتر الأول هو متحول العداد الرقمي وقيمة ابتدائية له.
- البارامتر الثاني هو شرط استمرار الحلقة.
- البارامتر الثالث هو مقدار التزايد في عداد الحلقة كل مرة.
هذه ليست بارامترات بالمعنى الحقيقي للبارامترات ولكنها عبارة عن أوامر برمجية.
لذلك يتم الفصل بينها بالفاصلة المنقوطة وليس بالفاصلة العادية فانتبه لهذا الأمر.
هذه الأمثلة سوف توضح بالضبط كل الحالات الممكنة لانشاء حلقة.
مثال (1)
كود PHP:for (int i=1;i<=10;i++)
{
Print(i);
}
شرط استمرار الحلقة هو أن تكون قيمة المتحول أصغر من أو تساوي العشرة.
العداد i سوف يزداد واحد كل مرة يتم تكرار تنفيذ الكتلة البرمجية الموجودة داخل الأقواس المعقوفة.
وفي داخل الكتلة البرمجية للحلقة سوف تتغير قيمة المتحول العداد i لتأخذ القيمة الحالية ( أي تكون أول مرة واحد ثم تصبح اثنان وهكذا).
هذا يعني أن حلقتنا سوف تبدأ من الواحد وحتى العشرة أي أنها ستنفذ عشرة مرات فقط.
لأنه بمجرد ان تصبح قيمة العداد 11 سوف لن يتحقق شرط تنفيذ الحلقة.
وعندها سينتقل التنفيذ البرمجي لما بعد الكتلة البرمجية للحلقة.
مثال (2)
كود PHP:for (int i=5;i<=100;i++)
{
Print(i);
}
مثال (3)
كود PHP:for (int i=0;i<50;i=i+2)
{
Print(i);
}
مثال (4)
كود PHP:for (int xx=10;xx>0;xx--)
{
Print(xx);
}
ولاحظ أيضا كيف أننا جعلنا العداد يتناقص ولا يتزايد.
وطبعا اسم المتحول هو اختياري ولكن جرى العرف البرمجي أن يكون اسمه i .
مثال (5)
كود PHP:for (double i=0.1;i<=1;i=i+0.1)
{
Print(i);
}
مثال (6)
كود PHP:double i;
for (i=0.1;i<=1;i=i+0.1)
{
Print(i);
}
يمكن وضع حلقة داخل حلقة بمعنى أنه يمكنك وضع حلقة كاملة مع كتلتها البرمجية داخل كتلة برمجية لحلقة أكبر.
كما يمكن أن تكون الحلقة بعدادين أو أكثر. لأن الحلقات مرنة جدا جدا ومعقدة جدا جدا.
ولكن لا أريد منكم الآن إلا أن تفهموا أبسط استخدام للحلقات البسيطة.
- 25-12-2007, 10:25 PM #62
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
بعد أن شرحنا مفهوم الحلقات البرمجي يمكننا الآن أن نستمر في بناء مؤشرنا الجديد.
لنراجع آخر كود وصلنا إليه:
كود PHP://+------------------------------------------------------------------+
//| Candle Length.mq4 |
//| Copyright © 2006, eng waddah attar |
//| www.****quotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, eng waddah attar"
#property link "http://www.****quotes.net"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
double BufLength1[];
double BufLength2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,BufLength1);
SetIndexBuffer(1,BufLength2);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_HISTOGRAM);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
وبالتالي سوف تظهر خطوط المؤشر على الشارت.
الحلقة ستكون على الشكل التالي:
كود PHP:for(int i=0;i<Bars;i++)
في هذا المتحول Bars تخزن قيمة رقمية صحيحة تمثل عدد الشموع على الشارت الذي وضعنا عليه مؤشرنا.
ولا نحتاج لتعريف المتحول Bars لأنه معرف داخليا مع قيمة تمثل عدد الشموع.
في الحلقة السابقة نحن نقول للبرنامج أن ينفذ الكتلة البرمجية للحلقة بدءا من القيمة صفر وحتى آخر شمعة موجودة على الشارت.
سوف نضيف جسم الحلقة إلى الكود ونحذف السطر:
كود PHP:int counted_bars=IndicatorCounted();
والآن سنضيف كتلة الحلقة البرمجية والتي من خلالها سنحسب قيم مؤشرنا لعرضها على الشارت.
نحن نريد حساب طول الشمعة أي الفرق بين الهاي واللو.
ولذلك فإن قيمة المصفوفة الأولى ستكون:
كود PHP:BufLength1[i]=High[i]-Low[i];
الفرق بين قيمة الهاي واللو للشمعة رقم صفر.
وكما وضحنا سابقا فإن المصفوفة High والمصفوفة Low هي مصفوفات جاهزة وفيه قيم الشمعات الموجودة على الشارت الحالي.
ستصبح الحلقة على الشكل التالي:
كود PHP:for(int i=0;i<Bars;i++)
{
BufLength1[i]=High[i]-Low[i];
}
كود PHP://+------------------------------------------------------------------+
//| Candle Length.mq4 |
//| Copyright © 2006, eng waddah attar |
//| www.****quotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, eng waddah attar"
#property link "http://www.****quotes.net"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
double BufLength1[];
double BufLength2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,BufLength1);
SetIndexBuffer(1,BufLength2);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_HISTOGRAM);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
for(int i=0;i<Bars;i++)
{
BufLength1[i]=High[i]-Low[i];
}
//----
return(0);
}
//+------------------------------------------------------------------+
- 27-12-2007, 12:47 AM #63
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
جزاك الله كل خير
- 29-12-2007, 06:40 AM #64
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
بسم الله الرحمن الرحيم
في هذا الدرس سنتكلم عن الشروط Conditions وكيفية معالجتها والتعامل معها برمجيا.
ولكن قبل البدء سنتكلم نظريا لاستيعاب الفكرة الأساسية للشروط ومفهمومها البرمجي.
الشرط هو عبارة عن مقارنة رياضية بين قيمتين رقميتين أو نصيتين.
والمقارنات الرياضية هي نفسها المعروفة للجميع وهي:
- يساوي ويرمز لها بالرمز ( == ).
- لا يساوي ويرمز لها بالرمز ( =! ).
- أكبر من ولها الرمز ( < ).
- أصغر من ولها الرمز ( > ).
- أكبر من أو يساوي ( =< ).
- أصغر من أو يساوي ( => ).
بحيث يتم وضع العلاقات السابقة بين متحولين أو قيمتين على الشكل التالي:
(A==B) \\ الشرط هو أن تكون قيمة المتحول A تساوي قيمة المتحول B.
(A>=5) \\ الشرط هو أن تكون قيمة المتحول A أكبر من أو تساوي الخمسة.
(GetNum()!=old) \\ الشرط هو أن تكون القيمة العائدة من الوظيفة GetNum لا تساوي قيمة المتحول old .
('AccName=='khaled) \\ الشرط هو أن تكون قيمة المتحول AccName هو القيمة النصية khaled.
تتم معالجة الشرط عند التنفيذ كما يلي:
- يقوم البرنامج باستبدال المتحولات بقيمها لحظة التنفيذ في عبارة الشرط.
- ثم يقوم بالمقارنة الرياضية بين القيم.
- عند تحقق الشرط يضع القيمة صح true.
- عند عدم تحقق الشرط يضع القيمة خطأ false.
مثال:
لدينا مثلا الشرط (A==B) بحيث كانت قيمة A تساوي 4 وقيمة B تساوي 4 لحظة تنفيذ عبارة الشرط.
يقوم منفذ التعليمات البرمجية باستبدال المتحولات بقيمها ليصبح الشرط (4==4).
ثم يقوم بالمقارنة الرياضية ليجدها صحيحة ويضع قيمة true.
وتصبح عبارة الشرط (A==B) تصبح (true).
طبعا المعالجة السابقة تتم في الذاكرة وليس على نص البرنامج الأصلي.
مما سبق نريد أن نقول أن أي شرط يتحول في نهاية المطاف إلى قيمتين فقط هما true في حال كان الشرط صحيحا أو false في حال كان الشرط خاطئا.
الشرح السابق الهدف منه هو شرح كيفية تعامل منفذ الأوامر مع الشروط وأيضا هو تمهيد لشرح أمر آخر وهو العلاقات المنطقية Booleans بين الشروط نفسها.
في الشرح السابق تكلمنا عن عبارة تحوي شرطا واحدا فقط.
ولكننا قد نحتاج إلى فحص شرطين أو أكثر في نفس الوقت.
أي أن عبارة الشرط تتكون من عدة شروط تحكمها علاقات منطقية بووليانية.
ما هي العلاقات المنطقية البووليانية؟
لدينا ثلاثة علاقات منطقية أساسية هم:
- العلاقة ( و ) AND ويرمز لها برمجيا بالرمز && .
- العلاقة ( أو ) OR ويرمز لها برمجيا بالرمز || .
- العلاقة ( عكس ) NOT ويرمز لها برمجيا بالرمز ! .
العلاقة AND ببساطة تعني أنه يجب تحقق كل الشروط الفرعية ليصبح الشرط النهائي محققا.
العلاقة OR تعني أنه يكفي تحقق أحد الشروط الفرعية ليصبح الشرط النهائي محققا.
العلاقة NOT تعني أنه يجب عدم تحقق الشروط الفرعية ليتحقق الشرط النهائي.
أمثلة توضيحية:
لدينا مثلا شرطان الأول هو (A==B) والثاني هو (B>=5).
ونريد أن ندمج هذين الشرطين في شرط واحد بحيث نريد تحقق كلا الشرطين معا.
لتصبح العبارة الشرطية على الشكل التالي:
(A==B) && (B>=5)
أما إذا أردنا تحقق أحد الشرطين فقط فإن العبارة الشرطية تصبح على الشكل التالي:
(A==B) || (B>=5)
أما إذا كان شرطنا الأساسي هو عدم تحقق كلا الشرطين فإن العبارة تصبح:
((A==B) && (B>=5))!
والحالة الأخيرة هي إذا كان شرطنا الأساسي هو عدم تحقق أحد الشرطين فإن العبارة تصبح:
((A==B) || (B>=5))!
قد يحصل معكم لبس قليل في حالة المقارنة المنطقية NOT ولكنها ستزول بعد فترة.
لذلك كل ما أريده منكم أن يكون مفهوم العلاقات الرياضية بين القيم الرقمية أو النصية وكذلك مفهوم العلاقات المنطقية بين الشروط مفهومين بشكل نظري على الأقل.
بالنسبة للعلاقات الرياضية بين القيم الرقمية فهي مفهومة كأن تكون 6 أكبر من 3.
ولكن تطبيق العلاقات الرياضية بين النصوص قد يشكل لبسا لديكم ولكن الأمر بسيط أيضا.
فالمساواة بين النصوص هي أن تكون النصوص متساوية حرفيا.
أما علاقات الأكبر والأصغر فهي تعني الترتيب الأبجدي فمثلا الحرف a أصغر من الحرف b وهكذا.
- 29-12-2007, 06:44 AM #65
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
الأمر الذي يعالج الشروط وينفذ الأوامر البرمجية بناء على نتائج هذه الشروط هو الأمر if ويتم وضع كل الشروط داخل قوسين () .
في حال تحقق الشرط فإن منفذ الأوامر سوف ينفذ الكتلة البرمجية المرتبطة بالأمر if.
يمكن إضافة كتلة برمجية أخرى للأمر if تأتي بعد الأمر else وهي تعني في حال عدم تحقق شروط if فيجب تنفيذ الكتلة البرمجية التابعة للأمر else.
وتكون الصيغة البرمجية للأمر if كما يلي:
كود PHP:if(A==B)
{
الكتلة البرمجية للأمر if
}
كود PHP:if(A==B)
{
الكتلة البرمجية للأمر if
}
else
{
الكتلة البرمجية للأمر else
}
عودة لمؤشرنا ولنتذكر هنا آخر كود وصلنا إليه:
كود PHP://+------------------------------------------------------------------+
//| Candle Length.mq4 |
//| Copyright © 2006, eng waddah attar |
//| www.****quotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, eng waddah attar"
#property link "http://www.****quotes.net"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
double BufLength1[];
double BufLength2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,BufLength1);
SetIndexBuffer(1,BufLength2);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_HISTOGRAM);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
for(int i=0;i<Bars;i++)
{
BufLength1[i]=High[i]-Low[i];
}
return(0);
}
//+------------------------------------------------------------------+
وبما أن الطول هو عبارة عن الفرق بين الهاي واللو فهذا يعني أنه موجب دائما.
ولكن طول جسم الشمعة بما أنه الفرق بين الإغلاق والفتح فهذا يعني أنه قد يكون موجبا أو سالبا.
وبما أننا خططنا لمؤشرنا أن يرسم خطي الطول فهذا يعني أن يكون كلا الطولين موجبا دائما.
ولذلك سنطبق ما تعلمناه عن الشروط لمعالجة هذا الأمر وذلك لرسم الخط الثاني بشكل موجب وصحيح دائما.
بشكل بسيط سوف نحسب طول جسم الشمعة على أنه الفرق بين الإغلاق والفتح.
في حال كان الإغلاق أكبر من الفتح فهذا يعني أن الطول سيكون موجبا وهو الحالة الصحيحة الأولى.
في حال كان الإغلاق أصغر من الفتح فهذا يعني أن الطول سيصبح سالبا ولذلك يجب تغيير كيفية حساب الطول إلى الفتح ناقص الإغلاق.
طبعا يمكن معالجة هذه الحالة برمجيا بعدة طرق سنستعرض معظمها لزيادة الشرح والفهم.
وأي طريقة منها تعطينا النتيجة الصحيحة فهي صحيحة بالنهاية.
ويعود اختيار أحدها إلى المبرمج نفسه وطريقة تفكيره ومعالجته للأمر.
الطريقة الأولى:
وضع الشرط والحساب في كتلة برمجية واحد تتضمن if و else كالتالي:
كود PHP:if(Close[i]>Open[i])
{
BufLength2[i]=Close[i]-Open[i];
}
else
{
BufLength2[i]=Open[i]-Close[i];
}
وإلا ( else ) في حال عدم تحقق الشرط أي أن الإغلاق أصغر من أو يساوي الفتح فإن طول الشمعة يساوي الفتح ناقص الإغلاق.
وتصبح كتلة الوظيفة start كالتالي:
كود PHP:int start()
{
//----
for(int i=0;i<Bars;i++)
{
BufLength1[i]=High[i]-Low[i];
if(Close[i]>Open[i])
{
BufLength2[i]=Close[i]-Open[i];
}
else
{
BufLength2[i]=Open[i]-Close[i];
}
}
return(0);
}
حساب طول جسم الشمعة دائما على أنه الإغلاق ناقص الفتح وفي حال كان الطول سالبا نضرب النتاتج في -1 ليصبح موجبا ويكون الكود كالتالي:
كود PHP:LL=Close[i]-Open[i];
if(LL<0)
{
LL=-1*LL;
}
BufLength2[i]=LL;
كود PHP:int start()
{
//----
double LL;
for(int i=0;i<Bars;i++)
{
BufLength1[i]=High[i]-Low[i];
LL=Close[i]-Open[i];
if(LL<0)
{
LL=-1*LL;
}
BufLength2[i]=LL;
}
return(0);
}
- 29-12-2007, 06:46 AM #66
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
الطريقة الثالثة:
في هذه الطريقة سنستخدم الوظائف الحسابية المتوفرة في لغة MQL4 والتي تسهل علينا كثيرا القيام بعمليات حسابية دون الخوض بطريقة عملها الداخلية.
الوظيفة التي سنستخدمها هي الوظيفة MathAbs وهي تعطينا القيمة المطلقة ( الموجبة ) لأي رقم سالب أو موجب.
المدخلات لهذه الوظيفة هي الرقم الذي نريد حساب القيمة المطلقة له.
والمخرجات هي القيمة المطلقة.
مثال:
كود PHP:Print(MathAbs(-5));
سيتم طباعة 5
كود PHP:Print(MathAbs(7));
سيتم طباعة 7
ويصبح الكود على الشكل التالي:
كود PHP://+------------------------------------------------------------------+
//| Candle Length.mq4 |
//| Copyright © 2006, eng waddah attar |
//| www.****quotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, eng waddah attar"
#property link "http://www.****quotes.net"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
double BufLength1[];
double BufLength2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,BufLength1);
SetIndexBuffer(1,BufLength2);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_HISTOGRAM);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
for(int i=0;i<Bars;i++)
{
BufLength1[i]=High[i]-Low[i];
BufLength2[i]=MathAbs(Close[i]-Open[i]);
}
return(0);
}
//+------------------------------------------------------------------+
والطرق الثلاث تعطي نفس النتائج.
- 29-12-2007, 06:47 AM #67
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
سنتعرف أكثر عن الوظائف الحسابية المتوفرة في لغة MQL4
مع ملاحظة أن كل الوظائف الحسابية تبدأ بالاسم Mathxxxx
الوظيفة MathAbs لحساب القيمة المطلقة .
الوظيفة MathCos لحساب قيمة Cosine الزاوية ( خاصة بعلم المثلثات ).
الوظيفة MathSin لحساب قيمة Sine الزاوية ( خاصة بعلم المثلثات ).
الوظيفة MathTan لحساب قيمة Tan الزاوية ( خاصة بعلم المثلثات ).
الوظيفة MathArccos لحساب قيمة Arc Cosine الزاوية ( خاصة بعلم المثلثات ).
الوظيفة MathArcsin لحساب قيمة Arc Sine الزاوية ( خاصة بعلم المثلثات ).
الوظيفة MathArctan لحساب قيمة Arc Tan الزاوية ( خاصة بعلم المثلثات ).
وهي كلها معروفة لنا وقد درسناها في المرحلة الثانوية ولكن تسميتها تختلف من دولة لأخرى.
نحن عندنا في سورية نرمز لها ( جب - تجب - ظل ... الخ )
في السعودية كما أذكر يرمزون لها ( جا - جتا - ظا - ظتا ... الخ )
بالنسبة لي لم أستخدم هذه الوظائف في برمجتي أبدا لأني حتى الآن لم أجد استراتيجية أو طريقة تحتاج مثل هذه الحسابات.
الوظيفة MathLog لحساب قيمة اللوغاريتم ( خاصة بعلم المثلثات ).
الوظيفة MathCeil تقوم بحساب أكبر قيمة صحيحة للرقم المدخل ( 5.5 تصبح 6 و -5.5 تصبح -5 )
الوظيفة MathFloor تقوم بحساب أصغر قيمة صحيحة للرقم المدخل ( 5.5 تصبح 5 و -5.5 تصبح -6 )
الوظيفة MathMin تعيد القيمة الصغرى للقيمتين المدخلتين للوظيفة نفسها.
الوظيفة MathMax تعيد القيمة الكبرى للقيمتين المدخلتين للوظيفة نفسها.
الوظيفة MathPow تعيد قيمة الرقم مضروب بنفسه عدد محدد من المرات.
مثال:
MathPow(3,2)
سوف تعطينا النتيجة 3×3 = 9
MathPow(4,3)
سوف تعطينا النتيجة 4×4×4= 64
الوظيفة MathRand تعطينا دائما رقم عشوائي متغير من 0 - 32767
الوظيفة MathRound تقوم بتقريب الرقم إلى أقرب رقم صحيح ( 2.3 تصبح 2 و 2.6 تصبح 3 )
الوظيفة MathSqrt تقوم بحساب الجذر التربيعي للرقم المدخل.
كل الوظائف الحسابية السابقة مدخلاتها عبارة عن الرقم الذي نريد حساب الشيء عليه والخرج دائما هو النتيجة.
- 29-12-2007, 06:48 AM #68
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
الوظيفة MathRound تقرب الأرقام العشرية
بمعنى إذا كانت الأرقام العشرية أكبر أو تساوي 0.5 فإنها تزيد الرقم واحدا.
مثلا الرقم 2.6 تصبح 3 لأن الرقم العشري أكبر من 0.5
ولكن 2.4 تصبح 2 لأن الرقم العشري أصغر من 0.5
الوظيفة MathFloor تزيل الرقم العشري ولا تقربه .
وتحول الرقم إلى الرقم الأصغر
مثلا 8.9 تصبح 8
و -4.2 تصبح -5 على اعتبار أن -5 هي الرقم الأصغر وليس -4
كل وظيفة تعمل بنظام مختلف ولكن ليسوا عكس بعض
- 29-12-2007, 06:51 AM #69
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
سنضيف بعض البهارات إلى مؤشرنا لمزيد من الإحاطة.
أولا: تقييد مجال عرض قيم المؤشر:
بما أن المؤشر له قيم موجبة فقط فما رأيكم لو جعلناه يبدأ من الصفر تماما بحيث تظهر الخطوط مباشرة من أسفل النافذة
دون وجود هامش.
هذا الأمر مسؤول عنه خاصية للمؤشر هي indicator_minimum وهي تحدد القيمة الصغرى لمجال عرض القيم على المؤشر.
يمكن طبعا للمستخدم التحكم يدويا في هذه القيمة من خلال خصائص المؤشر نفسها.
ولكن إعطاء قيمة افتراضية لهذه الخاصية يزيد مؤشرنا قوة وسهولة.
والآن سنضيف الخاصية الجديدة لمؤشرنا أعلى الكود مع باقي الخصائص الأخرى على الشكل التالي:
كود PHP:#property indicator_minimum 0
بالمناسبة فإن هناك خاصية مكملة لهذه الخاصية وهي تحدد المجال الأكبر للمؤشر على النافذة وهي indicator_maximum.
ويتم إعطاء قيمة لهذه الخاصية بنفس الطريقة السابقة تماما.
ولكن مؤشرنا لا يحتاج لهذه الخاصية لأن المجال الموجب مفتوح ولا نعرف أقصى قيمة ستكون عليه طول الشمعات.
ولذلك لم نستخدم هذه الخاصية وشرحناها فقط لإكمال الفكرة.
ثانيا: إضافة مستويات جاهزة للمؤشر:
سنضيف أيضا في مؤشرنا الجديد بعض المستويات ( يستطيع أي مؤشر أن يحتوي حتى 8 مستويات فقط )
والمستوى هو خط أفقي يتم رسمه على نافذة المؤشر وأيضا يستطيع المستخدم التحكم بهذه المستويات من خلال خصائص المؤشر.
يتم إضافة مستويات للمؤشر عن طريق الخصائص indicator_level1 و indicator_level2 و indicator_level3 وهكذا حتى indicator_level8.
ويتم تحديد قيمته على الشكل التالي:
كود PHP:#property indicator_level1 0.0020
كم يمكننا إضافة مستوى آخر عند القيمة 0.0040 مثلا بواسطة الكود:
كود PHP:#property indicator_level2 0.0040
طرق عرض المستويات هي لكل المستويات مجتمعة وليست لكل مستوى على حدة.
كما يرجى ملاحظة أن بعض التغييرات في بعض الخصائص قد يضطرك إلى إزالة المؤشر من على الشارت ثم إعادته من جديد لتظهر هذه التغييرات.
- 29-12-2007, 09:32 PM #70
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
جزاك الله كل خير
- 30-12-2007, 02:06 PM #71
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
جزاك الله خيرا أخي وضاح على جهدك ووقتك ووفقك الله إلى ما تحب وترضى
ولكن .........................
بدأ اليأس يدب إلى قلبي ..أنت قلت أبسط مؤشر وأنا أجده من الصعوبة ليس بقليل
فكيف إذا بالمؤشرات المعقدة أو مافي رؤوسنا من أفكار للمؤشرات والأكسبيرتات ....؟
عايزين منك كلمتين تشجيع
كأن تقول لنا شدوا الهمة يا شباب كلها عشر سنين وتصيروا مبرمجين ؟
شو رأيك..أنا بصراحة شكلي ولا بعشر سنين ممكن أتعلم البرمجة بس رح أتابع الكفاح ومشكور مجددا على هذه الدورة القيمة ...أخوك أبو فاضل ...
- 30-12-2007, 06:39 PM #72
- 30-12-2007, 06:46 PM #73
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
أهلا بأخي الفاضل أبو فاضل
لن أشجعك مجرد تشجيع بل سأذكر لك حقائق فقط .
أولا اليأس عدو العلم الأول .
ثانيا تعلم البرمجة مثل الحفر بالصخر .
ثالثا لكن القليل من التركيز والصبر كل يوم يقلب الموازين لصالحك .
رابعا بمجرد فهم واستيعاب بداية الموضوع ووضع رجلك على أول درجة بشكل سليم يبدأ الانطلاق بشكل لم تكن تتوقعه .
خامسا حسب خبرتي في البرمجة فأنا أشبهها على أنها سلم أول ثلاث درجات لفوق بعدين كل درجاته لأسفل .
يعني الصعوبة فقط تكون في البداية بعدها يكون التعلم والمتابعة غاية في السهولة .
بالتوفيق للجميع إن شاء الله
- 30-12-2007, 08:44 PM #74
- 31-12-2007, 10:22 PM #75
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
أخ وضاح
أنا مهندس ومبرمج كمبيوتر
و لي معرفة جيدة ببعض لغات البرمجة الاخرى
وقد استفدت جداً من دروسك (بارك الله فيك)
وقد بدأت فعلاً بعمل بعض الاكسبيرتات البسيطة
والفضل في ذلك يعود لله أولاً ثم لبعض الاخوة هنا ومنتديات الجيران
جزاكم الله جميعاً كل خير
وان شاء الله اواصل تعلم هذه اللغة للوصول للاحتراف
وان شاء الله استطيع ان ارد لكم الجميل بمساعدة الاخوة في عمل المؤشرات والاكسبيرتات في المستقبل
المواضيع المتشابهه
-
للمبتدأين (حلل وتعلم) ضع تحليلاتك وتعلم من اخطائك
By BahraiN in forum استفسارات وأسئلة المبتدئينمشاركات: 248آخر مشاركة: 14-05-2012, 10:27 PM -
اريد كتاب به مفاتيح طرق الاحتراف
By عزيز in forum استفسارات وأسئلة المبتدئينمشاركات: 13آخر مشاركة: 29-08-2006, 03:48 AM