1 مرفق
رد:[ الورشة التعليمية ] موضوع نقاش الورشة التعليمية للبرمجة بلغة mql4
استاذي مستر دولار تفضل اكسبيرت RSI الخاص بأختبار دورة التدريب الثانية وهو مختصر بحدود ما تعلمناه .
رد:[ الورشة التعليمية ] موضوع نقاش الورشة التعليمية للبرمجة بلغة mql4
السلام عليكم ورحمة الله
اكسبرت تقاطع موفينجين + ار اس اي
كل موفينج افريج له اعدادت تظهر بالصورة التالية :
http://i.imm.io/11f1w.png
Period : وهي مدة الزمنية للموفينج.مثل موفينج 50 او 100 او 78.
Method: وهي طبيعة الموفينج مثل سمبل او اكسبوننشل.
Apply to: وهي القيم التي يعتمد عليها الموفينج.اما سعر الافتتاح او الاغلاق او الهاي وغيرها .
Shift: ازاحة الموفينج.
يمكن جعل كل هذه الخصائص كمتغيرات خارجية لاكسبرت بحيث يمكن التعديل عليها حسب رغبة الشخص.
http://i.imm.io/11f6t.png
اول اعداد هو اللوت Lots.
StopLoss:ستوب لوز.
TakeProfit: تيك بروفت.
MagicNumber:مجك نمبر.
Rsi_Level: مستوى الار اس اي المعتمد ف يالاستراتيجية.
Rsi_Period: زمن الار اس اي والمستعمل غالبا هو 14.
Rsi_applied_price: السعر المعتمد اما اغلاق او افتتاح او هاي او لو او غيرها .
Mov1_Period: مدة الموفينج الاول .
Mov1_Method: طبيعة الموفينج الاول .
Mov1_Applied_Price: السعر المعتمد للموفينج الاول(اغلاق او افتتاح او غيرها).
Mov1_Shift: شيفت الموفينج الاول.
Mov2_Period: مدة الموفينج الثاني.
Mov2_Method:طبيعة الموفينج الثاني.
Mov2_Applied_Price: السعر المعتمد للموفينج الاول(اغلاق او افتتاح او غيرها).
Mov2_Shift: شيفت الموفينج الثاني.
وكلها مسبوقة ب extern int اي انها خارجية يمكن تغييرها حسب الرغبة.
والان داخل الدالة ستار كيف نستدعي موفينج؟
بواسطة العبارة التالية:
كود PHP:
double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
وهنا تعريف الموفينج يكون Double لانه ياخذ ارقام حقيقة(عشرية).
ثم iMA وهي الخاصة بالموفينجات وبعدها القوسين لتحديد خصائص هذا الموفينج.
string symbol: العملة...اذا كان يستعمل لكل العملات نضع NULL.
timeframe:تيم فريم قد يكون 0 اشارة لقبول كل الفريمات بمجرد تغيير الفريم عالشارت. او محددة مثل 5 .
period: المدة الزمينة للموفينج.
method: طبيعة الموفينج.
applied_price: السعر المستعمل سواء اغلاق او افتتاح او غيرها.
ma_shift: الشيفت.
int shift: وهذه تعبر عن ترتيب الشمعة المعنية في الشارت اذا 0 فتعني موفينج الشمعة الحالية قيد الحركة واذا كانت 1 تعني موفينج الشمعة السابقة المنتهية واذا 2 تعني التي قبلها وهكذا.
والعبارة السابقة هي عبارة عامة..اما داخل الاكسبرت نضع ف يالدالة ستار :
كود PHP:
mov12=iMA(NULL,0,Mov1_Period,Mov1_Shift,Mov1_Method,Mov1_Applied_Price,2);
Mov12 متغير ياخذ قيمة الموفينج.وما داخل القوسين تم تعريفه في المتغيرات الخارجية.حيث في هذه الحالة الاكسبرت ينظر الى المتغيرات الخارجية ليجلب قيم الموفينج المرغوبة.
بالنسبة ل Mov1_Method قد تاخذ القيم التالية وفقا لطبيعة الموفينج :
http://i.imm.io/11ffA.png
اما Mov1_Applied_Price قد تاخذ القيم:
http://i.imm.io/11fgl.png
mov12 في اخر سطر العبارة موجود رقم 2 وهو رقم الشمعة المعتمدة من قبل الموفينج الاول وهي الشمعة قبل السابقة.
mov11 قيمة الموفينج للشمعة رقم 1 اي السابقة .ونفس الشي بالنسبة للموفينج الثاني .
ويصبح لدينا :
http://i.imm.io/11fip.png
هذا بالنسبة للجزء الاول وبعدها ندخل في التعبير عن التقاطع وفتح صفقات ....اتمنى تكونوا استفدتوا وانا بانتظار اسئلتكم.
بريك ونعود.....:0021: للجزء الثاني
1 مرفق
رد:[ الورشة التعليمية ] موضوع نقاش الورشة التعليمية للبرمجة بلغة mql4
الجزء الثاني
فكرة التقاطع ماخوذة من دروس استاذنا مستر دولار جزاه الله خيرا.
http://i.imm.io/11i1x.png
اذن كل شمعة لها قيمة موفينج..لو نلاحظ الشمعة رقم 2 قبل التقاطع لها قيمتان(قيمة للموفينج الاصفر وقيمة للموفينج الازرق) لكن قيمة الموفينج الاصفر اقل من قيمة الموفينج الازرق.لذلك الاصفر تحت الازرق.
لذلك قمنا بتعريف Mov12: موفينج الاول الاصفر للشمعة 2.
mov22: موفينج الثاني الازرق للشمعة 2.
بعد التقاطع نرى ان الموفينج الاصفر صار فوق الازرق .عند الشمعة رقم 1.(انعكاس للوضعيات).
لذلك قمنا بتعريف Mov11: الموفينج الاول الاصفر للشمعة رقم 1.
Mov21: الموفينج الثاني الازرق للشمعة رقم 1.
اذن التقاطع يعبر عنه كالتالي:
الموفينج الاول الاصفر يكون تحت الموفينج الثاني الازرق ثم يصبح الموفينج الاول الاصفر فوق الموفينج الثاني الازرق.وبتعبير رياضي يصبح لدينا:
mov12<mov22&&mov11>mov21
والصفقات تفتح عند الشمعة رقم 0 اين يكون التقاطع قد اكتمل.
وعندها يمكن استخدام هذه العبارة في شروط التقاطع
http://i.imm.io/11i6m.png
وهنا اضفنا شرط ال rsi يكون فوق مستوى Rsi_Level الذي هو متغير خارجي يحدده المستعمل .
ايضا في عبارة جلب قيمة ال rsi :
كود PHP:
rsi=iRSI(NULL,0,Rsi_Period,Rsi_applied_price,1);
تشبه الموفينج ولكن باستعمال المنادي iRsi ثم بين قوسين خصائصه:
Rsi_Period:المدة الزمنية له.
Rsi_applied_price:اعتماد الاغلاق او الافتتاح او غيرهما.
1: تعني قيمة rsi الشمعة رقم 1 السابقة والمنتهية.
وايضا OrdersTotal()==0 التي رايناها في الدرس السابق .حيث تقوم هذه الدالة بحساب مجموع الصفقات المفتوحة.فلا يفتح الاكسبرت صفقات حتى يتاكد من عدم وجود صفقات مفتوحة.
وبعد اضافة كود فتح الصفقات يصبح لدينا:
http://i.imm.io/11ieA.png
وهنا استعملت الحلقة for لقتح صفقتين عند تحقق الشروط .وبالنسبة للامر فتح الصفقاتOrderSend سنتعرف عليها لاحقا مع استاذنا الكريم مستر دولار .
ويصبح الكود فالاخير للشراء والبيع :
http://i.imm.io/11ieI.png
حيث يفتح صفقتين شراء عند تقاطع الموفينجين المختارين مع وجود الrsi فوق المستوى المختار من الشخص ايضا.ونفس الشي للبيع.
نجرب الباك تست الان:
http://i.imm.io/11idJ.png
وهكذا نكون قد تاكدنا من عمل الاكسبرت ...ثم نضعه في المرفقات :0023:
تحياتي لكم.
1 مرفق
رد:[ الورشة التعليمية ] موضوع نقاش الورشة التعليمية للبرمجة بلغة mql4
السلام عليكم قمت بي برمجة اكسبيرات يعتمد علي الماكد بي حيث اذ كان الماكد Main فوق الصفر يفتح امر شراء واذ كان تحت الصفر يفتح بيع مدخلات الاكسبيرات التحكم في الهدف و الاستوب و حجم الوت والماجيك نمبر
كود PHP:
extern int StopLoss=20;
extern int TakeProfit=20;
extern double Lot=0.1;
extern int MagicNumber=14000;
وتاني شي اعددات الماكد وشروط الشراء
كود PHP:
double Mac1=iMACD(Symbol(),PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
double Mac2=iMACD(Symbol(),PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
كود PHP:
if(Mac1<0&&Mac2>0&&OrdersTotal()==0){
وتعريف الهدف والاستوب
كود PHP:
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*Point;}
وحلقة تقوم بي فتح تلاثة صفقات مع بعض
كود PHP:
for(int i=1;i<=3;i++){
اكود الاكسبيرات كاملة
كود PHP:
{
double Mac1=iMACD(Symbol(),PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
double Mac2=iMACD(Symbol(),PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
double SL,TP;
if(Mac1<0&&Mac2>0&&OrdersTotal()==0){
for(int i=1;i<=3;i++){
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*Point;}
OrderSend(Symbol(),OP_BUY,Lot,Ask,30,SL,TP,"EA",14000,0,Green);
}
}
if(Mac1>0&&Mac2<0&&OrdersTotal()==0){
for( i=1;i<=3;i++){
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*Point;}
OrderSend(Symbol(),OP_SELL,Lot,Bid,30,SL,TP,"EA",14000,0,Red);
}