LockPipsingXR_V2_77_Engl_demoAL





//+------------------------------------------------------------------+
//|                                           Lock&&PipsingXR2.5.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "#Copyright © 2008, XrustSolution.#"
#property link      "#http://www.xrust.ucoz.net#"
#include <stdlib.mqh>
//-------------------------------------------------------------------+
extern string a="KEY PARAMETERS OF THE ADVISER";
extern bool      FullAuto=true;
extern string ha="the percentage of risk as% of deposit amount";
extern double    Risk=1;
extern string x="Permission to use the dynamic changes in the lot";
extern bool      Martin=false;
extern string gb="dynamic change lot factor. if <1 it increases lot , if > 1 it is lot decreases ";
extern double    MartinKoff=1;
extern string k="Trailing step on equity as% of the deposit";
extern double    EqwTralStep=0.03;
extern string í="minimum break between the opening of orders in minutes";
extern int       MinTradePause=1;
extern string m="Permission to restrict trade in time";
extern bool      TradeTime=false;
extern string n="Hour start of trading";
extern int       StartTrade=19;
extern string o="Hour late trade";
extern int       EndTrade=5;
extern string p="Permission to display information in the main window";
extern bool      ShowComment=true;
extern string r="switch alarm systems and security";
extern bool      MargineVarning=false;
extern string ss="switch emergency return";
extern bool      EmergencyReturn=false;
extern string rr="the percentage of the deposit for the emergency return";
extern double    EmergencyPersent=100;
extern string s="permission for drawing graphic elements";
extern bool      SetArrow=true;
extern string t="Key closing level position without loss";
extern bool      WithoutLoss=false;
int       TotalOrders=50;
//----Variables for KimIV funcions ---------------------------------+
bool NumberOfTry=3,UseSound=false,print=false;
string NameFileSound = "expert.wav";   // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
color  clOpenBuy     = Blue;           // Öâåò çíà÷êà îòêðûòèÿ Buy
color  clOpenSell    = Red;            // Öâåò çíà÷êà îòêðûòèÿ Sell
bool   MarketWatch=false;
bool   gbDisabled    = False;          // Áëîêèðîâêà
int BuyMagic1=2891;
int SellMagic1=73351;
static int PrevTime=0;double Lot;
double MinLot, MaxLot, MarginMinLot;   
int    MinLotDgts,period,GrossPeriod,GrossTrand=0;
int       Slippage=3;static double prr;
//------------------------------------------------------------------+
static double StartDepo, gEqviti;
static double gPriseAp,gPriseDn,gMidPrise;
int gFrChSize,tP;
static bool asd=false;
int BuySell_1=0,BuySell_2=0,BuySell_3=0;
int gCountBuy_1=1,gCountSell_1=1;
double lot;
static string gTime;
static bool Expdis=false;
int MaxOrd_1;
bool eqvtrade,TradeOfTime;
double Sredstva;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
void init()
  {
  MaxOrd_1=TotalOrders;
  StartDepo = AccountBalance(); 
  if(GlobalVariableCheck("stop")){GlobalVariableDel("stop");}
  if(!GlobalVariableCheck("multi")){GlobalVariableSet("multi",1);}else{
    double set=GlobalVariableGet("multi");
    set++;
    GlobalVariableSet("multi",set);
  }
  if(!GlobalVariableCheck("Risc")){GlobalVariableSet("Risc",Risk);}else{
    Risk=GlobalVariableGet("Risc");
  }
  if(!GlobalVariableCheck("pause")){GlobalVariableSet("pause",MinTradePause);}else{
    MinTradePause=GlobalVariableGet("pause");
  }  
  if(!GlobalVariableCheck("disable")){GlobalVariableSet("disable",0);}
  if(GlobalVariableCheck("stop")){GlobalVariableDel("stop");}
  if(GlobalVariableGet("multi")>1){SetArrow=false;} 
   return;
  }
//+------------------------------------------------------------------+
void deinit(){
  if(GlobalVariableCheck("stop")){GlobalVariableDel("stop");}

  Comment("  ");
  if(GlobalVariableCheck("multi")){
  double set=GlobalVariableGet("multi");
    if(set>1){
      set--;
      GlobalVariableSet("multi",set);
    }else{
      GlobalVariableDel("multi");
      GlobalVariableDel("disable");
      if(GlobalVariableCheck("Risc")){
        GlobalVariableDel("Risc");
      GlobalVariableDel("sredstva");   
      GlobalVariableDel("pause");     
      }
    }
  }
  if(Expdis){
    double Exdis=GlobalVariableGet("disable");
    Exdis--;
    GlobalVariableSet("disable",Exdis);      
    Expdis=false;
  }
return(0);} //deinit                   |
//+------------------------------------------------------------------+
int start()
  {
  //Bu(); 
  if(GlobalVariableGet("multi")>1){SetArrow=false;TradeOfTime=false;}else{TradeOfTime=TradeTime;}//óäàëÿåì ñòðåëêè â ìóëüòèðåæèìå
  if(gEqviti==0){gEqviti=AccountBalance();}//èñïðàâëÿåì ïåðåìåííóþ
// Ðàñ÷åò êîëè÷åñòâà îðäåðîâ îò ðèñêà è êîëè÷åñòâà óñòàíîâëåííûõ ñîâåòíèêîâ       
    MaxOrd_1=TotalOrders;
    if(MargineVarning){
      if(MaxOrd_1>AccountBalance()/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*CalcLotsAuto()*2*(GlobalVariableGet("multi")-GlobalVariableGet("disable")))){
      MaxOrd_1=(AccountBalance()/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*CalcLotsAuto()*2*(GlobalVariableGet("multi")-GlobalVariableGet("disable"))));}
    }else{
      if(MaxOrd_1>AccountBalance()/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*CalcLotsAuto()*(GlobalVariableGet("multi")-GlobalVariableGet("disable")))){
      MaxOrd_1=(AccountBalance()/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*CalcLotsAuto()*(GlobalVariableGet("multi")-GlobalVariableGet("disable"))));}
    }  
