بسم الله الرحمن الرحيم
سأقوم بهذا الموضوع بشرح طريقة صنع أكسبرت بلغة MQL4 بطريقة متدرجة من الأكواد السهلة الي الصعبة وبهذه الطريقة ستتمكن من أتقان صنع الأكسبرتات أن شاء الله
Printable View
بسم الله الرحمن الرحيم
سأقوم بهذا الموضوع بشرح طريقة صنع أكسبرت بلغة MQL4 بطريقة متدرجة من الأكواد السهلة الي الصعبة وبهذه الطريقة ستتمكن من أتقان صنع الأكسبرتات أن شاء الله
الدرس الأول (الدوال الرئيسية)
وهذه مهمتها أن تعمل ببداية وضع الأكسبرت علي التشارت ثم تتوقف بعدهاكود:int init()
{
//----
//----
return(0);
}
مثال : أصنع أكسبرت يظهر صندوق مكتوب به (( بدأت الدالة الأولي بالعمل)) ثم يتوقف بعدها.
كود:int init()
{
Alert("بدأت الدالة الأولي بالعمل");
return(0);
}
int start()
{
return(0);
}
حيث نستعمل الكود
ونكتب الجملة موضوعة بين الرمز "" والذي مهمته يعطي تنبيه ويظهر لنا الرسالة التي نريدهاكود:Alert("");
وهذه مهمتها العمل لحظة نزع الأكسبرت من التشارتكود:int deinit()
{
return(0);
}
مثال: أصنع أكسبرت يظهر صندوق مكتوب عليه (الأكسبرت نزع من التشارت) عند نزعه.
ملاحظة : عندما نجد جملة مكتوب قبلها الرمز // فلا يقرأها الأكسبرت ولا تعتبر كود ونستعملها نحن كي نكتب شرح عن عمل الكود أو أي شئ نريد كتابته دون أن يعطل البرنامج مثلكود:int init()
{
return(0);
}
int deinit()
{
Alert("الأكسبرت نزع من التشارت");
return(0);
}
int start()
{
return(0);
}
كود://+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
للحين كلو واضح
بارك الله فيك واتمنى ان تشرح كيف بالبرمجه نستخدم الادوات الموجوده بالميتاتريدر
وهذه أهم دالة ومهمتها العمل أثناء وجود الأكسبرت علي التشارت وتعمل بدون توقف .كود:int start()
{
//----
//----
return(0);
}
مثال : أصنع أكسبرت يظهر لنا الأسعار بأستمرار ولا يتوقف الصندوق ويظهر رسالة بالبدية مكتوب بها ((سيبدأ الأكسبرت بمراقبة الأسعار )) وعند نزعه يظهر رسالة مكتوب بها ((نزع بنجاح))
وأستعملنا الكودكود:int init()
{
Alert("سيبدأ الأكسبرت بمراقبة الأسعار");
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
Alert("نزع بنجاح");
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
Alert(Bid);
//----
return(0);
}
//+------------------------------------------------------------------+
وضعنا كلمة Bid وهي تعطينا السعر الحالي ونلاحظ لم نضع الرمز "" لأنها رقم وليس كلمة.كود:Alert(Bid);
ماشاء الله عليك اخ رامى
متابع معك اخى الكريم
وان شاء الله تعالى بهذه الطريقه العمليه سوف نتمكن من هذه اللغه
متابع معك اخى الكريم
تقبل ودى
أنواع البيانات
عندما نريد أن نعطي بيانات للأكسبرت فتوجد عدة أنواع للبيانات مثل:
1-أعداد صحيحة.
2-أعداد حقيقية.
3-كتابة نصية.
ويمكننا أن نخزن هذه البيانات ثم نستعملها بالبرنامج ونقوم بأعطاء أمر للأكسبرت بأن يخزنها علي رمز محدد نحن نختاره بشرط الا يكون محجوز مثل الكلمة المحجوزة Bid .
حيث int أرقام صحيحة مثل 3 و 4 و 7 و555
double أرقام حقيقية مثل 2.3 و 4.154 و 4.0 و 4 و 2.3256
string كتابة مثل نصية "الأكسبرت" و "مؤشر"
datetime التاريخ مثل '24.08.2011'D
color الوان مثل 'Red' 'Green'
واذا أردنا أن نعدل علي هذه البيانات بالبداية قبل عمل الأكسبرت فنضع الرمز extern قبلهاكود:
int segma=4;
double G=2.3526;
bool G=true;
string W="الأكسبرت";
datetime R=D'20.10.2011';
color RR="Red";
كود:
extern int segma=4;
extern double G=2.3526;
extern bool G=true;
extern string W="الأكسبرت";
extern datetime R=D'20.10.2011';
extern color RR="Red";
int init()
{
return(0);
}
int deinit()
{
//----
//----
return(0);
}
int start()
{
//----
//----
return(0);
}
متابع اخى رامى
وكل شىء مفهوم الى الان
مثال: أعمل أكسبرت تقوم بالتحكم بأعداداته ويعطي صندوق وأنذار به جملة ببداية دخوله التشارت وعند نزعه من التشارت وتستطيع أن تكتب هذه الجملة من المتغيرات. وأن يقوم الأكسبرت بأظهار صندوق يظهر بأستمرار مكتوب به الوقت
عند تشغيل الأكسبرت أول شئ سيقرأ R1 و R2 وسيكتب القيمة المسجلة بR1 ببداية دخوله للتشارت ثم يكتب R2 عند نزعه من التشارت ويخزن قيمة الساعة الأن بالرمز time1 ويخزن الدقائق بالرمز time2 ثم يظهرهم أثناء عمل الأكسبرت وقمنا بأستعمال الكلمة المحجوزة التي تعطيني الوقت الأنكود:
extern string R1="وضع الأكسبرت علي التشارت";
extern string R2="نزع من التشارت";
int time1;
int time2;
int init()
{
//----
Alert(R1);
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
Alert(R2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
time1=Hour();
time2=Minute();
Alert(time1+":"+time2+":"+"الوقت الأن هو");
return(0);
}
//+------------------------------------------------------------------+
الوقت الأن (ساعة فقط)
الوقت الأن (دقائق فقط)كود:Hour()
.كود:Minute()
اخي الكريم انا الان في مرحلة انتاج اكسبيرت فكرته منطقيه تعمل على المضاعفات سيكون هديه مني لكم ولكن بعد وصولي معك للمرحله التي تنقصني وهي كيف بالبرمجه استعمال الادوات الموجوده مثل القنوات الموجوده بالميتا اساسا وايضا كيف استخدم مؤشر موجود من خلال عملية import والتعامل مع مكوناته بشكل مستقل ولك شكري وتقديري على الجهد المبذول منك
كل عام وانت بالف خير وجزاك الله خيرا
الجملة الشرطية والعمليات الحسابية
لو أردنا أن نعطي للأكسبرت رقم حقيقي ونجعله يسأل : هل هذا الرقم أكبر من 1.3 ؟
فسنقول
وسيقوم الكود السابق بتخزين الرقم 1.1 ويخصص له مساحة بالذاكرة يسميها G ، وبعد ذلك يقارن هل هو أكبر من 1.3 ولو كان أكبر سيظهر صندوق به الكلمة نعم ولو كان غير ذلك سيظهر صندوق به الكلمة لا.كود:
double G=1.1;
if(G>1.3)
{
Alert("نعم");
}
else
{
Alert("لا");
}
ولوأردنا أن نعطي للأكسبرت رقم حقيقي ونجعله يسأل : هل لو جمع هذا الرقم مع سعر الأغلاق للشمعة السابقة ثم قسم الناتج علي 1.1 سيكون أصغر من أو يساوي 1.7 ؟
ولو أردنا أن نعطي للأكسبرت رقم حقيقي R1 ونجعله يسأل: هل لو قسمنا الرقم علي 4 ثم ضربناه ب 2 وطرحناه من 1 وخزنا الناتج ب p1 ثم جمعنا سعر الأفتتاح للشمعة الحالية مع سعر الأغلاق للشمعة قبل السابقة وقسمنا الناتج علي الهاي للشمعة قبل قبل السابقة وخزنا الناتج بp2 فهل p1 تساوي 1.5 وp2 لاتساوي 8.1؟كود:
double G=0.1204;
double Sum;
Sum=(G+Close[1])/1.1;
if(Sum<=1.7)
{
Alert("نعم");
}
else
{
Alert("لا");
}
وهل p1 تساوي 7 أو 4؟
الحالة الأولي
الحالة الثانيةكود:
double R1=0.1204;}
double p1,p2;
p1=((R1/4)*2) - 1;
p2=(Open[0]+Close[2])/High[3];
if(p1==1.5&&p2!=8.1)
{
Alert("نعم");
}
else
{
Alert("لا");
كود:
double R1=0.1204;
double p1,p2;
p1=((R1/4)*2) - 1;
p2=(Open[0]+Close[2])/High[3];
if(p1==7||p2==4)
{
Alert("نعم");
}
else
{
Alert("لا");
}