الأمر الذي يعالج الشروط وينفذ الأوامر البرمجية بناء على نتائج هذه الشروط هو الأمر if ويتم وضع كل الشروط داخل قوسين () .
في حال تحقق الشرط فإن منفذ الأوامر سوف ينفذ الكتلة البرمجية المرتبطة بالأمر if.
يمكن إضافة كتلة برمجية أخرى للأمر if تأتي بعد الأمر else وهي تعني في حال عدم تحقق شروط if فيجب تنفيذ الكتلة البرمجية التابعة للأمر else.
وتكون الصيغة البرمجية للأمر if كما يلي:
كود PHP:
if(A==B)
{
الكتلة البرمجية للأمر if
}
أو مع وجود أمر else كود PHP:
if(A==B)
{
الكتلة البرمجية للأمر if
}
else
{
الكتلة البرمجية للأمر 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;
وتصبح كتلة الوظيفة start كالتالي: كود 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);
}