//çàïèñü êîëè÷åñòâà íàëè÷íûõ ñðåäñâ ïîñëå óäàëåíèÿ âñåõ îðäåðîâ   
   if(OrdersTotal()<1){
     Sredstva=AccountBalance();
     if(!GlobalVariableCheck("sredstva")){GlobalVariableSet("sredstva",Sredstva);}
     else{if(GlobalVariableGet("sredstva")!=Sredstva){GlobalVariableSet("sredstva",Sredstva);}}
   }
//îòêëþ÷åíèå îãðàíè÷åíèé ïî âðåìåíè ðàáîòû â ìóëüòèðåæèìå   
   if((GlobalVariableGet("multi")-GlobalVariableGet("disable"))>2){TradeOfTime=false;}
//ñèñòåìà áåçîïàñíîñòè è îãðàíè÷åíèÿ ïî ñ÷åòó   
   if(MargineVarning){if(Varning()){Sleep(10000);return(0);}}
//ñèñòåìà áåçîïàñíîñòè è îãðàíè÷åíèÿ ïî ñ÷åòó    
   //if(!IsDemo()&&!IsOptimization()&&!IsTesting()){
     //if(AccountNumber()!=74777){
     //  Comment("Bad Account!!!");
     //  Sleep(500);
     //  Comment("  ");
     //  return(0);
     //}
   //}  
   eqvtrade=false; 
//ïðåäîõðàíèòåëüíûé êëàïàí ñáðîñà íà óðîâåíü íà÷àëüíîãî áàëàíñà ïðè ïîæàðå  
  if(EmergencyReturn){
    if(AccountEquity()<=AccountBalance()/100*EmergencyPersent){
      CloseAll();
      double crash=GlobalVariableGet("disable");
      crash++;
      GlobalVariableSet("disable",crash);
      Expdis=true;
      Comment("System crashed! Restart!");
      Sleep(500);
      Comment("  ");
      return(0);           
    }
  }  
//óäàëÿåì çàïðåò íà òîðãîâëþ ïîñëå óäàëåíèÿ âñåõ îðäåðîâ 
  if(OrdersTotal()<1){
    if(GlobalVariableCheck("stop")){GlobalVariableDel("stop");}  
    gEqviti=AccountBalance(); 
  } 
//òðàëèì ýêâèòè
  if(EcvitiTral3(EqwTralStep)){
    return(0);}
  if(GlobalVariableCheck("stop")){return(0);}
//-----------------------------------------------------------------------------+
// Ðàñ÷åò êîëè÷åñòâà ñîâåòíèêîâ â çàâèñèìîñòè îò ðèñêà íà îäíó ñäåëêó          |
//-----------------------------------------------------------------------------+
  if(GlobalVariableGet("multi")>1){
    if(MaxOrd_1<15){
      if(!GlobalVariableCheck("disable")){
        GlobalVariableSet("disable",1);
      }else{
        if(!Expdis){
          double dis=GlobalVariableGet("disable");
          dis++;
          GlobalVariableSet("disable",dis);
          Expdis=true;
        }  
      } 
      Comment("\nMulti Chart Mode \n",
              "STOPPED\n",
              "Because AccountFreeMargin is few"
               );
      return(0);        
    }
    if(MaxOrd_1>18){
      if(Expdis){
        double Exdis=GlobalVariableGet("disable");
        Exdis--;
        if(Exdis<=0){Exdis=0;}
        GlobalVariableSet("disable",Exdis);      
        Expdis=false;
      }  
    }
  }  
//----------------------------------------------------------------------------  
  BuySell_1=0;BuySell_2=0;BuySell_3=0;
  Info();  
  //DelDamage();
  if((CountOpOrd("0")>0)&&(CountOpOrd("1")>0)){
    if(GrPorfit()>0){CloseAll();}
  }
//Óñòàíîâêà îðäåðîâ-------------------------------------------------------------------------------------  
  if(!GlobalVariableCheck("stop")){
  if(NevBar()){
       if(SetArrow){if(CountOpOrd("0")>0){SetArrow("NullProfitDot",4,1,0,NullDot(),White);}}
    if(TradeTime()){
      IfZZ();
      if(BuySell_1>0){
        if(CountOpOrd("0")<MaxOrd_1&&TimeOfTrade()){
          lot=CalcLotsAuto();
          if(CountOpOrd("0")>2){if(Martin){lot=OrdersLot();}}
          if(FullAuto){if(CountOpOrd("0")>=MaxOrd_1/10){lot=OrdersLot();}}
          if(CountOpOrd("0")<1){OpenPosition("",0,lot,0,0,BuyMagic1);}
          else{
          if(PorfitBuySell(0)>PorfitBuySell(1)){OpenPosition("",1,lot,0,0,SellMagic1);}
          if(PorfitBuySell(0)<PorfitBuySell(1)){OpenPosition("",0,lot,0,0,BuyMagic1);}
          }
        }
      }
      if(BuySell_1<0){
        if(CountOpOrd("0")<MaxOrd_1&&TimeOfTrade()){
          lot=CalcLotsAuto();
          if(CountOpOrd("0")>2){if(Martin){lot=OrdersLot();}}
          if(FullAuto){if(CountOpOrd("0")>=MaxOrd_1/10){lot=OrdersLot();}}
          if(CountOpOrd("0")<1){OpenPosition("",1,lot,0,0,SellMagic1);}
          else{
          if(PorfitBuySell(0)>PorfitBuySell(1)){OpenPosition("",1,lot,0,0,SellMagic1);}
          if(PorfitBuySell(0)<PorfitBuySell(1)){OpenPosition("",0,lot,0,0,BuyMagic1);}
          }
        }
      }
    }
  }
  }
//-------------------------------------------------------------------------------------------------------
   return(0);
  } 
