عرض مشاركة واحدة
قديم 05-01-2014, 11:31 AM   المشاركة رقم: 194
الكاتب
اسلام العوامى
عضو ذهبى
الصورة الرمزية اسلام العوامى

البيانات
تاريخ التسجيل: Apr 2012
رقم العضوية: 9148
الدولة: alexandria - egypt
المشاركات: 5,888
بمعدل : 1.24 يوميا

الإتصالات
الحالة:
اسلام العوامى غير متواجد حالياً
وسائل الإتصال:

كاتب الموضوع : اسلام العوامى المنتدى : منتدى المؤشرات و الاكسبيرتات
افتراضي رد: موضوع مخصص للاسئلة والاستفسارات الخاصة بدورة تعليم البرمجة الاحترافية بلغة mql4

المشاركة الأصلية كتبت بواسطة sunegypt نقره لعرض الصورة في صفحة مستقلة
السلام عليكم ورحمه الله تعالى وبركاته

استاذى الكريم اسلام

انا الان عندى داله تغلق الصفقات الرابحه فقط كما طلبتها منك قبل ذلك

كود:
void }CloseProfitOnly(int type)
{
 for(int i=OrdersTotal()-1;i>=0;i--)
 {
  OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
  if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
  {
   if(OrderType()==OP_BUY&&OrderProfit()>0)
   {
    OrderClose(OrderTicket(),OrderLots(),Bid,3*Q);
   }
   if(OrderType()==OP_SELL&&OrderProfit()>0)
   {
    OrderClose(OrderTicket(),OrderLots(),Ask,3*Q);
    
    
   }
  }
 }
}
أنا الان أريد داله اخرى مشابهه لهذه الداله ولكن بتغيير بسيط

فأنا أريد داله تقوم بأغلاق أقل صفقه رابحه حجما وليس كل الصفقات الرابحه كما فى هذه الداله

وأيضا أريد داله تقوم بأغلاق أكبر صفقه رابحه حجما ...

يعنى المطلوب دالتيين

واحده لاغلاق اقل صفقه رابحه فقط

وأخرى لاغلاق أكبر صفقه رابحه

لاجراء بعض الاختبارات فى بعض الاكسبيرتات عندى

أرجوا ان تكون فكرتى وصلتك استاذى اسلام

منتظر ردك استاذى الغالى

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

،،،اولا سوف تحتاج الى دالة لمعرفة اكبر ربح موجود،،،

كود:
double MaxProfit()
{
    for(int i = OrdersTotal() - 1; i >= 0; i--) 
       {                                                       
       if( OrderSelect(i, SELECT_BY_POS) &&  OrderMagicNumber()== MagicNumber &&  OrderSymbol()== Symbol()  ) 
         {
         if( iBarShift(NULL,0,OrderOpenTime(),false) > 1 )
            {
            double Max_Profit = MathMax(Max_Profit,OrderProfit() );
            }
         else
            {
             Max_Profit = OrderProfit(); 
            }
         
         }
         }
         return(Max_Profit);
}
،،،بعد ذلك تحتاج الى دالة تقوم بالمرور على الصفقات واختيار صفقة واحدة ربحها اكبر من او يساوى اعلى ربح وتقوم باغلاقها،،،

كود:
void CloseMaxProfit()
{
   int ticket;
   
   double profit = MaxProfit();
   
  
        for (int i =1 ;i>0;i--)  
   
           {
   
             for (int x = OrdersTotal()-1;x>0;x--) 
              
        
                {
   
                OrderSelect(x,SELECT_BY_POS);
   
                if (OrderProfit() >= profit) ticket = OrderTicket();
                      
   
                }
                    
                            
             OrderSelect(ticket,SELECT_BY_TICKET); 
   
             if (OrderType() == OP_BUY)
             OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),NULL);
             if (OrderType() == OP_SELL)
             OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),NULL);    
            
                  
          }
       
  }



التوقيع

عرض البوم صور اسلام العوامى  
رد مع اقتباس
  #194  
قديم 05-01-2014, 11:31 AM
اسلام العوامى اسلام العوامى غير متواجد حالياً
عضو ذهبى
افتراضي رد: موضوع مخصص للاسئلة والاستفسارات الخاصة بدورة تعليم البرمجة الاحترافية بلغة mql4

المشاركة الأصلية كتبت بواسطة sunegypt نقره لعرض الصورة في صفحة مستقلة
السلام عليكم ورحمه الله تعالى وبركاته

استاذى الكريم اسلام

انا الان عندى داله تغلق الصفقات الرابحه فقط كما طلبتها منك قبل ذلك

كود:
void }CloseProfitOnly(int type)
{
 for(int i=OrdersTotal()-1;i>=0;i--)
 {
  OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
  if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
  {
   if(OrderType()==OP_BUY&&OrderProfit()>0)
   {
    OrderClose(OrderTicket(),OrderLots(),Bid,3*Q);
   }
   if(OrderType()==OP_SELL&&OrderProfit()>0)
   {
    OrderClose(OrderTicket(),OrderLots(),Ask,3*Q);
    
    
   }
  }
 }
}
أنا الان أريد داله اخرى مشابهه لهذه الداله ولكن بتغيير بسيط

فأنا أريد داله تقوم بأغلاق أقل صفقه رابحه حجما وليس كل الصفقات الرابحه كما فى هذه الداله

وأيضا أريد داله تقوم بأغلاق أكبر صفقه رابحه حجما ...

يعنى المطلوب دالتيين

واحده لاغلاق اقل صفقه رابحه فقط

وأخرى لاغلاق أكبر صفقه رابحه

لاجراء بعض الاختبارات فى بعض الاكسبيرتات عندى

أرجوا ان تكون فكرتى وصلتك استاذى اسلام

منتظر ردك استاذى الغالى

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

،،،اولا سوف تحتاج الى دالة لمعرفة اكبر ربح موجود،،،

كود:
double MaxProfit()
{
    for(int i = OrdersTotal() - 1; i >= 0; i--) 
       {                                                       
       if( OrderSelect(i, SELECT_BY_POS) &&  OrderMagicNumber()== MagicNumber &&  OrderSymbol()== Symbol()  ) 
         {
         if( iBarShift(NULL,0,OrderOpenTime(),false) > 1 )
            {
            double Max_Profit = MathMax(Max_Profit,OrderProfit() );
            }
         else
            {
             Max_Profit = OrderProfit(); 
            }
         
         }
         }
         return(Max_Profit);
}
،،،بعد ذلك تحتاج الى دالة تقوم بالمرور على الصفقات واختيار صفقة واحدة ربحها اكبر من او يساوى اعلى ربح وتقوم باغلاقها،،،

كود:
void CloseMaxProfit()
{
   int ticket;
   
   double profit = MaxProfit();
   
  
        for (int i =1 ;i>0;i--)  
   
           {
   
             for (int x = OrdersTotal()-1;x>0;x--) 
              
        
                {
   
                OrderSelect(x,SELECT_BY_POS);
   
                if (OrderProfit() >= profit) ticket = OrderTicket();
                      
   
                }
                    
                            
             OrderSelect(ticket,SELECT_BY_TICKET); 
   
             if (OrderType() == OP_BUY)
             OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),NULL);
             if (OrderType() == OP_SELL)
             OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),NULL);    
            
                  
          }
       
  }




رد مع اقتباس