احنا تمام يا استاذي ومستعدين للجديد ان شاء الله
Printable View
احنا تمام يا استاذي ومستعدين للجديد ان شاء الله
هذه ثلاث دوال ، مالجديد فيها ويختلف عن الدوال لديكم ؟؟ يمكنكم استخدامها واضافة المتغيرات المطلوبة واضافة مايلزم في دوال التنفيذ والشروط ؟؟ سيكون هذا واجب يومين الأجازة ويمكنكم التصحيح لبعضكم والعمل الجماعي .
كود PHP:TotalOrder=0; dayorderL=0;
for(int i=OrdersTotal()-1 ;i>=0 ;i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo){
TotalOrder++; if(OrderOpenTime()>=iTime(NULL,1440,0)) dayorderL=1;
}
}
dayorderH=0;
for(int i=OrdersHistoryTotal()-1 ;i>=0 ;i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo){
TotalOrder++; if(OrderOpenTime()>=iTime(NULL,1440,0)) dayorderH=1;
}
}
LastProfitH=0; LastLot=0;
for(int i =0;i<OrdersHistoryTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNo && OrderType()<2){
LastProfitH=OrderProfit();
if(LastProfitH<0) LastLot=OrderLots();
}
}
يومين ايه بقي يا استاذي .. ما طار منهم يوم خلاص .. بس ان شاء الله معاك ناس ذي الفل وهيعملوا الواجب تمام ...
قصدي القناص وسامح طبعا .. وانا هغش منهم :0016:
الدالة الاولي
اختلفت عن القديمة انها لم تعود بوجود عقد مفتوح فقطكود PHP:int TotalOrder=0, dayorderL=0;
for(int i=OrdersTotal()-1 ;i>=0 ;i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo){
TotalOrder++; if(OrderOpenTime()>=iTime(NULL,1440,0)) dayorderL=1;
}
}
ولكنها عادت ايضا بقيمة بان الاوردر بالنسبة للبيع يكون ترو على الديلي
....
الدالة الثانية
هي نفسها القديمة والاختلاف بزيادة تحديد ان يكون الاوردر المعلق اقل من 2كود PHP:LastProfitH=0; LastLot=0;
for(int i =0;i<OrdersHistoryTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNo && OrderType()<2){
LastProfitH=OrderProfit();
if(LastProfitH<0) LastLot=OrderLots();
}
}
ولا اعرف لماذا بصراحة .. او ما الفائدة منها ؟؟
............
الدالة الثالثة
هي نفسها الدالة الجديدة المضافة مع الاولي ولكنها تحدد ان الشراء يكون ترو على الديلي ..كود PHP:int dayorderH=0;
for(int i=OrdersHistoryTotal()-1 ;i>=0 ;i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo){
TotalOrder++; if(OrderOpenTime()>=iTime(NULL,1440,0)) dayorderH=1;
}
}
...........
اما عن استعمالهم في الاوامر مش عارف الطريقة الصحيحة لأستخدامهم لأني وضعت شرط للبيع والشراء بهم لم يفتح الاكسبيرت اي عقود رغم عدم وجود خطأ مذكور ؟؟؟؟؟؟؟؟؟؟؟؟؟؟
..............
ممكن يكون كلامي كله غلط طبعا عشان سامح والقناص مايعتمدوش عليه :no3:
الملف المرفق 412034
أنا معك أخى هيرو فى شرحك للدوال وأضيف أن الدوال الجديدة تبحث عن إذا كانت هناك صفقات بيع أو شراء مفعلة فى اليوم و كانت هناك صفقات خاسرة يقوم الإكسيبرت بتفعيل عمل المضاعفات أما عن الدالة الجديدة للمضاعفات ordertype<2 على ما أعتقد والله أعلم بأن يعود إلى اللوت الأساسى بعد تحقيق الربح لأننى غيرت فى هذه القيمة إلى 1 فوجدت أن اللوت يثبت على أخر قيمة وصل لها و لا يعود إلى القيمة الأساسية حتى بعد تحقيق ربح وهذا هو الإكسيبرت يعمل بالمضاعفات بشكل جيد
هذه دالة تبحث في الأوردرات المغلقة أضفت اليها متغير رقمي dayorderH وأضف للكلمة حرف H ليدلني انه تأريخي أو حرف L ليدلني انه لآيف ، والدالة تعود لنا بأجابتين احدها هل يوجد صفقات مغلقة او ملغية تأريخ فتحها يساوي اليوم الحالي ، اذا كانت الأجابة ترو سيعطي القيمة 1 للمتغير dayorderH .
الدالة التالية نفس فكرة الأولى لكن تبحث في اللآيفكود PHP:dayorderH=0;
for(int i=OrdersHistoryTotal()-1 ;i>=0 ;i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo){
TotalOrder++; if(OrderOpenTime()>=iTime(NULL,1440,0)) dayorderH=1;
}
}
وأضفنا المتغيرين الجديدة الى المتغيراتكود PHP:TotalOrder=0; dayorderL=0;
for(int i=OrdersTotal()-1 ;i>=0 ;i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo){
TotalOrder++; if(OrderOpenTime()>=iTime(NULL,1440,0)) dayorderL=1;
}
}
ثم أضفناها الى الشروط والغينا جميع الشروط القديمة حتى لايكون هناك حشو اكواد لاتأثير لها ، هذا الكود يقول اذا كانت نتيجة المتغيرين العائدة من الدالتين التأريخية والدالة الحالية تساوي 0 نفذ تعليق جديد ، وبالتالي فأن الأكسبيرت اذا وجد ان النتيجة اكبر من 0 هذا يدل على انه قد تم تعليق اوردرات هذا اليوم فلن يعلق غيرها حتى ينتهي اليوم الحالي وندخل في يوم جديد .كود PHP:int TotalOrder,dayorderL,dayorderH;
في المشاركة اللاحقة شرح الدالة الثالثة .كود PHP:if(DayOfWeek()==0) return;
if( (dayorderL+dayorderH)==0)
{
Buy_Stop();
Sell_Stop();
}
هذه الدالة ستبحث في السجل التأريخي الهيستوري عن حالة الأغلاق وتدلني هل الأغلاق كان بخسارة او بربح
هنا حصرت البحث في نوعين سبق شرحها هم اوردرات الشراء ورقم الشراء 0 ورقم البيع هو 1 وسبق ان شرحت ان لكل نوع من الصفقات رقم وهو من 0 الى 5 .
وشرطنا في الدالة اذا كان احد النوعين مغلق وان النتيجة خسارة ارجع لنا بقيمة اللوت المغلق .
ثم وضعنا في الشرط في دالة التنفيذكود PHP:LastProfitH=0; LastLot=0;
for(int i =0;i<OrdersHistoryTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNo && OrderType()<2){
LastProfitH=OrderProfit();
if(LastProfitH<0) LastLot=OrderLots();
}
}
ان اللوت يساوي اللوت العادي لكن اذا اخر صفقة مغلقة بخسارة فنضرب اللوت المغلق في معامل المضاعفةكود PHP:double SL=0,TP=0,NewLot=Lot;
if(Multi_Factor>0 && LastProfitH<0) NewLot=NormalizeDouble(LastLot*Multi_Factor,2);
واضفنا
لأنه اذا وضعنا معامل الضرب كسر وليس عدد صحيح فسوف يأتينا بأقرب لوت صحيح للمضاعفة .كود PHP:NormalizeDouble
وطبع اضفنا الى المتغيرات وهي من سابق المتغيرين من نو دوبل
إن شاء الله الشرح واضح ؟ .كود PHP:double LastProfitH, LastLot;
ما شاء الله شرحك فوق الممتاز أضفت الشرط الأخير ولكنى بعدما أضفته وجدت أن هناك صفقات أغلقت بعد يومين ولم تغلق أو تحذف فى نفس اليوم وهناك صفقات أخرى تغلق وتحذف بطريقة صحيحة فهل هناك خطأ فى الإكسيبرت المرفق
طوال الأسبوع الصفقات تغلق وتحذف بطريقة صحيحة المشكلة فى إغلاق نهاية الأسبوع أوردرات يوم الجمعة لا تغلق وبعد افتتاح السوق يوم الأحد الساعة 12 يضاف إلى أوردرات يوم الجمعة أوردرات يوم الأحد ويتم حذفهم جميعا فى توقيتهم وذلك يوم الأحد يعنى بعد إفتتاح السوق الساعة 12 يكون عندنا أربع أوردرات فهل هناك حل لهذه المشكلة
ههههههههههه بس شفتني وانا بتكلم كمبرمج .. مع اني لو ببرمج دش مكنتش هعك كده :0016:
الله يجزاك خير عنا يا استاذ جميل ويصبرك علينا :0016:
بالنسبة للشرح بتاع حضرتك واضح جدا بس يبقي موضوع الحلقات .. لأنها بالنسبالي عقدة ..
والاكسبيرت اصبح لا يلغي الصفقات الغير مفعلة لليوم السابق ؟؟؟
الملف المرفق 412057
تفضل أخى هيرو الإكسيبرت بيلغى الأوردرات الغير مفعلة ويغلق الصفقات المفعلة فى الساعة التى حددناها ولكن المشكلة كلها فى أوردرات يوم الجمعة وعلى ما أعتقد أن أوردرات يوم الجمعة لا تحذف سبب أن السوق يبدأ عمله فى الساعة 12 وبذلك ينتظر الإكسيبرت للساعة 11لليوم الجديد ليحذف الأوردرات وبذلك فالإكسيبرت لا يعيبه شئ
والمطلوب حاليا إضافة شرط لإلغاء وحذف صفقات يوم الجمعة ولا تبيت لحين فتح السوق
الف شكر يا سامح .. ونردهالك في الافراح :ongue:
بس مش عارف بيفتح عندي من اول يوم لآخر يوم ولا فارقة معاه اول اسبوع ولا آخر اسبوع .. يمكن المنصة عندي