//--> DO NOT USE THIS EA ON YOUR REAL MONEY ACCOUNT!!!

#property copyright "unknown"
#property link "http://forexBaron.net"
extern double Lots_1 =0.05;
extern double Lots_2 =0.07;

extern double Lots_1_2 =0.05;//100;//of course, send a trade with 100 lots, for sure, that is dimwitlike, so we change it ...
extern double Lots_2_2 =0.07;//100;//of course, send a trade with 100 lots, for sure, that is dimwitlike, so we change it ...

extern string Pair1_1="EURUSD";
 extern string Pair1_2="USDCHF";
 extern double rist=50;
 
 extern string Pair2_1="EURUSD";//not "100", must be a currency symbol ...
 extern string Pair2_2="USDCHF";//not "100", must be a currency symbol ...
 extern double rist_2=50;
 //+++++++++++++++++++++++++++++++++
 
   
   int q_s;
   int q_b;
   
    int q_s_2;
   int q_b_2;
   //+++++++++++++++++++++++++++++++++++ 


extern double pribil_lot=100;
   int tip_0;
  int tip_s;
  int tip_b;
 int vidkrity_s;
  int vidkrity_b;
int  del_order_s;
int  del_order_b;
     
  extern double pribil_lot_2=100;
   int tip_0_2;
  int tip_s_2;
  int tip_b_2;
 int vidkrity_s_2;
  int vidkrity_b_2;
int  del_order_s_2;
int  del_order_b_2;
           


 int t_1;
  int t_2;
   int t_1_2;
    int t_2_2;
   
//added
 extern string mih="**** MISC settings:";//added by fxdaytradeer
 extern int    MaxSlippage=50;
 extern string TradeComment="sample comment";
 extern bool   CheckLotSizeCorrect=true;
 extern bool   AutoAdjustSymbolSuffix = true;//detect symbol suffix
 int opentrades;
 double openlots,openprofit;
 //end added
 
  
//------------------------------------------------

int init() {

 if (AutoAdjustSymbolSuffix) {
  string suffix=GetSymbolSuffix();
  Pair1_1=Pair1_1+suffix;
  Pair1_2=Pair1_2+suffix;
  Pair2_1=Pair2_1+suffix;
  Pair2_2=Pair2_2+suffix;
 }
}

int deinit() {
 Comment("");
}

//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |

int start()

{  
       
       
        // 1  
       
       double  balans_s=0;   
    double  balans_s_1=0; 
     double  balans_s_2=0; 
     
      double  balans_b=0; 
    double  balans_b_1=0; 
     double  balans_b_2=0;
     
          
        for(int k=0;k<OrdersTotal();k++)
           {
               if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==false) break;
                if(OrderSymbol()==Pair1_1&&OrderType()==OP_SELL&&OrderMagicNumber()==1){ balans_s_1 = balans_s_1 +OrderProfit()+OrderCommission()+OrderSwap();}
                
                if(OrderSymbol()==Pair1_2&&OrderType()==OP_SELL&&OrderMagicNumber()==2){ balans_s_2 = balans_s_2 +OrderProfit()+OrderCommission()+OrderSwap();}   
                      
                  
                        
            }
           balans_s=balans_s_1+balans_s_2;
           
           
           
        for(int kv=0;kv<OrdersTotal();kv++)
           {
               if(OrderSelect(kv,SELECT_BY_POS,MODE_TRADES)==false) break;
                if(OrderSymbol()==Pair1_1&&OrderType()==OP_BUY&&OrderMagicNumber()==1){ balans_b_1 = balans_b_1 +OrderProfit()+OrderCommission()+OrderSwap();}
                
                if(OrderSymbol()==Pair1_2&&OrderType()==OP_BUY&&OrderMagicNumber()==2){ balans_b_2 = balans_b_2 +OrderProfit()+OrderCommission()+OrderSwap();}   
                      
                  
                        
            }
           balans_b=balans_b_1+balans_b_2;
           
           
               // 2  
               
            double  balans_s__2=0; 
    double  balans_s_1_2=0; 
     double  balans_s_2_2=0; 
         
        for(int k_2=0;k_2<OrdersTotal();k_2++)
           {
               if(OrderSelect(k_2,SELECT_BY_POS,MODE_TRADES)==false) break;
                if(OrderSymbol()==Pair2_1&&OrderType()==OP_SELL&&OrderMagicNumber()==12){ balans_s_1_2 = balans_s_1_2 +OrderProfit()+OrderCommission()+OrderSwap();}
                
                if(OrderSymbol()==Pair2_2&&OrderType()==OP_SELL&&OrderMagicNumber()==22){ balans_s_2_2 = balans_s_2_2 +OrderProfit()+OrderCommission()+OrderSwap();}   
                      
                  
                        
            }
           balans_s__2=balans_s_1_2+balans_s_2_2;  
           
           
           
            
     
     double  balans_b__2=0; 
    double  balans_b_1_2=0; 
     double  balans_b_2_2=0; 
     
      
      
           
               // 2  
           
          for(int kv_2=0;kv_2<OrdersTotal();kv_2++)
           {
               if(OrderSelect(kv_2,SELECT_BY_POS,MODE_TRADES)==false) break;
                if(OrderSymbol()==Pair2_1&&OrderType()==OP_BUY&&OrderMagicNumber()==12){ balans_b_1_2 = balans_b_1_2 +OrderProfit()+OrderCommission()+OrderSwap();}
                
                if(OrderSymbol()==Pair2_2&&OrderType()==OP_BUY&&OrderMagicNumber()==22){ balans_b_2_2 = balans_b_2_2 +OrderProfit()+OrderCommission()+OrderSwap();}   
                      
                  
                        
            }
           balans_b__2=balans_b_1_2+balans_b_2_2;  
           
          
           
            
            if(OrdersTotal()==0){del_order_s=0;del_order_b=0;del_order_s_2=0;del_order_b_2=0;}
            //----------------------------------
            
                // 1 
            
             if(balans_s>=pribil_lot)del_order_s++;
            if(del_order_s>0)
                 {   
                   
       
                      for(int ttt=0;ttt<OrdersTotal();ttt++)
                         {
                           if(OrderSelect(ttt,SELECT_BY_POS,MODE_TRADES)==false) break;
                                if(OrderType()==OP_SELL&&OrderSymbol()==Pair1_1&&OrderMagicNumber()==1){CloseOrder(OrderTicket(),OrderLots(),MarketInfo(Pair1_1,MODE_ASK),3,White);}
                                
                                if(OrderType()==OP_SELL&&OrderSymbol()==Pair1_2&&OrderMagicNumber()==2){CloseOrder(OrderTicket(),OrderLots(),MarketInfo(Pair1_2,MODE_ASK),3,White);} 
                                
                                
                         
                            
                         }
                         
                         
                     
                     }
                         
                         
       //----------------------------------
             if(balans_b>=pribil_lot)del_order_b++;
            if(del_order_b>0)
                 {   
                   
       
                      for(int tttj=0;tttj<OrdersTotal();tttj++)
                         {
                           if(OrderSelect(tttj,SELECT_BY_POS,MODE_TRADES)==false) break;
                                
                                 if(OrderType()==OP_BUY&&OrderSymbol()==Pair1_1&&OrderMagicNumber()==1){CloseOrder(OrderTicket(),OrderLots(),MarketInfo(Pair1_1,MODE_BID),3,White);}
                                
                                 if(OrderType()==OP_BUY&&OrderSymbol()==Pair1_2&&OrderMagicNumber()==2){CloseOrder(OrderTicket(),OrderLots(),MarketInfo(Pair1_2,MODE_BID),3,White);}
                                
                         
                            
                         }
                         
                         
                     
                     }
                 
                 
                 
                 
                 
      // 2  
      
         if(balans_s__2>=pribil_lot_2)del_order_s_2++;
            if(del_order_s_2>0)
                 {   
                   
       
                      for(int ttt_2=0;ttt_2<OrdersTotal();ttt_2++)
                         {
                           if(OrderSelect(ttt_2,SELECT_BY_POS,MODE_TRADES)==false) break;
                                if(OrderType()==OP_SELL&&OrderSymbol()==Pair2_1&&OrderMagicNumber()==12){CloseOrder(OrderTicket(),OrderLots(),MarketInfo(Pair2_1,MODE_ASK),3,White);}
                                
                                if(OrderType()==OP_SELL&&OrderSymbol()==Pair2_2&&OrderMagicNumber()==22){CloseOrder(OrderTicket(),OrderLots(),MarketInfo(Pair2_2,MODE_ASK),3,White);} 
                                
                                
                         
                            
                         }
                         
                         
                     
                     }
                         
                         
       //----------------------------------
             if(balans_b__2>=pribil_lot_2)del_order_b_2++;
            if(del_order_b_2>0)
                 {   
                   
       
                      for(int tttj_2=0;tttj_2<OrdersTotal();tttj_2++)
                         {
                           if(OrderSelect(tttj_2,SELECT_BY_POS,MODE_TRADES)==false) break;
                                
                                 if(OrderType()==OP_BUY&&OrderSymbol()==Pair2_1&&OrderMagicNumber()==12){CloseOrder(OrderTicket(),OrderLots(),MarketInfo(Pair2_1,MODE_BID),3,White);}
                                
                                 if(OrderType()==OP_BUY&&OrderSymbol()==Pair2_2&&OrderMagicNumber()==22){CloseOrder(OrderTicket(),OrderLots(),MarketInfo(Pair2_2,MODE_BID),3,White);}
                                
                         
                            
                         }
                         
                         
                     
                     }
                          
                 
      
  

            // 1  
        
        tip_s=0;
        tip_b=0;
      
         for(int trtz=0;trtz<OrdersTotal();trtz++)
                         {
                           if(OrderSelect(trtz,SELECT_BY_POS,MODE_TRADES)==false) break;
                                if(OrderType()==OP_SELL&&((OrderSymbol()==Pair1_1&&OrderMagicNumber()==1)||(OrderSymbol()==Pair1_2&&OrderMagicNumber()==2))){tip_s++;}
                                 if(OrderType()==OP_BUY&&((OrderSymbol()==Pair1_1&&OrderMagicNumber()==1)||(OrderSymbol()==Pair1_2&&OrderMagicNumber()==2))){tip_b++;}
                          
                            
                         }
    
     
       
       if(tip_s==0){del_order_s=0;vidkrity_s=0;}
       if(tip_b==0){del_order_b=0;vidkrity_b=0;}
       
           // 2  dzerkalo
           
           
        tip_s_2=0;
        tip_b_2=0;
      
         for(int trtz_2=0;trtz_2<OrdersTotal();trtz_2++)
                         {
                           if(OrderSelect(trtz_2,SELECT_BY_POS,MODE_TRADES)==false) break;
                                if(OrderType()==OP_SELL&&((OrderSymbol()==Pair2_1&&OrderMagicNumber()==12)||(OrderSymbol()==Pair2_2&&OrderMagicNumber()==22))){tip_s_2++;}
                                 if(OrderType()==OP_BUY&&((OrderSymbol()==Pair2_1&&OrderMagicNumber()==12)||(OrderSymbol()==Pair2_2&&OrderMagicNumber()==22))){tip_b_2++;}
                          
                            
                         }
    
     
       
       if(tip_s_2==0){del_order_s_2=0;vidkrity_s_2=0;}
       if(tip_b_2==0){del_order_b_2=0;vidkrity_b_2=0;}    
           
           
           
   //_______________________________________________________________
         
             // 1 
         
            //  SELL  
         if(tip_s==0)vidkrity_s++;
          // SELL 
          
         if((balans_s<-rist*tip_s)&&tip_s>0&&del_order_s==0)vidkrity_s++;
         
         // SELL
         
         if(vidkrity_s==1)
         {     q_s=tip_s;
             t_1=CurTime();
            SendOrder(Pair1_1,OP_SELL,Lots_1,MarketInfo(Pair1_1,MODE_BID),MaxSlippage,0,0,TradeComment,1,0,Green);
           
             SendOrder(Pair1_2,OP_SELL,Lots_2,MarketInfo(Pair1_2,MODE_BID),MaxSlippage,0,0,TradeComment,2,0,Green);
           
              vidkrity_s++;
            
          }
          
          if(tip_s==q_s+2||CurTime()>=t_1+600) vidkrity_s=0;
          
          
          
          //---------------------------------------------------------------
          
           // Buy
         if(tip_b==0)vidkrity_b++;
         
           // SELL 
          
         if((balans_b<-rist*tip_b)&&tip_b>0&&del_order_b==0)vidkrity_b++;
         
         // Buy
         
         if(vidkrity_b==1)
         {  
               q_b=tip_b; 
              t_2=CurTime();
              SendOrder(Pair1_1,OP_BUY,Lots_1,MarketInfo(Pair1_1,MODE_ASK),MaxSlippage,0,0,TradeComment,1,0,Green);
              SendOrder(Pair1_2,OP_BUY,Lots_2,MarketInfo(Pair1_2,MODE_ASK),MaxSlippage,0,0,TradeComment,2,0,Green);
             vidkrity_b++;
              
            
          }
          if(tip_b==q_b+2||CurTime()>=t_2+600) vidkrity_b=0;
          
           
              // 2 
           
            
            // SELL  
         if(tip_s_2==0)vidkrity_s_2++;
          // SELL 
          
         if((balans_s__2<-rist_2*tip_s_2)&&tip_s_2>0&&del_order_s_2==0)vidkrity_s_2++;
         
         // SELL
         
         if(vidkrity_s_2==1)
         {     q_s_2=tip_s_2;
            t_1_2=CurTime();
            SendOrder(Pair2_1,OP_SELL,Lots_1_2,MarketInfo(Pair2_1,MODE_BID),MaxSlippage,0,0,TradeComment,12,0,Green);
           
             SendOrder(Pair2_2,OP_SELL,Lots_2_2,MarketInfo(Pair2_2,MODE_BID),MaxSlippage,0,0,TradeComment,22,0,Green);
           
              vidkrity_s_2++;
            
          }
          
          if(tip_s_2==q_s_2+2||CurTime()>=t_1_2+600) vidkrity_s_2=0;
          
          
          
          //---------------------------------------------------------------
          
           // Buy
         if(tip_b_2==0)vidkrity_b_2++;
         
           // BUY
          
         if((balans_b__2<-rist_2*tip_b_2)&&tip_b_2>0&&del_order_b_2==0)vidkrity_b_2++;
         
         // Buy
         
         if(vidkrity_b_2==1)
         {  
               q_b_2=tip_b_2; 
          t_2_2=CurTime();
              SendOrder(Pair2_1,OP_BUY,Lots_1_2,MarketInfo(Pair2_1,MODE_ASK),MaxSlippage,0,0,TradeComment,12,0,Green);
              SendOrder(Pair2_2,OP_BUY,Lots_2_2,MarketInfo(Pair2_2,MODE_ASK),MaxSlippage,0,0,TradeComment,22,0,Green);
             vidkrity_b_2++;
              
            
          }
          if(tip_b_2==q_b_2+2||CurTime()>=t_2_2+600) vidkrity_b_2=0;
        
        UpdateStats();
        Comment( "       "+WindowExpertName()+" *** fix by http://ForexBaron.net","\n",
                 "       Dzerkalo",  "         Pribil", "           f(rist)" ,"            start","\n",
                 "          1_s","         ", balans_s ,"         ",-rist*tip_s,"                   ",vidkrity_s,"\n",
                 "           1_b", "         ",balans_b ,"       ",-rist*tip_b,"                  ",vidkrity_b,"\n",
                 "           2_s", "         ",balans_s__2 ,"      ",-rist*tip_s_2,"                   ",vidkrity_s_2,"\n",
                 "           2_b","         ", balans_b__2 ,"        ",-rist*tip_b_2,"                   ",vidkrity_b_2,"\n",
                 "       TOTAL OPEN TRADES: "+opentrades+", TOTAL OPEN LOTS: "+DoubleToStr(openlots,2)+", CURRENT PROFIT: "+DoubleToStr(openprofit,2)+" "+AccountCurrency());
  }
// the end."         ",

bool SendOrder(string symbol,int type,double lots,double price,int slippage,double sl,double tp,string ocomment,int magic,datetime expiry,color col) {
 if (IsTesting() && symbol!=Symbol()) return;//return if backtesting because mt4 craptester only deals with the current chart pair ...
 
 if (CheckLotSizeCorrect) lots=NormalizeLots(symbol,lots);
 while (IsTradeContextBusy()) Sleep(100);
 RefreshRates();
 bool result=OrderSend(symbol,type,lots,price,slippage,sl,tp,ocomment,magic,expiry,col);
 return(result);
}

bool CloseOrder(int ticket,double lots,double price,int slippage,color col) {
 bool result=false;
 while (IsTradeContextBusy()) Sleep(100);
 RefreshRates();
 if (OrderType()==OP_BUY)  price=MarketInfo(OrderSymbol(),MODE_BID);
 if (OrderType()==OP_SELL) price=MarketInfo(OrderSymbol(),MODE_ASK);
  result=OrderClose(OrderTicket(),OrderLots(),price,5000,col);
 return(result);
}

string GetSymbolSuffix() {
 string suffix="";
 if (StringLen(Symbol())>6) suffix = StringSubstr(Symbol(),6,StringLen(Symbol())-6);
 return(suffix);
}

//+------------------------------------------------------------------+
//| NormalizeLots(string symbol, double lots)                        |
//+------------------------------------------------------------------+
//function added by fxdaytrader
//Lot size must be adjusted to be a multiple of lotstep, which may not be a power of ten on some brokers
//see also the original function by WHRoeder, http://forum.mql4.com/45425#564188, fxdaytrader
double NormalizeLots(string symbol, double lots) {
  if (MathAbs(lots)==0.0) return(0.0); //just in case ... otherwise it may happen that after rounding 0.0 the result is >0 and we have got a problem, fxdaytrader
  if (MathAbs(lots)<MarketInfo(symbol,MODE_MINLOT)) return(MarketInfo(symbol,MODE_MINLOT));
  if (MathAbs(lots)>MarketInfo(symbol,MODE_MAXLOT)) return(MarketInfo(symbol,MODE_MAXLOT));
  double ls = MarketInfo(symbol,MODE_LOTSTEP); 
  lots=MathRound(lots/ls)*ls;
  return(MathMin(MarketInfo(symbol,MODE_MAXLOT),MathMax(MarketInfo(symbol,MODE_MINLOT),lots))); //check if lots >= min. lots && <= max. lots, fxdaytrader
}//double NormalizeLots(string symbol, double lots) {

void UpdateStats() {
 opentrades=0;
 openlots=0;
 openprofit=0;

 for (int cnt=OrdersTotal()-1; cnt>=0; cnt--) {
  if (!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) continue;
  if (OrderMagicNumber()!=1 && OrderMagicNumber()!=2 && OrderMagicNumber()!=12 && OrderMagicNumber()!=22) continue;
   {
   opentrades++;
   openlots=openlots+OrderLots();
   openprofit=openprofit+OrderProfit()+OrderSwap()+OrderCommission();
   }
}//void UpdateStats() {


}