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


صفحة 245 من 251 الأولىالأولى ... 145195235243244245246247 ... الأخيرةالأخيرة
النتائج 2,441 إلى 2,450 من 2509

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

  1. #2441

    افتراضي

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

  2. #2442

    افتراضي

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

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

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

    بس انا بقا عايز ان اذا فتح صفتين الشراء اوصفقتين البيع ميفتحش صفقات تانى من نوعه يعنى الشراء لوحده والبيع لوحده الا اذا عكس على اخر صفقة تفعلت شراء او بيع مسافة الاستيب ولو حصل يبداء يدخل من تانى صفتين اللى هما maxtrade ونفس الكلام علي البيع ويكمل على نفس الطريقه دى علطول
    ذلك الشرط خاص فقط بدالة التبريد يعني بعد وجود صفقة (أو صفقات) مفتوحة من نفس النوع
    وعند تحقق شرط المسافة يفتح الصفقة ولكن لا يمكن فتح العدد المتبقي لأنه تغير سعر آخر صفقة (لا تنسى انه فتح صفقة) وبالتالي شرط المسافة لم يعد محقق، لهذا استخدام حجم العقد اكثر دقة وبدون تعقيد، لماذا تريد استخدام العدد؟!
    ارفق التعديل الذي قمت به للتصحيح

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة kira-h مشاهدة المشاركة
    ذلك الشرط خاص فقط بدالة التبريد يعني بعد وجود صفقة (أو صفقات) مفتوحة من نفس النوع
    وعند تحقق شرط المسافة يفتح الصفقة ولكن لا يمكن فتح العدد المتبقي لأنه تغير سعر آخر صفقة (لا تنسى انه فتح صفقة) وبالتالي شرط المسافة لم يعد محقق، لهذا استخدام حجم العقد اكثر دقة وبدون تعقيد، لماذا تريد استخدام العدد؟!
    ارفق التعديل الذي قمت به للتصحيح

    انا فاهم انت تقصد ايه بس انا شرحت اللى انا محتاجه بصوره ممكن يكون اوضح

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



    اذا فى كود ماكس تريد ينفذ هذه الطريقه ياريت اخى يكون فضل كبير منك
    الصور المرفقة الصور المرفقة  

  4. #2444

    افتراضي

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

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



    اذا فى كود ماكس تريد ينفذ هذه الطريقه ياريت اخى يكون فضل كبير منك
    اخي الكريم ردي السابق واضح جدا وقلت انه غير ممكن بشكل بسيط لان الامر معقد تحتاج لعمل مصفوفة ودوال اخرى لتقييد الستيب بالعدد هذا اذا كانت المصفوفة متوافقة مع استراتيجية الاكسبيرت يعني محتاج مراجعة للكود كاملا ....
    لكن استفسرت عن اهمية العدد ولماذا ؟ حتى افهم وليس فقط مجرد سؤال برمجي دون معرفة الهدف من ورائه!
    التعديل الأخير تم بواسطة kira-h ; 22-07-2019 الساعة 03:38 AM

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

    افتراضي

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

    لان كل صفقه عايز تكون بلوت مختلف يعنى

    الصفقه 1 لها لوت خاص بها
    الصفقه 2 لها لوت خاص بها
    الصفقه 3 لها لوت خاص بها
    الصفقه 4 لها لوت خاص بها
    هكذا

    استراتيجية الاكسبيرت ايضاً تعمل على استيب لفتح الصفقات ويوجد فرص كتير يتحقق فيها شروط الدخول وحتى اقدر تحديد افضل اعدادات لعدد الصفقات المناسب لرأس المال اللى هيشتغل عليه الاكسبيرت مثلاً 5 صفقات كل ستيب او صفقتين هكذا دا الغرض من عدد الصفقات
    او اذا احتاجت ان كل اللوت تكون 0.01 بدون مضاعفات يكون بامكانى فعل ذلك

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

    افتراضي

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

    الصفقه 1 لها لوت خاص بها
    الصفقه 2 لها لوت خاص بها
    الصفقه 3 لها لوت خاص بها
    الصفقه 4 لها لوت خاص بها
    هكذا

    استراتيجية الاكسبيرت ايضاً تعمل على استيب لفتح الصفقات ويوجد فرص كتير يتحقق فيها شروط الدخول وحتى اقدر تحديد افضل اعدادات لعدد الصفقات المناسب لرأس المال اللى هيشتغل عليه الاكسبيرت مثلاً 5 صفقات كل ستيب او صفقتين هكذا دا الغرض من عدد الصفقات
    او اذا احتاجت ان كل اللوت تكون 0.01 بدون مضاعفات يكون بامكانى فعل ذلك
    ده الكود اخى حسن


    كود:
    //+------------------------------------------------------------------+
    //|                                                     ScalperV1.mq4 |
    //|                   Copyright 2005-2014, MetaQuotes Software Corp. |
    //|                                              https://www.mql4.com |
    //+------------------------------------------------------------------+
    #property copyright   "2005-2014, MetaQuotes Software Corp."
    #property link        "https://www.mql4.com"
    #property description "ScalperV1 expert advisor"
    
    enum OrdersTy 
    { 
       BuyOnly=0,      
       SellOnly=1,     
       BuySellBoth=2,  
    }; 
    
    
    
    
    input string  INFO="0 Buy - 1 Sell - 2 Both";
    extern int OrdersT = 2;
    extern double  LotsBuy = 0.01;
    extern double  LotsSell = 0.01;
    extern int MaxSpread  = 4;
    input bool  CloseAtNext=false;
    extern int MaxTrades= 2; 
    extern int GapSize  = 0;
    extern int StopLoss  = 0;
    extern int TakeProfit  = 0;
    extern int TrailingStop=0;
    extern  int TrailingStep=0;
    extern int BreakEven=0;
    input int BreakEvenPips=0;
    extern int USDP=0;
    extern int USDL=0;  
    extern int MagicNumber   = 555555;
    
    
    //---------     
    
    
    double       LotsB_1=0.02,
                 LotsB_2=0.03,
                 LotsB_3=0.04,
                 LotsB_4=0.05,
                 LotsB_5=0.06,
                 LotsB_6=0.07,
                 LotsB_7=0.08,
                 LotsB_8=0.09,
                 LotsB_9=0.1,
                 LotsB_10=0.11,
                 LotsB_11=0.12,
                 LotsB_12=0.13,
                 LotsB_13=0.14,
                 LotsB_14=0.15,
                 LotsB_15=0.16,
                 LotsB_16=0.17,
                 LotsB_17=0.18,
                 LotsB_18=0.19,
                 LotsB_19=0.20,
                 LotsB_20=0.21;  
                 
                 
                 
    double       LotsS_1=1.1,
                 LotsS_2=2.0,
                 LotsS_3=3.0,
                 LotsS_4=4.0,
                 LotsS_5=5.0,
                 LotsS_6=6.0,
                 LotsS_7=7.0,
                 LotsS_8=8.0,
                 LotsS_9=9.0,
                 LotsS_10=10.0,
                 LotsS_11=11.0,
                 LotsS_12=12.0,
                 LotsS_13=13.0,
                 LotsS_14=14.0,
                 LotsS_15=15.0,
                 LotsS_16=16.0,
                 LotsS_17=17.0,
                 LotsS_18=18.0,
                 LotsS_19=19.0,
                 LotsS_20=20.0; 
                                                       
    
    
    
    int CheckStep = GapSize;             
                 
     int EMA1 = 50;
     int EMA2 = 100;
    ENUM_APPLIED_PRICE apply1 = PRICE_CLOSE;
    ENUM_APPLIED_PRICE apply2 = PRICE_CLOSE;
    
    
    double buyMM = 2;
    double sellMM = 2;
    
    
    string commentSell, commentBuy, NewLotsSell, NewLotsBuy;
    double p,SL,TP,NewLots;
    int    LimitBuy, LimitSell;
    double lotaB,lotaS,LB,LS;
    double UT1, DW1,point;
    int      Q,digits;
    
    
    datetime time=0;
    datetime BarTime;
    
     double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};  
     double chain2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};  
     
    
    void OnInit()
    {
     
     
     
      if(Digits==4 || Digits<=2) point=Point;
       if(Digits==5 || Digits==3) point=Point*10;
       
         
    
    }
    
    
    //+------------------------------------------------------------------+
    //| OnTick function                                                  |
    //+------------------------------------------------------------------+
    void OnTick()
    {
           
    
     if(TrailingStop>0)MoveTrailingStop();
       if(BreakEven>0)MoveBreakEven();
               if((USDP!=0&&Profit_By_USD()>=USDP)
                   ||(USDL!=0&&Profit_By_USD()<=-USDL)){CloseOrders();} 
                    
                 
         
                     
    if(Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
    if(Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)
    
       if(Bars<100 || IsTradeAllowed()==false) 
          return;
          
    double Fast_1=iMA(NULL,0,EMA1,50,MODE_SMMA,apply1,0);
    double Fast_2=iMA(NULL,0,EMA2,200,MODE_SMMA,apply2,0);
       
       
       
     
     chain[1]=LotsB_1; 
     chain[2]=LotsB_2; 
     chain[3]=LotsB_3; 
     chain[4]=LotsB_4; 
     chain[5]=LotsB_5; 
     chain[6]=LotsB_6; 
     chain[7]=LotsB_7; 
     chain[8]=LotsB_8; 
     chain[9]=LotsB_9;
     chain[10]=LotsB_10; 
     chain[11]=LotsB_11; 
     chain[12]=LotsB_12; 
     chain[13]=LotsB_13; 
     chain[14]=LotsB_14; 
     chain[15]=LotsB_15; 
     chain[16]=LotsB_16; 
     chain[17]=LotsB_17; 
     chain[18]=LotsB_18; 
     chain[19]=LotsB_19; 
     chain[20]=LotsB_20;
    
    
    
     if(LastPrice(OP_BUY)&&(Closed("Profit")<=0))
     if(Closed("Profit")>=0&&(HistoryOrders()==0||(HistoryOrders()>0)))NewLots=LotsBuy;
     {
      NewLotsBuy=chain[LEVEL()+1];
      commentBuy=DoubleToStr(LEVEL()+1,0);
       }
     if(LastOrder("Profit")>=0){NewLotsBuy=LotsBuy;commentBuy="0";} 
    
    
    
     chain2[1]=LotsS_1; 
     chain2[2]=LotsS_2; 
     chain2[3]=LotsS_3; 
     chain2[4]=LotsS_4; 
     chain2[5]=LotsS_5; 
     chain2[6]=LotsS_6; 
     chain2[7]=LotsS_7; 
     chain2[8]=LotsS_8; 
     chain2[9]=LotsS_9;
     chain2[10]=LotsS_10; 
     chain2[11]=LotsS_11; 
     chain2[12]=LotsS_12; 
     chain2[13]=LotsS_13; 
     chain2[14]=LotsS_14; 
     chain2[15]=LotsS_15; 
     chain2[16]=LotsS_16; 
     chain2[17]=LotsS_17; 
     chain2[18]=LotsS_18; 
     chain2[19]=LotsS_19; 
     chain2[20]=LotsS_20;
    
    
    
     
      if(LastPrice(OP_SELL)&&(Closed("Profit")<=0))
     {
      NewLotsSell=chain2[LEVEL2()+1];
      commentSell=DoubleToStr(LEVEL2()+1,0);
       }
     if(LastOrder("Profit")>=0){NewLotsSell=LotsSell;commentSell="0";} 
     
     
     
    
       //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(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
            if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;             
            if(TotalOrders(OP_BUY)<MaxTrades)
         int rBuy=OrderSend(Symbol(),OP_BUY,NewLotsBuy,NormalizeDouble(Ask,Digits),3*Q,SL,TP,commentBuy,MagicNumber,0,Blue); 
         if(rBuy>0)time=Time[0]; 
         BarTime=Time[0];
    
            
            
              } 
              }      
     
       
       
       //sell
       
       if (Bid <= (UT1 - sellMM * GapSize * point))    
       {
          DW1 = Fast_1; 
          buyMM = 2;
          sellMM++;
    
          
            if(CloseAtNext)CloseDeleteOrders(OP_BUY); 
            if(SellingEnabled() && WithinAllowableSpread()) { 
            if(Orderscnt()==0&&BarTime!=Time[0]) 
            if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
            if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
            if(TotalOrders(OP_SELL)<MaxTrades)
      int rSell=OrderSend(Symbol(),OP_SELL,NewLotsSell,NormalizeDouble(Bid,Digits),3*Q,SL,TP,commentSell,MagicNumber,0,Red);
      if(rSell>0)time=Time[0]; 
      BarTime=Time[0];
          
    
    }
     }
     }
     
       
     
    
    bool SellingEnabled()
    {
       if( (OrdersT == SellOnly) || (OrdersT == BuySellBoth) )
          return true;
       return false;
    }
    
    bool BuyingEnabled()
    {
       if( (OrdersT == BuyOnly) || (OrdersT == BuySellBoth) )
          return true;
       return false;
    }
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS               Max Spread                    |
    //+------------------------------------------------------------------+ 
    
    
    
    bool WithinAllowableSpread()
    {
       if(MaxSpread == 0)
          return true;
    
       if( Ask-Bid > MaxSpread * point)
          return false;
    
       return true;
    }
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS                                             |
    //+------------------------------------------------------------------+ 
    
    
    void line(string name, double pr1,color clrr, int style)
    {
       if(ObjectFind(name) != 0)
       {
          ObjectCreate(name, OBJ_HLINE, 0, 0,pr1);
          ObjectSet(name, OBJPROP_COLOR, clrr);
          ObjectSet(name, OBJPROP_STYLE, style);
       } 
       else if(ObjectGet(name,OBJPROP_PRICE1)!=pr1)
       {
          ObjectDelete(name);
       }
    }
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS           Trailing Stop                     |
    //+------------------------------------------------------------------+ 
    
    
    void MoveTrailingStop()
    {
       
       for(int cnt=0;cnt<OrdersTotal();cnt++)
       {
          if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
          if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(OrderType()==OP_BUY)
             {
                if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*point,Digits))  
                {                 
                   if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
                   {
                      bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blue);
                    
                   }
                }
             }
             else 
             {
                if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,Digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,Digits))  
                {                 
                   if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+TrailingStop*point,Digits)))||(OrderStopLoss()==0))
                   {
                      bool mnm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*point,Digits),OrderTakeProfit(),0,Red);
                    
                   }
                }
             }
          }
       }
    }
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS          Break Even                         |
    //+------------------------------------------------------------------+ 
    
    
    void MoveBreakEven() 
    {
       int cnt,total=OrdersTotal();
       for(cnt=0;cnt<total;cnt++)
       {
          if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
          if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(OrderType()==OP_BUY)
             {
                if(BreakEven>0)
                {
                   if(NormalizeDouble((Bid-OrderOpenPrice()),Digits)>BreakEven*point)
                   {
                      if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||(OrderStopLoss()==0))
                      {
                         bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+BreakEvenPips*point,Digits),OrderTakeProfit(),0,Blue);
                      
                      }
                   }
                }
             }
             else
             {
                if(BreakEven>0)
                {
                   if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*point)
                   {
                      if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||(OrderStopLoss()==0))
                      {
                         bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-BreakEvenPips*point,Digits),OrderTakeProfit(),0,Red);
                   
                      }
                   }
                }
             }
          }
       }
    }
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS  To Know The Profit Of Open Positions       |
    //+------------------------------------------------------------------+ 
    
    
    double Profit_By_USD(int type=-1)  
    {
     double pts;
     for(int i=0;i<OrdersTotal();i++) 
     {
      bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      string sy=OrderSymbol();
      int    mn=OrderMagicNumber(),
             ot=OrderType();
      double pt=OrderProfit(),
             sw=OrderSwap(),
             cm=OrderCommission();  
      if(sy==Symbol()&&mn==MagicNumber)
      {
       if(ot==type||type==-1)
       {
        pts+=pt+sw+cm;
       }
      }
     }  
     return(pts);
    }  
    
     
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS         Closing Trades Together             |
    //+------------------------------------------------------------------+ 
    
    
    void CloseOrders(int type=-1) 
    {
     bool select,close,del;
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
      {
       if(OrderType()==type||type==-1)
       {
        if(OrderType()==OP_BUY){close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q);}
        if(OrderType()==OP_SELL){close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q);}
        if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
       } 
      }
     }
    }  
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS            HiddenTP                         |
    //+------------------------------------------------------------------+ 
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS    ´      HiddenSL                          |
    //+------------------------------------------------------------------+ 
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS         To Know Total Orders                |
    //+------------------------------------------------------------------+ 
     
     
    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()&&MagicNumber==OrderMagicNumber()&&OrderType()==type)
       {
        cnt++;
       }
      }
     }
     return(cnt);
    }  
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS       Close Delete Orders                   |
    //+------------------------------------------------------------------+ 
    
    void CloseDeleteOrders(int type)
    {
     bool select,close;
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
       if(OrderType()==type)
       {
        if(OrderType()==OP_BUY)  
        {
         close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q);      
        }
        if(OrderType()==OP_SELL)  
        {
         close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q);
        }
        if(OrderType()>OP_SELL)   
        {
         close=OrderDelete(OrderTicket());
        }
       } 
      }
     }
    
    
    //دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها
    double LastPrice(int type)
    {
     int cnt;
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
      {
       cnt++;
       if(cnt>=2)
       return(OrderOpenPrice());
      }
     }
     return(0);
    }  
    
    
    
    /*
    //دالة اغلاق الصفقات بدلالة النوع
    void CloseOrders(int type=-1)
    {
     bool select,close;
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      string sy=OrderSymbol();
      int    tt=OrdersTotal(),
             tk=OrderTicket(),
             ot=OrderType(),
             mn=OrderMagicNumber();
      double lo=OrderLots();
      if(tt>0&&sy==Symbol()&&mn==MagicNumber)
      {
       if(ot==type||type==-1)
       {
        if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDouble(Bid,Digits),5*Q);}
        if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDouble(Ask,Digits),5*Q);}
        if(ot>OP_SELL){close=OrderDelete(tk);}
       } 
      }
     }
    }
    */
    
    //دالة لمعرفة نوع آخر صفقة مغلقة
    int LastType()
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool   select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string sy=OrderSymbol();
      int    mn=OrderMagicNumber(),
             ty=OrderType();      
      if(sy==Symbol()&&mn==MagicNumber)
      {
       return(ty); 
      }
     }
     return(0);
    }
    
    
    
    //دالة لمعرفة توقيت اغلاق آخر صفقة بدلالة نوعها
    
    datetime LastTime(int type=-1)
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool   select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string sy=OrderSymbol();
      int    mn=OrderMagicNumber(),
             ty=OrderType();
      double pt=OrderProfit();
      datetime ct=OrderCloseTime();         
      if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
      {
       return(ct); 
      }
     }
     return(0);
    }
    
    
    
    //دالة لمعرفة ربح آخر صفقة مغلقة بدلالة نوعها
    
    double LastProfit(string info,int type=-1)
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool   select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string sy=OrderSymbol();
      int    mn=OrderMagicNumber(),
             ty=OrderType();
      double pt=OrderProfit();
      datetime ct=OrderCloseTime();         
      if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
      {
      if(info=="Profit")return(pt);
       
      }
     }
     return(0);
    }
    
    
    
    
    datetime FirstClose()
    {
      for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool     select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string   sy=OrderSymbol();
      int      mn=OrderMagicNumber(),
               ty=OrderType();
      double   lo=OrderLots();
      datetime om=OrderOpenTime();    
      if(sy==Symbol()&&mn==MagicNumber&&lo==LotsBuy)
        if(sy==Symbol()&&mn==MagicNumber&&lo==LotsSell)
      {
       return(om);
      }
     }
     return(0);
    }
    
    
    
    double TotalProfit() 
    {
     double pts=0;
     for(int i=0;i<OrdersHistoryTotal();i++) 
     {
      bool     s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string   sy=OrderSymbol();
      int      mn=OrderMagicNumber();
      double   pt=OrderProfit(),
               sw=OrderSwap(),
               cm=OrderCommission();  
      datetime om=OrderCloseTime();
             
      if(sy==Symbol()&&mn==MagicNumber&&om>FirstClose())
      {
       pts+=pt+sw+cm;
      }
     }  
     return(pts);
    }
    
    
    
    double LastOrder(string info,int type=-1)
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string   sy=OrderSymbol(),
               mm=OrderComment();
      int      mn=OrderMagicNumber(),
               ty=OrderType();
      double   lo=OrderLots(),
               op=OrderOpenPrice(),
               cp=OrderClosePrice(),
               pt=OrderProfit(),
               tp=OrderTakeProfit(),
               sl=OrderStopLoss();  
      datetime om=OrderOpenTime(),
               cm=OrderCloseTime();
                        
      if(sy==Symbol()&&mn==MagicNumber)
      {
       if(ty==type||type==-1)
       {
        if(info=="Lots")return(lo);
        else if(info=="OpenPrice")return(op);
        else if(info=="ClosePrice")return(cp);
        else if(info=="Profit")return(pt);
        else if(info=="Type")return(ty);
        else if(info=="TP")return(tp);
        else if(info=="SL")return(sl);
        else if(info=="OpenTime")return(om);
        else if(info=="CloseTime")return(cm);
        else if(info=="Comment")return(mm);
       }
      } 
     }
     return(0);
    }  
    
     
     
     int TotalOrders(int type=-1)
    {
     int cnt=0;
     for(int i =0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
       {
        cnt++;
       }
      }
     }
     return(cnt);
    }
    
    
      
      
      
    double Closed(string info,int type=-1)
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string   sy=OrderSymbol(),
               mm=OrderComment();
      int      mn=OrderMagicNumber(),
               ty=OrderType();
      double   lo=OrderLots(),
               pt=OrderProfit(),
               op=OrderOpenPrice(),
               cp=OrderClosePrice(),
               tp=OrderTakeProfit(),
               sl=OrderStopLoss();   
                        
      if(sy==Symbol()&&mn==MagicNumber)
      {
       if(ty==type||type==-1)
       {
        if(info=="Lots")return(lo);
        else if(info=="Profit")return(pt);
        else if(info=="Type")return(ty);
        else if(info=="OpenPrice")return(op);
        else if(info=="ClosePrice")return(cp);
        else if(info=="TP")return(tp);
        else if(info=="SL")return(sl);
       }
      } 
     }
     return(0);
    }
    
    
    
    
    double CurrentLots(int type=-1)
    {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      string   sy=OrderSymbol(),
               mm=OrderComment();
      int      mn=OrderMagicNumber(),
               ty=OrderType();
      double   lo=OrderLots();  
                        
      if(sy==Symbol()&&mn==MagicNumber)
      {
       if(ty==type||type==-1)
       {
        return(lo);
       }
      } 
     }
     return(0);
    }
    
    
    
    
    int HistoryOrders(int type=-1)
    {
     int cnt=0;
     for(int i =0;i<OrdersHistoryTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
       if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
       {
        cnt++;
       }
      }
     }
     return(cnt);
    }
    
    
    
    double LastCurrent(string info,int type=-1)//دالة لمعرفة كل تفاصيل الصفقة المفعلة بدلالة النوع
    {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
      {
       if(info=="Type")return(OrderType());
       else if(info=="Lots")return(OrderLots());
       else if(info=="Price")return(OrderOpenPrice());
       else if(info=="TP")return(OrderTakeProfit());
       else if(info=="SL")return(OrderStopLoss());
       else if(info=="Profit")return(OrderProfit());
       else if(info=="Time")return(OrderOpenTime());
      }
     }
     return(0);
    }
    
    
    double LastOrderClosed(string info)//نتيجة آخر صفقة مغلقة والاكبر من حيث توقيت الفتح
    {
     double c=0;
     for(int i=OrdersHistoryTotal()-1;i>=0;i--) 
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL) 
      {                        
       if(OrderOpenTime()>c)c=OrderOpenTime();
       if(OrderOpenTime()==c)
       {
        if(info=="Profit")return(OrderProfit());
        else if(info=="Lots")return(OrderLots());
       }
      }  
     }
     return(0);
    }
    
    
    int Orderscnt()//دالة عدد الصفقات المفتوحة
    {
     int cnt=0;
     for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
       {
        cnt++;//عد الصفقات 
       }
      }
     }
     return(cnt);
    }
    
    
    
    
     void CloseAllOrders(int type=-1)
            {
             bool select,close,del;
             for(int i=OrdersTotal()-1;i>=0;i--)
             {
              select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
              string sy=OrderSymbol();
              int    tt=OrdersTotal(),
                     tk=OrderTicket(),
                     ot=OrderType(),
                     mn=OrderMagicNumber();
              double lo=OrderLots();
              if(tt>0)
              {
               if(ot==type||type==-1)
               {
                if(ot==OP_BUY){close=OrderClose(tk,lo,MarketInfo(sy,MODE_BID),50);}  
                if(ot==OP_SELL){close=OrderClose(tk,lo,MarketInfo(sy,MODE_ASK),50);}
                if(ot>OP_SELL){del=OrderDelete(tk);}
               } 
              }
             }
            }
    
    
    
    
    int LEVEL()
    { 
     int c; 
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      commentBuy=OrderComment();
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)  
      {              
       StringReplace(commentBuy,"[sl]","");                         
       c=StrToInteger(commentBuy); 
       
       
       return(c);
      }  
     } 
     return(c); 
    }  
    
    
    
    
    int LEVEL2()
    { 
     int c; 
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      commentSell=OrderComment(); 
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)  
      {              
        StringReplace(commentSell,"[sl]","");                         
       c=StrToInteger(commentSell); 
       
       
       return(c);
      }  
     } 
     return(c); 
    }

  7. #2447
    عضو
    تاريخ التسجيل
    Apr 2017
    المشاركات
    262

    افتراضي

    اخي حسن
    بحاول احسب المسافة بين البيع والشراء الاول وعلى اساسها تكون المسافة المعتمدة بين صفقات البيع والشراء لاحقاً
    عن طريق الدوال التالية :
    الاول عملت متغير يحسب المسافة

    كود:
     double dis_h2=(LastOrder("Price","Aymoon-h2",OP_BUY)-LastOrder("Price","Aymoon-h2",OP_SELL));
    ثانيا في شروط الدخول عملت الاتي :

    كود:
     if(Orderscnt("Aymoon-h2")<MaxTrades) {
      if(Orderscnt("Aymoon-h2",OP_BUY)>0&&Orderscnt("Aymoon-h2",OP_SELL)>0&&LastOrder("Type","Aymoon-h2")==OP_BUY)
      {
       if(Ask<=LastOrder("Price","Aymoon-h2",OP_SELL)-dis_h2)
       {
        if(Stoploss!=0)SL=Bid+Stoploss*point;else SL=0;
        if(Takeprofit!=0)TP=Bid-Takeprofit*point;else TP=0;
        ticket=OrderSend(Symbol(),OP_SELL,NewLots2,NormalizeDouble(Bid,Digits),3*Q,SL,TP,"Aymoon-h2",MagicNo,0,Magenta);
       }
      } 
      if(Orderscnt("Aymoon-h2",OP_BUY)>0&&Orderscnt("Aymoon-h2",OP_SELL)>0&&LastOrder("Type","Aymoon-h2")==OP_SELL)
      {
       if(Bid>=LastOrder("Price","Aymoon-h2",OP_BUY)+dis_h2)
       {
        if(Stoploss!=0)SL=Ask-Stoploss*point;else SL=0;
        if(Takeprofit!=0)TP=Ask+Takeprofit*point;else TP=0;
        ticket=OrderSend(Symbol(),OP_BUY,NewLots2,NormalizeDouble(Ask,Digits),3*Q,SL,TP,"Aymoon-h2",MagicNo,0,Green);
       }
      } 
     }
    لكن الل بيحصل ايه
    الاول بيفتح بيع عادي طبقا لشروط معينة انا عاملها ولما السعر يعكس المفروض انه يفتح شراء واحد فقط طبقا لشروط معينة ايضا وعلى اساسها يحسب المسافة بين الامرين ثم يفتح شراء وبيع طبقا للمسافات دي

    لكن الل بيحصل انه بيفتح 3 اوردرات بعد البيع الاول (2 شراء وواحد بيع من نفس السعر ونفس اللوت) بعد توافق شروط الشراء

    المشكلة فين هنا؟

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة kira-h مشاهدة المشاركة
    وعليكم السلام
    ستصبح الدوال والشروط كالتالي:
    كود:
    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);
        }
       } 
      }  
     }
    }

    الله يعطيك العافيه

    هنا ظهر خطا ؟؟؟ closecount=OrderCloseCount(op,ot);



  9. #2449

    افتراضي

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

    هنا ظهر خطا ؟؟؟ closecount=OrderCloseCount(op,ot);


    هذه الدالة موجودة سلفا بالحل السابق وهي كالتالي:
    كود:
    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);   
    }

  10. #2450

    افتراضي

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

    الصفقه 1 لها لوت خاص بها
    الصفقه 2 لها لوت خاص بها
    الصفقه 3 لها لوت خاص بها
    الصفقه 4 لها لوت خاص بها
    هكذا

    استراتيجية الاكسبيرت ايضاً تعمل على استيب لفتح الصفقات ويوجد فرص كتير يتحقق فيها شروط الدخول وحتى اقدر تحديد افضل اعدادات لعدد الصفقات المناسب لرأس المال اللى هيشتغل عليه الاكسبيرت مثلاً 5 صفقات كل ستيب او صفقتين هكذا دا الغرض من عدد الصفقات
    او اذا احتاجت ان كل اللوت تكون 0.01 بدون مضاعفات يكون بامكانى فعل ذلك



    في هذه الحالة يكفي استخدام عقد واحد عند كل مستوى، سيكون اكثر دقة في التنفيذ وسهل برمجيا
    اما إذا تريد مضاعفات التبريد فهذا موضوع آخر!

    اقتباس المشاركة الأصلية كتبت بواسطة aut مشاهدة المشاركة
    ده الكود اخى حسن


    كود:
    //+------------------------------------------------------------------+
    //|                                                     ScalperV1.mq4 |
    //|                   Copyright 2005-2014, MetaQuotes Software Corp. |
    //|                                              https://www.mql4.com |
    //+------------------------------------------------------------------+
    #property copyright   "2005-2014, MetaQuotes Software Corp."
    #property link        "https://www.mql4.com"
    #property description "ScalperV1 expert advisor"
    
    enum OrdersTy 
    { 
       BuyOnly=0,      
       SellOnly=1,     
       BuySellBoth=2,  
    }; 
    
    
    
    
    input string  INFO="0 Buy - 1 Sell - 2 Both";
    extern int OrdersT = 2;
    extern double  LotsBuy = 0.01;
    extern double  LotsSell = 0.01;
    extern int MaxSpread  = 4;
    input bool  CloseAtNext=false;
    extern int MaxTrades= 2; 
    extern int GapSize  = 0;
    extern int StopLoss  = 0;
    extern int TakeProfit  = 0;
    extern int TrailingStop=0;
    extern  int TrailingStep=0;
    extern int BreakEven=0;
    input int BreakEvenPips=0;
    extern int USDP=0;
    extern int USDL=0;  
    extern int MagicNumber   = 555555;
    
    
    //---------     
    
    
    double       LotsB_1=0.02,
                 LotsB_2=0.03,
                 LotsB_3=0.04,
                 LotsB_4=0.05,
                 LotsB_5=0.06,
                 LotsB_6=0.07,
                 LotsB_7=0.08,
                 LotsB_8=0.09,
                 LotsB_9=0.1,
                 LotsB_10=0.11,
                 LotsB_11=0.12,
                 LotsB_12=0.13,
                 LotsB_13=0.14,
                 LotsB_14=0.15,
                 LotsB_15=0.16,
                 LotsB_16=0.17,
                 LotsB_17=0.18,
                 LotsB_18=0.19,
                 LotsB_19=0.20,
                 LotsB_20=0.21;  
                 
                 
                 
    double       LotsS_1=1.1,
                 LotsS_2=2.0,
                 LotsS_3=3.0,
                 LotsS_4=4.0,
                 LotsS_5=5.0,
                 LotsS_6=6.0,
                 LotsS_7=7.0,
                 LotsS_8=8.0,
                 LotsS_9=9.0,
                 LotsS_10=10.0,
                 LotsS_11=11.0,
                 LotsS_12=12.0,
                 LotsS_13=13.0,
                 LotsS_14=14.0,
                 LotsS_15=15.0,
                 LotsS_16=16.0,
                 LotsS_17=17.0,
                 LotsS_18=18.0,
                 LotsS_19=19.0,
                 LotsS_20=20.0; 
                                                       
    
    
    
    int CheckStep = GapSize;             
                 
     int EMA1 = 50;
     int EMA2 = 100;
    ENUM_APPLIED_PRICE apply1 = PRICE_CLOSE;
    ENUM_APPLIED_PRICE apply2 = PRICE_CLOSE;
    
    
    double buyMM = 2;
    double sellMM = 2;
    
    
    string commentSell, commentBuy, NewLotsSell, NewLotsBuy;
    double p,SL,TP,NewLots;
    int    LimitBuy, LimitSell;
    double lotaB,lotaS,LB,LS;
    double UT1, DW1,point;
    int      Q,digits;
    
    
    datetime time=0;
    datetime BarTime;
    
     double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};  
     double chain2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};  
     
    
    void OnInit()
    {
     
     
     
      if(Digits==4 || Digits<=2) point=Point;
       if(Digits==5 || Digits==3) point=Point*10;
       
         
    
    }
    
    
    //+------------------------------------------------------------------+
    //| OnTick function                                                  |
    //+------------------------------------------------------------------+
    void OnTick()
    {
           
    
     if(TrailingStop>0)MoveTrailingStop();
       if(BreakEven>0)MoveBreakEven();
               if((USDP!=0&&Profit_By_USD()>=USDP)
                   ||(USDL!=0&&Profit_By_USD()<=-USDL)){CloseOrders();} 
                    
                 
         
                     
    if(Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
    if(Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)
    
       if(Bars<100 || IsTradeAllowed()==false) 
          return;
          
    double Fast_1=iMA(NULL,0,EMA1,50,MODE_SMMA,apply1,0);
    double Fast_2=iMA(NULL,0,EMA2,200,MODE_SMMA,apply2,0);
       
       
       
     
     chain[1]=LotsB_1; 
     chain[2]=LotsB_2; 
     chain[3]=LotsB_3; 
     chain[4]=LotsB_4; 
     chain[5]=LotsB_5; 
     chain[6]=LotsB_6; 
     chain[7]=LotsB_7; 
     chain[8]=LotsB_8; 
     chain[9]=LotsB_9;
     chain[10]=LotsB_10; 
     chain[11]=LotsB_11; 
     chain[12]=LotsB_12; 
     chain[13]=LotsB_13; 
     chain[14]=LotsB_14; 
     chain[15]=LotsB_15; 
     chain[16]=LotsB_16; 
     chain[17]=LotsB_17; 
     chain[18]=LotsB_18; 
     chain[19]=LotsB_19; 
     chain[20]=LotsB_20;
    
    
    
     if(LastPrice(OP_BUY)&&(Closed("Profit")<=0))
     if(Closed("Profit")>=0&&(HistoryOrders()==0||(HistoryOrders()>0)))NewLots=LotsBuy;
     {
      NewLotsBuy=chain[LEVEL()+1];
      commentBuy=DoubleToStr(LEVEL()+1,0);
       }
     if(LastOrder("Profit")>=0){NewLotsBuy=LotsBuy;commentBuy="0";} 
    
    
    
     chain2[1]=LotsS_1; 
     chain2[2]=LotsS_2; 
     chain2[3]=LotsS_3; 
     chain2[4]=LotsS_4; 
     chain2[5]=LotsS_5; 
     chain2[6]=LotsS_6; 
     chain2[7]=LotsS_7; 
     chain2[8]=LotsS_8; 
     chain2[9]=LotsS_9;
     chain2[10]=LotsS_10; 
     chain2[11]=LotsS_11; 
     chain2[12]=LotsS_12; 
     chain2[13]=LotsS_13; 
     chain2[14]=LotsS_14; 
     chain2[15]=LotsS_15; 
     chain2[16]=LotsS_16; 
     chain2[17]=LotsS_17; 
     chain2[18]=LotsS_18; 
     chain2[19]=LotsS_19; 
     chain2[20]=LotsS_20;
    
    
    
     
      if(LastPrice(OP_SELL)&&(Closed("Profit")<=0))
     {
      NewLotsSell=chain2[LEVEL2()+1];
      commentSell=DoubleToStr(LEVEL2()+1,0);
       }
     if(LastOrder("Profit")>=0){NewLotsSell=LotsSell;commentSell="0";} 
     
     
     
    
       //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(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
            if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;             
            if(TotalOrders(OP_BUY)<MaxTrades)
         int rBuy=OrderSend(Symbol(),OP_BUY,NewLotsBuy,NormalizeDouble(Ask,Digits),3*Q,SL,TP,commentBuy,MagicNumber,0,Blue); 
         if(rBuy>0)time=Time[0]; 
         BarTime=Time[0];
    
            
            
              } 
              }      
     
       
       
       //sell
       
       if (Bid <= (UT1 - sellMM * GapSize * point))    
       {
          DW1 = Fast_1; 
          buyMM = 2;
          sellMM++;
    
          
            if(CloseAtNext)CloseDeleteOrders(OP_BUY); 
            if(SellingEnabled() && WithinAllowableSpread()) { 
            if(Orderscnt()==0&&BarTime!=Time[0]) 
            if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
            if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
            if(TotalOrders(OP_SELL)<MaxTrades)
      int rSell=OrderSend(Symbol(),OP_SELL,NewLotsSell,NormalizeDouble(Bid,Digits),3*Q,SL,TP,commentSell,MagicNumber,0,Red);
      if(rSell>0)time=Time[0]; 
      BarTime=Time[0];
          
    
    }
     }
     }
     
       
     
    
    bool SellingEnabled()
    {
       if( (OrdersT == SellOnly) || (OrdersT == BuySellBoth) )
          return true;
       return false;
    }
    
    bool BuyingEnabled()
    {
       if( (OrdersT == BuyOnly) || (OrdersT == BuySellBoth) )
          return true;
       return false;
    }
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS               Max Spread                    |
    //+------------------------------------------------------------------+ 
    
    
    
    bool WithinAllowableSpread()
    {
       if(MaxSpread == 0)
          return true;
    
       if( Ask-Bid > MaxSpread * point)
          return false;
    
       return true;
    }
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS                                             |
    //+------------------------------------------------------------------+ 
    
    
    void line(string name, double pr1,color clrr, int style)
    {
       if(ObjectFind(name) != 0)
       {
          ObjectCreate(name, OBJ_HLINE, 0, 0,pr1);
          ObjectSet(name, OBJPROP_COLOR, clrr);
          ObjectSet(name, OBJPROP_STYLE, style);
       } 
       else if(ObjectGet(name,OBJPROP_PRICE1)!=pr1)
       {
          ObjectDelete(name);
       }
    }
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS           Trailing Stop                     |
    //+------------------------------------------------------------------+ 
    
    
    void MoveTrailingStop()
    {
       
       for(int cnt=0;cnt<OrdersTotal();cnt++)
       {
          if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
          if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(OrderType()==OP_BUY)
             {
                if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*point,Digits))  
                {                 
                   if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
                   {
                      bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blue);
                    
                   }
                }
             }
             else 
             {
                if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,Digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,Digits))  
                {                 
                   if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+TrailingStop*point,Digits)))||(OrderStopLoss()==0))
                   {
                      bool mnm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*point,Digits),OrderTakeProfit(),0,Red);
                    
                   }
                }
             }
          }
       }
    }
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS          Break Even                         |
    //+------------------------------------------------------------------+ 
    
    
    void MoveBreakEven() 
    {
       int cnt,total=OrdersTotal();
       for(cnt=0;cnt<total;cnt++)
       {
          if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
          if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(OrderType()==OP_BUY)
             {
                if(BreakEven>0)
                {
                   if(NormalizeDouble((Bid-OrderOpenPrice()),Digits)>BreakEven*point)
                   {
                      if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||(OrderStopLoss()==0))
                      {
                         bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+BreakEvenPips*point,Digits),OrderTakeProfit(),0,Blue);
                      
                      }
                   }
                }
             }
             else
             {
                if(BreakEven>0)
                {
                   if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*point)
                   {
                      if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||(OrderStopLoss()==0))
                      {
                         bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-BreakEvenPips*point,Digits),OrderTakeProfit(),0,Red);
                   
                      }
                   }
                }
             }
          }
       }
    }
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS  To Know The Profit Of Open Positions       |
    //+------------------------------------------------------------------+ 
    
    
    double Profit_By_USD(int type=-1)  
    {
     double pts;
     for(int i=0;i<OrdersTotal();i++) 
     {
      bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      string sy=OrderSymbol();
      int    mn=OrderMagicNumber(),
             ot=OrderType();
      double pt=OrderProfit(),
             sw=OrderSwap(),
             cm=OrderCommission();  
      if(sy==Symbol()&&mn==MagicNumber)
      {
       if(ot==type||type==-1)
       {
        pts+=pt+sw+cm;
       }
      }
     }  
     return(pts);
    }  
    
     
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS         Closing Trades Together             |
    //+------------------------------------------------------------------+ 
    
    
    void CloseOrders(int type=-1) 
    {
     bool select,close,del;
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
      {
       if(OrderType()==type||type==-1)
       {
        if(OrderType()==OP_BUY){close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q);}
        if(OrderType()==OP_SELL){close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q);}
        if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
       } 
      }
     }
    }  
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS            HiddenTP                         |
    //+------------------------------------------------------------------+ 
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS    ´      HiddenSL                          |
    //+------------------------------------------------------------------+ 
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS         To Know Total Orders                |
    //+------------------------------------------------------------------+ 
     
     
    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()&&MagicNumber==OrderMagicNumber()&&OrderType()==type)
       {
        cnt++;
       }
      }
     }
     return(cnt);
    }  
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS       Close Delete Orders                   |
    //+------------------------------------------------------------------+ 
    
    void CloseDeleteOrders(int type)
    {
     bool select,close;
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
       if(OrderType()==type)
       {
        if(OrderType()==OP_BUY)  
        {
         close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q);      
        }
        if(OrderType()==OP_SELL)  
        {
         close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q);
        }
        if(OrderType()>OP_SELL)   
        {
         close=OrderDelete(OrderTicket());
        }
       } 
      }
     }
    
    
    //دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها
    double LastPrice(int type)
    {
     int cnt;
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
      {
       cnt++;
       if(cnt>=2)
       return(OrderOpenPrice());
      }
     }
     return(0);
    }  
    
    
    
    /*
    //دالة اغلاق الصفقات بدلالة النوع
    void CloseOrders(int type=-1)
    {
     bool select,close;
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      string sy=OrderSymbol();
      int    tt=OrdersTotal(),
             tk=OrderTicket(),
             ot=OrderType(),
             mn=OrderMagicNumber();
      double lo=OrderLots();
      if(tt>0&&sy==Symbol()&&mn==MagicNumber)
      {
       if(ot==type||type==-1)
       {
        if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDouble(Bid,Digits),5*Q);}
        if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDouble(Ask,Digits),5*Q);}
        if(ot>OP_SELL){close=OrderDelete(tk);}
       } 
      }
     }
    }
    */
    
    //دالة لمعرفة نوع آخر صفقة مغلقة
    int LastType()
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool   select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string sy=OrderSymbol();
      int    mn=OrderMagicNumber(),
             ty=OrderType();      
      if(sy==Symbol()&&mn==MagicNumber)
      {
       return(ty); 
      }
     }
     return(0);
    }
    
    
    
    //دالة لمعرفة توقيت اغلاق آخر صفقة بدلالة نوعها
    
    datetime LastTime(int type=-1)
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool   select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string sy=OrderSymbol();
      int    mn=OrderMagicNumber(),
             ty=OrderType();
      double pt=OrderProfit();
      datetime ct=OrderCloseTime();         
      if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
      {
       return(ct); 
      }
     }
     return(0);
    }
    
    
    
    //دالة لمعرفة ربح آخر صفقة مغلقة بدلالة نوعها
    
    double LastProfit(string info,int type=-1)
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool   select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string sy=OrderSymbol();
      int    mn=OrderMagicNumber(),
             ty=OrderType();
      double pt=OrderProfit();
      datetime ct=OrderCloseTime();         
      if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
      {
      if(info=="Profit")return(pt);
       
      }
     }
     return(0);
    }
    
    
    
    
    datetime FirstClose()
    {
      for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool     select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string   sy=OrderSymbol();
      int      mn=OrderMagicNumber(),
               ty=OrderType();
      double   lo=OrderLots();
      datetime om=OrderOpenTime();    
      if(sy==Symbol()&&mn==MagicNumber&&lo==LotsBuy)
        if(sy==Symbol()&&mn==MagicNumber&&lo==LotsSell)
      {
       return(om);
      }
     }
     return(0);
    }
    
    
    
    double TotalProfit() 
    {
     double pts=0;
     for(int i=0;i<OrdersHistoryTotal();i++) 
     {
      bool     s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string   sy=OrderSymbol();
      int      mn=OrderMagicNumber();
      double   pt=OrderProfit(),
               sw=OrderSwap(),
               cm=OrderCommission();  
      datetime om=OrderCloseTime();
             
      if(sy==Symbol()&&mn==MagicNumber&&om>FirstClose())
      {
       pts+=pt+sw+cm;
      }
     }  
     return(pts);
    }
    
    
    
    double LastOrder(string info,int type=-1)
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string   sy=OrderSymbol(),
               mm=OrderComment();
      int      mn=OrderMagicNumber(),
               ty=OrderType();
      double   lo=OrderLots(),
               op=OrderOpenPrice(),
               cp=OrderClosePrice(),
               pt=OrderProfit(),
               tp=OrderTakeProfit(),
               sl=OrderStopLoss();  
      datetime om=OrderOpenTime(),
               cm=OrderCloseTime();
                        
      if(sy==Symbol()&&mn==MagicNumber)
      {
       if(ty==type||type==-1)
       {
        if(info=="Lots")return(lo);
        else if(info=="OpenPrice")return(op);
        else if(info=="ClosePrice")return(cp);
        else if(info=="Profit")return(pt);
        else if(info=="Type")return(ty);
        else if(info=="TP")return(tp);
        else if(info=="SL")return(sl);
        else if(info=="OpenTime")return(om);
        else if(info=="CloseTime")return(cm);
        else if(info=="Comment")return(mm);
       }
      } 
     }
     return(0);
    }  
    
     
     
     int TotalOrders(int type=-1)
    {
     int cnt=0;
     for(int i =0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
       {
        cnt++;
       }
      }
     }
     return(cnt);
    }
    
    
      
      
      
    double Closed(string info,int type=-1)
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string   sy=OrderSymbol(),
               mm=OrderComment();
      int      mn=OrderMagicNumber(),
               ty=OrderType();
      double   lo=OrderLots(),
               pt=OrderProfit(),
               op=OrderOpenPrice(),
               cp=OrderClosePrice(),
               tp=OrderTakeProfit(),
               sl=OrderStopLoss();   
                        
      if(sy==Symbol()&&mn==MagicNumber)
      {
       if(ty==type||type==-1)
       {
        if(info=="Lots")return(lo);
        else if(info=="Profit")return(pt);
        else if(info=="Type")return(ty);
        else if(info=="OpenPrice")return(op);
        else if(info=="ClosePrice")return(cp);
        else if(info=="TP")return(tp);
        else if(info=="SL")return(sl);
       }
      } 
     }
     return(0);
    }
    
    
    
    
    double CurrentLots(int type=-1)
    {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      string   sy=OrderSymbol(),
               mm=OrderComment();
      int      mn=OrderMagicNumber(),
               ty=OrderType();
      double   lo=OrderLots();  
                        
      if(sy==Symbol()&&mn==MagicNumber)
      {
       if(ty==type||type==-1)
       {
        return(lo);
       }
      } 
     }
     return(0);
    }
    
    
    
    
    int HistoryOrders(int type=-1)
    {
     int cnt=0;
     for(int i =0;i<OrdersHistoryTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
       if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
       {
        cnt++;
       }
      }
     }
     return(cnt);
    }
    
    
    
    double LastCurrent(string info,int type=-1)//دالة لمعرفة كل تفاصيل الصفقة المفعلة بدلالة النوع
    {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
      {
       if(info=="Type")return(OrderType());
       else if(info=="Lots")return(OrderLots());
       else if(info=="Price")return(OrderOpenPrice());
       else if(info=="TP")return(OrderTakeProfit());
       else if(info=="SL")return(OrderStopLoss());
       else if(info=="Profit")return(OrderProfit());
       else if(info=="Time")return(OrderOpenTime());
      }
     }
     return(0);
    }
    
    
    double LastOrderClosed(string info)//نتيجة آخر صفقة مغلقة والاكبر من حيث توقيت الفتح
    {
     double c=0;
     for(int i=OrdersHistoryTotal()-1;i>=0;i--) 
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL) 
      {                        
       if(OrderOpenTime()>c)c=OrderOpenTime();
       if(OrderOpenTime()==c)
       {
        if(info=="Profit")return(OrderProfit());
        else if(info=="Lots")return(OrderLots());
       }
      }  
     }
     return(0);
    }
    
    
    int Orderscnt()//دالة عدد الصفقات المفتوحة
    {
     int cnt=0;
     for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
       {
        cnt++;//عد الصفقات 
       }
      }
     }
     return(cnt);
    }
    
    
    
    
     void CloseAllOrders(int type=-1)
            {
             bool select,close,del;
             for(int i=OrdersTotal()-1;i>=0;i--)
             {
              select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
              string sy=OrderSymbol();
              int    tt=OrdersTotal(),
                     tk=OrderTicket(),
                     ot=OrderType(),
                     mn=OrderMagicNumber();
              double lo=OrderLots();
              if(tt>0)
              {
               if(ot==type||type==-1)
               {
                if(ot==OP_BUY){close=OrderClose(tk,lo,MarketInfo(sy,MODE_BID),50);}  
                if(ot==OP_SELL){close=OrderClose(tk,lo,MarketInfo(sy,MODE_ASK),50);}
                if(ot>OP_SELL){del=OrderDelete(tk);}
               } 
              }
             }
            }
    
    
    
    
    int LEVEL()
    { 
     int c; 
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      commentBuy=OrderComment();
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)  
      {              
       StringReplace(commentBuy,"[sl]","");                         
       c=StrToInteger(commentBuy); 
       
       
       return(c);
      }  
     } 
     return(c); 
    }  
    
    
    
    
    int LEVEL2()
    { 
     int c; 
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      commentSell=OrderComment(); 
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)  
      {              
        StringReplace(commentSell,"[sl]","");                         
       c=StrToInteger(commentSell); 
       
       
       return(c);
      }  
     } 
     return(c); 
    }
    حاولت تصحيح الأخطاء ومعظمها غير واضحة منطقيا لأني لا اعلم ما تريده من الاكسبيرت
    الكود مع بعض التعليقات
    كود:
    //+------------------------------------------------------------------+
    //|                                                     ScalperV1.mq4 |
    //|                   Copyright 2005-2014, MetaQuotes Software Corp. |
    //|                                              https://www.mql4.com |
    //+------------------------------------------------------------------+
    #property copyright   "2005-2014, MetaQuotes Software Corp."
    #property link        "https://www.mql4.com"
    #property description "ScalperV1 expert advisor"
    
    
    enum OrdersTy 
    { 
       BuyOnly=0,      
       SellOnly=1,     
       BuySellBoth=2,  
    }; 
    
    
    input OrdersTy OrdersT = 2;
    extern double  LotsBuy = 0.01;
    extern double  LotsSell = 0.01;
    extern int MaxSpread  = 4;
    input bool  CloseAtNext=false;
    extern int MaxTrades= 2; 
    extern int GapSize  = 0;
    extern int StopLoss  = 0;
    extern int TakeProfit  = 0;
    extern int TrailingStop=0;
    extern  int TrailingStep=0;
    extern int BreakEven=0;
    input int BreakEvenPips=0;
    extern int USDP=0;
    extern int USDL=0;  
    extern int MagicNumber   = 555555;
    
    
    
    
    //---------     
    
    
    
    
    double       LotsB_1=0.02,
                 LotsB_2=0.03,
                 LotsB_3=0.04,
                 LotsB_4=0.05,
                 LotsB_5=0.06,
                 LotsB_6=0.07,
                 LotsB_7=0.08,
                 LotsB_8=0.09,
                 LotsB_9=0.1,
                 LotsB_10=0.11,
                 LotsB_11=0.12,
                 LotsB_12=0.13,
                 LotsB_13=0.14,
                 LotsB_14=0.15,
                 LotsB_15=0.16,
                 LotsB_16=0.17,
                 LotsB_17=0.18,
                 LotsB_18=0.19,
                 LotsB_19=0.20,
                 LotsB_20=0.21;  
                 
                 
                 
    double       LotsS_1=1.1,
                 LotsS_2=2.0,
                 LotsS_3=3.0,
                 LotsS_4=4.0,
                 LotsS_5=5.0,
                 LotsS_6=6.0,
                 LotsS_7=7.0,
                 LotsS_8=8.0,
                 LotsS_9=9.0,
                 LotsS_10=10.0,
                 LotsS_11=11.0,
                 LotsS_12=12.0,
                 LotsS_13=13.0,
                 LotsS_14=14.0,
                 LotsS_15=15.0,
                 LotsS_16=16.0,
                 LotsS_17=17.0,
                 LotsS_18=18.0,
                 LotsS_19=19.0,
                 LotsS_20=20.0; 
                                                       
    
    
    
    
    
    
    int CheckStep = GapSize;             
                 
     int EMA1 = 50;
     int EMA2 = 100;
    ENUM_APPLIED_PRICE apply1 = PRICE_CLOSE;
    ENUM_APPLIED_PRICE apply2 = PRICE_CLOSE;
    
    
    
    
    double buyMM = 2;
    double sellMM = 2;
    
    
    
    
    string commentSell, commentBuy, NewLotsSell, NewLotsBuy;
    double p,SL,TP,NewLots;
    int    LimitBuy, LimitSell;
    double lotaB,lotaS,LB,LS;
    double UT1, DW1,point;
    int      Q,digits;
    
    
    
    
    datetime time=0;
    datetime BarTime;
    
    
     double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};  
     double chain2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};  
     
    
    
    void OnInit()
    {
     
     
     
      if(Digits==4 || Digits<=2) point=Point;
       if(Digits==5 || Digits==3) point=Point*10;
       
         
    
    
    }
    
    
    
    
    //+------------------------------------------------------------------+
    //| OnTick function                                                  |
    //+------------------------------------------------------------------+
    void OnTick()
    {
           
    
    
     if(TrailingStop>0)MoveTrailingStop();
       if(BreakEven>0)MoveBreakEven();
               if((USDP!=0&&Profit_By_USD()>=USDP)
                   ||(USDL!=0&&Profit_By_USD()<=-USDL)){CloseOrders();} 
                              
    
    
       if(Bars<100 || IsTradeAllowed()==false) return;
          
    double Fast_1=iMA(NULL,0,EMA1,50,MODE_SMMA,apply1,0);
    double Fast_2=iMA(NULL,0,EMA2,200,MODE_SMMA,apply2,0);
       
       
     chain[1]=LotsB_1; 
     chain[2]=LotsB_2; 
     chain[3]=LotsB_3; 
     chain[4]=LotsB_4; 
     chain[5]=LotsB_5; 
     chain[6]=LotsB_6; 
     chain[7]=LotsB_7; 
     chain[8]=LotsB_8; 
     chain[9]=LotsB_9;
     chain[10]=LotsB_10; 
     chain[11]=LotsB_11; 
     chain[12]=LotsB_12; 
     chain[13]=LotsB_13; 
     chain[14]=LotsB_14; 
     chain[15]=LotsB_15; 
     chain[16]=LotsB_16; 
     chain[17]=LotsB_17; 
     chain[18]=LotsB_18; 
     chain[19]=LotsB_19; 
     chain[20]=LotsB_20;
    
    
     chain2[1]=LotsS_1; 
     chain2[2]=LotsS_2; 
     chain2[3]=LotsS_3; 
     chain2[4]=LotsS_4; 
     chain2[5]=LotsS_5; 
     chain2[6]=LotsS_6; 
     chain2[7]=LotsS_7; 
     chain2[8]=LotsS_8; 
     chain2[9]=LotsS_9;
     chain2[10]=LotsS_10; 
     chain2[11]=LotsS_11; 
     chain2[12]=LotsS_12; 
     chain2[13]=LotsS_13; 
     chain2[14]=LotsS_14; 
     chain2[15]=LotsS_15; 
     chain2[16]=LotsS_16; 
     chain2[17]=LotsS_17; 
     chain2[18]=LotsS_18; 
     chain2[19]=LotsS_19; 
     chain2[20]=LotsS_20;
     
    if(Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
    if(Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)
    
    
     /// كل شروط المضاعفات خاطئة تماما ليس لها منطق 
     //لأنك تستخدم التبريدات وهنا مضاعفات الصفقة المغلقة!!!
     
     if(LastPrice(OP_BUY)/*<==شرط ليس له معنى*/&&(Closed("Profit")<=0))
     if(Closed("Profit")>=0&&(HistoryOrders()==0||(HistoryOrders()>0)))NewLots=LotsBuy;///<==?? جواب الشرط يليه جواب اخر بالاسفل لن يعمل بهذه الطريقة
     {
      NewLotsBuy=chain[LEVEL()+1];
      commentBuy=DoubleToStr(LEVEL()+1,0);
     }
     if(LastOrder("Profit")>=0){NewLotsBuy=LotsBuy;commentBuy="0";} 
    
    
    
    
     if(LastPrice(OP_SELL)/*<==شرط ليس له معنى*/&&(Closed("Profit")<=0))
     {
      NewLotsSell=chain2[LEVEL2()+1];
      commentSell=DoubleToStr(LEVEL2()+1,0);
     }
     if(LastOrder("Profit")>=0){NewLotsSell=LotsSell;commentSell="0";} 
     
     
       //شروط التبريد 
     
         if((OrdersT==BuyOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_BUY)<MaxTrades
         &&Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
         {   
          if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
          if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;             
          int rBuy2=OrderSend(Symbol(),OP_BUY,LotsBuy/*استخدمت اللوت الأساسي لأن شروط المضاعفات خاطئة*/,Ask,3*Q,SL,TP,commentBuy,MagicNumber,0,Blue); 
         } 
       
       
       if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_SELL)<MaxTrades
         &&Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)
         {
          if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
          if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
          int rSell2=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q,SL,TP,commentSell,MagicNumber,0,Red);
         }
           
       //buy
     
       if(Ask >= (DW1 + buyMM * GapSize * point)) 
       {    
          UT1 = Fast_2;
          sellMM = 2;
          buyMM++; 
         if(CloseAtNext)CloseDeleteOrders(OP_SELL);
         
         if((OrdersT==BuyOnly||OrdersT==BuySellBoth)
         &&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_BUY)==0&&time!=Time[0])
         {   
          if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
          if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;             
          int rBuy1=OrderSend(Symbol(),OP_BUY,LotsBuy/*استخدمت اللوت الأساسي لأن شروط المضاعفات خاطئة*/,Ask,3*Q,SL,TP,commentBuy,MagicNumber,0,Blue); 
          if(rBuy1>0)time=Time[0]; 
         } 
        }      
     
       
       
       
       //sell
       
       if (Bid <= (UT1 - sellMM * GapSize * point))    
       {
          DW1 = Fast_1; 
          buyMM = 2;
          sellMM++;
    
    
          
         if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_SELL)<MaxTrades
         &&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_SELL)==0&&time!=Time[0])
         {
          if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
          if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
          int rSell1=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q,SL,TP,commentSell,MagicNumber,0,Red);
          if(rSell1>0)time=Time[0]; 
         }
        }
    
    
    }
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS                                             |
    //+------------------------------------------------------------------+ 
    
    
    
    
    void line(string name, double pr1,color clrr, int style)
    {
       if(ObjectFind(name) != 0)
       {
          ObjectCreate(name, OBJ_HLINE, 0, 0,pr1);
          ObjectSet(name, OBJPROP_COLOR, clrr);
          ObjectSet(name, OBJPROP_STYLE, style);
       } 
       else if(ObjectGet(name,OBJPROP_PRICE1)!=pr1)
       {
          ObjectDelete(name);
       }
    }
    
    
    
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS           Trailing Stop                     |
    //+------------------------------------------------------------------+ 
    
    
    
    
    void MoveTrailingStop()
    {
       
       for(int cnt=0;cnt<OrdersTotal();cnt++)
       {
          if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
          if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(OrderType()==OP_BUY)
             {
                if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*point,Digits))  
                {                 
                   if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
                   {
                      bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blue);
                    
                   }
                }
             }
             else 
             {
                if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,Digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,Digits))  
                {                 
                   if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+TrailingStop*point,Digits)))||(OrderStopLoss()==0))
                   {
                      bool mnm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*point,Digits),OrderTakeProfit(),0,Red);
                    
                   }
                }
             }
          }
       }
    }
    
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS          Break Even                         |
    //+------------------------------------------------------------------+ 
    
    
    
    
    void MoveBreakEven() 
    {
       int cnt,total=OrdersTotal();
       for(cnt=0;cnt<total;cnt++)
       {
          if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
          if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(OrderType()==OP_BUY)
             {
                if(BreakEven>0)
                {
                   if(NormalizeDouble((Bid-OrderOpenPrice()),Digits)>BreakEven*point)
                   {
                      if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||(OrderStopLoss()==0))
                      {
                         bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+BreakEvenPips*point,Digits),OrderTakeProfit(),0,Blue);
                      
                      }
                   }
                }
             }
             else
             {
                if(BreakEven>0)
                {
                   if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*point)
                   {
                      if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||(OrderStopLoss()==0))
                      {
                         bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-BreakEvenPips*point,Digits),OrderTakeProfit(),0,Red);
                   
                      }
                   }
                }
             }
          }
       }
    }
    
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS  To Know The Profit Of Open Positions       |
    //+------------------------------------------------------------------+ 
    
    
    
    
    double Profit_By_USD(int type=-1)  
    {
     double pts;
     for(int i=0;i<OrdersTotal();i++) 
     {
      bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      string sy=OrderSymbol();
      int    mn=OrderMagicNumber(),
             ot=OrderType();
      double pt=OrderProfit(),
             sw=OrderSwap(),
             cm=OrderCommission();  
      if(sy==Symbol()&&mn==MagicNumber)
      {
       if(ot==type||type==-1)
       {
        pts+=pt+sw+cm;
       }
      }
     }  
     return(pts);
    }  
    
    
     
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS         Closing Trades Together             |
    //+------------------------------------------------------------------+ 
    
    
    
    
    void CloseOrders(int type=-1) 
    {
     bool select,close,del;
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
      {
       if(OrderType()==type||type==-1)
       {
        if(OrderType()==OP_BUY){close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q);}
        if(OrderType()==OP_SELL){close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q);}
        if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
       } 
      }
     }
    }  
    
    
    
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS         To Know Total Orders                |
    //+------------------------------------------------------------------+ 
     
     
    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()&&MagicNumber==OrderMagicNumber()&&OrderType()==type)
       {
        cnt++;
       }
      }
     }
     return(cnt);
    }  
    
    
    
    
    
    
    //+------------------------------------------------------------------+
    //| FUNCTION DEFINITIONS       Close Delete Orders                   |
    //+------------------------------------------------------------------+ 
    
    
    void CloseDeleteOrders(int type)
    {
     bool select,close;
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
       if(OrderType()==type)
       {
        if(OrderType()==OP_BUY)  
        {
         close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q);      
        }
        if(OrderType()==OP_SELL)  
        {
         close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q);
        }
        if(OrderType()>OP_SELL)   
        {
         close=OrderDelete(OrderTicket());
        }
       } 
      }
     }
    
    
    
    
    //دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها
    double LastPrice(int type)
    {
     int cnt;
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
      {
       cnt++;
       if(cnt>=2)
       return(OrderOpenPrice());
      }
     }
     return(0);
    }  
    
    
    
    
    
    
    /*
    //دالة اغلاق الصفقات بدلالة النوع
    void CloseOrders(int type=-1)
    {
     bool select,close;
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      string sy=OrderSymbol();
      int    tt=OrdersTotal(),
             tk=OrderTicket(),
             ot=OrderType(),
             mn=OrderMagicNumber();
      double lo=OrderLots();
      if(tt>0&&sy==Symbol()&&mn==MagicNumber)
      {
       if(ot==type||type==-1)
       {
        if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDouble(Bid,Digits),5*Q);}
        if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDouble(Ask,Digits),5*Q);}
        if(ot>OP_SELL){close=OrderDelete(tk);}
       } 
      }
     }
    }
    */
    
    
    //دالة لمعرفة نوع آخر صفقة مغلقة
    int LastType()
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool   select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string sy=OrderSymbol();
      int    mn=OrderMagicNumber(),
             ty=OrderType();      
      if(sy==Symbol()&&mn==MagicNumber)
      {
       return(ty); 
      }
     }
     return(0);
    }
    
    
    
    
    
    
    //دالة لمعرفة توقيت اغلاق آخر صفقة بدلالة نوعها
    
    
    datetime LastTime(int type=-1)
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool   select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string sy=OrderSymbol();
      int    mn=OrderMagicNumber(),
             ty=OrderType();
      double pt=OrderProfit();
      datetime ct=OrderCloseTime();         
      if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
      {
       return(ct); 
      }
     }
     return(0);
    }
    
    
    
    
    
    
    //دالة لمعرفة ربح آخر صفقة مغلقة بدلالة نوعها
    
    
    double LastProfit(string info,int type=-1)
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool   select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string sy=OrderSymbol();
      int    mn=OrderMagicNumber(),
             ty=OrderType();
      double pt=OrderProfit();
      datetime ct=OrderCloseTime();         
      if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
      {
      if(info=="Profit")return(pt);
       
      }
     }
     return(0);
    }
    
    
    
    
    
    
    
    
    datetime FirstClose()
    {
      for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool     select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string   sy=OrderSymbol();
      int      mn=OrderMagicNumber(),
               ty=OrderType();
      double   lo=OrderLots();
      datetime om=OrderOpenTime();    
      if(sy==Symbol()&&mn==MagicNumber&&lo==LotsBuy)
        if(sy==Symbol()&&mn==MagicNumber&&lo==LotsSell)
      {
       return(om);
      }
     }
     return(0);
    }
    
    
    
    
    
    
    double TotalProfit() 
    {
     double pts=0;
     for(int i=0;i<OrdersHistoryTotal();i++) 
     {
      bool     s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string   sy=OrderSymbol();
      int      mn=OrderMagicNumber();
      double   pt=OrderProfit(),
               sw=OrderSwap(),
               cm=OrderCommission();  
      datetime om=OrderCloseTime();
             
      if(sy==Symbol()&&mn==MagicNumber&&om>FirstClose())
      {
       pts+=pt+sw+cm;
      }
     }  
     return(pts);
    }
    
    
    
    
    
    
    double LastOrder(string info,int type=-1)
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string   sy=OrderSymbol(),
               mm=OrderComment();
      int      mn=OrderMagicNumber(),
               ty=OrderType();
      double   lo=OrderLots(),
               op=OrderOpenPrice(),
               cp=OrderClosePrice(),
               pt=OrderProfit(),
               tp=OrderTakeProfit(),
               sl=OrderStopLoss();  
      datetime om=OrderOpenTime(),
               cm=OrderCloseTime();
                        
      if(sy==Symbol()&&mn==MagicNumber)
      {
       if(ty==type||type==-1)
       {
        if(info=="Lots")return(lo);
        else if(info=="OpenPrice")return(op);
        else if(info=="ClosePrice")return(cp);
        else if(info=="Profit")return(pt);
        else if(info=="Type")return(ty);
        else if(info=="TP")return(tp);
        else if(info=="SL")return(sl);
        else if(info=="OpenTime")return(om);
        else if(info=="CloseTime")return(cm);
        else if(info=="Comment")return(mm);
       }
      } 
     }
     return(0);
    }  
    
    
     
     
     int TotalOrders(int type=-1)
    {
     int cnt=0;
     for(int i =0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
       {
        cnt++;
       }
      }
     }
     return(cnt);
    }
    
    
    
    
      
      
      
    double Closed(string info,int type=-1)
    {
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      string   sy=OrderSymbol(),
               mm=OrderComment();
      int      mn=OrderMagicNumber(),
               ty=OrderType();
      double   lo=OrderLots(),
               pt=OrderProfit(),
               op=OrderOpenPrice(),
               cp=OrderClosePrice(),
               tp=OrderTakeProfit(),
               sl=OrderStopLoss();   
                        
      if(sy==Symbol()&&mn==MagicNumber)
      {
       if(ty==type||type==-1)
       {
        if(info=="Lots")return(lo);
        else if(info=="Profit")return(pt);
        else if(info=="Type")return(ty);
        else if(info=="OpenPrice")return(op);
        else if(info=="ClosePrice")return(cp);
        else if(info=="TP")return(tp);
        else if(info=="SL")return(sl);
       }
      } 
     }
     return(0);
    }
    
    
    
    
    
    
    
    
    double CurrentLots(int type=-1)
    {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      string   sy=OrderSymbol(),
               mm=OrderComment();
      int      mn=OrderMagicNumber(),
               ty=OrderType();
      double   lo=OrderLots();  
                        
      if(sy==Symbol()&&mn==MagicNumber)
      {
       if(ty==type||type==-1)
       {
        return(lo);
       }
      } 
     }
     return(0);
    }
    
    
    
    
    
    
    
    
    int HistoryOrders(int type=-1)
    {
     int cnt=0;
     for(int i =0;i<OrdersHistoryTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
       if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
       {
        cnt++;
       }
      }
     }
     return(cnt);
    }
    
    
    
    
    
    
    double LastCurrent(string info,int type=-1)//دالة لمعرفة كل تفاصيل الصفقة المفعلة بدلالة النوع
    {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
      {
       if(info=="Type")return(OrderType());
       else if(info=="Lots")return(OrderLots());
       else if(info=="Price")return(OrderOpenPrice());
       else if(info=="TP")return(OrderTakeProfit());
       else if(info=="SL")return(OrderStopLoss());
       else if(info=="Profit")return(OrderProfit());
       else if(info=="Time")return(OrderOpenTime());
      }
     }
     return(0);
    }
    
    
    
    
    double LastOrderClosed(string info)//نتيجة آخر صفقة مغلقة والاكبر من حيث توقيت الفتح
    {
     double c=0;
     for(int i=OrdersHistoryTotal()-1;i>=0;i--) 
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL) 
      {                        
       if(OrderOpenTime()>c)c=OrderOpenTime();
       if(OrderOpenTime()==c)
       {
        if(info=="Profit")return(OrderProfit());
        else if(info=="Lots")return(OrderLots());
       }
      }  
     }
     return(0);
    }
    
    
    
    
    int Orderscnt()//دالة عدد الصفقات المفتوحة
    {
     int cnt=0;
     for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
       {
        cnt++;//عد الصفقات 
       }
      }
     }
     return(cnt);
    }
    
    
    
    
    
    
    
    
     void CloseAllOrders(int type=-1)
            {
             bool select,close,del;
             for(int i=OrdersTotal()-1;i>=0;i--)
             {
              select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
              string sy=OrderSymbol();
              int    tt=OrdersTotal(),
                     tk=OrderTicket(),
                     ot=OrderType(),
                     mn=OrderMagicNumber();
              double lo=OrderLots();
              if(tt>0)
              {
               if(ot==type||type==-1)
               {
                if(ot==OP_BUY){close=OrderClose(tk,lo,MarketInfo(sy,MODE_BID),50);}  
                if(ot==OP_SELL){close=OrderClose(tk,lo,MarketInfo(sy,MODE_ASK),50);}
                if(ot>OP_SELL){del=OrderDelete(tk);}
               } 
              }
             }
            }
    
    
    
    
    
    
    
    
    int LEVEL()
    { 
     int c; 
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      commentBuy=OrderComment();
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)  
      {              
       StringReplace(commentBuy,"[sl]","");                         
       c=StrToInteger(commentBuy); 
       
       
       return(c);
      }  
     } 
     return(c); 
    }  
    
    
    
    
    
    
    
    
    int LEVEL2()
    { 
     int c; 
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      commentSell=OrderComment(); 
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)  
      {              
        StringReplace(commentSell,"[sl]","");                         
       c=StrToInteger(commentSell); 
       
       
       return(c);
      }  
     } 
     return(c); 
    }
    التعديل الأخير تم بواسطة kira-h ; 23-07-2019 الساعة 01:24 AM

صفحة 245 من 251 الأولىالأولى ... 145195235243244245246247 ... الأخيرةالأخيرة

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

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

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

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