Quran 24/7 الموضوع المخصص للأسئلة البرمجية mql4 - الصفحة 244


صفحة 244 من 250 الأولىالأولى ... 144194234242243244245246 ... الأخيرةالأخيرة
النتائج 2,431 إلى 2,440 من 2493

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

  1. #2431

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة ammar مشاهدة المشاركة
    السلام عليكم
    اخ حسن لديه مشكلة في اكسبيرت المرفق وهي دالة ( الترلين ستوب) لا تعمل مع العلم تعمل جيدا في اكسبيرت اخر
    مع خالص التقدير لجهودك المبذولة
    ملف مرفق 15396
    وعليكم السلام
    جرب النسخة المرفقة
    الملفات المرفقة الملفات المرفقة

  2. #2432
    عضو جديد
    تاريخ التسجيل
    Jul 2018
    المشاركات
    99

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة aut مشاهدة المشاركة
    اخى حسن كنت طلبت منك من فتره كود لتحديد اقصى عدد صفقات مثلاً maxtrade = 2
    اذا عكس السعر على اخر صفقه تفعلت عدد نقاط مثلاً 100 يرجع يتداول من جديد ويدخل صفقتين وكل ما عكس 100 نقطه عن اخر صفقه تفعلت يتداول من جديد صفقين صفقات البيع لوحدها وصفقات الشراء لوحدها


    ده الكود اللى انت عملته من قبل
    كود:
     for(int i=1;i<=20;i++)
    {
    
    
    if((TotalOrders(OP_BUY)!=MaxTrades*i&&time!=Time[0])
     ||(TotalOrders(OP_BUY)==MaxTrades*i&&Ask<=LastPrice(OP_BUY)-Step*point))
    
    
    if((TotalOrders(OP_SELL)!=MaxTrades*i&&time!=Time[0])
     ||(TotalOrders(OP_SELL)==MaxTrades*i&&Bid>=LastPrice(OP_SELL)+Step*point))
    
    }

    حاولت اضافته هنا لدالة الشراء والبيع ولا يعمل
    كود:
      
    
    //buy 
     
       if (Ask >= (DW1 + buyMM * GapSize * point)) 
       {    
          UT1 = Fast_2; 
          sellMM = 2;
          buyMM++;
           
       
           
            if(CloseAtNext)CloseDeleteOrders(OP_SELL);
            if(BuyingEnabled() && WithinAllowableSpread()) {   
            if(Orderscnt()==0&&BarTime!=Time[0])
            if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
            if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;  
            if(TotalOrders(OP_BUY)<MaxTrades)    
         int rBuy=OrderSend(Symbol(),OP_BUY,NewLots,Ask,3*Q,SL,TP,"",MagicNumber,0,Blue); 
         if(rBuy>0)time=Time[0]; 
         BarTime=Time[0];
    
            
            
              } 
              }      
     
       
       
       //sell
       
       if (Bid <= (UT1 - sellMmm * GapSize * point))    
       {
          DW1 = Fast_1; 
          buyMM = 2;
          sellMM++;
          
          
           
            if(CloseAtNext)CloseDeleteOrders(OP_BUY);  
            if(IsSellingEnabled() && IsWithinAllowableSpread()) { 
            if(Orderscnt()==0&&BarTime!=Time[0]) 
            if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
            if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
           if(TotalOrders(OP_SELL)<MaxTrades)
      int rSell=OrderSend(Symbol(),OP_SELL,NewLots,Bid,3*Q,SL,TP,"",MagicNumber,0,Red);
      if(rSell>0)time=Time[0]; 
      BarTime=Time[0];
          
    
    }
     }

    لو تساعدنى فى اضافة الكود بالشكل الصحيح على الدالتين وشرح ماهو حرف i ما وظيفته ؟ وشكراً اخى الكريم
    السلام عليكم
    اخى حسن بعتقد مشوفتش مشاركتى

  3. #2433

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة aut مشاهدة المشاركة
    اخى حسن كنت طلبت منك من فتره كود لتحديد اقصى عدد صفقات مثلاً maxtrade = 2
    اذا عكس السعر على اخر صفقه تفعلت عدد نقاط مثلاً 100 يرجع يتداول من جديد ويدخل صفقتين وكل ما عكس 100 نقطه عن اخر صفقه تفعلت يتداول من جديد صفقين صفقات البيع لوحدها وصفقات الشراء لوحدها


    ده الكود اللى انت عملته من قبل
    كود:
     for(int i=1;i<=20;i++)
    {
    
    
    if((TotalOrders(OP_BUY)!=MaxTrades*i&&time!=Time[0])
     ||(TotalOrders(OP_BUY)==MaxTrades*i&&Ask<=LastPrice(OP_BUY)-Step*point))
    
    
    if((TotalOrders(OP_SELL)!=MaxTrades*i&&time!=Time[0])
     ||(TotalOrders(OP_SELL)==MaxTrades*i&&Bid>=LastPrice(OP_SELL)+Step*point))
    
    }

    حاولت اضافته هنا لدالة الشراء والبيع ولا يعمل
    كود:
      
    
    //buy 
     
       if (Ask >= (DW1 + buyMM * GapSize * point)) 
       {    
          UT1 = Fast_2; 
          sellMM = 2;
          buyMM++;
           
       
           
            if(CloseAtNext)CloseDeleteOrders(OP_SELL);
            if(BuyingEnabled() && WithinAllowableSpread()) {   
            if(Orderscnt()==0&&BarTime!=Time[0])
            if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
            if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;  
            if(TotalOrders(OP_BUY)<MaxTrades)    
         int rBuy=OrderSend(Symbol(),OP_BUY,NewLots,Ask,3*Q,SL,TP,"",MagicNumber,0,Blue); 
         if(rBuy>0)time=Time[0]; 
         BarTime=Time[0];
    
            
            
              } 
              }      
     
       
       
       //sell
       
       if (Bid <= (UT1 - sellMmm * GapSize * point))    
       {
          DW1 = Fast_1; 
          buyMM = 2;
          sellMM++;
          
          
           
            if(CloseAtNext)CloseDeleteOrders(OP_BUY);  
            if(IsSellingEnabled() && IsWithinAllowableSpread()) { 
            if(Orderscnt()==0&&BarTime!=Time[0]) 
            if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
            if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
           if(TotalOrders(OP_SELL)<MaxTrades)
      int rSell=OrderSend(Symbol(),OP_SELL,NewLots,Bid,3*Q,SL,TP,"",MagicNumber,0,Red);
      if(rSell>0)time=Time[0]; 
      BarTime=Time[0];
          
    
    }
     }

    لو تساعدنى فى اضافة الكود بالشكل الصحيح على الدالتين وشرح ماهو حرف i ما وظيفته ؟ وشكراً اخى الكريم
    السلام عليكم
    ببساطة استخدم الشرط التالي عند كل انعكاس بمسافة ستيب يفتح عقد جديد ولكن بمضاعفة حجم العقد وليس عدد العقود!
    فمثلا لو تريد صفقتين بعقد 0.01 اجعل فقط حجم العقد 0.02 ليفتح بها صفقة واحدة
    كود:
    if(TotalOrders(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-Step*point)

  4. #2434
    عضو جديد
    تاريخ التسجيل
    Jul 2018
    المشاركات
    99

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة kira-h مشاهدة المشاركة
    السلام عليكم
    ببساطة استخدم الشرط التالي عند كل انعكاس بمسافة ستيب يفتح عقد جديد ولكن بمضاعفة حجم العقد وليس عدد العقود!
    فمثلا لو تريد صفقتين بعقد 0.01 اجعل فقط حجم العقد 0.02 ليفتح بها صفقة واحدة
    كود:
    if(TotalOrders(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-Step*point)
    اخى حسن عند اضافة الشرط الاخير اللى انت قلت عليه مش بيفتح خالص صفقات

    مينفعش تعدل الكود ان كل ما عكس السعر مسافة الاستيب عن اخر عقد تفعل يبداء يتداول تانى عدد maxtrade من غير التدخل فى حجم العقد

    كل ما احتاجه لهذا الكود ان انا عندى maxtrade = 2 الاكسبيرت بيفتح صفقتين شراء وصفقتين بيع ومش بيفتح تانى صفقات والاكسبيرت شغال كويس على كدا

    بس انا بقا عايز ان اذا فتح صفتين الشراء اوصفقتين البيع ميفتحش صفقات تانى من نوعه يعنى الشراء لوحده والبيع لوحده الا اذا عكس على اخر صفقة تفعلت شراء او بيع مسافة الاستيب ولو حصل يبداء يدخل من تانى صفتين اللى هما maxtrade ونفس الكلام علي البيع ويكمل على نفس الطريقه دى علطول
    التعديل الأخير تم بواسطة aut ; 20-07-2019 الساعة 09:43 PM

  5. #2435
    عضو جديد
    تاريخ التسجيل
    Jul 2019
    المشاركات
    9

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة kira-h مشاهدة المشاركة
    وعليكم السلام
    جرب النسخة المرفقة
    السلام عليكم
    اخي حسن اولا اشكرك كثيرا على التصحيح طبعا كان المفروض انتبه لهذه الملاحظة البسيطة وكان يجب ان ندخر اسئلتنا الصعبة لك حتى لا تنشغل كثيرا على العموم اشكرك للمرة الثانية

  6. #2436
    عضو جديد
    تاريخ التسجيل
    Jan 2019
    المشاركات
    7

    افتراضي

    السلام عليكم و رحمة الله و بركاته

    الله يعطيك العافيه يا صاحبي

    بس حابب يكون الاغلاق هو الفرق بين لوت البيع و لوت الشراء

    مثلا في حالة وجود صفقة شراء ب 0.3 لوت

    و صفقة بيع ب 0.7

    و صفقة البيع هي الرابحه و صفقة الشراء هي الخاسره

    المطلوب هو اغلاق الفرق اي ( 0.7 لوت صفقة بيع - 0.3 لوت صفقة شراء )

    اي مطلوب اغلاق 0.4 لوت صفقة بيع

    كل الشكر و التقدير لمجهودك العظيم

  7. #2437
    عضو جديد
    تاريخ التسجيل
    Jan 2019
    المشاركات
    7

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة kira-h مشاهدة المشاركة
    وعليكم السلام
    دالة اغلاق جزء من العقد عند تحقق ربح معين من النقاط كالتالي :
    كود:
    input double PartialProfit=20;
    
    
    void OnTick()
    {
     if(PartialProfit>0)PartialClose();
    }
    
    
    void PartialClose()
    {
     bool close;
     for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      string   sy=OrderSymbol();
      datetime ot=OrderOpenTime();
      double   op=OrderOpenPrice(),
               ol=OrderLots(),
               sl=OrderStopLoss(),
               tp=OrderTakeProfit();
      int      tk=OrderTicket(),
               ty=OrderType(),
               mn=OrderMagicNumber(),
               closecount=OrderCloseCount(op,ot);
      double   pc=NormalizeDouble(ol/2,2);//نصف العقد
      if(sy==Symbol()&&mn==MagicNo)
      {
       if(ty==OP_BUY)
       {
        if(Bid>=op+PartialProfit*point&&closecount<1)
        {
         close=OrderClose(tk,pc,Bid,30);
        }
       } 
       if(ty==OP_SELL)
       {
        if(Ask<=op-PartialProfit*point&&closecount<1)
        {  
         close=OrderClose(tk,pc,Ask,30);
        }
       } 
      }  
     }
    }
    ودالة لحساب عدد الاغلاقات الجزئية للعقد الأساسي كالتالي:
    كود:
    int OrderCloseCount(double openprice,datetime opentime)
    {
     int closecount=0;
     int i=0;
     while(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
     {
      i++;
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
      {
       if(OrderOpenPrice()==openprice&&OrderOpenTime()==opentime)closecount++;
      }
     } 
     return(closecount);   
    }
    بحيث :
    PartialProfit الربح الجزئي بالنقاط لاغلاق نصف العقد الأساسي
    السلام عليكم و رحمة الله و بركاته

    الله يعطيك العافيه يا صاحبي

    بس حابب يكون الاغلاق هو الفرق بين لوت البيع و لوت الشراء

    مثلا في حالة وجود صفقة شراء ب 0.3 لوت

    و صفقة بيع ب 0.7

    و صفقة البيع هي الرابحه و صفقة الشراء هي الخاسره

    المطلوب هو اغلاق الفرق اي ( 0.7 لوت صفقة بيع - 0.3 لوت صفقة شراء )

    اي مطلوب اغلاق 0.4 لوت صفقة بيع

    كل الشكر و التقدير لمجهودك العظيم

  8. #2438
    عضو جديد
    تاريخ التسجيل
    Jul 2019
    المشاركات
    1

    افتراضي

    السلام عليكم
    ممكن مساعدة برمجية

    بحاول اخدت قيمة المؤشر بيرسم اسهم علي الشارت
    حاولت اكتر من مرة باستخدام icustom بس دايما بترجع بصفر او 2147483647

    مرفق المؤشر


    وشكرا مقدما
    الملفات المرفقة الملفات المرفقة

  9. #2439

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة saad مشاهدة المشاركة
    السلام عليكم
    ممكن مساعدة برمجية

    بحاول اخدت قيمة المؤشر بيرسم اسهم علي الشارت
    حاولت اكتر من مرة باستخدام icustom بس دايما بترجع بصفر او 2147483647

    مرفق المؤشر


    وشكرا مقدما
    وعليكم السلام
    اشارات المؤشر من نوع اوبجكت لا تصلح لدالة iCustom بل يجب استخراج قيمها عن طريق الوظيفة ObjectGet من خلال معرفة اسم الاشارة وتحديد نوع القيمة (سعر، توقيت...) وبما أن اسم الاشارة متغير (كل اشارة من نفس النوع لها اسم خاص) فلا يمكن معرفة قيمتها إلا بمعرفة الشروط نفسها التي بالمؤشر
    يعني الافضل استخدام شروط الاشارة (التي بالمؤشر) مباشرة بالاكسبيرت يعني ستحتاج للكود المفتوح للمؤشر لعمل ذلك
    عموما راجع المشاركة التالية لمعرفة قيمة اشارة مؤشر
    https://www.fxprg.com/vb/showthread....l=1#post874388
    التعديل الأخير تم بواسطة kira-h ; 21-07-2019 الساعة 08:39 PM

  10. #2440

    افتراضي

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

    الله يعطيك العافيه يا صاحبي

    بس حابب يكون الاغلاق هو الفرق بين لوت البيع و لوت الشراء

    مثلا في حالة وجود صفقة شراء ب 0.3 لوت

    و صفقة بيع ب 0.7

    و صفقة البيع هي الرابحه و صفقة الشراء هي الخاسره

    المطلوب هو اغلاق الفرق اي ( 0.7 لوت صفقة بيع - 0.3 لوت صفقة شراء )

    اي مطلوب اغلاق 0.4 لوت صفقة بيع

    كل الشكر و التقدير لمجهودك العظيم
    وعليكم السلام
    ستصبح الدوال والشروط كالتالي:
    كود:
    int Orderscnt(int type=-1)
    {
     int cnt=0;
     for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&(OrderType()==type||type==-1))
       {
        cnt++;
       }
      }
     }
     return(cnt);
    } 
    
    
    double Current(string info,int type=-1)
    {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      bool   select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      string sy=OrderSymbol();
      int    ty=OrderType();
      double pt=OrderProfit(),
             lo=OrderLots();    
      if(sy==Symbol()&&(ty==type||type==-1))
      {
       if(info=="Profit")return(pt);
       else if(info=="Lots")return(lo);
      }
     }
     return(0);
    }
    
    
    
    
    void PartialClose()
    {
     bool close;
     for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      string   sy=OrderSymbol();
      datetime ot=OrderOpenTime();
      double   op=OrderOpenPrice(),
               ol=OrderLots(),
               sl=OrderStopLoss(),
               tp=OrderTakeProfit();
      int      tk=OrderTicket(),
               ty=OrderType(),
               mn=OrderMagicNumber(),
               closecount=OrderCloseCount(op,ot);
      if(sy==Symbol()&&mn==MagicNo&&Orderscnt(OP_BUY)>0&&Orderscnt(OP_SELL)>0)
      {
       if(ty==OP_BUY)
       {
        if(Current("Lots",OP_BUY)>Current("Lots",OP_SELL)&&Current("Profit",OP_BUY)>0
        &&Bid>=op+PartialProfit*point&&closecount<1)
        {
         close=OrderClose(tk,Current("Lots",OP_BUY)-Current("Lots",OP_SELL),Bid,30);
        }
       } 
       if(ty==OP_SELL)
       {
        if(Current("Lots",OP_SELL)>Current("Lots",OP_BUY)&&Current("Profit",OP_SELL)>0
        &&Ask<=op-PartialProfit*point&&closecount<1)
        {  
         close=OrderClose(tk,Current("Lots",OP_SELL)-Current("Lots",OP_BUY),Ask,30);
        }
       } 
      }  
     }
    }

صفحة 244 من 250 الأولىالأولى ... 144194234242243244245246 ... الأخيرةالأخيرة

العلامات المرجعية

العلامات المرجعية

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •