مشاهدة النسخة كاملة : ممكن شرح الكود بالتفصيل
mahmoud1111
21-06-2018, 09:06 PM
مرحبا اخوتي ارجو ان يتم شرح الكود التالي 
     }
     if((iBullsPower(NULL,0,13,PRICE_CLOSE,3)<iBullsPower(NULL,0,13,PRICE_CLOSE,2))&&(iBullsPower(NULL,0,13,PRICE_CLOSE,2)<iBullsPower(NULL,0,13,PRICE_CLOSE,1))&&(iBearsPower(NULL,0,13,PRICE_CLOSE,3)>iBearsPower(NULL,0,13,PRICE_CLOSE,2))&&(iBearsPower(NULL,0,13,PRICE_CLOSE,2)>iBearsPower(NULL,0,13,PRICE_CLOSE,1))&&(iBullsPower(NULL,0,13,PRICE_CLOSE,0)<0)) // Here is your open Sell rule
     {
        result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);
        }
        return(0);
     }
  }
  
  for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber 
         )  
        {
         if(OrderType()==OP_BUY)  
           {
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyP oint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
}
int TotalOrdersCount()
{
  int result=0;
  for(int i=0;i<OrdersTotal();i++)
  {
     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result++;
   }
  return (result);
kira-h
22-06-2018, 06:18 PM
السلام عليكم
ارفق الكود بملف mql أو ضعه ضمن صيغة CODE بالمشاركة حتى يكون الكود منتظم
عموما الاكسبيرت يعتمد على مؤشرين BullsPower و BearsPower وشرط البيع يكون بمؤشر BullsPower  البار 3 أصغر من البار 2 و البار 2 اصغر من البار 1 والبار الحالي أصغر من الصفر + بمؤشر BearsPower يكون البار 3 أكبر من البار 2 و البار 2 أكبر من البار 1 
ثم يوجد دالة التريلينغ ستوب ودالة حساب عدد الصفقات المفعلة
mahmoud1111
22-06-2018, 09:24 PM
جزاك الله خيرا
kira-h
23-06-2018, 03:44 PM
بالتوفيق إن شاء الله
shivaa
24-12-2021, 06:03 PM
مرحبا اخوتي ارجو ان يتم شرح الكود التالي 
     }
     if((iBullsPower(NULL,0,13,PRICE_CLOSE,3)<iBullsPow   er(NULL,0,13,PRICE_CLOSE,2))&&(iBullsPower(NULL,0,   13,PRICE_CLOSE,2)<iBullsPower(NULL,0,13,PRICE_CLOS   E,1))&&(iBearsPower(NULL,0,13,PRICE_CLOSE,3)>iBear   sPower(NULL,0,13,PRICE_CLOSE,2))&&(iBearsPower(NUL   L,0,13,PRICE_CLOSE,2)>iBearsPower(NULL,0,13,PRICE_   CLOSE,1))&&(iBullsPower(NULL,0,13,PRICE_CLOSE,0)<0  )) //  Here is your open Sell rule
     {
        result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag  e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),Normali   zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa   keProfit,Digits),0,Green);
        }
        return(0);
     }
  }
  
  for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber 
         )  
        {
         if(OrderType()==OP_BUY)  
           {
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyP  oint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
}
int TotalOrdersCount()
{
  int result=0;
  for(int i=0;i<OrdersTotal();i++)
  {
     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result++;
   }
  return (result)
kira-h
24-12-2021, 08:19 PM
السلام عليكم 
الشرح بالكود :
if((iBullsPower(NULL,0,13,PRICE_CLOSE,3)<iBullsPower(NULL,0,13,PRICE_CLOSE,2))//قيمة مؤشر الثيران بالشمعة 3 اصغر من قيمته بالشمعة 2
   &&(iBullsPower(NULL,0,13,PRICE_CLOSE,2)<iBullsPower(NULL,0,13,PRICE_CLOSE,1))//قيمة مؤشر الثيران بالشمعة 2 اصغر من قيمته بالشمعة 1
   &&(iBearsPower(NULL,0,13,PRICE_CLOSE,3)>iBearsPower(NULL,0,13,PRICE_CLOSE,2))//قيمة مؤشر الذببة بالشمعة 3 اكبر من قيمته بالشمعة 2
   &&(iBearsPower(NULL,0,13,PRICE_CLOSE,2)>iBearsPower(NULL,0,13,PRICE_CLOSE,1))//قيمة مؤشر الذببة بالشمعة 2 اكبر من قيمته بالشمعة 1
   &&(iBullsPower(NULL,0,13,PRICE_CLOSE,0)<0))//قيمة مؤشر الثيران بالشمعة الحالية اصغر من الصفر
//  Here is your open Sell rule
  {
   result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);//دالة تنفيذ امر البيع
   if(result>0)//بعد فتح الصفقة
     {
      TheStopLoss=0;
      TheTakeProfit=0;
      if(TakeProfit>0)//شروط الهدف
         TheTakeProfit=Bid-TakeProfit*MyPoint;//معادلة الهدف
      if(StopLoss>0)//شروط الوقف
         TheStopLoss=Bid+StopLoss*MyPoint;//معادلة الوقف
      OrderSelect(result,SELECT_BY_TICKET);//تحديد الصفقة المفتوحة
      OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);//ليتم تعديل الهدف والوقف 
     }
   return(0);
  }
