![]() |
رد: لو سمحت اول مره اطلب اكسبريت ممكن حد يساعدني؟
دي الدالة المسؤلة عن أختبار الشروط إذا كان العقد المفتوح شراءاً فيتم إلغاء أمر البيع المعلق
ده الكود قبل التعديل [PHP] void IfOrderExists12() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 33) { exists = true; } } else { Print("OrderSelect() error - ", ErrorDescription(GetLastError())); } if (exists) { DeletePendingOrder10(); } } [/PHP] وده بعد التعديل [PHP] void IfOrderExists12() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 33 && OrderProfit() > 0) { exists = true; } } else { Print("OrderSelect() error - ", ErrorDescription(GetLastError())); } if (exists) { DeletePendingOrder10(); } } [/PHP] انا غيرت MODE_TRADES إلى MODE_HISTORY وضيفت الشرط ده OrderProfit() > 0 أي أن الربح يكون أكبر من صفر وهعمل نفس الكلام بالنسبة للدالة الخاصة بأختبار الشروط إذا كان العقد المفتوح بيعاً تمام كده ولا إيه؟؟؟ |
رد: لو سمحت اول مره اطلب اكسبريت ممكن حد يساعدني؟
تمام وبعد انتهاء التعديلات جربي وشوفي النتيجة
|
رد: لو سمحت اول مره اطلب اكسبريت ممكن حد يساعدني؟
اقتباس:
تم التعديل والتجربه ووصلت الصفقة للهدف لكن للأسف لم يتم إلغاء الامر المعلق ماذا ينقص الكود؟؟ |
رد: لو سمحت اول مره اطلب اكسبريت ممكن حد يساعدني؟
هذا هو الكود بالكامل بعد التعديل
[PHP] #property copyright " - jmeel24@yahoo.com " #include <stdlib.mqh> #include <WinUser32.mqh> // exported variables extern string A0=" ------- General Setting --------- "; extern int Hour41 = 0; extern double Volume_Lots = 0.1; extern int MagicNo=4141; extern string A2=" ------- B U Y Setting ------------ "; extern int PriceOffset30 = 12; extern int BuyTakeprofit30 = 10; extern int BuyStoploss30 = 20; int Expiration30 = 1440; extern string A1=" ------- S E L L Setting ---------- "; extern int PriceOffset31 = 10; extern int SellTakeprofit31 = 10; extern int SellStoploss31 = 20; int Expiration31 = 1440; // local variables double PipValue=1; // this variable is here to support 5-digit brokers bool Terminated = false; string LF = "\n"; // use this in custom or utility blocks where you need line feeds int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names int current = 0; int Today41 = -1; datetime BarTime25 = 0; datetime BarTime29 = 0; int init() { NDigits = Digits; if (false) ObjectsDeleteAll(); // clear the chart Comment(""); // clear the chart } // Expert start int start() { if (Bars < 10) { Comment("Not enough bars"); return (0); } if (Terminated == true) { Comment("EA Terminated."); return (0); } OnEveryTick43(); } void OnEveryTick43() { if (true == false && false) PipValue = 10; if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10; CustomCode45(); AtCertainTime41(); IfOrderExists12(); IfOrderExists5(); } void CustomCode45() { } void AtCertainTime41() { int datetime800 = TimeCurrent(); int hour0 = TimeHour(datetime800); int minute0 = TimeMinute(datetime800); if (DayOfWeek() != Today41 && hour0 == Hour41 ) { Today41 = DayOfWeek(); IfOrderDoesNotExist24(); IfOrderDoesNotExist28(); } } void IfOrderDoesNotExist24() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 33) { exists = true; } } else { Print("OrderSelect() error - ", ErrorDescription(GetLastError())); } if (exists == false) { OncePerBar25(); } } void OncePerBar25() { if (BarTime25 < Time[0]) { // we have a new bar opened BarTime25 = Time[0]; // keep the new bar open time SellPendingOrder31(); } } void SellPendingOrder31() { int expire = TimeCurrent() + 60 * Expiration31; double price = NormalizeDouble(Open[0], NDigits) - PriceOffset31*PipValue*Point; double SL = price + SellStoploss31*PipValue*Point; if (SellStoploss31 == 0) SL = 0; double TP = price - SellTakeprofit31*PipValue*Point; if (SellTakeprofit31 == 0) TP = 0; if (Expiration31 == 0) expire = 0; int ticket = OrderSend(Symbol(), OP_SELLSTOP, Volume_Lots, price, 4, SL, TP, "My Expert", 33, expire, Red); if (ticket == -1) { Print("OrderSend() error - ", ErrorDescription(GetLastError())); } } void IfOrderDoesNotExist28() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 33) { exists = true; } } else { Print("OrderSelect() error - ", ErrorDescription(GetLastError())); } if (exists == false) { OncePerBar29(); } } void OncePerBar29() { if (BarTime29 < Time[0]) { // we have a new bar opened BarTime29 = Time[0]; // keep the new bar open time BuyPendingOrder30(); } } void BuyPendingOrder30() { int expire = TimeCurrent() + 60 * Expiration30; double price = NormalizeDouble(Open[0], NDigits) + PriceOffset30*PipValue*Point; double SL = price - BuyStoploss30*PipValue*Point; if (BuyStoploss30 == 0) SL = 0; double TP = price + BuyTakeprofit30*PipValue*Point; if (BuyTakeprofit30 == 0) TP = 0; if (Expiration30 == 0) expire = 0; int ticket = OrderSend(Symbol(), OP_BUYSTOP, Volume_Lots, price, 4, SL, TP, "My Expert", 33, expire, Blue); if (ticket == -1) { Print("OrderSend() error - ", ErrorDescription(GetLastError())); } } void IfOrderExists12() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 33 && OrderProfit() > 0) { exists = true; } } else { Print("OrderSelect() error - ", ErrorDescription(GetLastError())); } if (exists) { DeletePendingOrder10(); } } void DeletePendingOrder10() { for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 33) { bool ret = OrderDelete(OrderTicket(), Red); if (ret == false) { Print("OrderDelete() error - ", ErrorDescription(GetLastError())); } } } } void IfOrderExists5() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == 33 && OrderProfit() > 0) { exists = true; } } else { Print("OrderSelect() error - ", ErrorDescription(GetLastError())); } if (exists) { DeletePendingOrder9(); } } void DeletePendingOrder9() { for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 33) { bool ret = OrderDelete(OrderTicket(), Red); if (ret == false) { Print("OrderDelete() error - ", ErrorDescription(GetLastError())); } } } } int deinit() { if (false) ObjectsDeleteAll(); } [/PHP] |
رد: لو سمحت اول مره اطلب اكسبريت ممكن حد يساعدني؟
تفضلي الكود بعد التصحيح
[PHP] #property copyright " jmeel24@yahoo.com " #include <stdlib.mqh> #include <WinUser32.mqh> // exported variables extern int MagicNo=4141; extern string A1=" Time Order Setting "; extern int Hour16 = 22; extern int Minute16 = 2; extern string A2=" Sell Order Setting "; extern double SellLots8 = 0.1; extern int SellStoploss8 = 20; extern int SellTakeprofit8 = 10; extern int PriceOffset8 = 10; extern string A3=" Buy Order Setting "; extern double BuyLots17 = 0.1; extern int BuyStoploss17 = 20; extern int BuyTakeprofit17 = 10; extern int PriceOffset17 = 12; // local variables double PipValue=1; // this variable is here to support 5-digit brokers bool Terminated = false; string LF = "\n"; // use this in custom or utility blocks where you need line feeds int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names int current = 0; int Expiration17 = 1380; int Expiration8 = 1380; int Today16 = -1; datetime BarTime7 = 0; datetime BarTime9 = 0; int deinit() { if (false) ObjectsDeleteAll(); } int init() { NDigits = Digits; if (false) ObjectsDeleteAll(); // clear the chart Comment(""); // clear the chart } // Expert start int start() { if (Bars < 10) { Comment("Not enough bars"); return (0); } if (Terminated == true) { Comment("EA Terminated."); return (0); } OnEveryTick20(); } void OnEveryTick20() { if (true == false && false) PipValue = 10; if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10; CheckLastOrderResult23(); AtCertainTime16(); } void AtCertainTime16() { int datetime800 = TimeLocal(); int hour0 = TimeHour(datetime800); int minute0 = TimeMinute(datetime800); if (DayOfWeek() != Today16 && hour0 == Hour16 && minute0 == Minute16) { Today16 = DayOfWeek(); IfOrderDoesNotExist15(); IfOrderDoesNotExist14(); } } void IfOrderDoesNotExist15() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo) { exists = true; } } else { Print("OrderSelect() error - ", ErrorDescription(GetLastError())); } if (exists == false) { OncePerBar7(); } } void OncePerBar7() { if (BarTime7 < Time[0]) { // we have a new bar opened BarTime7 = Time[0]; // keep the new bar open time SellPendingOrder8(); } } void SellPendingOrder8() { int expire = TimeCurrent() + 60 * Expiration8; double price = NormalizeDouble(Open[0], NDigits) - PriceOffset8*PipValue*Point; double SL = price + SellStoploss8*PipValue*Point; if (SellStoploss8 == 0) SL = 0; double TP = price - SellTakeprofit8*PipValue*Point; if (SellTakeprofit8 == 0) TP = 0; if (Expiration8 == 0) expire = 0; int ticket = OrderSend(Symbol(), OP_SELLSTOP, SellLots8, price, 4, SL, TP, "My Expert", MagicNo, expire, Red); if (ticket == -1) { Print("OrderSend() error - ", ErrorDescription(GetLastError())); } } void IfOrderDoesNotExist14() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo) { exists = true; } } else { Print("OrderSelect() error - ", ErrorDescription(GetLastError())); } if (exists == false) { OncePerBar9(); } } void OncePerBar9() { if (BarTime9 < Time[0]) { // we have a new bar opened BarTime9 = Time[0]; // keep the new bar open time BuyPendingOrder17(); } } void BuyPendingOrder17() { int expire = TimeCurrent() + 60 * Expiration17; double price = NormalizeDouble(Open[0], NDigits) + PriceOffset17*PipValue*Point; double SL = price - BuyStoploss17*PipValue*Point; if (BuyStoploss17 == 0) SL = 0; double TP = price + BuyTakeprofit17*PipValue*Point; if (BuyTakeprofit17 == 0) TP = 0; if (Expiration17 == 0) expire = 0; int ticket = OrderSend(Symbol(), OP_BUYSTOP, BuyLots17, price, 4, SL, TP, "My Expert", MagicNo, expire, Blue); if (ticket == -1) { Print("OrderSend() error - ", ErrorDescription(GetLastError())); } } void CheckLastOrderResult23() { double profit = 0; datetime lastCloseTime = 0; int cnt = OrdersHistoryTotal(); for (int i=0; i < cnt; i++) { if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; if (OrderSymbol() == Symbol() && lastCloseTime < OrderCloseTime()) { lastCloseTime = OrderCloseTime(); profit = OrderProfit(); } } if (profit > 0) { DeletePendingOrder19(); DeletePendingOrder18(); } } void DeletePendingOrder19() { for (int i=OrdersTotal()-1; i <= 0; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo) { bool ret = OrderDelete(OrderTicket(), Red); if (ret == false) { Print("OrderDelete() error - ", ErrorDescription(GetLastError())); } } } } void DeletePendingOrder18() { for (int i=OrdersTotal()-1; i <= 0; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo) { bool ret = OrderDelete(OrderTicket(), Red); if (ret == false) { Print("OrderDelete() error - ", ErrorDescription(GetLastError())); } } } } [/PHP] |
رد: لو سمحت اول مره اطلب اكسبريت ممكن حد يساعدني؟
كل الشكر لك أستاذ جميل وجاري التجربه وبصراحه اتعلمت منك كتير عن طريق الاكسبريت ده وكنت اتمنى اعرف من حضرتك التعديل بتاعي مش شغال ليه ؟
وجاري تجربة التعديل الجديد |
رد: لو سمحت اول مره اطلب اكسبريت ممكن حد يساعدني؟
انتي غيرتي فقط Trade الى History وهذا لايكفي ولابد من تحديد أن يكون هو العقد الأخير وأن يكون اغلق على ربح . راجعي الدالة وقارنيها ، ثم اختصرت أن يكون الأغلاق بيع أو شراء وكذلك المعلق بيع أو شراء ، لأن الأكسبيرت ينتهي عند هذا الحد وينتظر الموعد الجديد .
|
رد: لو سمحت اول مره اطلب اكسبريت ممكن حد يساعدني؟
اقتباس:
ما شاء الله عليك أستاذ جميل شكراً لك على هذا الوقت والمجهود وفقك الله دائماً إلى الخير وفعلا والله استفدت منك كثيرا |
رد: لو سمحت اول مره اطلب اكسبريت ممكن حد يساعدني؟
السلام عليكم ورحمة الله وبركاتة
ممكن الاكسبرت بعد اخر تعديل لو سمحتى شكرااااااااا جزيلاااااااااااا لحضرتك وللاستاذ جميل |
رد: لو سمحت اول مره اطلب اكسبريت ممكن حد يساعدني؟
السلام عليكم
ممكن الاكسبرت بعد اخر تعديل شكرااااااااا جزيلاااااااااااا |
الساعة الآن 04:00 AM |
Powered by vBulletin® Copyright ©2000 - 2025
جميع الحقوق محفوظة الى اف اكس ارابيا www.fx-arabia.com