النتائج 106 إلى 120 من 192
الموضوع: أصنع أكسبرتك بنفسك
- 15-12-2011, 01:17 PM #106أخي RAM22
هل يمكن أن تعلق على هذا الكود لحل التمرين في الصفحة 2 من الموضوع
كود://+------------------------------------------------------------------+ //| aaaaaaaaa.mq4 | //| Copyright © 2011, tahlile Corp. | //| tahlile-forex.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, tahlile Corp." #property link "tahlile-forex.com" extern int ma_period=20; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- MessageBox("بداية البحث","البحث"); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- MessageBox("نهاية البحث","النهاية"); //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- // حساب n1 double n1; double n2; n1= High[1]+1.3; n2=Low[1]+Open[0]-0.02; if (n1>n2) { Alert("الشرط الاول تحقق"); } else { Alert("الشرط الاول لم يتحقق"); } // مراقبة المتوسط الحسابي double ma; ma=iMA(NULL,0,ma_period,0,MODE_SMA,PRICE_CLOSE,0); if(ma>1.3) { MessageBox("المتوسط الحسابي أعلى من السعر الحاي","sma"); } else { MessageBox("المتوسط الحابي أدنى من العر","sma1"); } // مراقبة الوقت if (Hour()>23 || Hour()<6) MessageBox("الوقت غير مناسب لتجارة","trading time"); //---- return(0); } //+------------------------------------------------------------------+
- 15-12-2011, 02:20 PM #107
اسئل الله ان يجزيك عما تقدمه من مساعده لااخوانك خير الجزاء فى الدنيا والاخره
بس المشكلة التي واجهتني هي كيف اجعل تحديد اللوت لكل عقد اقوم بفتحه
بمعنى ان يقوم الإكسبرت بإدارة جميع الصفقات لنفس العمله فقط بيع اوشراء
باحجام لوت مختلفة على حسب اختياري لحجم اللوت
كود:#property show_inputs extern bool UseAverage = true; extern int OrderTP=100; extern int OrderSL=0; extern double OrderBuyTakeProfitPrice=0; extern double OrderBuyStopLossPrice=0; extern double OrderSellTakeProfitPrice=0; extern double OrderSellStopLossPrice=0; int start() { int x; string OrdSymbol; int OrdTotal; double OrdBuyTotal; double OrdBuyCount = 0; double OrdBuyAvareg; double OrdBuyTP = 0; double OrdBuySL = 0; double OrdSellTotal; double OrdSellCount = 0; double OrdSellAvareg; double OrdSellTP = 0; double OrdSellSL = 0; OrdTotal = OrdersTotal(); if(UseAverage == true) { for(x=OrdTotal-1 ; x>=0 ; x--) { OrderSelect(x,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol() == Symbol()) { if(OrderType() == OP_BUY) { OrdBuyTotal = OrdBuyTotal + (OrderOpenPrice()*OrderLots()); OrdBuyCount = OrdBuyCount + OrderLots(); } else if(OrderType() == OP_SELL) { OrdSellTotal = OrdSellTotal + (OrderOpenPrice()*OrderLots()); OrdSellCount = OrdSellCount + OrderLots(); } } } if(OrdBuyCount > 0) { OrdBuyAvareg = (OrdBuyTotal/OrdBuyCount); if(OrderTP!=0) OrdBuyTP = OrdBuyAvareg+(OrderTP*Point); else OrdBuyTP = 0; if(OrderSL!=0) OrdBuySL = OrdBuyAvareg-(OrderSL*Point); else OrdBuySL = 0; } if(OrdSellCount > 0) { OrdSellAvareg = (OrdSellTotal/OrdSellCount); if(OrderTP!=0) OrdSellTP = OrdSellAvareg-(OrderTP*Point); else OrdSellTP = 0; if(OrderSL!=0) OrdSellSL = OrdSellAvareg+(OrderSL*Point); else OrdSellSL = 0; } } else { OrdBuyTP = OrderBuyTakeProfitPrice; OrdBuySL = OrderBuyStopLossPrice; OrdSellTP = OrderSellTakeProfitPrice; OrdSellSL = OrderSellStopLossPrice; } // Modify Orders for(x=OrdTotal-1 ; x>=0 ; x--) { OrderSelect(x,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol() == Symbol()) { if(OrderType()==OP_BUY) { OrderModify(OrderTicket(),OrderOpenPrice(),OrdBuySL,OrdBuyTP,0,CLR_NONE); } if(OrderType()==OP_SELL) { OrderModify(OrderTicket(),OrderOpenPrice(),OrdSellSL,OrdSellTP,0,CLR_NONE); } } } return(0); }
- 15-12-2011, 03:29 PM #108
بارك الله فيك من اجمل المواضيع التعليمة
حبيت اشكرك وتسجيل حضور ومتابعة للموضوع المميز
- 15-12-2011, 04:15 PM #109
شكرا اخي Ram22 لكل ما تقدمه وجزاك الله عنا كل خير لك ولاهلك ومتابعينك يا غالي
- 15-12-2011, 11:36 PM #110
هذا الكود الهدف منه التدرب علي الشروط بالأكسبرت وجعل الأكسبرت ينفذ الأستراتيجية التي تريد ولكن لو وضعت الكود الأخير بالبداية وأضفت له هذا الكود
كود:if (Hour()>23 || Hour()<6){ MessageBox("الوقت غير مناسب لتجارة","trading time"); return(0); }كود:return (0);
كود:return (0);
كود:if(OrderType()==OP_BUY&&OrderLots()==ForOrderLot)
كود:extern double ForOrderLot=0.01;
كود:#property show_inputs extern double ForOrderLot=0.01; extern bool UseAverage = true; extern int OrderTP=100; extern int OrderSL=0; extern double OrderBuyTakeProfitPrice=0; extern double OrderBuyStopLossPrice=0; extern double OrderSellTakeProfitPrice=0; extern double OrderSellStopLossPrice=0; int start() { int x; string OrdSymbol; int OrdTotal; double OrdBuyTotal; double OrdBuyCount = 0; double OrdBuyAvareg; double OrdBuyTP = 0; double OrdBuySL = 0; double OrdSellTotal; double OrdSellCount = 0; double OrdSellAvareg; double OrdSellTP = 0; double OrdSellSL = 0; OrdTotal = OrdersTotal(); if(UseAverage == true) { for(x=OrdTotal-1 ; x>=0 ; x--) { OrderSelect(x,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol() == Symbol()) { if(OrderType() == OP_BUY) { OrdBuyTotal = OrdBuyTotal + (OrderOpenPrice()*OrderLots()); OrdBuyCount = OrdBuyCount + OrderLots(); } else if(OrderType() == OP_SELL) { OrdSellTotal = OrdSellTotal + (OrderOpenPrice()*OrderLots()); OrdSellCount = OrdSellCount + OrderLots(); } } } if(OrdBuyCount > 0) { OrdBuyAvareg = (OrdBuyTotal/OrdBuyCount); if(OrderTP!=0) OrdBuyTP = OrdBuyAvareg+(OrderTP*Point); else OrdBuyTP = 0; if(OrderSL!=0) OrdBuySL = OrdBuyAvareg-(OrderSL*Point); else OrdBuySL = 0; } if(OrdSellCount > 0) { OrdSellAvareg = (OrdSellTotal/OrdSellCount); if(OrderTP!=0) OrdSellTP = OrdSellAvareg-(OrderTP*Point); else OrdSellTP = 0; if(OrderSL!=0) OrdSellSL = OrdSellAvareg+(OrderSL*Point); else OrdSellSL = 0; } } else { OrdBuyTP = OrderBuyTakeProfitPrice; OrdBuySL = OrderBuyStopLossPrice; OrdSellTP = OrderSellTakeProfitPrice; OrdSellSL = OrderSellStopLossPrice; } // Modify Orders for(x=OrdTotal-1 ; x>=0 ; x--) { OrderSelect(x,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol() == Symbol()) { if(OrderType()==OP_BUY&&OrderLots()==ForOrderLot) { OrderModify(OrderTicket(),OrderOpenPrice(),OrdBuySL,OrdBuyTP,0,CLR_NONE); } if(OrderType()==OP_SELL&&OrderLots()==ForOrderLot) { OrderModify(OrderTicket(),OrderOpenPrice(),OrdSellSL,OrdSellTP,0,CLR_NONE); } } } return(0); }
- 15-12-2011, 11:43 PM #111
هل تقصد أن الكود سينفذ مرة واحدة فقط؟
كيف يمكن تصحيح ذلك
- 16-12-2011, 12:01 AM #112التعامل مع الاكواد الخارجية
يمكن للأكسبرت أو المؤشر أو السكربت أن يتصل بأكواد خارجية بلغة ++C ولغة MQL4 وهنا سأتكلم عن أتصاله بملفات بها أكواد بلغة MQL4
وسنجرب هذا المثال بأن نعمل هذا الكود ونضعه بمجلد libraries
كود:#property library string Test() { string P="لقد تم الأتصال بالسكربت"; return(P); }
وبعد ذلك نعمل أسكربت ونكتب هذا الكود
كود:#property show_confirm #import "TestDLL.ex4" string Test(); #import int start() { Alert(Test()); return(0); }
وهذه هي طريقة الأتصال بأكواد بمكتبة خارجية
- 16-12-2011, 12:09 AM #113
- 16-12-2011, 12:21 AM #114
- 16-12-2011, 12:25 AM #115
- 16-12-2011, 12:43 AM #116
يعني مثلا كود المؤشر الذي سبق أن وضعه turkm وعدلته ممكن يكون ملف موضوع بمكان ملفات DLL بصيغة ex4 هكذا
وأسمه مثلا TestDLL
كود:#property library int NumBars = 5; double Array1[]; double Array2[]; double Array3[]; double Array4[]; double CMA(int Type,int bar){ double G=0; double RG1; double RG2; double RG3; string Name1; string Name2; string SS1 = " ********** TIMING "; int SS2 = WindowFind(SS1); ArrayResize(Array1,Bars); ArrayResize(Array2,Bars); ArrayResize(Array3,Bars); ArrayResize(Array4,Bars); for (int j = 0; j < Bars; j++) { RG1 = 0; for (int GT1 = j; GT1 < NumBars + j; GT1++) RG1 += (High[GT1] + Low[GT1]) / 2.0; RG2 = RG1 / NumBars; RG1 = 0; for (GT1 = j; GT1 < NumBars + j; GT1++) RG1 += High[GT1] - Low[GT1]; RG3 = 0.2 * (RG1 / NumBars); Array1[ j] = (High[ j] - RG2) / RG3; Array4[ j] = (Low[ j] - RG2) / RG3; Array2[ j] = (Open[ j] - RG2) / RG3; Array3[ j] = (Close[ j] - RG2) / RG3; } switch(Type) { case 1: { G=Array1[bar]; break; } case 2: { G=Array2[bar]; break; } case 3: { G=Array3[bar]; break; } case 4: { G=Array4[bar]; break; } } return(G); }
كود:#property show_confirm #import "TestDLL.ex4" double CMA(int Type,int bar); #import int start() { Alert(CMA(1,0)); return(0); }آخر تعديل بواسطة Ram22 ، 16-12-2011 الساعة 12:45 AM
- 16-12-2011, 06:22 AM #117
اقسم بالله ان هذا المنتدى لا ينجح بدون الخيريين امثالك
اسال الله ان يبارك فيك وفي كل من يفكر في اخوانه العرب و المسلمين
- 16-12-2011, 09:16 AM #118
ماذا نعمل لو وجدنا هذا الخطأ يظهر عندما نعمل كمبايل للأكسبرت أو السكربت؟
كود:import double quotes neededآخر تعديل بواسطة Ram22 ، 16-12-2011 الساعة 09:24 AM
- 16-12-2011, 09:18 AM #119
الخطوة الأولي سنحول الملف الأخر بصيغة ex4 ونضعه بمكانه ثم نعمل للأسكربت كمبايل من جديد مع الغاء الأكواد المبينة بالصورة بأضافة العلامة المبينة بالصورة
- 16-12-2011, 09:22 AM #120
الخطوة الثانية نعيد الأكواد وننزع علامة الأغاء ونعمل كمبايل من جديد ولو لم تنفع نعيد الخطوات مرتين أو ثلاثة الي أن ينجح الكمبايل