ملحوظة : 
ترقيم الشموع برمجيا يبدأ من آخر شمعة، يعني :
الشمعة 0 هي آخر شمعة التي لم تغلق بعد (الشمعة الحالية)
الشمعة 1 هي آخر شمعة مغلقة 
الشمعة 2 هي الشمعة التي قبل الشمعة 1 
وهكذا ... 
//---------------------------------------------------
ثم يليه دالة الترلينيغ ستوب :
for(int cnt=0; cnt<OrdersTotal(); cnt++)// لوب الصفقات المفتوحة
  {
   OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);//البحث بالصفقات المفتوحة
   if(OrderType()<=OP_SELL &&//شرط التنفيذ بصفقات البيع او الشراء الماركت
      OrderSymbol()==Symbol() &&//على الزوج الحالي 
      OrderMagicNumber()==MagicNumber//بماجك نمبر محدد
     )
     {
      if(OrderType()==OP_BUY)//إذا كانت الصفقات شراء
        {
         if(TrailingStop>0)//بعد تفعيل الترلينغ إذا كان اكبر من الصفر
           {
            if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)//إذا كان فرق السعر الحالي وسعر افتتاح الصفقة أكبر من قيمة التريلينغ ستوب 
              {
               if(OrderStopLoss()<Bid-MyPoint*TrailingStop)//والستوب اصغر من سعر الترلينغ ستوب 
                 {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);//يتم تنفيذ تعديل الوقف الى سعر الترلينغ ستوب 
                  return(0);
                 }
              }
           }
        }
      else//نفس الشيء إذا كانت الصفقات بيع 
        {
         if(TrailingStop>0)
           {
            if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
              {
               if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                 {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyP oint*TrailingStop,OrderTakeProfit(),0,Red);//وظيفة تعديل 
                  return(0);
                 }
              }
           }
        }
     }
  }
//---------------------------------------------------
ثم يليه دالة حساب عد الصفقات المفتوحة :
int TotalOrdersCount()//دالة حساب عدد الصفقات المفتوحة
  {
   int result=0;// عدد الصفقات مبدئيا 0 
   for(int i=0; i<OrdersTotal(); i++)//لوب عدد الصفقات
     {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);//البحث بالصفقات المفتوحة
      if(OrderMagicNumber()==MagicNumber)//إذا كانت الصفقات ذات ماجك نمبر محدد
         result++;//يحسب عددها 
     }
   return (result)//والدالة تعود بنتيجة الحساب 
   }