int   MInProfit=0;
//-----------------------------------------------------------------------------+
// Óäàëåíèå ñàìîãî áîëüøîãî ëîñÿ                                               |
//-----------------------------------------------------------------------------+
void DelBigestLoss(){
static double gBigLoss=0;
double BigLoss=0,profit=0,Lossticket,FarLot,FarProfit;
int Ticket[];int count=0; 
if(OrdersTotal()<2){return;gBigLoss=0;}
double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
for(int i=0;i<OrdersTotal();i++){
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
    if(OrderSymbol()==Symbol()){
      if(OrderProfit()<0){
        if((gBigLoss<0&&OrderProfit()>gBigLoss)||(gBigLoss==0)){
        if(OrderProfit()<BigLoss){
          BigLoss=OrderProfit();
          Lossticket=OrderTicket();
          FarLot=OrderLots();
          FarProfit=OrderProfit();
        }
        }
      }
    }
  }
}
if(FarLot<=MinLot){gBigLoss=0;return;}
for(int n=0;n<OrdersTotal();n++){
  if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){  
    if(OrderSymbol()==Symbol()){
      if(OrderProfit()>0){
        profit=profit+OrderProfit();
        count++;
        Ticket[count]=OrderTicket();
        profit=NormalizeDouble(profit,1);
      }
    }
  }
} 
//if(count==1){OneOrdTral(TralStep);return;}
if(profit+BigLoss<0){gBigLoss=BigLoss;return;}
int lot=(FarLot/MinLot);
double MinFarProfit=FarProfit/lot;
int y;
double lotstep;
for(y=lot;y>0;y--){
  if(profit+(MinFarProfit*y)>MathAbs(MinFarProfit)){
    lotstep=MinLot*y;
    break;
  }
}      
if(lotstep>=MinLot){
  ArrayResize(Ticket,count+1);         
  for(int x=0;x<count+1;x++){if(OrderSelect(Ticket[x],SELECT_BY_TICKET)){if(OrderCloseTime()==0){del(OrderTicket());}}}     
  if(OrderSelect(Lossticket,SELECT_BY_TICKET)){if(OrderCloseTime()==0){dellot(Lossticket,lotstep);return(true);}}     
}      
return;     
}
//-----------------------------------------------------------------------------+
//Óäàëÿåò ðûíî÷íûé îðäåð ñ óêàçàííûì åé òèêåòîì è ëîòîì                        |
//+----------------------------------------------------------------------------+
void dellot(int ticket,double lot){int err;
int step;
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.1){step=1;}
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.01){step=2;}
lot=NormalizeDouble(lot,step);
 for(int i=0;i<1;i++){
   GetLastError();//îáíóëÿåì îøèêó
   OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
   string symbol = OrderSymbol();
   if(OrderType()==OP_BUY){RefreshRates();
     double prise = MarketInfo(symbol,MODE_BID);
     if(!OrderClose(ticket,lot,prise,3,Green)){err = GetLastError();}}
   if(OrderType()==OP_SELL){RefreshRates();
     prise = MarketInfo(symbol,MODE_ASK);
     if(!OrderClose(ticket,lot,prise,3,Green)){err = GetLastError();}}
 if(err == 0){PlaySound("expert.wav");break;} 
 if(err != 0){PlaySound("timeout.wav");Print("Error for Close Funtion =",err);} 
 while(!IsTradeAllowed()){Sleep(5000);}// åñëè ðûíîê çàíÿò òî ïîäîæäåì 5 ñåê 
 if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
 } 
}
//-----------------------------------------------------------------------------+
// Èñùåò ñàìûé äàëüíèé îðäåð ñ îòðèöàòåëüíîé ïðèáûëüþ                          |
//-----------------------------------------------------------------------------+
int FarOrder(){double dist=0;int tick=0;
//if(OrdersTotal()<1)return;
for(int i=0;i<OrdersTotal();i++){
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
    if(OrderSymbol()==Symbol()){
      if(OrderProfit()<0){
        RefreshRates();
        if((MathAbs(OrderOpenPrice()-Ask)/Point)>dist){
          dist=(MathAbs(OrderOpenPrice()-Ask))/Point;
          tick=OrderTicket();
        }
      }
    }
  }
}
return(tick);
}
//+----------------------------------------------------------------------------+
// Óäàëåíèå ñàìîãî äàëüíåãî îðäåðà                                             +
//-----------------------------------------------------------------------------+
bool DelDamage(){double FarProfit=1,FarLot=0,profit=0;int count=-1,x;
//if(OrdersTotal()<1)return;
double spred=NormalizeDouble(MarketInfo(Symbol(),MODE_SPREAD)*MarketInfo(Symbol(),MODE_TICKVALUE),Digits);
double PipsPrise=MarketInfo(Symbol(),MODE_TICKVALUE);
double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
int Ticket[];
  if(FarOrder()>0){
   if(OrderSelect(FarOrder(),SELECT_BY_TICKET)){if(OrderCloseTime()==0){FarLot=OrderLots();FarProfit=OrderProfit();}}
  }
  if(FarProfit<0){
   profit=0;
   for(int n=0;n<OrdersTotal();n++){
     if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){  
       if(OrderSymbol()==Symbol()){
         if(OrderProfit()>0){
            profit=profit+OrderProfit();
            count++;
            Ticket[count]=OrderTicket();
            profit=NormalizeDouble(profit,1);
            FarProfit=NormalizeDouble(FarProfit,1);
          }
        }
      }
    }             
            if(profit+FarProfit>spred+(MInProfit*Bid*PipsPrise)){
              ArrayResize(Ticket,count+1);         
              for(x=0;x<count+1;x++){if(OrderSelect(Ticket[x],SELECT_BY_TICKET)){if(OrderCloseTime()==0){del(OrderTicket());}}}     
              if(OrderSelect(FarOrder(),SELECT_BY_TICKET)){if(OrderCloseTime()==0){del(FarOrder());return(true);}}
            }
            if(profit+FarProfit<0&&profit>0){
              if(FarLot<MinLot*2){return(false);}
              int lot=(FarLot/MinLot);
              double MinFarProfit=FarProfit/lot;
              int y;
              double lotstep;
              for(y=lot;y>0;y--){
                if(profit+(MinFarProfit*y)>0){
                  lotstep=MinLot*y;
                  break;
                }
              }
              if(lotstep>=MinLot){
                ArrayResize(Ticket,count+1);         
                for(x=0;x<count+1;x++){if(OrderSelect(Ticket[x],SELECT_BY_TICKET)){if(OrderCloseTime()==0){del(OrderTicket());}}}     
                if(OrderSelect(FarOrder(),SELECT_BY_TICKET)){if(OrderCloseTime()==0){dellot(FarOrder(),lotstep);return(true);}}     
              }          
            }
          
  }  
return(false);  
}   
//-----------------------------------------------------------------------------+
// Òèò ïîñëåäíåãî óñòàíîâëåííîãî îðäåðà                                        |
//-----------------------------------------------------------------------------+   
double LastOrderdPrise(){int time=0;double pri=0;
for(int i=0;i<OrdersTotal();i++){
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
    if(OrderSymbol()==Symbol()){
      if(OrderOpenTime()>time){
        time=OrderOpenTime();
        pri=OrderOpenPrice();
      }
    }
  }
}    
return(pri);
}
//-----------------------------------------------------------------------------+
// Òî÷êà ðàâíîâåñèÿ                                                            |
//-----------------------------------------------------------------------------+
double NullDot(){double prise=0;int count=0,countlot=0;
if(OrdersTotal()<1){return(Bid);}
double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
for(int i=0;i<OrdersTotal();i++){
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
    if(OrderSymbol()==Symbol()){
      countlot=(OrderLots()/MinLot);
      count=count+countlot;
      prise=prise+(OrderOpenPrice()*countlot);
    }
  }
}
prise=prise/count;
return(prise);
}  
//+----------------------------------------------------------------------------+
//       Óäàëÿåò ñàìîãî áîëüøîãî ëîñÿ                                          +
//+----------------------------------------------------------------------------+ 
void DelBigestLoss2(){
if(CountOpOrd("0")<2){return;}
double loss=0,profit=0,GrProfit=0;int n,x,y,ticket=0,count=0;
int Ticket[50];
ArrayInitialize(Ticket,0);
   for(n=0;n<OrdersTotal();n++){
     if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){  
       if(OrderSymbol()==Symbol()){
         if(OrderProfit()+OrderSwap()+OrderCommission()>0){
           profit=profit+OrderProfit()+OrderSwap()+OrderCommission();
         }
         else{
           if(OrderProfit()+OrderSwap()+OrderCommission()<loss){
             loss=OrderProfit()+OrderSwap()+OrderCommission();
             ticket=OrderTicket();         
           }
         }  
       }  
     }    
   }
   if(ticket==0){return;}
   if(profit+loss>=0){
     profit=0;
   for(x=0;x<OrdersTotal();x++){  
     for(n=0;n<OrdersTotal();n++){
       if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){  
         if(OrderProfit()+OrderSwap()+OrderCommission()>0){
           profit=profit+OrderProfit()+OrderSwap()+OrderCommission();
           if(OrderProfit()+OrderSwap()+OrderCommission()<profit){
             profit=OrderProfit()+OrderSwap()+OrderCommission();
           }
         }
       }
     }
     if(profit!=0){
     Ticket[count]=OrderTicket();
     count++;
     for(n=0;n<1;n++){GrProfit=GrProfit+profit;}
     if(GrProfit+loss>=0){
       ArrayResize(Ticket,count+1);      
       Comment(GrProfit," = ",loss);   
       for(y=0;y<count+1;y++){if(OrderSelect(Ticket[y],SELECT_BY_TICKET)){if(OrderCloseTime()==0){del(OrderTicket());}}}     
       if(OrderSelect(ticket,SELECT_BY_TICKET)){if(OrderCloseTime()==0){del(ticket);return(true);}}
     } 
     
     }//if(profit!=0){
   }//for(x=0;x<OrdersTotal();x++){           
   }//if(profit+loss>=0){
}  
//+----------------------------------------------------------------------------+
// Ïîäñ÷èòûâàåò Îáùóþ íå ðåàëèçîâàííóþ ïðèáûëü íà äàííîì èíñòðóìåíòå           +
//-----------------------------------------------------------------------------+
double GrPorfit(){double grpr=0;
   for(int n=0;n<OrdersTotal();n++){
     if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){  
       if(OrderSymbol()==Symbol()){
         grpr=grpr+OrderProfit()+OrderSwap()+OrderCommission();
       }  
     }    
   } 
return(grpr);
}  
//-----------------------------------------------------------------------------+
// Ñðåäíåå àðèôìåòè÷åñêîå ëîòà óñòàíîâëåííûõ îðäåðîâ                           |
//-----------------------------------------------------------------------------+
double OrdersLot(){int count=0;double Lt=0,lots=0;
double StepLot=MarketInfo(Symbol(),MODE_LOTSTEP);
if(StepLot==0.01){int step=2;}else{step=1;}
//if(OrdersTotal()<5){return(CalcLotsAuto());}
  for(int i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      if(OrderSymbol()==Symbol()){
        if(OrderCloseTime()==0){
          Lt=Lt+OrderLots();
          count++;
        }  
      }  
    }
  }
  lots=NormalizeDouble((Lt/(count*MartinKoff)),step);
  if(lots<=MarketInfo(Symbol(),MODE_MINLOT)){lots=MarketInfo(Symbol(),MODE_MINLOT);}
