صفحة 298 من 689 الأولىالأولى ... 198248288292293294295296297298299300301302303304308348398 ... الأخيرةالأخيرة
النتائج 4,456 إلى 4,470 من 10335
  1. #4456
    الصورة الرمزية صلاح الدين الفوركساوى
    صلاح الدين الفوركساوى غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2012
    الإقامة
    مصر
    المشاركات
    740

    افتراضي

    موضوع مفيد جدا

    ماشاء الله

  2. #4457
    الصورة الرمزية hre007
    hre007 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Oct 2007
    العمر
    54
    المشاركات
    726

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    الموضوع مغلق فقط حتى لا يكون الشرح مشتت بين المشاركات الأخرى فقم بقراءة ومراجعة الدروس وإذا وجدت أي صعوبه في أي جزء إسأل هنا في هذا الموضوع وسوف أقوم بتوضيحها لك
    أيضا راجع هذا الموضوع

    https://forum.arabictrader.com/t141872.html

    به كل المواضيع الهامة لتعلم البرمجة بلغة mql4

    لك جزيل الشكر اخي العزيز مستر دولار على الاهتمام والرد
    بارك الله فيك وبارك لك ورزقك الجنة

  3. #4458
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,864

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة hre007 مشاهدة المشاركة
    لك جزيل الشكر اخي العزيز مستر دولار على الاهتمام والرد
    بارك الله فيك وبارك لك ورزقك الجنة
    وبارك الله فيك
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  4. #4459
    الصورة الرمزية wadi2012
    wadi2012 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Aug 2012
    الإقامة
    جرين لاند
    المشاركات
    1,089

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

    عندي سؤال
    صممت مؤشر بسيط واريد ان احسب عدد المؤشرات التي الصقت في في الشارت في نفس الوقت من بنفس الاسم
    مثال لنفترض ان اسم المؤشر DD ووضعته في الشارت ثم اضفته مرة أخرى في الشارت بنفس الاسم فيكون لدينا مؤشرين هما DD DD اذن عددهم يساوي 2

    حاولت ووضعت هذه الاكواد

    كود PHP:
       double Var;


    int init()
      {
      
    if(
    GlobalVariableCheck("count")==true)
     {
      
     Var=
    GlobalVariableGet("count");
      
     
    GlobalVariableSet("count",Var+1);
     
     }
      else{
      Var=
    1;
      
    GlobalVariableSet("count",Var);
      }
      
     
     
    Comment("Var =",Var);

      
      
      
      
    //----
       
    return(0);
      }
    int deinit()
      {
    //----
        
    Var=Var-1;
    //----
       
    return(0);
      } 
    وضعت الاكواد في دالة init
    حتى اذا اضفت المؤشر يحسب قيمة للمتغير الجلوبال واذا تم اضافة نفس المؤشر فانه يبحث عن المتغير جلوبال ويضيف له قيمة وعندما احذف المؤشر نفسه ينقص قيمة ولكن المشكلة كلما اغير من فريم الى فريم تتغير قيمة المتغير Var يعني عندما اضع المؤشر على فريم الساعة وانتقل الى فريم النصف ساعة او اعلى منع تتغير قيمة المتغير
    اتمنى ان يكون سؤالي واضح

  5. #4460
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,864

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

    اقتباس المشاركة الأصلية كتبت بواسطة wadi2012 مشاهدة المشاركة
    عندي سؤال
    صممت مؤشر بسيط واريد ان احسب عدد المؤشرات التي الصقت في في الشارت في نفس الوقت من بنفس الاسم
    مثال لنفترض ان اسم المؤشر DD ووضعته في الشارت ثم اضفته مرة أخرى في الشارت بنفس الاسم فيكون لدينا مؤشرين هما DD DD اذن عددهم يساوي 2

    حاولت ووضعت هذه الاكواد

    كود PHP:
       double Var;


    int init()
      {
      
    if(
    GlobalVariableCheck("count")==true)
     {
      
     Var=
    GlobalVariableGet("count");
      
     
    GlobalVariableSet("count",Var+1);
     
     }
      else{
      Var=
    1;
      
    GlobalVariableSet("count",Var);
      }
      
     
     
    Comment("Var =",Var);

      
      
      
      
    //----
       
    return(0);
      }
    int deinit()
      {
    //----
        
    Var=Var-1;
    //----
       
    return(0);
      } 
    وضعت الاكواد في دالة init
    حتى اذا اضفت المؤشر يحسب قيمة للمتغير الجلوبال واذا تم اضافة نفس المؤشر فانه يبحث عن المتغير جلوبال ويضيف له قيمة وعندما احذف المؤشر نفسه ينقص قيمة ولكن المشكلة كلما اغير من فريم الى فريم تتغير قيمة المتغير Var يعني عندما اضع المؤشر على فريم الساعة وانتقل الى فريم النصف ساعة او اعلى منع تتغير قيمة المتغير
    اتمنى ان يكون سؤالي واضح
    لأن الطبيعي عندما تقوم بتغيير التايم فريم فكأنك حذفت المؤشر وقمت بوضعه من جديد
    بالتالي عندما تحذف المؤشر يجب أن تنقص القيمه 1 أنت أضفت هذا الكود في الداله deinit لكن لديك جزء ناقص بها
    المفروض بعد أن تنقص قيمة
    كود PHP:
    Var=Var-1
    أن تقوم بحفظ القيمه الجديده مره أخرى
    كود PHP:
    GlobalVariableSet("count",Var); 
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  6. #4461
    الصورة الرمزية wadi2012
    wadi2012 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Aug 2012
    الإقامة
    جرين لاند
    المشاركات
    1,089

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    لأن الطبيعي عندما تقوم بتغيير التايم فريم فكأنك حذفت المؤشر وقمت بوضعه من جديد
    بالتالي عندما تحذف المؤشر يجب أن تنقص القيمه 1 أنت أضفت هذا الكود في الداله deinit لكن لديك جزء ناقص بها
    المفروض بعد أن تنقص قيمة
    كود PHP:
    Var=Var-1
    أن تقوم بحفظ القيمه الجديده مره أخرى
    كود PHP:
    GlobalVariableSet("count",Var); 

    جربت واضفت ما ذكرت ولكن ينقص القيمة كلما غيرت من فريم الى الاخر
    دالة deinit حسب فهمي هي عندما تحذف المؤشر تضع به كود لحذف object او حذف اشياء لكن طالما ان المؤشر موجود وتغير من فريم الى اخر لا يحذف
    جرب مثلا وضع عملية جمع بسيطة لمتغير x =x+2
    وضعها في ال deinit وضع تعليق ليبين القيمة x ستجد انه عند تغير الفريم الى اخر والمؤشر موجود فان قيمة x لا تظهر ولكن عند حذف المؤشر فان قيمة x تظهر وهنا دليل على ان وظيفة الدالة deinit هي عندما يحذف المؤشر فان هذه الدالة تنفذ مهمة محددة كما انه عندما يوضع المؤشر على الشارت فان دالة init تنفذ فقط مهمة محددة يعني هذه الدالة لها مهمة واحدة فقط وهي عند حذف المؤشر او الاكسبيرت

  7. #4462
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,864

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

    اقتباس المشاركة الأصلية كتبت بواسطة wadi2012 مشاهدة المشاركة
    جربت واضفت ما ذكرت ولكن ينقص القيمة كلما غيرت من فريم الى الاخر
    دالة deinit حسب فهمي هي عندما تحذف المؤشر تضع به كود لحذف object او حذف اشياء لكن طالما ان المؤشر موجود وتغير من فريم الى اخر لا يحذف
    جرب مثلا وضع عملية جمع بسيطة لمتغير x =x+2
    وضعها في ال deinit وضع تعليق ليبين القيمة x ستجد انه عند تغير الفريم الى اخر والمؤشر موجود فان قيمة x لا تظهر ولكن عند حذف المؤشر فان قيمة x تظهر وهنا دليل على ان وظيفة الدالة deinit هي عندما يحذف المؤشر فان هذه الدالة تنفذ مهمة محددة كما انه عندما يوضع المؤشر على الشارت فان دالة init تنفذ فقط مهمة محددة يعني هذه الدالة لها مهمة واحدة فقط وهي عند حذف المؤشر او الاكسبيرت
    فعلا لم ألاحظها إلى الآن يبدو أنها جاءت في آخر تحديثات للميتاتريدر بتعديل هذا الجزء فسابقا كان ينفذ هذه الدالة حتى عند تغيير التايم فريم
    للأسف لم أجد حل آخر غير ذلك
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  8. #4463
    الصورة الرمزية Walid_ELShereef
    Walid_ELShereef غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jun 2012
    الإقامة
    الكويت
    العمر
    44
    المشاركات
    373

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

    السلام عليكم
    الأخوة الاعزاء أرجو المساعده في الدوال البرمجية لفكرة الاكسبرت التالية
    قمت بعمل اكسبرت يفتح صفقات سواء بيع او شراء طبقا لشروط معينه عند الساعه 0 كل يوم
    واذا أتت الصفقه بهدفها ينتهي عمله طيلة اليوم والانتظار لليوم التالي
    اما اذا لم يحقق هدفه تبدا عملية المضاعفة بضعف اللوت السابق
    قمت بعمل التالي
    عمل دالة خارج الداله ستارت لاستدعاء قيمة اخر لوت من الهيستري
    عمل داله اخرى لمعرفة هل كانت اخر صفقة رابحه ام خاسرة
    والامر تمام
    ولكني أرغب عندما يتم الوصول لرقم مضاعفة معينة وعملته متغير خارجي واسميته MaxLot ألا يقوم بعمل مضاعفات أخرى والانتظار لبداية يوم جديد ومن ثم الدخول باللوت المبدئي LotSize
    بمعنى عندما يتم الدخول في المضاعفات يتوقف عند المضاعفة MaxLot وبعدها يبدا عمله من جديد عند بداية اليوم الجديد مثلما تم برمجتة باللوت المبدئي
    وأشكر تعاونكم
    وتحياتي للأخ مستر دولار والعزيز الغالي الاستاذ جميل
    وبارك الله فيكم

  9. #4464
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,864

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

    اقتباس المشاركة الأصلية كتبت بواسطة waleedgadelmola مشاهدة المشاركة
    السلام عليكم
    الأخوة الاعزاء أرجو المساعده في الدوال البرمجية لفكرة الاكسبرت التالية
    قمت بعمل اكسبرت يفتح صفقات سواء بيع او شراء طبقا لشروط معينه عند الساعه 0 كل يوم
    واذا أتت الصفقه بهدفها ينتهي عمله طيلة اليوم والانتظار لليوم التالي
    اما اذا لم يحقق هدفه تبدا عملية المضاعفة بضعف اللوت السابق
    قمت بعمل التالي
    عمل دالة خارج الداله ستارت لاستدعاء قيمة اخر لوت من الهيستري
    عمل داله اخرى لمعرفة هل كانت اخر صفقة رابحه ام خاسرة
    والامر تمام
    ولكني أرغب عندما يتم الوصول لرقم مضاعفة معينة وعملته متغير خارجي واسميته MaxLot ألا يقوم بعمل مضاعفات أخرى والانتظار لبداية يوم جديد ومن ثم الدخول باللوت المبدئي LotSize
    بمعنى عندما يتم الدخول في المضاعفات يتوقف عند المضاعفة MaxLot وبعدها يبدا عمله من جديد عند بداية اليوم الجديد مثلما تم برمجتة باللوت المبدئي
    وأشكر تعاونكم
    وتحياتي للأخ مستر دولار والعزيز الغالي الاستاذ جميل
    وبارك الله فيكم
    وعليكم السلام ورحمة الله وبركاته
    قم بوضع الشرط إذا كان حجم اللوت الجديد أكبر من MaxLot و اليوم الجديد لم يبدأ فلن يتحقق الشرط
    أنت لديك دالة حجم اللوت إذا كان لديك طريقة لمعرفة بداية يوم جديد أم لا فلا تحتاج سوى لكتابة الشروط بالكود
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  10. #4465
    الصورة الرمزية Walid_ELShereef
    Walid_ELShereef غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jun 2012
    الإقامة
    الكويت
    العمر
    44
    المشاركات
    373

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    وعليكم السلام ورحمة الله وبركاته
    قم بوضع الشرط إذا كان حجم اللوت الجديد أكبر من MaxLot و اليوم الجديد لم يبدأ فلن يتحقق الشرط
    أنت لديك دالة حجم اللوت إذا كان لديك طريقة لمعرفة بداية يوم جديد أم لا فلا تحتاج سوى لكتابة الشروط بالكود
    أسف استاذ اسامة ممكن توضيح أكثر بالاكواد وجزاك الله خيرا وكيف عن طريق الدوال معرفة بداية يوم جديد من عدمة
    اسف اطلت عليك
    آخر تعديل بواسطة waleedgadelmola ، 31-10-2013 الساعة 11:16 PM

  11. #4466
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,864

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

    اقتباس المشاركة الأصلية كتبت بواسطة waleedgadelmola مشاهدة المشاركة


    أسف استاذ اسامة ممكن توضيح أكثر بالاكواد وجزاك الله خيرا وكيف عن طريق الدوال معرفة بداية يوم جديد من عدمة
    اسف اطلت عليك
    أرفق الكود حتى أقوم بالشرح على الدوال التي قمت بعملها
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  12. #4467
    الصورة الرمزية Walid_ELShereef
    Walid_ELShereef غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jun 2012
    الإقامة
    الكويت
    العمر
    44
    المشاركات
    373

    02 رد:موضوع مخصص للأسئلة البرمجية

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    أرفق الكود حتى أقوم بالشرح على الدوال التي قمت بعملها
    أوك شكرا أخي العزيز الاستاذ أسامة
    قمت اولا بتعريف متغير خارجي كالتالي
    كود PHP:
    extern         double         Maxlot=0.8
    ثم خارج دالة ستارت قمت بعمل دالة لاستدعاء قيمة اللوت لأخر صفقة كالتالي

    كود PHP:
    double LastOrderLots()
    {
     for(
    int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      
    OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
      {
       return(
    OrderLots());
      }
     }
     return(
    0);

    وداخل الدالة ستارت وضعت التالي
    كود PHP:
    if(Time0!=Time[0] && (Sell_order-Buy_order)>=Min_Distance_Between_Orders*point && (Sell_order-Buy_order)<=Max_Distance_Between_Orders*point && MyOrdersTotal(MagicNumber)==0){Excute(0);Excute(1);} 

    وهذه دالة خارج الدالة ستارت لتنفيذ الصفقات

    كود PHP:
    //+------------------------------------------------------------------+
    void Excute(int Direction)
    {
          if(
    Direction==0)
            {
             if(
    TakeProfit==0){TP=0;}else{TP=Buy_order+TakeProfit*point+Spread*point;}
             if(
    StopLoss==0){SL=0;}else{SL=Buy_order-StopLoss*point;}
             
    OrderSend(Symbol(),OP_BUYLIMIT,LotSize,(Buy_order+Spread*point),Slippage*D,SL,TP,"walid EA",MagicNumber,0,Blue); 
             
    Time0=Time[0];
            }
          if(
    Direction==1)
           {
          if(
    TakeProfit==0){TP=0;}else{TP=Sell_order-(TakeProfit*point);}
          if(
    StopLoss==0){SL=0;}else{SL=Sell_order+(StopLoss*point+Spread*point);} 
          
    OrderSend(Symbol(),OP_SELLLIMIT,LotSize,Sell_order,Slippage*D,SL,TP,"walid  EA",MagicNumber,0,Red);   
          
    Time0=Time[0];
           }

    وهذه دالة المضاعفات في حالة ضرب الاستوب وعكس الاوامر من نقطة الاستوب لوز

    كود PHP:
    void CheckForOrders ()
    {
          if(
    orderscnt(OP_BUY)>0&&orderscnt(OP_SELLSTOP)==)
            {
             
    DeletePendingOrder(OP_SELLLIMIT);
             if(
    TakeProfit==0){TP=0;}else{TP=StopLossOrder(OP_BUY)-TakeProfit*point-Spread*point;}
             if(
    StopLoss==0){SL=0;}else{SL=StopLossOrder(OP_BUY)+StopLoss*point+Spread*point;}
             
    OrderSend(Symbol(),OP_SELLSTOP,LotsOrder(OP_BUY)*Multiplier,StopLossOrder(OP_BUY),Slippage*D,SL,TP,"walid   EA",MagicNumber,0,Red);
             }
          if(
    orderscnt(OP_SELL)>0&&orderscnt(OP_BUYSTOP)==)
            {
             
    DeletePendingOrder(OP_BUYLIMIT);
             if(
    TakeProfit==0){TP=0;}else{TP=StopLossOrder(OP_SELL)+TakeProfit*point+Spread*point;}
             if(
    StopLoss==0){SL=0;}else{SL=StopLossOrder(OP_SELL)-StopLoss*point;}
             
    OrderSend(Symbol(),OP_BUYSTOP,LotsOrder(OP_SELL)*Multiplier,StopLossOrder(OP_SELL),Slippage*D,SL,TP,"walid   EA",MagicNumber,0,Blue);
            }
          if(
    orderscnt(OP_BUY)+orderscnt(OP_SELL)==0)
            {
             
    DeletePendingOrder(OP_BUYSTOP);
             
    DeletePendingOrder(OP_SELLSTOP);
            }

    وهذه دوال أخرى مساعدة خارج الدالة ستارت
    كود PHP:
    //+------------------------------------------------------------------+
    int orderscnt(int type){
     
    int cnt=0;
       for(
    int i =0;i<OrdersTotal();i++){
         if(
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
           if(
    OrderSymbol()==Symbol()&&OrderType()==type && MagicNumber==OrderMagicNumber()){
             
    cnt++;
           }
         }
       }
        return(
    cnt);
      } 
    //+------------------------------------------------------------------+
    double StopLossOrder(int type)
    {
     for(
    int i=0;i<OrdersTotal();i++)
     {
      
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
      {
       return(
    OrderStopLoss());
      }
     }
     return(
    0);
    }
    //+------------------------------------------------------------------+
    double LotsOrder(int type)
    {
     for(
    int i=0;i<OrdersTotal();i++)
     {
      
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
      {
       return(
    OrderLots());
      }
     }

    //+------------------------------------------------------------------+
    void DeletePendingOrder(int type)
    {
     for(
    int i=0;i<OrdersTotal();i++)
     {
      
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
      {
       
    OrderDelete(OrderTicket());
      }
     }
    }
    //+------------------------------------------------------------------+
    int MyOrdersTotal(int Magic)
    {
      
    int c=0;
      
    int total  OrdersTotal();

      for (
    int cnt cnt total cnt++)
      {
        
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (
    OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
        {
          
    c++;
        }
      }
      return(
    c);

    وبكدة يكون أكواد الاكسبرت بالكامل موجوده
    وفكرة الاكسبرت أخي اسامة كالتالي
    عند دخول الاكسبرت صفقة في بداية الساعه 0 بيفتح امرين سيل ليمت وباي ليمت وعند تفعيل احدها يقوم بحذف الامر الاخر وفي نفس الوقت يفتح ضعف العقد المفتوح من نقطة الاستوب لوز له صفقة معاكسة ستوب
    وتبدا عملية المضاعفات لحين تحقيق الهدف خلال نفس اليوم اما اذا حقق الهدف يخرج ,وينتظر بداية يوم جديد ومن ثم الدخول باللوت المبدئي LotSize
    المطلوب تحديد حد اقصى للمضاعفات عن طريق المتغير الخارجي MaxLot بحيث اذا تم الوصول لهذا الرقم لا يفتح اي صفقات اخرى خلال هذا اليوم والانتظار لافتتاح يوم عمل جديد ومن ثم العودة من جديد باللوت المبدئي
    جزاك الله عني كل خير
    آخر تعديل بواسطة waleedgadelmola ، 01-11-2013 الساعة 03:57 AM

  13. #4468
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,864

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

    اقتباس المشاركة الأصلية كتبت بواسطة waleedgadelmola مشاهدة المشاركة


    أوك شكرا أخي العزيز الاستاذ أسامة
    قمت اولا بتعريف متغير خارجي كالتالي
    كود PHP:
    extern         double         Maxlot=0.8
    ثم خارج دالة ستارت قمت بعمل دالة لاستدعاء قيمة اللوت لأخر صفقة كالتالي

    كود PHP:
    double LastOrderLots()
    {
     for(
    int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      
    OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
      {
       return(
    OrderLots());
      }
     }
     return(
    0);

    وداخل الدالة ستارت وضعت التالي
    كود PHP:
    if(Time0!=Time[0] && (Sell_order-Buy_order)>=Min_Distance_Between_Orders*point && (Sell_order-Buy_order)<=Max_Distance_Between_Orders*point && MyOrdersTotal(MagicNumber)==0){Excute(0);Excute(1);} 
    وهذه دالة خارج الدالة ستارت لتنفيذ الصفقات

    كود PHP:
    //+------------------------------------------------------------------+
    void Excute(int Direction)
    {
          if(
    Direction==0)
            {
             if(
    TakeProfit==0){TP=0;}else{TP=Buy_order+TakeProfit*point+Spread*point;}
             if(
    StopLoss==0){SL=0;}else{SL=Buy_order-StopLoss*point;}
             
    OrderSend(Symbol(),OP_BUYLIMIT,LotSize,(Buy_order+Spread*point),Slippage*D,SL,TP,"walid EA",MagicNumber,0,Blue); 
             
    Time0=Time[0];
            }
          if(
    Direction==1)
           {
          if(
    TakeProfit==0){TP=0;}else{TP=Sell_order-(TakeProfit*point);}
          if(
    StopLoss==0){SL=0;}else{SL=Sell_order+(StopLoss*point+Spread*point);} 
          
    OrderSend(Symbol(),OP_SELLLIMIT,LotSize,Sell_order,Slippage*D,SL,TP,"walid  EA",MagicNumber,0,Red);   
          
    Time0=Time[0];
           }

    وهذه دالة المضاعفات في حالة ضرب الاستوب وعكس الاوامر من نقطة الاستوب لوز

    كود PHP:
    void CheckForOrders ()
    {
          if(
    orderscnt(OP_BUY)>0&&orderscnt(OP_SELLSTOP)==)
            {
             
    DeletePendingOrder(OP_SELLLIMIT);
             if(
    TakeProfit==0){TP=0;}else{TP=StopLossOrder(OP_BUY)-TakeProfit*point-Spread*point;}
             if(
    StopLoss==0){SL=0;}else{SL=StopLossOrder(OP_BUY)+StopLoss*point+Spread*point;}
             
    OrderSend(Symbol(),OP_SELLSTOP,LotsOrder(OP_BUY)*Multiplier,StopLossOrder(OP_BUY),Slippage*D,SL,TP,"walid   EA",MagicNumber,0,Red);
             }
          if(
    orderscnt(OP_SELL)>0&&orderscnt(OP_BUYSTOP)==)
            {
             
    DeletePendingOrder(OP_BUYLIMIT);
             if(
    TakeProfit==0){TP=0;}else{TP=StopLossOrder(OP_SELL)+TakeProfit*point+Spread*point;}
             if(
    StopLoss==0){SL=0;}else{SL=StopLossOrder(OP_SELL)-StopLoss*point;}
             
    OrderSend(Symbol(),OP_BUYSTOP,LotsOrder(OP_SELL)*Multiplier,StopLossOrder(OP_SELL),Slippage*D,SL,TP,"walid   EA",MagicNumber,0,Blue);
            }
          if(
    orderscnt(OP_BUY)+orderscnt(OP_SELL)==0)
            {
             
    DeletePendingOrder(OP_BUYSTOP);
             
    DeletePendingOrder(OP_SELLSTOP);
            }

    وهذه دوال أخرى مساعدة خارج الدالة ستارت
    كود PHP:
    //+------------------------------------------------------------------+
    int orderscnt(int type){
     
    int cnt=0;
       for(
    int i =0;i<OrdersTotal();i++){
         if(
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
           if(
    OrderSymbol()==Symbol()&&OrderType()==type && MagicNumber==OrderMagicNumber()){
             
    cnt++;
           }
         }
       }
        return(
    cnt);
      } 
    //+------------------------------------------------------------------+
    double StopLossOrder(int type)
    {
     for(
    int i=0;i<OrdersTotal();i++)
     {
      
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
      {
       return(
    OrderStopLoss());
      }
     }
     return(
    0);
    }
    //+------------------------------------------------------------------+
    double LotsOrder(int type)
    {
     for(
    int i=0;i<OrdersTotal();i++)
     {
      
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
      {
       return(
    OrderLots());
      }
     }

    //+------------------------------------------------------------------+
    void DeletePendingOrder(int type)
    {
     for(
    int i=0;i<OrdersTotal();i++)
     {
      
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
      {
       
    OrderDelete(OrderTicket());
      }
     }
    }
    //+------------------------------------------------------------------+
    int MyOrdersTotal(int Magic)
    {
      
    int c=0;
      
    int total  OrdersTotal();

      for (
    int cnt cnt total cnt++)
      {
        
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (
    OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
        {
          
    c++;
        }
      }
      return(
    c);

    وبكدة يكون أكواد الاكسبرت بالكامل موجوده
    وفكرة الاكسبرت أخي اسامة كالتالي
    عند دخول الاكسبرت صفقة في بداية الساعه 0 بيفتح امرين سيل ليمت وباي ليمت وعند تفعيل احدها يقوم بحذف الامر الاخر وفي نفس الوقت يفتح ضعف العقد المفتوح من نقطة الاستوب لوز له صفقة معاكسة ستوب
    وتبدا عملية المضاعفات لحين تحقيق الهدف خلال نفس اليوم اما اذا حقق الهدف يخرج ,وينتظر بداية يوم جديد ومن ثم الدخول باللوت المبدئي LotSize
    المطلوب تحديد حد اقصى للمضاعفات عن طريق المتغير الخارجي MaxLot بحيث اذا تم الوصول لهذا الرقم لا يفتح اي صفقات اخرى خلال هذا اليوم والانتظار لافتتاح يوم عمل جديد ومن ثم العودة من جديد باللوت المبدئي
    جزاك الله عني كل خير
    ستقوم بعمل دالة لمعرفة توقيت إفتتاح آخر صفقة بالتالي معرفة هل جاء يوم جديد لم تفتح فيه صفقات أم لا
    كود PHP:
    datetime LastOrderTime()
    {
     for(
    int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      
    OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
      {
       return(
    OrderOpenTime());
      }
     }
     return(
    0);

    ثم قمت بإضافة التعديل على دالة وضع الأوامر المضاعفه
    كود PHP:
    void CheckForOrders ()
    {
     
    double NewLot;
          if(
    orderscnt(OP_BUY)>0&&orderscnt(OP_SELLSTOP)==0&&LotsOrder(OP_BUY)<MaxLot||LastOrderTime()<iTime(Symbol(),1440,0))
            {
             
    DeletePendingOrder(OP_SELLLIMIT);
             if(
    TakeProfit==0){TP=0;}else{TP=StopLossOrder(OP_BUY)-TakeProfit*point-Spread*point;}
             if(
    StopLoss==0){SL=0;}else{SL=StopLossOrder(OP_BUY)+StopLoss*point+Spread*point;}
             if(
    LotsOrder(OP_BUY)>MaxLot)NewLot=LotSize;
             else 
    NewLot=LotsOrder(OP_BUY)*Multiplier;
             
    OrderSend(Symbol(),OP_SELLSTOP,NewLot,StopLossOrder(OP_BUY),Slippage*D,SL,TP,"walid   EA",MagicNumber,0,Red);
             }
          if(
    orderscnt(OP_SELL)>0&&orderscnt(OP_BUYSTOP)==0&&LotsOrder(OP_SELL)<MaxLot||LastOrderTime()<iTime(Symbol(),1440,0) )
            {
             
    DeletePendingOrder(OP_BUYLIMIT);
             if(
    TakeProfit==0){TP=0;}else{TP=StopLossOrder(OP_SELL)+TakeProfit*point+Spread*point;}
             if(
    StopLoss==0){SL=0;}else{SL=StopLossOrder(OP_SELL)-StopLoss*point;}
             if(
    LotsOrder(OP_SELL)>MaxLot)NewLot=LotSize;
             else 
    NewLot=LotsOrder(OP_SELL)*Multiplier;
             
    OrderSend(Symbol(),OP_BUYSTOP,NewLot,StopLossOrder(OP_SELL),Slippage*D,SL,TP,"walid   EA",MagicNumber,0,Blue);
            }
          if(
    orderscnt(OP_BUY)+orderscnt(OP_SELL)==0)
            {
             
    DeletePendingOrder(OP_BUYSTOP);
             
    DeletePendingOrder(OP_SELLSTOP);
            }

    بالتالي إذا كان حجم اللوت أكبر من أقصى حجم لوت فلن يفتح صفقات إلا إذا كان يوم جديد جاء ويصبح حجم اللوت هو الإبتدائي
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  14. #4469
    الصورة الرمزية Walid_ELShereef
    Walid_ELShereef غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jun 2012
    الإقامة
    الكويت
    العمر
    44
    المشاركات
    373

    افتراضي

    جزاك الله كل خيرا استاذ أسامة ظبط الاكسبرت ما شاء الله عليك
    جعلك الله دائما مرجع لنا
    تحياتي لشخصكم الكريم وجمعة مباركة
    آخر تعديل بواسطة waleedgadelmola ، 01-11-2013 الساعة 12:48 PM

  15. #4470
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,864

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة waleedgadelmola مشاهدة المشاركة
    جزاك الله كل خيرا استاذ أسامة ظبط الاكسبرت ما شاء الله عليك
    جعلك الله دائما مرجع لنا
    تحياتي لشخصكم الكريم وجمعة مباركة
    وجزاك الله خير وفقك الله
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

المواضيع المتشابهه

  1. موضوع مخصص للاكسبيرتات اللتي يستخدمها الاعضاء على الحقيقي,,عندك اكسبيرت ممتاز ضعه هنا
    By محمد معمو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 11
    آخر مشاركة: 15-12-2023, 02:03 PM
  2. عااااااااااااجل ( موضوع مخصص للفرص الفورية)!!!
    By عاشق الذبذبـة in forum توقعات وتوصيات سوق العملات
    مشاركات: 280
    آخر مشاركة: 27-08-2009, 10:30 PM

الاوسمة لهذا الموضوع


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17