return(lots);
}  
//+------------------------------------------------------------------+
//| Ðàñ÷åò ëîòà ñîîòâ ðèñêó è áàëàíñó                                |
//+------------------------------------------------------------------+
double CalcLotsAuto(){double LotOpt,LotNeOpt,Zalog;
   RefreshRates();
   double Set=GlobalVariableGet("multi")-GlobalVariableGet("disable");
   double Sredstwa =GlobalVariableGet("sredstva");
   double lott=MarketInfo(Symbol(),MODE_MARGINREQUIRED)/1000;
   double Marga=AccountFreeMargin();
   double Balans=AccountBalance();
   double LotMin=MarketInfo(Symbol(),MODE_MINLOT);
   double LotMax=MarketInfo(Symbol(),MODE_MAXLOT);
   double StepLot=MarketInfo(Symbol(),MODE_LOTSTEP);
   double StopLv=AccountStopoutLevel();
   int PrsMinLot=1000*LotMin;
   if(Sredstwa==0){Sredstwa=AccountBalance();GlobalVariableSet("sredstva",Balans);}
   if(GlobalVariableGet("multi")>1){Risk=GlobalVariableGet("Risc");}
   if(Risk<0)Risk=0;
   if(Risk>100)Risk=100; 
   if(StepLot==0.01){int step=2;}else{step=1;}  
   if(Set<1){Set=1;}
//---------------------------     
   Zalog=(Sredstwa*(Risk/100))/Set;
   LotOpt=NormalizeDouble((Zalog/1000),step);
   if(LotOpt>LotMax)LotOpt=LotMax;
   if(LotOpt<LotMin)LotOpt=LotMin;
   //if(Marga<Sredstva/2){return(0);}
   return(LotOpt);
}  
//+------------------------------------------------------------------+
//| Óñòàíîâêà ñòðåëîê                                                |
//+------------------------------------------------------------------+
void SetArrow(string nm,int kod,int razm,int bar,double prs,color col){
//if(!DriveArrow)return;
string Name=StringConcatenate(nm,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS));
ObjectCreate(Name,OBJ_ARROW,0,0,0,0,0,0,0);
ObjectSet(Name,OBJPROP_ARROWCODE,kod);
ObjectSet(Name,OBJPROP_STYLE,DRAW_ARROW);
ObjectSet(Name,OBJPROP_TIME1,Time[bar]);
ObjectSet(Name,OBJPROP_PRICE1,prs);
ObjectSet(Name,OBJPROP_WIDTH,razm);
ObjectSet(Name,OBJPROP_COLOR,col);
return;}
//-----------------------------------------------------------------------------+
// Äåòåêòîð ìóëüòè ðåæèìà ñ÷åò÷èê óñòàíîâëåííûõ ñîâåòíèêîâ                     |
//-----------------------------------------------------------------------------+
string MutiDet(){
  double set =GlobalVariableGet("multi")-GlobalVariableGet("disable");
  string mode=StringConcatenate("MULTI CHART MODE \n",DoubleToStr(set,0)," EXPERT ENABLES");
  string mode2="SINGLE CHART MODE";
  if(GlobalVariableGet("multi")<2){return(mode2);}
  if(GlobalVariableGet("multi")>1){return(mode);}                                         
}
//-----------------------------------------------------------------------------+
// Âûâîäèò èíôîðìàöèþ íà ýêðàí                                                 |
//-----------------------------------------------------------------------------+
void Info(){
Comment(
        "ACCOUNT BALANSE                                 ="+(DoubleToStr(AccountBalance()+PorfitBuySell(0)+PorfitBuySell(1),1))+"$\n"+
        "ACCOUNT FREE MARGIN                         ="+(DoubleToStr(AccountFreeMargin(),1))+"$\n"+
        "CURRENT PROFIT                                    ="+(DoubleToStr(GrPorfit(),1))+"$\n"+
        "PROFIT FROM THE START OF TRADING  ="+(DoubleToStr(AccountBalance()-StartDepo,1))+"$\n"+
        "ALOVED ORDERS FOR THE OPENING      ="+MaxOrd_1+"Pc.\n"+
        "OPEN ORDERS                                         ="+CountOpOrd("0")+"Pc.\n"+
        gTime,"\n", 
        MutiDet(),"\n",
        "Risk = ",GlobalVariableGet("Risc")," %"
        );     
return;
}
//-----------------------------------------------------------------------------+
// Âûâîäèò ïðåäóïðåæäàþùåå ñîîáùåíèå                                           |
//-----------------------------------------------------------------------------+
bool Varning(){int ord;double depo,rick;
double Set2=GlobalVariableGet("multi")-GlobalVariableGet("disable");
if(Set2<1){Set2=1;}
  if(MaxOrd_1<15){
      depo=MarketInfo(Symbol(),MODE_MARGINREQUIRED)*CalcLotsAuto()*30;
      ord=AccountBalance()/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*CalcLotsAuto()*2);
      rick=NormalizeDouble((AccountBalance()/Set2/15/MarketInfo(Symbol(),MODE_MARGINREQUIRED)*10),1);
        Alert("THERE IS NOT ENOUGH MEANS FOR THE ACCOUNT"+"\n"+
        "For such quantity of warrants it is necessary"+"\n"+
        "The starting Deposit ="+depo+" $\n"+
        "On your means it is possible to open "+ord+" Orders"+"\n"+
        "Fill up your account please"+"\n"+
        "Or reduce quantity of warrants"+"\n"+
        "Or reduce the Risk of lower ="+DoubleToStr(rick,2)+" % \n"+
        "Or disconnect the alarm system");
    return(true);
  }
return(false);
}
//-----------------------------------------------------------------------------+
// Ôóíêöèÿ êîíòðîëÿ âðåìåíè òîðãîâëè                                           |
//-----------------------------------------------------------------------------+
bool TradeTime(){
int StartTradeHour=StartTrade;
int EndTradeHour=EndTrade;
if(!TradeOfTime){
gTime=StringConcatenate("the end of trading on Friday in ",DoubleToStr(EndTradeHour,0),":00 am");
if(DayOfWeek()==5){if(TimeHour(TimeCurrent())>EndTradeHour){return(false);}}
if(DayOfWeek()==1){if(TimeHour(TimeCurrent())<2){return(false);}}
if(DayOfWeek()==6||DayOfWeek()==0){return(false);}
return(true);}
if(DayOfWeek()==5){StartTradeHour=0;if(TimeHour(TimeCurrent())>EndTradeHour){return(false);}}else{StartTradeHour=StartTrade;}
if(DayOfWeek()==1){if(TimeHour(TimeCurrent())<2){gTime="Start tarde in  01:00 am";return(false);}}
if(DayOfWeek()==6||DayOfWeek()==0){return(false);}
if(StartTradeHour<EndTradeHour){
  if(TimeHour(TimeCurrent())>=StartTradeHour&&TimeHour(TimeCurrent())<EndTradeHour
    ||(CountOpOrd("0")+CountOpOrd("1"))){
    gTime=StringConcatenate("By the end of trading session :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," hours");
    return(true);}}
if(StartTradeHour>EndTradeHour){
  if(TimeHour(TimeCurrent())>=StartTradeHour||TimeHour(TimeCurrent())<EndTradeHour
    ||(CountOpOrd("0")+CountOpOrd("1"))){
    gTime=StringConcatenate("By the end of trading session :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," hours");
    return(true);}}    
gTime=StringConcatenate("resting to : ",StartTradeHour,": 00");    
return(false);
}
//-----------------------------------------------------------------------------+
// Óñëîâèÿ âõîäà â ðûíîê                                                       |
//-----------------------------------------------------------------------------+

int IfZZ(){static int napr=0;  
//if(iClose(Symbol(),240,0)<iOpen(Symbol(),240,0)){ 
if(iClose(Symbol(),60,0)<iOpen(Symbol(),60,0)){  
if(iClose(Symbol(),30,0)<iOpen(Symbol(),30,0)){
 if(iClose(Symbol(),15,0)<iOpen(Symbol(),15,0)){
  //if(iClose(Symbol(),5,1)<iOpen(Symbol(),5,0)){
  //if(iCustom(Symbol(),0,"my_Fractals",1,2)!=0){
   //if(napr>0){
   BuySell_1=-1;
   gCountBuy_1++;
   gCountSell_1=1;
return(1);}}}//}//}
//if(iClose(Symbol(),240,0)>iOpen(Symbol(),240,0)){
if(iClose(Symbol(),60,0)>iOpen(Symbol(),60,0)){
if(iClose(Symbol(),30,0)>iOpen(Symbol(),30,0)){
 if(iClose(Symbol(),15,0)>iOpen(Symbol(),15,0)){
  //if(iClose(Symbol(),5,1)>iOpen(Symbol(),5,0)){
  //if(iCustom(Symbol(),0,"my_Fractals",0,2)!=0){
   //if(napr<0){
   BuySell_1=1;
   gCountBuy_1=1;
   gCountSell_1++; 
return(-1);}}}//}//}
BuySell_1=0;
napr=0;
return(0);
}
//+------------------------------------------------------------------+
//|Òðàë ïî ýêâèòè                                                    |
//+------------------------------------------------------------------+
bool EcvitiTral3(double EqStep){static double EqvTralStep=0.01;
if(OrdersTotal()<1){gEqviti=AccountBalance();if(FullAuto){EqvTralStep=CalcLotsAuto();}else{EqvTralStep=EqStep;}return(false);}
if(FullAuto){
 if(EqvTralStep<CalcLotsAuto()*(GlobalVariableGet("multi")-GlobalVariableGet("disable"))/2){
   EqvTralStep=CalcLotsAuto()*(GlobalVariableGet("multi")-GlobalVariableGet("disable")/2);
 }
}else{
 if(EqvTralStep<EqStep*(GlobalVariableGet("multi")-GlobalVariableGet("disable"))/2){
   EqvTralStep=EqStep*(GlobalVariableGet("multi")-GlobalVariableGet("disable")/2);
 }
}
//EqvTralStep=EqvTralStep*(GlobalVariableGet("multi")-GlobalVariableGet("disable"));
  if(CountOpOrd("0")>2||WithoutLoss){
    if(AccountEquity()>=AccountBalance()){
      if(AccountEquity()-AccountBalance()>((AccountBalance()/100)*((EqvTralStep*2)+EqvTralStep))){EqvTralStep=EqvTralStep*2;eqvtrade=true;}
      if(AccountEquity()>(gEqviti+(gEqviti/100*EqvTralStep))){
        gEqviti=gEqviti+(gEqviti/200*EqvTralStep);
        if(!GlobalVariableCheck("stop")){GlobalVariableSet("stop",0);}
      }
      if(NormalizeDouble(AccountEquity(),1)>=NormalizeDouble(gEqviti,1)){CloseAll();GlobalVariableDel("stop");return(false);}
      else{Comment(
                 "EQUITY TRALING MODE\n",
                 "EQUITY TRALING STEP   =",EqvTralStep," %",
                 "\nACCOUNT BALANS         = ",AccountBalance(),
                 "\nCLOSE LEVEL                  = ",gEqviti,
                 "\nACCOUNT EQUITY        = ",AccountEquity(),
                 "\nNEXT STEP                     = ",gEqviti+(gEqviti/100*EqvTralStep));
                 return(true);
      }
    }else{GlobalVariableDel("stop");if(FullAuto){EqvTralStep=CalcLotsAuto();}else{EqvTralStep=EqStep;}} 
  }else{
    if(AccountEquity()>AccountBalance()){
      if(AccountEquity()-AccountBalance()>((AccountBalance()/100)*((EqvTralStep*2)+EqvTralStep))){EqvTralStep=EqvTralStep*2;eqvtrade=true;}
      if(AccountEquity()>(gEqviti+(gEqviti/100*EqvTralStep))){
        gEqviti=gEqviti+(gEqviti/200*EqvTralStep);       
        if(!GlobalVariableCheck("stop")){GlobalVariableSet("stop",0);}
      }
      if(AccountEquity()<=gEqviti){CloseAll();GlobalVariableDel("stop");return(false);}
      else{Comment(
                 "EQUITY TRALING MODE\n",
                 "EQUITY TRALING STEP   =",EqvTralStep," %",
                 "\nACCOUNT BALANS         = ",AccountBalance(),
                 "\nCLOSE LEVEL                  = ",gEqviti,
                 "\nACCOUNT EQUITY        = ",AccountEquity(),
                 "\nNEXT STEP                     = ",gEqviti+(gEqviti/100*EqvTralStep));
                 return(true);
      }
    }else{GlobalVariableDel("stop");if(FullAuto){EqvTralStep=CalcLotsAuto();}else{EqvTralStep=EqStep;}}  
  }
return(false);
} 
//+------------------------------------------------------------------+
//| ïðîâåðÿåò ðûíî÷íûé îðäåð íà ïðèíàäëåæíîñòü ñîãëàñíî óñëîâèÿì     |
//+------------------------------------------------------------------+
bool IfOrder(string Sy="",int Typ=-1,int Magik=-1){
if(Sy=="0"){Sy=Symbol();}
  if(OrderSymbol()==Sy||Sy==""){
    if(OrderType()==Typ||Typ==(-1)){
      if(OrderMagicNumber()==Magik||Magik==(-1)){
        return(true);
      }
    }
  }
 return(false); 
}
//+------------------------------------------------------------------+
//| Ïîäñ÷èòûâàåò êîëè÷åñòâî îòêðûòûõ îðäåðîâ ñîãëàñíî óñëîâèÿì       |
//+------------------------------------------------------------------+
int CountOpOrd(string Sy="",int Typ=-1,int Magik=-1){int count=0;
if(Sy=="0"){Sy=Symbol();}
  for(int i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      if(OrderSymbol()==Sy||Sy==""){
        if(OrderType()==Typ||Typ==(-1)){
          if(OrderMagicNumber()==Magik||Magik==(-1)){
            if(OrderCloseTime()==0){
              count++;
            }  
          }
        }
      }
    }
  }
 return(count);  
}
//+----------------------------------------------------------------------------+
// Ïîäñ÷èòûâàåò Îáùóþ íå ðåàëèçîâàííóþ ïðèáûëü íà äàííîì èíñòðóìåíòå           +
//-----------------------------------------------------------------------------+
double PorfitBuySell(int tip){double grpr=-1;
if(OrdersTotal()<1){return(-1);}
   for(int n=OrdersTotal()+1;n>=0;n--){
     if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){  
       if(IfOrder("0",tip)){grpr=grpr+OrderProfit()+OrderSwap()+OrderCommission();}
     }    
   } 
return(grpr);
}
//+----------------------------------------------------------------------------+
// Ïîäñ÷èòûâàåò Îáùóþ íå ðåàëèçîâàííóþ ïðèáûëü íà äàííîì èíñòðóìåíòå           +
//-----------------------------------------------------------------------------+
double GlobalProfitBuySell(int tip){double grpr=0;
if(OrdersTotal()<1){return(-1);}
   for(int n=OrdersTotal()+1;n>=0;n--){
     if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){  
       grpr=grpr+OrderProfit()+OrderSwap()+OrderCommission();
     }    
   } 
return(grpr);
}
//+----------------------------------------------------------------------------+
// Çàêðûâàåò âñå îðäåðà íà äàííîì èíñòðóìåíòå                                  +
//-----------------------------------------------------------------------------+
void CloseAll(){
 while(OrdersTotal()>0){
   double profit=1000000;
   for(int n=OrdersTotal()+1;n>=0;n--){
     if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){  
       if(OrderProfit()<profit){
         profit=OrderProfit();
       }
     }    
   } 
  del(OrderTicket()); 
 }
return;    
}
//+----------------------------------------------------------------------------+
// Çàäàåò ïàóçó ìåæäó óñòàíîâêàìè îðäåðîâ                                      +  
//-----------------------------------------------------------------------------+
bool TimeOfTrade(){int count=0,typ,hc=0;double OpPrs=0,distanse=0,shir;
if(OrdersHistoryTotal()<2&&CountOpOrd("0")<1){return(true);}
   double a=iCustom(Symbol(),0,"Center_of_Gravity",12,0,12);
   double b=iCustom(Symbol(),0,"Center_of_Gravity",12,0,0);
if(GlobalVariableCheck("pause")){int pause=GlobalVariableGet("pause");}
else{pause=MinTradePause;GlobalVariableSet("pause",MinTradePause);}
  for(int n=0;n<OrdersTotal();n++){
    if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){  
      if(OrderSymbol()==Symbol()){
        if(OrderOpenTime()>count){count=OrderOpenTime();OpPrs=OrderOpenPrice();typ=OrderType();}
      }
    }    
  } 
if(CountOpOrd("0")<1){
  if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY)){
    if(TimeCurrent()-OrderCloseTime()>Volume[1]){
      return(true);
    }else{return(false);}  
  }
}  
shir=((a-b)/Point)*((typ*2-1)*(-20));  
if((MathAbs(OpPrs-Bid)/Point)<10){return(false);}
if(OpPrs!=0){distanse=(MathAbs(OpPrs-Bid)/Point)/((Bid*4/Digits));}  
if((TimeCurrent()-count)>((MinTradePause*distanse+1+shir+(Volume[1]/(GlobalVariableGet("multi")-GlobalVariableGet("disable"))))*60)){return(true);}
return(false);
}
//-----------------------------------------------------------------------------+
// Ôóíêöèÿ êîíòðîëÿ íîâîãî áàðà                                                |
//-----------------------------------------------------------------------------+
bool NevBar(){
   static int PrevTime=0;
   if (PrevTime==Time[0]) return(false);
   PrevTime=Time[0];
   return(true);} 
//-----------------------------------------------------------------------------+
//Óäàëÿåò ðûíî÷íûé îðäåð ñ óêàçàííûì åé òèêåòîì                                |
//+----------------------------------------------------------------------------+
void del(int ticket){int err;
 for(int i=0;i<1;i++){
   GetLastError();//îáíóëÿåì îøèêó
   OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
   string symbol = OrderSymbol();
   if(OrderType()==OP_BUY){RefreshRates();
     double prise = MarketInfo(symbol,MODE_BID);
     if(!OrderClose(ticket,OrderLots(),prise,3,Green)){err = GetLastError();}}
   if(OrderType()==OP_SELL){RefreshRates();
     prise = MarketInfo(symbol,MODE_ASK);
     if(!OrderClose(ticket,OrderLots(),prise,3,Green)){err = GetLastError();}}
 if(err == 0){PlaySound("expert.wav");break;} 
 if(err != 0){PlaySound("timeout.wav");Print("Error for Close Funtion =",err);} 
 while(!IsTradeAllowed()){Sleep(5000);}// åñëè ðûíîê çàíÿò òî ïîäîæäåì 5 ñåê 
 if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
 } 
}
//-----------------------------------------------------------------------------+
//___________________ÊÈÌÓ_______ÐÅÑÏÅÊÒ________È_____ÓÂÀÆÓÕÀ___________________|
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.09.2005                                                     |
//|  Îïèñàíèå : Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë                           |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    m - òåêñò ñîîáùåíèÿ                                                     |
//+----------------------------------------------------------------------------+
void Message(string m) {
  //Comment(m);
  if (StringLen(m)>0) Print(m);
}

//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 28.11.2006                                                     |
//|  Îïèñàíèå : Ìîäèôèêàöèÿ îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà.           |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    pp - öåíà óñòàíîâêè îðäåðà                                              |
//|    sl - öåíîâîé óðîâåíü ñòîïà                                              |
//|    tp - öåíîâîé óðîâåíü òåéêà                                              |
//|    ex - äàòà èñòå÷åíèÿ                                                     |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
  bool   fm;
  color  cl=White;
  double op, pa, pb, os, ot;
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;

  if (pp<=0) pp=OrderOpenPrice();
  if (sl<0 ) sl=OrderStopLoss();
  if (tp<0 ) tp=OrderTakeProfit();
  
  pp=NormalizeDouble(pp, dg);
  sl=NormalizeDouble(sl, dg);
  tp=NormalizeDouble(tp, dg);
  op=NormalizeDouble(OrderOpenPrice() , dg);
  os=NormalizeDouble(OrderStopLoss()  , dg);
  ot=NormalizeDouble(OrderTakeProfit(), dg);
  //if(OrderType()==0||OrderType()==2||OrderType()==4){if(Ask-stoplevel<sl||Bid+stoplevel>tp){return;}}
  //if(OrderType()==1||OrderType()==3||OrderType()==5){if(Bid+stoplevel>sl||Ask-stoplevel<tp){return;}}
  //if(MathAbs(sl-Ask)<stoplevel||MathAbs(tp-Ask)<stoplevel){return;}
  if(pp==op&&sl==os&&tp==ot){return;}
  if ((sl==os&&(os!=0||sl!=0))&& (tp==ot&&(ot!=0||tp!=0))) {return;}
    for (it=1; it<=NumberOfTry; it++) {
      //if ((!IsExpertEnabled() || IsStopped())) break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
      if (fm) {
        if (UseSound) PlaySound(NameFileSound); break;
      } else {
        er=GetLastError();
        pa=MarketInfo(OrderSymbol(), MODE_ASK);
        pb=MarketInfo(OrderSymbol(), MODE_BID);
        if(print){Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
                  Print("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),
                        "  op="+GetNameOP(OrderType()),"  pp=",pp,"  sl=",sl,"  tp=",tp);}
        Sleep(1000*10);
        //if(er==130){del(OrderTicket());}
      }
    }
  //}
}

//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 06.03.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèé                          |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//|    ot - âðåìÿ îòêðûòèÿ             ( 0   - ëþáîå âðåìÿ îòêðûòèÿ)           |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.09.2005                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè                      |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
  switch (op) {
    case OP_BUY      : return("Buy");
    case OP_SELL     : return("Sell");
    case OP_BUYLIMIT : return("BuyLimit");
    case OP_SELLLIMIT: return("SellLimit");
    case OP_BUYSTOP  : return("BuyStop");
    case OP_SELLSTOP : return("SellStop");
    default          : return("Unknown Operation");
  }
}
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 10.04.2008                                                     |
//|  Îïèñàíèå : Îòêðûâàåò ïîçèöèþ ïî ðûíî÷íîé öåíå.                            |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (NULL èëè "" - òåêóùèé ñèìâîë)          |
//|    op - îïåðàöèÿ                                                           |
//|    ll - ëîò                                                                |
//|    sl - óðîâåíü ñòîï                                                       |
//|    tp - óðîâåíü òåéê                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
void OpenPosition(string sy, int op, double ll, double Sl=0, double Tp=0, int mn=0) {
  color    clOpen;
  datetime ot;
  double   pp, pa, pb, tp ,sl;
  int      dg, err, it, ticket=0;
  string   lsComm="";
  

  
  if (sy=="" || sy=="0") sy=Symbol();
  int stoplevel=MarketInfo(sy,MODE_STOPLEVEL);
  int spread=MarketInfo(sy,MODE_SPREAD);
  if(Tp!=0&&Tp<stoplevel+spread){Tp=stoplevel;}  
  if (op<1){
   if (Sl>0) {sl=MarketInfo(Symbol(),MODE_ASK)-Sl*Point; }else {sl=0;}
   if (Tp>0) {tp=MarketInfo(Symbol(),MODE_ASK)+Tp*Point; }else{ tp=0;}
  }else{
   if (Sl>0) {sl=MarketInfo(Symbol(),MODE_BID)+Sl*Point; }else{ sl=0;}
   if (Tp>0) {tp=MarketInfo(Symbol(),MODE_BID)-Tp*Point;} else {tp=0;}}  
   
  if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
  for (it=1; it<=NumberOfTry; it++) {
    if (IsStopped()) {
      Print("OpenPosition(): Îñòàíîâêà ðàáîòû ôóíêöèè");
      break;}
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    dg=MarketInfo(sy, MODE_DIGITS);
    pa=MarketInfo(sy, MODE_ASK);
    pb=MarketInfo(sy, MODE_BID);
    if (op==OP_BUY) pp=pa; else pp=pb;
    pp=NormalizeDouble(pp, dg);
    ot=TimeCurrent();
    if (MarketWatch)
      ticket=OrderSend(sy, op, ll, pp, Slippage, 0, 0, lsComm, mn, 0, clOpen);
    else
      ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);
    if (ticket>0) {
      if (UseSound) PlaySound(NameFileSound); break;
    } else {
      err=GetLastError();
      if (pa==0 && pb==0) Message("Ïðîâåðüòå â Îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy);
      // Âûâîä ñîîáùåíèÿ îá îøèáêå
      if(print){
      Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
            " pp=",pp," sl=",sl," tp=",tp," mn=",mn);}
      // Áëîêèðîâêà ðàáîòû ñîâåòíèêà
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Äëèòåëüíàÿ ïàóçà
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
      }
      if (err==140 || err==148 || err==4110 || err==4111) break;
      if (err==141) Sleep(1000*100);
      if (err==145) Sleep(1000*17);
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      if (err!=135) Sleep(1000*7.7);
    }
  }
  if (MarketWatch && ticket>0 && (sl>0 || tp>0)) {
    if (OrderSelect(ticket, SELECT_BY_TICKET)) ModifyOrder(-1, sl, tp);
  }
}
//+----------------------------------------------------------------------------+





Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains open prices of each bar
Series array that contains close prices for each bar
Series array that contains tick volumes of each bar


Indicator Curves created:


Indicators Used:




Custom Indicators Used:
Center_of_Gravity

Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
Checks for the total of closed orders
It can change open orders parameters, due to possible stepping strategy
It automatically opens orders when conditions are reached

Other Features:


It plays sound alerts
It issuies visual alerts to the screen

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for LockPipsingXR_V2_77_Engl_demoAL


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: