GridderEA_v1.80

Author: Copyright 2017-2019, Nikolaos Pantzos
Price Data Components
Series array that contains open time of each bar
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself Checks for the total of closed orders
Miscellaneous
It opens Message Boxes to the userUses files from the file systemIt reads information from a fileIt writes information to file
0 Views
0 Downloads
0 Favorites
GridderEA_v1.80
//====================================================================================================================================================//
#property copyright   "Copyright 2017-2019, Nikolaos Pantzos"
#property link        "https://www.mql5.com/en/users/pannik"
#property version     "1.80"
#property description "This expert is a multipairs grid system."
#property description "\nAttach expert on one chart and expert can to trade all pairs (Max 100 pairs)."
#property description "\nTo better illustrate of graphics, select screen resolution 1280x1024."
//#property icon        "\\Images\\Gridder-Logo.ico";
#property strict
//====================================================================================================================================================//
enum Oper{Stand_by_Mode,Normal_Operation,Close_In_Profit_And_Stop,Close_Immediately_All_Orders};
enum ProgrO{Statical_Step, Geometrical_Step, Exponential_Step};
enum ProgrL{Statical_Lot, Geometrical_Lot, Exponential_Lot};
enum CloseP{Ticket_Orders, Basket_Orders, Hybrid_Mode, Advanced_Mode};
enum CloseL{Whole_Ticket, Only_First_Order, Not_Close_In_Loss};
enum Step{Not_Open_In_Loss, Open_With_Manual_Step, Open_With_Auto_Step};
enum Pair{Chart_Pair, Inputted_Pairs};
enum Info{Not_Show_Info, Show_Same_Panel, Show_New_Panel};
enum Emer{One_By_One, Group_Orders};
//====================================================================================================================================================//
#define PairsPerGroup 1
#define MagicSet      12345
//====================================================================================================================================================//
extern string OperationStr        = "||---------- Operation Set ----------||";//1___ Exteral Settings ___1
extern Oper   TypeOperation       = Normal_Operation;//Type Operation Mode
extern string ManagePairsUse      = "||---------- Manage Pairs Use ----------||";//2___ Exteral Settings ___2
extern Pair   PairsUseTrade       = Inputted_Pairs;//Pairs To Use
extern string ManualPairsTrade    = "EURGBP,EURAUD,EURNZD,EURUSD,EURCAD,EURCHF,EURJPY,GBPAUD,GBPNZD,GBPUSD,GBPCAD,GBPCHF,GBPJPY,AUDNZD,AUDUSD,AUDCAD,AUDCHF,AUDJPY,NZDUSD,NZDCAD,NZDCHF,NZDJPY,USDCAD,USDCHF,USDJPY,CADCHF,CADJPY,CHFJPY";//Manual Pairs Trade
extern string ManageOpenOrders    = "||---------- Manage Open Orders ----------||";//3___ Exteral Settings ___3
extern Step   OpenOrdersInLoss    = Open_With_Auto_Step;//Open Orders In Loss
extern double StepOpenNextOrders  = 50.0;//Step For Next Order (Value $/Lot)
extern ProgrO StepOrdersProgress  = Geometrical_Step;//Type Of Progress Step
extern string ManageCloseProfit   = "||---------- Manage Close Profit Orders ----------||";//4___ Exteral Settings ___4
extern CloseP TypeCloseInProfit   = Hybrid_Mode;//Type Of Close In Profit Orders
extern double TargetCloseProfit   = 50.0;//Target Close In Profit (Value $/Lot)
extern string ManageCloseLoss     = "||---------- Manage Close Losses Orders ----------||";//5___ Exteral Settings ___5
extern CloseL TypeCloseInLoss     = Not_Close_In_Loss;//Type Of Close In Loss Orders
extern double TargetCloseLoss     = 250.0;//Target Close In Loss (Value $/Lot)
extern bool   UsePercentageClose  = false;//Use Percentage Loss Close
extern double PercentageEquity    = 50.0;//Percentage Equity Close
extern string EmergencyMode       = "||---------- Emergency Mode ----------||";//6___ Exteral Settings ___6
extern bool   UseEmergencyMode    = true;//Use Emergency Mode
extern Emer   CheckOrdesWay       = Group_Orders;//Check Orders Emergency Mode
extern int    OrdersRunEmergency1 = 3;//Orders For Partial Close In Profit (0=Not Use)
extern int    OrdersRunEmergency2 = 3;//Orders For Hedge Order (0=Not Use)
extern int    OrdersRunEmergency3 = 3;//Orders For Partial Close In Loss (0=Not Use)
extern bool   UsePresetsValue     = true;//Use Preset Emergency Value
extern string MoneyManagement     = "||---------- Money Management ----------||";//7___ Exteral Settings ___7
extern bool   AutoLotSize         = false;//Use Auto Lot Size
extern double RiskFactor          = 0.1;//Risk Factor For Auto Lot
extern double ManualLotSize       = 0.01;//Manual Lot Size
extern ProgrL LotOrdersProgress   = Geometrical_Lot;//Type Of Progress Lot
extern string LimitOrdersLot      = "||---------- Limit Of Orders And Lot ----------||";//8___ Exteral Settings ___8
extern int    MaxOrdersPerPair    = 15;//Max Orders Per Pair (0=Not Use)
extern double MaxLotPerPair       = 0.0;//Max Lot Per Pair (0=Not Use)
extern double MaxMultiLotPerPair  = 100.0;//Max Multiplier Lot Per Pair (0=Not Use)
extern string TimeWindowSets      = "||---------- Time Window Setting ----------||";//9___ Exteral Settings ___9
extern string TimeWindowInfo1     = "Set time in GMT offset, no broker or local time";
extern string TimeWindowInfo2     = "Correct Time Format HH:MM:SS";
extern bool   UseTimeWindow       = false;//Use Time Window
extern string TimeStartTrade      = "00:00:00";//Time Start Trade
extern string TimeStopTrade       = "00:00:00";//Time Stop Trade
extern string InfoOnTheScreen     = "||---------- Info On The Screen ----------||";//10___ Exteral Settings ___10
extern Info   ShowPairsInfo       = Show_New_Panel;//Show Info On Chart
extern int    SizeFontsOfInfo     = 10;//Size Fonts Of Info
extern color  ColorOfTitle        = clrKhaki;//Color Of Titles
extern color  ColorOfInfo         = clrBeige;//Color Of Info
extern color  ColorLineTitles     = clrOrange;//Color Of Line Titles
extern color  ColorOfLine1        = clrMidnightBlue;//Color Of Line 1
extern color  ColorOfLine2        = clrDarkSlateGray;//Color Of Line 2
extern int    PositionOrders      = 335;//Position 'Orders' Info
extern int    PositionPnL         = 400;//Position 'PnL' Info
extern int    PositionClose       = 465;//Position 'Close' Info
extern int    PositionHistory     = 540;//Position 'History' Info
extern int    PositionMaximum     = 650;//Position 'Maximum' Info
extern int    PositionSpread      = 750;//Position 'Spread' Info
extern string Limitations         = "||---------- Limitations ----------||";//11___ Exteral Settings ___11
extern double MaxSpread           = 0.0;//Max Accepted Spread (0=Not Check)
extern long   MaximumOrders       = 0;//Max Opened Orders (0=Not Limit)
extern int    MaxSlippage         = 3;//Max Accepted Slippage
extern string Configuration       = "||---------- Configuration ----------||";//12___ Exteral Settings ___12
extern int    MagicNumber         = 0;//Orders' ID (0=Generate Automatic)
extern bool   SetChartUses        = true;//Set Automatically Chart To Use
extern bool   PrintLogReport      = false;//Print Log Report
extern bool   UseCompletedBars    = true;//Use Completed Bars
extern string StringOrdersEA      = "GridderEA";//Comment For Orders
extern bool   SetChartInterface   = true;//Set Chart Appearance
extern bool   SaveInformations    = false;//Save Groups Informations
//====================================================================================================================================================//
string SymExt;
string CommentsEA;
string WarningPrint="";
string SymbolStatus[99];
//---------------------------------------------------------------------
double PricePair[99];
double LastPricePair[99];
double SpreadPair[99];
double LotPlus[99];
double LotMinus[99];
double LotHedgePlus[99];
double LotHedgeMinus[99];
double FirstLotPlus[99];
double FirstLotMinus[99];
double LastLotPlus[99];
double LastLotMinus[99];
double CheckMargin[99];
double SumMargin;
double TotalProfitPlus[99];
double TotalProfitMinus[99];
double TotalGroupProfit[99];
double MaxProfit=-99999;
double MinProfit=99999;
double LevelProfitClosePlus[99];
double LevelProfitCloseMinus[99];
double LevelLossClosePlus[99];
double LevelLossCloseMinus[99];
double LevelOpenNextPlus[99];
double LevelOpenNextMinus[99];
double HistoryTotalProfitLoss;
double HistoryTotalPips;
double LotSize;
double iLotSize;
double TotalLotPlus[99];
double TotalLotMinus[99];
double MultiplierStepPlus[99];
double MultiplierStepMinus[99];
double MultiplierLotPlus[99];
double MultiplierLotMinus[99];
double TotalLotsPair[99];
double SpreadValuePlus[99];
double SpreadValueMinus[99];
double TotalCommissionPlus[99];
double TotalCommissionMinus[99];
double LastPlusInProfit[99][999];
double LastMinusInProfit[99][999];
double FirstPlusInProfit[99][999];
double FirstMinusInProfit[99][999];
double FirstProfitPlus[99];
double FirstProfitMinus[99];
double LastProfitPlus[99];
double LastProfitMinus[99];
double LastPlusTotalProfit[99];
double LastMinusTotalProfit[99];
double FirstPlusTotalProfit[99];
double FirstMinusTotalProfit[99];
double MaxFloating[99];
double HistoryPlusProfit[99];
double HistoryMinusProfit[99];
double TotalProfitLoss;
double TotalLots;
double HedgePlusProfit[99];
double HedgeMinusProfit[99];
double HedgePlusLot[99];
double HedgeMinusLot[99];
double TotalHedgeProfit[99];
double TickValuePair[99];
double FirstLotOfPair[99];
double TotalMoreProfit;
double TotalMoreLoss;
//---------------------------------------------------------------------
int i;
int z;
int cnt100;
int MagicNo;
int HedgeID;
int TicketNo[99];
int DecimalsPair;
int MaxTotalOrders=0;
int MultiplierPoint;
int FirstTicketPlus[99];
int FirstTicketMinus[99];
int LastTicketPlus[99];
int LastTicketMinus[99];
int TotalOrdersPlus[99];
int TotalOrdersMinus[99];
int HistoryPlusOrders[99];
int HistoryMinusOrders[99];
int HistoryTotalTrades;
int CntTry;
int CntTick=0;
int CheckTicksOpenMarket;
int CountAllOpenedOrders;
int CountAllHistoryOrders;
int LastAllOrders=0;
int LastBarLevels=0;
int WarningMessage;
int GetCurrencyPos[99];
int LastTicketPlusInProfit[99][999];
int LastTicketMinusInProfit[99][999];
int FirstTicketPlusInProfit[99][999];
int FirstTicketMinusInProfit[99][999];
int EmergencyBarPlus[99];
int EmergencyBarMinus[99];
int MaxOrders[99];
int TotalOrders;
int HedgePlusOrders[99];
int HedgeMinusOrders[99];
int HedgePlusTicket[99];
int HedgeMinusTicket[99];
int LastBar[99];
int CountPlusEmergency[99];
int CountMinusEmergency[99];
int EmergencyValue[99][4];
int SignalsMessageWarning;
int PairMoreProfit;
int PairMoreLoss;
int LastHourSaved=0;
//---------------------------------------------------------------------
bool TimeToTrade;
bool SpreadOK[99];
bool CommentWarning;
bool CountHistory=false;
bool ReadySendPlus[99];
bool ReadySendMinus[99];
bool ReadySendHedgePlus[99];
bool ReadySendHedgeMinus[99];
bool WrongSet=false;
bool WrongPairs=false;
bool MarketIsOpen=false;
bool CallMain=false;
bool ExpertCloseBasketInProfit[99];
bool ExpertCloseBasketInLoss[99];
bool ExpertClosePlusInLoss[99];
bool ExpertClosePlusInProfit[99];
bool ExpertCloseMinusInLoss[99];
bool ExpertCloseMinusInProfit[99];
bool ExpertCloseInPercentage[99];
bool PlaceHedgeOrders[99];
bool NewBar[99];
//---------------------------------------------------------------------
datetime DiffTimes;
datetime StartTime;
//---------------------------------------------------------------------
int NumberPairsTrade=0;
int StartSymbolPos;
string SymbolPair[99];
double DivisorLot=2;
double DivisorOrders=4;
//---------------------------------------------------------------------
long ChartColor;
//====================================================================================================================================================//
//OnInit function
//====================================================================================================================================================//
int OnInit()
  {
//---------------------------------------------------------------------
//Confirm ranges and sets
   if(RiskFactor<0.01) RiskFactor=0.01;
   if(RiskFactor>10.0) RiskFactor=10.0;
   if(MagicNumber<0) MagicNumber=0;
   if(MaximumOrders<0) MaximumOrders=0;
   if(MaxSlippage<1) MaxSlippage=1;
   if(MaxSpread<0) MaxSpread=0;
//---------------------------------------------------------------------
//Set timer
   EventSetMillisecondTimer(1000);
   StartTime=TimeCurrent();
//---------------------------------------------------------------------
//Reset value
   ArrayInitialize(ExpertCloseBasketInProfit,false);
   ArrayInitialize(ExpertCloseBasketInLoss,false);
   ArrayInitialize(ExpertClosePlusInLoss,false);
   ArrayInitialize(ExpertClosePlusInProfit,false);
   ArrayInitialize(ExpertCloseMinusInLoss,false);
   ArrayInitialize(ExpertCloseMinusInProfit,false);
   ArrayInitialize(ExpertCloseInPercentage,false);
   ArrayInitialize(EmergencyBarPlus,0);
   ArrayInitialize(EmergencyBarMinus,0);
   ArrayInitialize(MaxOrders,0);
   ArrayInitialize(NewBar,false);
   ArrayInitialize(LastBar,0);
   ArrayInitialize(MaxFloating,99999);
   ArrayInitialize(EmergencyValue,0);
   HistoryTotalTrades=0;
   HistoryTotalProfitLoss=0;
   HistoryTotalPips=0;
   CheckTicksOpenMarket=0;
   WrongPairs=false;
   CntTick=0;
//---------------------------------------------------------------------
//Reset value
   for(i=0; i<99; i++) SymbolPair[i]="";
   NumberPairsTrade=0;
//---------------------------------------------------------------------
//Symbol suffix
   if(StringLen(Symbol())>6) SymExt=StringSubstr(Symbol(),6);
//---------------------------------------------------------------------
//Set parameters for BT
   if((IsTesting()) || (IsVisualMode()) || (IsOptimization()))
     {
      AutoLotSize=true;
      SetChartUses=false;
      PairsUseTrade=0;
      if(TypeCloseInProfit==3) TypeCloseInProfit=2;
     }
//---------------------------------------------------------------------
//Calculate for 4 or 5 digits broker
   MultiplierPoint=1;
   DecimalsPair=(int)MarketInfo(Symbol(),MODE_DIGITS);
   if((DecimalsPair==3) || (DecimalsPair==5)) MultiplierPoint=10;
//---------------------------------------------------------------------
//Comments orders 
   if(StringOrdersEA=="") CommentsEA=WindowExpertName(); else CommentsEA=StringOrdersEA;
//---------------------------------------------------------------------
//Set chart pair
   if(PairsUseTrade==0)//Chart pair
     {
      NumberPairsTrade=1;
      SymbolPair[0]=Symbol();
      //---Externals value
      if(UsePresetsValue==true)
        {
         if(SymbolPair[0]=="EURGBP"+SymExt)//1-
           {
            OrdersRunEmergency1=1;
            OrdersRunEmergency2=5;
            OrdersRunEmergency3=4;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="EURAUD"+SymExt)//2-
           {
            OrdersRunEmergency1=2;
            OrdersRunEmergency2=4;
            OrdersRunEmergency3=1;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="EURNZD"+SymExt)//3-
           {
            OrdersRunEmergency1=3;
            OrdersRunEmergency2=4;
            OrdersRunEmergency3=3;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="EURUSD"+SymExt)//4-
           {
            OrdersRunEmergency1=4;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=2;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="EURCAD"+SymExt)//5-
           {
            OrdersRunEmergency1=5;
            OrdersRunEmergency2=5;
            OrdersRunEmergency3=2;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="EURCHF"+SymExt)//6-
           {
            OrdersRunEmergency1=2;
            OrdersRunEmergency2=3;
            OrdersRunEmergency3=5;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="EURJPY"+SymExt)//7-
           {
            OrdersRunEmergency1=4;
            OrdersRunEmergency2=3;
            OrdersRunEmergency3=5;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="GBPAUD"+SymExt)//8-??? (not good to use)
           {
            OrdersRunEmergency1=2;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=3;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="GBPNZD"+SymExt)//9-
           {
            OrdersRunEmergency1=3;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=4;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="GBPUSD"+SymExt)//10-??? (not good to use)
           {
            OrdersRunEmergency1=2;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=2;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="GBPCAD"+SymExt)//11-? (not good to use)
           {
            OrdersRunEmergency1=3;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=4;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="GBPCHF"+SymExt)//12-????? (not good to use)
           {
            OrdersRunEmergency1=2;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=3;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="GBPJPY"+SymExt)//13-?? (not good to use)
           {
            OrdersRunEmergency1=3;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=3;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="AUDNZD"+SymExt)//14-
           {
            OrdersRunEmergency1=2;
            OrdersRunEmergency2=3;
            OrdersRunEmergency3=4;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="AUDUSD"+SymExt)//15-
           {
            OrdersRunEmergency1=3;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=4;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="AUDCAD"+SymExt)//16-
           {
            OrdersRunEmergency1=2;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=3;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="AUDCHF"+SymExt)//17-
           {
            OrdersRunEmergency1=3;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=4;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="AUDJPY"+SymExt)//18-
           {
            OrdersRunEmergency1=3;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=3;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="NZDUSD"+SymExt)//19-
           {
            OrdersRunEmergency1=2;
            OrdersRunEmergency2=3;
            OrdersRunEmergency3=5;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="NZDCAD"+SymExt)//20-
           {
            OrdersRunEmergency1=2;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=4;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="NZDCHF"+SymExt)//21-
           {
            OrdersRunEmergency1=2;
            OrdersRunEmergency2=4;
            OrdersRunEmergency3=5;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="NZDJPY"+SymExt)//22-
           {
            OrdersRunEmergency1=2;
            OrdersRunEmergency2=3;
            OrdersRunEmergency3=5;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="USDCAD"+SymExt)//23-
           {
            OrdersRunEmergency1=2;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=3;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="USDCHF"+SymExt)//24-
           {
            OrdersRunEmergency1=4;
            OrdersRunEmergency2=5;
            OrdersRunEmergency3=2;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="USDJPY"+SymExt)//25-
           {
            OrdersRunEmergency1=3;
            OrdersRunEmergency2=5;
            OrdersRunEmergency3=1;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="CADCHF"+SymExt)//26-
           {
            OrdersRunEmergency1=3;
            OrdersRunEmergency2=3;
            OrdersRunEmergency3=3;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="CADJPY"+SymExt)//27-
           {
            OrdersRunEmergency1=2;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=4;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
         else
         if(SymbolPair[0]=="CHFJPY"+SymExt)//28-
           {
            OrdersRunEmergency1=3;
            OrdersRunEmergency2=2;
            OrdersRunEmergency3=2;
            if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
        }
      else
        {
         if(OrdersRunEmergency1>0) EmergencyValue[0][1]=OrdersRunEmergency1;
         if(OrdersRunEmergency2>0) EmergencyValue[0][2]=OrdersRunEmergency1+OrdersRunEmergency2;
         if(OrdersRunEmergency3>0) EmergencyValue[0][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
        }
     }
//---------------------------------------------------------------------
//Set manual pairs
   if(PairsUseTrade==1)//Manual pairs
     {
      NumberPairsTrade=(StringLen(ManualPairsTrade)+1)/7;
      //---Set maximum value
      if(NumberPairsTrade>99) NumberPairsTrade=99;
      //---
      for(i=0; i<NumberPairsTrade; i++)
        {
         //---Count added symbols
         StartSymbolPos=(i*6)+i;
         SymbolPair[i]=StringSubstr(ManualPairsTrade,StartSymbolPos,6)+SymExt;
         //---Add symbols in data window
         Print(" # "+WindowExpertName()+" # "+"Check symbols...("+SymbolPair[i]+")");
         //---
         if(SymbolSelect(SymbolPair[i],true)) Print(" # "+WindowExpertName()+" # "+SymbolPair[i]+" is ok");
         else
            Print(" # "+WindowExpertName()+" # "+SymbolPair[i]+" not found");
         //---Get prices of symbols
         PricePair[i]=MarketInfo(SymbolPair[i],MODE_BID);
         //---Check symbols
         if((PricePair[i]==0) && (WrongPairs==false))
           {
            SymbolStatus[i]="Pair "+SymbolPair[i]+" Not Found. No Of Pair: "+IntegerToString(i+1);
            Comment("\n "+StringOrdersEA+
                    "\n\n --- W A R N I N G S ---"+
                    "\n\n "+SymbolStatus[i]+
                    "\n\nplease check added pairs!"+
                    "\n\nCorrect format is EURUSD,GBPJPY,CADCHF");
            Print(" # "+WindowExpertName()+" # "+SymbolStatus[i]);
            WrongPairs=true;
           }
         //---------------------------------------------------------------------
         //Prosets value
         if(UsePresetsValue==true)
           {
            if(SymbolPair[i]=="EURGBP"+SymExt)//1-
              {
               OrdersRunEmergency1=1;
               OrdersRunEmergency2=5;
               OrdersRunEmergency3=4;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="EURAUD"+SymExt)//2-
              {
               OrdersRunEmergency1=2;
               OrdersRunEmergency2=4;
               OrdersRunEmergency3=1;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="EURNZD"+SymExt)//3-
              {
               OrdersRunEmergency1=3;
               OrdersRunEmergency2=4;
               OrdersRunEmergency3=3;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="EURUSD"+SymExt)//4-
              {
               OrdersRunEmergency1=4;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=2;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="EURCAD"+SymExt)//5-
              {
               OrdersRunEmergency1=5;
               OrdersRunEmergency2=5;
               OrdersRunEmergency3=2;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="EURCHF"+SymExt)//6-
              {
               OrdersRunEmergency1=2;
               OrdersRunEmergency2=3;
               OrdersRunEmergency3=5;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="EURJPY"+SymExt)//7-
              {
               OrdersRunEmergency1=4;
               OrdersRunEmergency2=3;
               OrdersRunEmergency3=5;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="GBPAUD"+SymExt)//8-??? (not good to use)
              {
               OrdersRunEmergency1=2;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=3;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="GBPNZD"+SymExt)//9-
              {
               OrdersRunEmergency1=3;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=4;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="GBPUSD"+SymExt)//10-??? (not good to use)
              {
               OrdersRunEmergency1=2;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=2;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="GBPCAD"+SymExt)//11-? (not good to use)
              {
               OrdersRunEmergency1=3;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=4;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="GBPCHF"+SymExt)//12-????? (not good to use)
              {
               OrdersRunEmergency1=2;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=3;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="GBPJPY"+SymExt)//13-?? (not good to use)
              {
               OrdersRunEmergency1=3;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=3;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="AUDNZD"+SymExt)//14-
              {
               OrdersRunEmergency1=2;
               OrdersRunEmergency2=3;
               OrdersRunEmergency3=4;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="AUDUSD"+SymExt)//15-
              {
               OrdersRunEmergency1=3;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=4;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="AUDCAD"+SymExt)//16-
              {
               OrdersRunEmergency1=2;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=3;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="AUDCHF"+SymExt)//17-
              {
               OrdersRunEmergency1=3;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=4;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="AUDJPY"+SymExt)//18-
              {
               OrdersRunEmergency1=3;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=3;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="NZDUSD"+SymExt)//19-
              {
               OrdersRunEmergency1=2;
               OrdersRunEmergency2=3;
               OrdersRunEmergency3=5;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="NZDCAD"+SymExt)//20-
              {
               OrdersRunEmergency1=2;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=4;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="NZDCHF"+SymExt)//21-
              {
               OrdersRunEmergency1=2;
               OrdersRunEmergency2=4;
               OrdersRunEmergency3=5;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="NZDJPY"+SymExt)//22-
              {
               OrdersRunEmergency1=2;
               OrdersRunEmergency2=3;
               OrdersRunEmergency3=5;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="USDCAD"+SymExt)//23-
              {
               OrdersRunEmergency1=2;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=3;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="USDCHF"+SymExt)//24-
              {
               OrdersRunEmergency1=4;
               OrdersRunEmergency2=5;
               OrdersRunEmergency3=2;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="USDJPY"+SymExt)//25-
              {
               OrdersRunEmergency1=3;
               OrdersRunEmergency2=5;
               OrdersRunEmergency3=1;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="CADCHF"+SymExt)//26-
              {
               OrdersRunEmergency1=3;
               OrdersRunEmergency2=3;
               OrdersRunEmergency3=3;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="CADJPY"+SymExt)//27-
              {
               OrdersRunEmergency1=2;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=4;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
            else
            if(SymbolPair[i]=="CHFJPY"+SymExt)//28-
              {
               OrdersRunEmergency1=3;
               OrdersRunEmergency2=2;
               OrdersRunEmergency3=2;
               if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
               if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
               if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
              }
           }
         else
           {
            if(OrdersRunEmergency1>0) EmergencyValue[i][1]=OrdersRunEmergency1;
            if(OrdersRunEmergency2>0) EmergencyValue[i][2]=OrdersRunEmergency1+OrdersRunEmergency2;
            if(OrdersRunEmergency3>0) EmergencyValue[i][3]=OrdersRunEmergency1+OrdersRunEmergency2+OrdersRunEmergency3;
           }
        }
     }
//---------------------------------------------------------------------
//Set colors of chart
   if(SetChartInterface==true)
     {
      ChartSetInteger(0,CHART_SHOW_GRID,false);//Hide grid
      ChartSetInteger(0,CHART_MODE,0);//Set price in bars
      ChartSetInteger(0,CHART_SCALE,1);//Set scale
      ChartSetInteger(0,CHART_SHOW_VOLUMES,CHART_VOLUME_HIDE);//Hide value
      ChartSetInteger(0,CHART_COLOR_CHART_UP,clrNONE);//Hide line up
      ChartSetInteger(0,CHART_COLOR_CHART_DOWN,clrNONE);//Hide line down
      ChartSetInteger(0,CHART_COLOR_CHART_LINE,clrNONE);//Hide chart line
     }
//---------------------------------------------------------------------
//Set background
   ChartColor=ChartGetInteger(0,CHART_COLOR_BACKGROUND,0);
//---
   if(ShowPairsInfo==1)
     {
      if(ObjectFind("Background")==-1) ChartBackground("Background",(color)ChartColor,BORDER_FLAT,FALSE,0,16,240,(204+(NumberPairsTrade*12)));
     }
//---
   if((ShowPairsInfo==0) || (ShowPairsInfo==2))
     {
      if(ObjectFind("Background")==-1) ChartBackground("Background",(color)ChartColor,BORDER_FLAT,FALSE,0,16,240,192);
     }
//---------------------------------------------------------------------
//Set chart
   if(SetChartUses==true)
     {
      if((ChartSymbol()!=SymbolPair[0]) || (ChartPeriod()!=PERIOD_H1))
        {
         Comment("\n\nExpert set chart symbol...");
         Print(" # "+WindowExpertName()+" # "+"Set chart symbol: "+SymbolPair[0]+" and Period: H1");
         ChartSetSymbolPeriod(0,SymbolPair[0],PERIOD_H1);
        }
     }
//---------------------------------------------------------------------
//Check sets and value
   CheckValue();
   if(WrongSet==true) return(0);
   if(WrongPairs==true) return(0);
//---------------------------------------------------------------------
//ID orders
   if(MagicNumber==0)
     {
      MagicNo=0;
      if(PairsUseTrade==0)
        {
         for(i=0; i<StringLen(Symbol()); i++) MagicNo+=(StringGetChar(Symbol(),i)*(i+1));
        }
      MagicNo+=MagicSet+AccountNumber()+(OpenOrdersInLoss*123)+(TypeCloseInProfit*345)+(TypeCloseInLoss*567);
      HedgeID=MagicNo+123456;
     }
   else
     {
      MagicNo=MagicNumber;
      HedgeID=MagicNo+123456;
     }
//---------------------------------------------------------------------
//Check maximum orders and minimum lot
   if((TypeOperation==1) && (NumberPairsTrade>5))
     {
      if(AutoLotSize==true) iLotSize=(AccountBalance()/100000)*RiskFactor;
      if(AutoLotSize==false) iLotSize=ManualLotSize;
      //---
      if((AccountInfoInteger(ACCOUNT_LIMIT_ORDERS)!=0) || (SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN)!=iLotSize))
        {
         if(AccountInfoInteger(ACCOUNT_LIMIT_ORDERS)!=0) SignalsMessageWarning=MessageBox("Account has maximum orders limit: "+IntegerToString(AccountInfoInteger(ACCOUNT_LIMIT_ORDERS))+
            "\n\nBy clicking YES expert run. \n\nStart EXPERT ADVISOR?","RISK DISCLAIMER - "+WindowExpertName(),MB_YESNO|MB_ICONEXCLAMATION);
         if(SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN)!=0.01) SignalsMessageWarning=MessageBox("Account or pair has minimum lot: "+DoubleToStr(SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN))+
            "\n\nBy clicking YES expert run. \n\nStart EXPERT ADVISOR?","RISK DISCLAIMER - "+WindowExpertName(),MB_YESNO|MB_ICONEXCLAMATION);
         if(SignalsMessageWarning==IDNO) return(INIT_FAILED);
        }
     }
//---------------------------------------------------------------------
//Check set
   if((TypeCloseInProfit==3) && (NumberPairsTrade<3)) TypeCloseInProfit=2;
//---------------------------------------------------------------------
//Set maximum orders
   if(((MaximumOrders==0) && (AccountInfoInteger(ACCOUNT_LIMIT_ORDERS)!=0)) || ((MaximumOrders>AccountInfoInteger(ACCOUNT_LIMIT_ORDERS)) && (AccountInfoInteger(ACCOUNT_LIMIT_ORDERS)!=0))) MaximumOrders=AccountInfoInteger(ACCOUNT_LIMIT_ORDERS);
//---------------------------------------------------------------------
//Call MainFunction function to show information if market is closed
   MainFunction();
//---------------------------------------------------------------------
   return(INIT_SUCCEEDED);
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
void OnDeinit(const int reason)
  {
//---------------------------------------------------------------------
//Clear chart
   for(i=0; i<99; i++)
     {
      if(ObjectFind("Comm1"+IntegerToString(i))>-1) ObjectDelete("Comm1"+IntegerToString(i));
      if(ObjectFind("Comm2"+IntegerToString(i))>-1) ObjectDelete("Comm2"+IntegerToString(i));
      if(ObjectFind("Comm3"+IntegerToString(i))>-1) ObjectDelete("Comm3"+IntegerToString(i));
      if(ObjectFind("Comm4"+IntegerToString(i))>-1) ObjectDelete("Comm4"+IntegerToString(i));
      if(ObjectFind("Comm5"+IntegerToString(i))>-1) ObjectDelete("Comm5"+IntegerToString(i));
      if(ObjectFind("Comm6"+IntegerToString(i))>-1) ObjectDelete("Comm6"+IntegerToString(i));
      if(ObjectFind("Comm7"+IntegerToString(i))>-1) ObjectDelete("Comm7"+IntegerToString(i));
      if(ObjectFind("Text"+IntegerToString(i))>-1) ObjectDelete("Text"+IntegerToString(i));
      if(ObjectFind("Str"+IntegerToString(i))>-1) ObjectDelete("Str"+IntegerToString(i));
      if(ObjectFind("BackgroundLine1"+IntegerToString(i))>-1) ObjectDelete("BackgroundLine1"+IntegerToString(i));
      if(ObjectFind("BackgroundLine2"+IntegerToString(i))>-1) ObjectDelete("BackgroundLine2"+IntegerToString(i));
     }
//---
   if(ObjectFind("BackgroundLine0")>-1) ObjectDelete("BackgroundLine0");
   if(ObjectFind("Background")>-1) ObjectDelete("Background");
//---
   Comment("");
   EventKillTimer();
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//OnTick function
//====================================================================================================================================================//
void OnTick()
  {
//---------------------------------------------------------------------
//Reset value
   CallMain=false;
//---------------------------------------------------------------------
   if((IsOptimization()) || (IsVisualMode()) || (IsTesting())) MainFunction();
//---------------------------------------------------------------------
//Warning message
   if(!IsTesting())
     {
      if(!IsExpertEnabled())
        {
         Comment("\n      The trading terminal",
                 "\n      of experts do not run",
                 "\n\n\n      Turn ON EA Please .......");
         return;
        }
      else
      if((!IsTradeAllowed()) || (IsTradeContextBusy()))
        {
         Comment("\n      Trade is disabled",
                 "\n      or trade flow is busy.",
                 "\n\n\n      Wait Please .......");
         return;
        }
      else
        {
         CallMain=true;
        }
     }
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//OnTimer function
//====================================================================================================================================================//
void OnTimer()
  {
//---------------------------------------------------------------------
//Call main function
   if(CallMain==true) MainFunction();
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//main function
//====================================================================================================================================================//
void MainFunction()
  {
//---------------------------------------------------------------------
//Reset value
   TimeToTrade=true;
   CommentWarning=false;
   PairMoreProfit=-1;
   PairMoreLoss=-1;
   TotalMoreProfit=0;
   TotalMoreLoss=0;
   LotSize=0;
//---------------------------------------------------------------------
//Reset value
   ArrayInitialize(ReadySendPlus,false);
   ArrayInitialize(ReadySendMinus,false);
   ArrayInitialize(ReadySendHedgePlus,false);
   ArrayInitialize(ReadySendHedgeMinus,false);
   ArrayInitialize(SpreadOK,true);
   ArrayInitialize(TicketNo,-1);
   ArrayInitialize(LotPlus,0);
   ArrayInitialize(LotMinus,0);
   ArrayInitialize(LotHedgePlus,0);
   ArrayInitialize(LotHedgeMinus,0);
   ArrayInitialize(SpreadValuePlus,0);
   ArrayInitialize(SpreadValueMinus,0);
   ArrayInitialize(LevelProfitClosePlus,0);
   ArrayInitialize(LevelProfitCloseMinus,0);
   ArrayInitialize(LevelLossClosePlus,0);
   ArrayInitialize(LevelLossCloseMinus,0);
   ArrayInitialize(LevelOpenNextPlus,0);
   ArrayInitialize(LevelOpenNextMinus,0);
   ArrayInitialize(CheckMargin,0);
   ArrayInitialize(MultiplierLotPlus,0);
   ArrayInitialize(MultiplierLotMinus,0);
   ArrayInitialize(TotalLotsPair,0);
   ArrayInitialize(MultiplierStepPlus,1);
   ArrayInitialize(MultiplierStepMinus,1);
//---------------------------------------------------------------------
//Stop in wrong sets or pairs
   if(WrongSet==true) return;
   if(WrongPairs==true) return;
//---------------------------------------------------------------------
//Check open market
   if((!IsTesting()) && (!IsVisualMode()) && (!IsOptimization()))
     {
      if(CheckTicksOpenMarket<3) CheckTicksOpenMarket++;
      //---
      if(CheckTicksOpenMarket==1)
        {
         if(IsConnected())
           {
            MarketIsOpen=false;
            CommentWarning=true;
            WarningPrint="Market is closed!!!";
           }
         else
           {
            MarketIsOpen=false;
            CommentWarning=true;
            WarningPrint="Disconnected terminal!!!";
           }
        }
      //---
      if((CheckTicksOpenMarket>=2) && (MarketIsOpen==false)) MarketIsOpen=true;
     }
   else
     {
      MarketIsOpen=true;
     }
//---------------------------------------------------------------------
//Check time window
   if(((TimeGMT()<StringToTime(TimeStartTrade)) || (TimeGMT()>StringToTime(TimeStopTrade))) && (UseTimeWindow==true)) TimeToTrade=false;
//---------------------------------------------------------------------
//Count lot size
   if(AutoLotSize==true) LotSize=(AccountBalance()/100000)*RiskFactor;
   if(AutoLotSize==false) LotSize=ManualLotSize;
//---------------------------------------------------------------------
//Start multipair function
   for(int cnt=0; cnt<NumberPairsTrade; cnt++)
     {
      //---------------------------------------------------------------------
      //Control bars
      if((UseCompletedBars==true) && (MarketIsOpen==true))
        {
         NewBar[cnt]=false;
         if(iBars(SymbolPair[cnt],0)!=LastBar[cnt])
           {
            NewBar[cnt]=true;
            LastBar[cnt]=iBars(SymbolPair[cnt],0);
           }
        }
      //---
      if(UseCompletedBars==false) NewBar[cnt]=true;
      //---------------------------------------------------------------------
      //For speed optimization
      if(((IsOptimization())||(IsTesting()))&&(NewBar[cnt]==false)) return;
      //---------------------------------------------------------------------
      //Get orders' informations
      CountCurrentOrders(cnt);
      if(UseEmergencyMode==true) CountOrdersEmergencyMode(cnt);
      //---------------------------------------------------------------------
      //Get spreads
      SpreadPair[cnt]=NormalizeDouble(MarketInfo(SymbolPair[cnt],MODE_SPREAD)/MultiplierPoint,2);
      //---------------------------------------------------------------------
      //Check spreads
      if(MaxSpread>0.0)
        {
         if(SpreadPair[cnt]>MaxSpread)
           {
            SpreadOK[cnt]=false;
            CommentWarning=true;
            WarningPrint=StringConcatenate("Spread it isn't normal (",SpreadPair[cnt],"/",MaxSpread,")");
           }
        }
      //---------------------------------------------------------------------
      //Get tick value
      TickValuePair[cnt]=MarketInfo(SymbolPair[cnt],MODE_TICKVALUE);
      //---------------------------------------------------------------------
      //Calculate spreads value
      SpreadValuePlus[cnt]=SpreadPair[cnt]*TotalLotPlus[cnt]*TickValuePair[cnt]*MultiplierPoint;
      SpreadValueMinus[cnt]=SpreadPair[cnt]*TotalLotMinus[cnt]*TickValuePair[cnt]*MultiplierPoint;
      //---------------------------------------------------------------------
      //Reset value
      if(TotalOrdersPlus[cnt]==0)
        {
         ExpertClosePlusInProfit[cnt]=false;
         ExpertClosePlusInLoss[cnt]=false;
        }
      //---
      if(TotalOrdersMinus[cnt]==0)
        {
         ExpertCloseMinusInProfit[cnt]=false;
         ExpertCloseMinusInLoss[cnt]=false;
        }
      //---
      if(TotalOrdersPlus[cnt]+TotalOrdersMinus[cnt]+HedgePlusOrders[cnt]+HedgeMinusOrders[cnt]==0)
        {
         ExpertCloseBasketInProfit[cnt]=false;
         ExpertCloseBasketInLoss[cnt]=false;
         ExpertCloseInPercentage[cnt]=false;
         PlaceHedgeOrders[cnt]=false;
        }
      //---------------------------------------------------------------------
      //Count history orders first time
      if(CntTick<NumberPairsTrade+4)
        {
         CntTick++;
         if(CntTick<NumberPairsTrade+3) CountHistory=true;
        }
      //---------------------------------------------------------------------
      //Count history orders if close orders
      LastAllOrders=MathMax(LastAllOrders,OrdersTotal());
      if(OrdersTotal()<LastAllOrders)
        {
         LastAllOrders=OrdersTotal();
         CountHistory=true;
        }
      //---
      if(CountHistory==true)
        {
         CountHistory=false;
         CountHistoryOrders(cnt);
        }
      //---------------------------------------------------------------------
      //Set levels open/close
      if(StepOrdersProgress==0)//Statical
        {
         if(TotalOrdersPlus[cnt]>0) MultiplierStepPlus[cnt]=TotalOrdersPlus[cnt];
         if(TotalOrdersMinus[cnt]>0) MultiplierStepMinus[cnt]=TotalOrdersMinus[cnt];
        }
      //---
      if(StepOrdersProgress==1)//Geometrical
        {
         if(TotalOrdersPlus[cnt]>0) for(i=0; i<=TotalOrdersPlus[cnt]; i++) MultiplierStepPlus[cnt]+=i;
         if(TotalOrdersMinus[cnt]>0) for(i=0; i<=TotalOrdersMinus[cnt]; i++) MultiplierStepMinus[cnt]+=i;
        }
      //---
      if(StepOrdersProgress==2)//Exponential
        {
         if(TotalOrdersPlus[cnt]>0) for(i=0; i<=TotalOrdersPlus[cnt]; i++) MultiplierStepPlus[cnt]+=MathMax(1,MathPow(2,i-1));
         if(TotalOrdersMinus[cnt]>0) for(i=0; i<=TotalOrdersMinus[cnt]; i++) MultiplierStepMinus[cnt]+=MathMax(1,MathPow(2,i-1));
        }
      //---------------------------------------------------------------------
      //Levels
      //---Levels open next orders in loss
      LevelOpenNextPlus[cnt]=-((TotalLotPlus[cnt]*StepOpenNextOrders*MultiplierStepPlus[cnt]*TickValuePair[cnt])+SpreadValuePlus[cnt]+TotalCommissionPlus[cnt]);
      LevelOpenNextMinus[cnt]=-((TotalLotMinus[cnt]*StepOpenNextOrders*MultiplierStepMinus[cnt]*TickValuePair[cnt])+SpreadValueMinus[cnt]+TotalCommissionMinus[cnt]);
      //---Levels close orders in profit
      if((OpenOrdersInLoss<2) || (TypeOperation==2))//Manual step
        {
         LevelProfitClosePlus[cnt]=(TotalLotPlus[cnt]*TargetCloseProfit*TickValuePair[cnt]);
         LevelProfitCloseMinus[cnt]=(TotalLotMinus[cnt]*TargetCloseProfit*TickValuePair[cnt]);
        }
      //---
      if((OpenOrdersInLoss==2) && (TypeOperation!=2))//Auto step
        {
         //---Levels close orders in profit
         LevelProfitClosePlus[cnt]=(FirstLotPlus[cnt]*MultiplierStepPlus[cnt]*TargetCloseProfit)*TickValuePair[cnt];
         LevelProfitCloseMinus[cnt]=(FirstLotMinus[cnt]*MultiplierStepMinus[cnt]*TargetCloseProfit)*TickValuePair[cnt];
        }
      //---Levels close orders in loss
      LevelLossClosePlus[cnt]=-((TotalLotPlus[cnt]*TargetCloseLoss*TickValuePair[cnt])+SpreadValuePlus[cnt]+TotalCommissionPlus[cnt]);
      LevelLossCloseMinus[cnt]=-((TotalLotMinus[cnt]*TargetCloseLoss*TickValuePair[cnt])+SpreadValueMinus[cnt]+TotalCommissionMinus[cnt]);
      //---------------------------------------------------------------------
      //Send orders
      if((MarketIsOpen==true) && (SpreadOK[cnt]==true) && (NewBar[cnt]==true) && (TimeToTrade==true) && 
         (ExpertClosePlusInLoss[cnt]==false) && (ExpertCloseMinusInLoss[cnt]==false) && (ExpertClosePlusInProfit[cnt]==false) && (ExpertCloseMinusInProfit[cnt]==false) && 
         (ExpertCloseBasketInProfit[cnt]==false) && (ExpertCloseBasketInLoss[cnt]==false) && (ExpertCloseInPercentage[cnt]==false))
        {
         //---------------------------------------------------------------------
         //Send first orders
         if(TotalOrdersPlus[cnt]==0) ReadySendPlus[cnt]=true;
         if(TotalOrdersMinus[cnt]==0) ReadySendMinus[cnt]=true;
         //---------------------------------------------------------------------
         //Send oposite orders if close a orders in profit
         if((OpenOrdersInLoss==2) && ((TotalOrdersPlus[cnt]+TotalOrdersMinus[cnt]+HedgePlusOrders[cnt]+HedgeMinusOrders[cnt]<MaxOrdersPerPair-2) || (MaxOrdersPerPair==0)))
           {
            //---Send minus if close plus
            if((TotalOrdersPlus[cnt]==0) && (TotalOrdersMinus[cnt]>=PairsPerGroup))
              {
               ReadySendMinus[cnt]=true;
              }
            //---Send plus if close minus
            if((TotalOrdersMinus[cnt]==0) && (TotalOrdersPlus[cnt]>=PairsPerGroup))
              {
               ReadySendPlus[cnt]=true;
              }
           }
         //---------------------------------------------------------------------
         //Send next orders in loss
         if((OpenOrdersInLoss==1) && ((TotalOrdersPlus[cnt]+TotalOrdersMinus[cnt]+HedgePlusOrders[cnt]+HedgeMinusOrders[cnt]<MaxOrdersPerPair-2) || (MaxOrdersPerPair==0)))
           {
            //---Send plus
            if((TotalOrdersPlus[cnt]>=PairsPerGroup) && (TotalProfitPlus[cnt]<=LevelOpenNextPlus[cnt]) && ((TypeCloseInProfit==0) || (TotalOrdersPlus[cnt]==TotalOrdersMinus[cnt]) || (TotalOrdersPlus[cnt]>TotalOrdersMinus[cnt])))
              {
               ReadySendPlus[cnt]=true;
              }
            //---Send minus
            if((TotalOrdersMinus[cnt]>=PairsPerGroup) && (TotalProfitMinus[cnt]<=LevelOpenNextMinus[cnt]) && ((TypeCloseInProfit==0) || (TotalOrdersPlus[cnt]==TotalOrdersMinus[cnt]) || (TotalOrdersPlus[cnt]<TotalOrdersMinus[cnt])))
              {
               ReadySendMinus[cnt]=true;
              }
           }
        }//End if((MarketIsOpen==true)&&(SpreadOK[cnt]==true)&&(NewBar[cnt]==true)&&
      //---------------------------------------------------------------------
      //Wait for profit, close and stop
      if(TypeOperation==2)
        {
         if(TotalOrdersPlus[cnt]+HedgePlusOrders[cnt]+TotalOrdersMinus[cnt]+HedgeMinusOrders[cnt]==0)
           {
            ReadySendPlus[cnt]=false;
            ReadySendMinus[cnt]=false;
           }
        }
      //---------------------------------------------------------------------
      //Stand by
      if(TypeOperation==0)
        {
         ReadySendPlus[cnt]=false;
         ReadySendMinus[cnt]=false;
        }
      //---------------------------------------------------------------------
      //Close orders
      if((NewBar[cnt]==true) && (MarketIsOpen==true))
        {
         //---------------------------------------------------------------------
         //Start emergency mode
         if((UseEmergencyMode==true) && (OpenOrdersInLoss!=0))
           {
            //---Close partial orders in profit---//
            if(EmergencyValue[cnt][1]>0)
              {
               if(HedgePlusOrders[cnt]+HedgeMinusOrders[cnt]==0)
                 {
                  //---Start for plus
                  if(TotalOrdersPlus[cnt]>=EmergencyValue[cnt][1])
                    {
                     //---Check one by one
                     if((CheckOrdesWay==0) && (((LastProfitPlus[cnt]+FirstProfitPlus[cnt]+FirstProfitMinus[cnt]>=LevelProfitCloseMinus[cnt]) && (OpenOrdersInLoss==2)) || 
                        ((LastProfitPlus[cnt]+FirstProfitPlus[cnt]>=LevelProfitCloseMinus[cnt]) && (OpenOrdersInLoss==1))) && (iBars(NULL,0)!=EmergencyBarPlus[cnt]))
                       {
                        EmergencyBarPlus[cnt]=iBars(NULL,0);
                        if(LastTicketPlus[cnt]>0) ClosePairPlus(cnt,LastTicketPlus[cnt]);
                        if(FirstTicketPlus[cnt]>0) ClosePairPlus(cnt,FirstTicketPlus[cnt]);
                        if((OpenOrdersInLoss==2) && (FirstTicketMinus[cnt]>0)) ClosePairMinus(cnt,FirstTicketMinus[cnt]);
                        CountHistory=true;
                        if(PrintLogReport==true) Print("Close Plus and Minus Order of Emergency Mode 'Partial Close In Profit'");
                       }
                     //---Check as group
                     if((CheckOrdesWay==1) && (((LastPlusTotalProfit[cnt]+FirstProfitPlus[cnt]+FirstProfitMinus[cnt]>=LevelProfitCloseMinus[cnt]) && (OpenOrdersInLoss==2)) || 
                        ((LastPlusTotalProfit[cnt]+FirstProfitPlus[cnt]>=LevelProfitCloseMinus[cnt]) && (OpenOrdersInLoss==1))) && (iBars(NULL,0)!=EmergencyBarPlus[cnt]))
                       {
                        EmergencyBarPlus[cnt]=iBars(NULL,0);
                        for(z=OrdersTotal()-1; z>=0; z--)
                          {
                           if(LastTicketPlusInProfit[cnt][z]!=-1) ClosePairPlus(cnt,LastTicketPlusInProfit[cnt][z]);
                          }
                        if(FirstTicketPlus[cnt]>0) ClosePairPlus(cnt,FirstTicketPlus[cnt]);
                        if((OpenOrdersInLoss==2) && (FirstTicketMinus[cnt]>0)) ClosePairMinus(cnt,FirstTicketMinus[cnt]);
                        CountHistory=true;
                        if(PrintLogReport==true) Print("Close Plus and Minus Order of Emergency Mode 'Partial Close In Profit'");
                       }
                    }
                  //---Start for minus
                  if(TotalOrdersMinus[cnt]>=EmergencyValue[cnt][1])
                    {
                     //---Check one by one
                     if((CheckOrdesWay==0) && (((LastProfitMinus[cnt]+FirstProfitMinus[cnt]+FirstProfitPlus[cnt]>=LevelProfitClosePlus[cnt]) && (OpenOrdersInLoss==2)) || 
                        ((LastProfitMinus[cnt]+FirstProfitMinus[cnt]>=LevelProfitClosePlus[cnt]) && (OpenOrdersInLoss==1))) && (iBars(NULL,0)!=EmergencyBarMinus[cnt]))
                       {
                        EmergencyBarMinus[cnt]=iBars(NULL,0);
                        if(LastTicketMinus[cnt]>0) ClosePairMinus(cnt,LastTicketMinus[cnt]);
                        if(FirstTicketMinus[cnt]>0) ClosePairMinus(cnt,FirstTicketMinus[cnt]);
                        if((OpenOrdersInLoss==2) && (FirstTicketPlus[cnt]>0)) ClosePairPlus(cnt,FirstTicketPlus[cnt]);
                        CountHistory=true;
                        if(PrintLogReport==true) Print("Close Minus and Plus Order of Emergency Mode 'Partial Close In Profit'");
                       }
                     //---Check as group
                     if((CheckOrdesWay==1) && (((LastMinusTotalProfit[cnt]+FirstProfitMinus[cnt]+FirstProfitPlus[cnt]>=LevelProfitClosePlus[cnt]) && (OpenOrdersInLoss==2)) || 
                        ((LastMinusTotalProfit[cnt]+FirstProfitMinus[cnt]>=LevelProfitClosePlus[cnt]) && (OpenOrdersInLoss==1))) && (iBars(NULL,0)!=EmergencyBarMinus[cnt]))
                       {
                        EmergencyBarMinus[cnt]=iBars(NULL,0);
                        for(z=OrdersTotal()-1; z>=0; z--)
                          {
                           if(LastTicketMinusInProfit[cnt][z]!=-1) ClosePairMinus(cnt,LastTicketMinusInProfit[cnt][z]);
                          }
                        if(FirstTicketMinus[cnt]>0) ClosePairMinus(cnt,FirstTicketMinus[cnt]);
                        if((OpenOrdersInLoss==2) && (FirstTicketPlus[cnt]>0)) ClosePairPlus(cnt,FirstTicketPlus[cnt]);
                        CountHistory=true;
                        if(PrintLogReport==true) Print("Close Minus and Plus Order of Emergency Mode 'Partial Close In Profit'");
                       }
                    }
                 }
              }//End if(EmergencyValue[cnt][1]>0)
            //---Open/Close hedge orders---//
            if(EmergencyValue[cnt][2]>0)
              {
               //---Start for plus
               if(((PlaceHedgeOrders[cnt]==true) || (TotalOrdersPlus[cnt]+TotalOrdersMinus[cnt]>=EmergencyValue[cnt][2])) && (TotalOrdersPlus[cnt]>TotalOrdersMinus[cnt]))//&&(TotalLotPlus[cnt]>TotalLotMinus[cnt]*4))
                 {
                  //---Hedge plus orders
                  if(HedgeMinusOrders[cnt]==0)
                    {
                     PlaceHedgeOrders[cnt]=true;
                     ReadySendHedgeMinus[cnt]=true;
                     LotHedgeMinus[cnt]=NormalizeLot(TotalLotPlus[cnt]/DivisorLot,cnt);
                     if(PrintLogReport==true) Print("Open Plus Order of Emergency Mode 'Hedge Order'");
                    }
                  //---Close hedge plus orders as group
                  if((CheckOrdesWay==1) && (HedgeMinusOrders[cnt]>0) && (HedgeMinusProfit[cnt]+FirstPlusTotalProfit[cnt]>=LevelProfitCloseMinus[cnt]) && (iBars(NULL,0)!=EmergencyBarPlus[cnt]))
                    {
                     EmergencyBarPlus[cnt]=iBars(NULL,0);
                     for(z=OrdersTotal()-1; z>=0; z--)
                       {
                        if(FirstTicketPlusInProfit[cnt][z]!=-1) ClosePairPlus(cnt,FirstTicketPlusInProfit[cnt][z]);
                       }
                     if(HedgeMinusOrders[cnt]>0) ClosePairMinus(cnt,HedgeMinusTicket[cnt]);
                     CountHistory=true;
                     if(PrintLogReport==true) Print("Close Hedge and First Plus Order of Emergency Mode 'Hedge Order'");
                    }
                  //---Close hedge plus orders one buy one
                  if((CheckOrdesWay==0) && (HedgeMinusOrders[cnt]>0) && (HedgeMinusProfit[cnt]+FirstProfitPlus[cnt]>=LevelProfitCloseMinus[cnt]) && (iBars(NULL,0)!=EmergencyBarPlus[cnt]))
                    {
                     EmergencyBarPlus[cnt]=iBars(NULL,0);
                     if(FirstTicketPlus[cnt]>0) ClosePairPlus(cnt,FirstTicketPlus[cnt]);
                     if(HedgeMinusOrders[cnt]>0) ClosePairMinus(cnt,HedgeMinusTicket[cnt]);
                     CountHistory=true;
                     if(PrintLogReport==true) Print("Close Hedge and First Plus Order of Emergency Mode 'Hedge Order'");
                    }
                 }
               //---Start for minus
               if(((PlaceHedgeOrders[cnt]==true) || (TotalOrdersMinus[cnt]+TotalOrdersPlus[cnt]>=EmergencyValue[cnt][2])) && (TotalOrdersMinus[cnt]>TotalOrdersPlus[cnt]))//&&(TotalLotPlus[cnt]*4<TotalLotMinus[cnt]))
                 {
                  //---Hedge minus orders
                  if(HedgePlusOrders[cnt]==0)
                    {
                     PlaceHedgeOrders[cnt]=true;
                     ReadySendHedgePlus[cnt]=true;
                     LotHedgePlus[cnt]=NormalizeLot(TotalLotMinus[cnt]/DivisorLot,cnt);
                     if(PrintLogReport==true) Print("Open Minus Order of Emergency Mode 'Hedge Order'");
                    }
                  //---Close hedge minus orders as group
                  if((CheckOrdesWay==1) && (HedgePlusOrders[cnt]>0) && (HedgePlusProfit[cnt]+FirstMinusTotalProfit[cnt]>=LevelProfitClosePlus[cnt]) && (iBars(NULL,0)!=EmergencyBarMinus[cnt]))
                    {
                     EmergencyBarMinus[cnt]=iBars(NULL,0);
                     for(z=OrdersTotal()-1; z>=0; z--)
                       {
                        if(FirstTicketMinusInProfit[cnt][z]!=-1) ClosePairMinus(cnt,FirstTicketMinusInProfit[cnt][z]);
                       }
                     if(HedgePlusOrders[cnt]>0) ClosePairPlus(cnt,HedgePlusTicket[cnt]);
                     CountHistory=true;
                     if(PrintLogReport==true) Print("Close Hedge and First Minus Order of Emergency Mode 'Hedge Order'");
                    }
                  //---Close hedge minus orders one buy one
                  if((CheckOrdesWay==0) && (HedgePlusOrders[cnt]>0) && (HedgePlusProfit[cnt]+FirstProfitMinus[cnt]>=LevelProfitClosePlus[cnt]) && (iBars(NULL,0)!=EmergencyBarMinus[cnt]))
                    {
                     EmergencyBarMinus[cnt]=iBars(NULL,0);
                     if(FirstTicketMinus[cnt]>0) ClosePairMinus(cnt,FirstTicketMinus[cnt]);
                     if(HedgePlusOrders[cnt]>0) ClosePairPlus(cnt,HedgePlusTicket[cnt]);
                     CountHistory=true;
                     if(PrintLogReport==true) Print("Close Hedge and First Minus Order of Emergency Mode 'Hedge Order'");
                    }
                 }
              }//End if(EmergencyValue[cnt][2]>0)
            //---Close partial orders in huge orders---//
            if(EmergencyValue[cnt][3]>0)
              {
               if((TotalOrdersPlus[cnt]>0) && (TotalOrdersMinus[cnt]>0))
                 {
                  //---Start close plus
                  if((TotalOrdersPlus[cnt]>=EmergencyValue[cnt][3]) && (TotalOrdersPlus[cnt]>TotalOrdersMinus[cnt]))
                    {
                     if(TotalOrdersPlus[cnt]>0) ClosePairPlus(cnt,FirstTicketPlus[cnt]);
                     if(PrintLogReport==true) Print("Close Plus First Order of Emergency Mode 'Partial Close In Loss'");
                     CountHistory=true;
                    }
                  //---Start close minus
                  if((TotalOrdersMinus[cnt]>=EmergencyValue[cnt][3]) && (TotalOrdersPlus[cnt]<TotalOrdersMinus[cnt]))
                    {
                     if(TotalOrdersMinus[cnt]>0) ClosePairMinus(cnt,FirstTicketMinus[cnt]);
                     if(PrintLogReport==true) Print("Close Minus First Order of Emergency Mode 'Partial Close In Loss'");
                     CountHistory=true;
                    }
                 }
              }//End if(EmergencyValue[cnt][3]>0)
            //---
           }//end if(UseEmergencyMode==true)
         //---------------------------------------------------------------------
         //Close in percentage loss
         if(UsePercentageClose==true)
           {
            if(((TotalProfitPlus[cnt]+TotalProfitMinus[cnt]<=-((AccountBalance()/100)*PercentageEquity)) || (ExpertCloseInPercentage[cnt]==true)) && (TotalOrdersPlus[cnt]+TotalOrdersMinus[cnt]>0))
              {
               if(TotalOrdersPlus[cnt]>0) ClosePairPlus(cnt,-1);
               if(TotalOrdersMinus[cnt]>0) ClosePairMinus(cnt,-1);
               if(HedgePlusOrders[cnt]>0) ClosePairPlus(cnt,HedgePlusTicket[cnt]);
               if(HedgeMinusOrders[cnt]>0) ClosePairMinus(cnt,HedgeMinusTicket[cnt]);
               ExpertCloseInPercentage[cnt]=true;
               if(PrintLogReport==true) Print("Close Plus and Minus Orders From 'Percentage Close Mode'");
               CountHistory=true;
               continue;
              }
           }
         //---------------------------------------------------------------------
         //Close orders in loss
         if((TypeCloseInLoss<2) && (ExpertCloseBasketInProfit[cnt]==false) && (ExpertClosePlusInProfit[cnt]==false) && (ExpertCloseMinusInProfit[cnt]==false) && (ExpertCloseInPercentage[cnt]==false))
           {
            //---Close whole ticket
            if((TypeCloseInLoss==0) && (TotalOrdersPlus[cnt]+TotalOrdersMinus[cnt]>0))
              {
               if((TotalProfitPlus[cnt]<0) && (TotalOrdersPlus[cnt]>0))
                 {
                  //---Start close plus in loss
                  if((TotalProfitPlus[cnt]<=LevelLossClosePlus[cnt]) || (ExpertClosePlusInLoss[cnt]==true))
                    {
                     if(TotalOrdersPlus[cnt]>0) ClosePairPlus(cnt,-1);
                     if(HedgePlusOrders[cnt]>0) ClosePairPlus(cnt,HedgePlusTicket[cnt]);
                     if(HedgeMinusOrders[cnt]>0) ClosePairMinus(cnt,HedgeMinusTicket[cnt]);
                     ExpertClosePlusInLoss[cnt]=true;
                     CountHistory=true;
                     continue;
                    }
                 }
               //---Start close minus in loss
               if((TotalProfitMinus[cnt]<0) && (TotalOrdersMinus[cnt]>0))
                 {
                  if((TotalProfitMinus[cnt]<=LevelLossCloseMinus[cnt]) || (ExpertCloseMinusInLoss[cnt]==true))
                    {
                     if(TotalOrdersMinus[cnt]>0) ClosePairMinus(cnt,-1);
                     if(HedgePlusOrders[cnt]>0) ClosePairPlus(cnt,HedgePlusTicket[cnt]);
                     if(HedgeMinusOrders[cnt]>0) ClosePairMinus(cnt,HedgeMinusTicket[cnt]);
                     ExpertCloseMinusInLoss[cnt]=true;
                     CountHistory=true;
                     continue;
                    }
                 }
              }//End if(TypeCloseInLoss==0)
            //---Close partial ticket
            if((TypeCloseInLoss==1) && (TotalOrdersPlus[cnt]+TotalOrdersMinus[cnt]>0))
              {
               //---Start close plus in loss
               if((TotalProfitPlus[cnt]<0) && (TotalOrdersPlus[cnt]>0) && (TotalOrdersPlus[cnt]>TotalOrdersMinus[cnt]))
                 {
                  if(TotalProfitPlus[cnt]<=LevelLossClosePlus[cnt])
                    {
                     if(TotalOrdersPlus[cnt]>0) ClosePairPlus(cnt,FirstTicketPlus[cnt]);
                     CountHistory=true;
                     continue;
                    }
                 }
               //---Start close minus in loss
               if((TotalProfitMinus[cnt]<0) && (TotalOrdersMinus[cnt]>0) && (TotalOrdersPlus[cnt]<TotalOrdersMinus[cnt]))
                 {
                  if(TotalProfitMinus[cnt]<=LevelLossCloseMinus[cnt])
                    {
                     if(TotalOrdersMinus[cnt]>0) ClosePairMinus(cnt,FirstTicketMinus[cnt]);
                     CountHistory=true;
                     continue;
                    }
                 }
              }//End if(TypeCloseInLoss==1)
            //---
           }
         //---------------------------------------------------------------------
         //Close orders in profit
         if((TypeOperation!=0) && (ExpertCloseBasketInLoss[cnt]==false) && (ExpertClosePlusInLoss[cnt]==false) && (ExpertCloseMinusInLoss[cnt]==false) && (ExpertCloseInPercentage[cnt]==false))
           {
            //---Close in ticket profit
            if(TypeCloseInProfit==0)
              {
               //---Start close plus in profit
               if((TotalProfitPlus[cnt]+TotalHedgeProfit[cnt]>0) && (TotalOrdersPlus[cnt]>0))
                 {
                  if((TotalProfitPlus[cnt]+TotalHedgeProfit[cnt]>=LevelProfitClosePlus[cnt]) || (ExpertClosePlusInProfit[cnt]==true))
                    {
                     if(TotalOrdersPlus[cnt]>0) ClosePairPlus(cnt,-1);
                     if(HedgePlusOrders[cnt]>0) ClosePairPlus(cnt,HedgePlusTicket[cnt]);
                     if(HedgeMinusOrders[cnt]>0) ClosePairMinus(cnt,HedgeMinusTicket[cnt]);
                     ExpertClosePlusInProfit[cnt]=true;
                     CountHistory=true;
                     continue;
                    }
                 }
               //---Start close minus in profit
               if((TotalProfitMinus[cnt]+TotalHedgeProfit[cnt]>0) && (TotalOrdersMinus[cnt]>0))
                 {
                  if((TotalProfitMinus[cnt]+TotalHedgeProfit[cnt]>=LevelProfitCloseMinus[cnt]) || (ExpertCloseMinusInProfit[cnt]==true))
                    {
                     if(TotalOrdersMinus[cnt]>0) ClosePairMinus(cnt,-1);
                     if(HedgePlusOrders[cnt]>0) ClosePairPlus(cnt,HedgePlusTicket[cnt]);
                     if(HedgeMinusOrders[cnt]>0) ClosePairMinus(cnt,HedgeMinusTicket[cnt]);
                     ExpertCloseMinusInProfit[cnt]=true;
                     CountHistory=true;
                     continue;
                    }
                 }
              }
            //---Close in basket profit
            if(TypeCloseInProfit==1)
              {
               //---Close all in basket profit
               if((TotalGroupProfit[cnt]+TotalHedgeProfit[cnt]>0) && (TotalOrdersPlus[cnt]+TotalOrdersMinus[cnt]+HedgePlusOrders[cnt]+HedgeMinusOrders[cnt]>0))
                 {
                  if((TotalGroupProfit[cnt]+TotalHedgeProfit[cnt]>=MathMax(LevelProfitClosePlus[cnt],LevelProfitCloseMinus[cnt])) || (ExpertCloseBasketInProfit[cnt]==true))
                    {
                     if(TotalOrdersPlus[cnt]>0) ClosePairPlus(cnt,-1);
                     if(TotalOrdersMinus[cnt]>0) ClosePairMinus(cnt,-1);
                     if(HedgePlusOrders[cnt]>0) ClosePairPlus(cnt,HedgePlusTicket[cnt]);
                     if(HedgeMinusOrders[cnt]>0) ClosePairMinus(cnt,HedgeMinusTicket[cnt]);
                     ExpertCloseBasketInProfit[cnt]=true;
                     CountHistory=true;
                     continue;
                    }
                 }
              }
            //---Close in hybrid mode
            if((TypeCloseInProfit==2) || ((OpenOrdersInLoss==2) && (TypeCloseInProfit!=3)))
              {
               //---Start close plus in profit (smaller ticket plus)
               if((TotalOrdersPlus[cnt]>0) && (TotalOrdersMinus[cnt]>0) && (TotalOrdersPlus[cnt]<=TotalOrdersMinus[cnt]))
                 {
                  if((TotalProfitPlus[cnt]>=LevelProfitClosePlus[cnt]) || (ExpertClosePlusInProfit[cnt]==true))
                    {
                     if(TotalOrdersPlus[cnt]>0) ClosePairPlus(cnt,-1);
                     ExpertClosePlusInProfit[cnt]=true;
                     CountHistory=true;
                     continue;
                    }
                 }
               //---Start close minus in profit (smaller ticket minus)
               if((TotalOrdersPlus[cnt]>0) && (TotalOrdersMinus[cnt]>0) && (TotalOrdersPlus[cnt]>=TotalOrdersMinus[cnt]))
                 {
                  if((TotalProfitMinus[cnt]>=LevelProfitCloseMinus[cnt]) || (ExpertCloseMinusInProfit[cnt]==true))
                    {
                     if(TotalOrdersMinus[cnt]>0) ClosePairMinus(cnt,-1);
                     ExpertCloseMinusInProfit[cnt]=true;
                     CountHistory=true;
                     continue;
                    }
                 }
               //---Set auto step
               if((OpenOrdersInLoss==2) && (TypeOperation!=2))
                 {
                  LevelProfitClosePlus[cnt]=(TotalLotPlus[cnt]*TargetCloseProfit*TickValuePair[cnt]);
                  LevelProfitCloseMinus[cnt]=(TotalLotMinus[cnt]*TargetCloseProfit*TickValuePair[cnt]);
                 }
               //---Close all in basket profit (all tickets)
               if((TotalGroupProfit[cnt]+TotalHedgeProfit[cnt]>0) && (TotalOrdersPlus[cnt]+TotalOrdersMinus[cnt]+HedgePlusOrders[cnt]+HedgeMinusOrders[cnt]>0))
                 {
                  if((TotalGroupProfit[cnt]+TotalHedgeProfit[cnt]>=MathMax(LevelProfitClosePlus[cnt],LevelProfitCloseMinus[cnt])) || (ExpertCloseBasketInProfit[cnt]==true))
                    {
                     if(TotalOrdersPlus[cnt]>0) ClosePairPlus(cnt,-1);
                     if(TotalOrdersMinus[cnt]>0) ClosePairMinus(cnt,-1);
                     if(HedgePlusOrders[cnt]>0) ClosePairPlus(cnt,HedgePlusTicket[cnt]);
                     if(HedgeMinusOrders[cnt]>0) ClosePairMinus(cnt,HedgeMinusTicket[cnt]);
                     ExpertCloseBasketInProfit[cnt]=true;
                     CountHistory=true;
                     continue;
                    }
                 }
              }
            //---Close in advanced mode
            if(TypeCloseInProfit==3)
              {
               //---Start close plus in profit (smaller ticket plus)
               if((TotalOrdersPlus[cnt]>0) && (TotalOrdersMinus[cnt]>0) && (TotalOrdersPlus[cnt]<=TotalOrdersMinus[cnt]))
                 {
                  if(((TotalProfitPlus[cnt]>=LevelProfitClosePlus[cnt]) && (TotalOrdersPlus[cnt]==1)) || (ExpertClosePlusInProfit[cnt]==true))
                    {
                     if(TotalOrdersPlus[cnt]>0) ClosePairPlus(cnt,-1);
                     ExpertClosePlusInProfit[cnt]=true;
                     CountHistory=true;
                     continue;
                    }
                 }
               //---Start close minus in profit (smaller ticket minus)
               if((TotalOrdersPlus[cnt]>0) && (TotalOrdersMinus[cnt]>0) && (TotalOrdersPlus[cnt]>=TotalOrdersMinus[cnt]))
                 {
                  if(((TotalProfitMinus[cnt]>=LevelProfitCloseMinus[cnt]) && (TotalOrdersMinus[cnt]==1)) || (ExpertCloseMinusInProfit[cnt]==true))
                    {
                     if(TotalOrdersMinus[cnt]>0) ClosePairMinus(cnt,-1);
                     ExpertCloseMinusInProfit[cnt]=true;
                     CountHistory=true;
                     continue;
                    }
                 }
               //---Set auto step
               if((OpenOrdersInLoss==2) && (TypeOperation!=2))
                 {
                  LevelProfitClosePlus[cnt]=(TotalLotPlus[cnt]*TargetCloseProfit*TickValuePair[cnt]);
                  LevelProfitCloseMinus[cnt]=(TotalLotMinus[cnt]*TargetCloseProfit*TickValuePair[cnt]);
                 }
               //---Close in hedge option one with more profits and one with more losses
               if(cnt>=NumberPairsTrade-1)
                 {
                  for(cnt100=0; cnt100<NumberPairsTrade; cnt100++)
                    {
                     //---Get more profits
                     if(TotalGroupProfit[cnt100]+TotalHedgeProfit[cnt100]>TotalMoreProfit)
                       {
                        TotalMoreProfit=TotalGroupProfit[cnt100]+TotalHedgeProfit[cnt100];
                        PairMoreProfit=cnt100;
                       }
                     //---Get more losses
                     if(TotalGroupProfit[cnt100]+TotalHedgeProfit[cnt100]<TotalMoreLoss)
                       {
                        TotalMoreLoss=TotalGroupProfit[cnt100]+TotalHedgeProfit[cnt100];
                        PairMoreLoss=cnt100;
                       }
                    }
                  //---Check to close orders
                  if((PairMoreProfit!=-1) && (PairMoreLoss!=-1))
                    {
                     if((TotalMoreProfit>TotalMoreLoss) && (TotalOrdersPlus[PairMoreProfit]>0) && (TotalOrdersMinus[PairMoreProfit]>0) && (TotalOrdersPlus[PairMoreLoss]>0) && (TotalOrdersMinus[PairMoreLoss]>0) && 
                        (TotalMoreProfit+TotalMoreLoss>=MathMax(MathMax(LevelProfitClosePlus[PairMoreProfit],LevelProfitCloseMinus[PairMoreProfit]),MathMax(LevelProfitClosePlus[PairMoreLoss],LevelProfitCloseMinus[PairMoreLoss]))))
                       {
                        for(cnt100=0; cnt100<NumberPairsTrade; cnt100++)
                          {
                           if((cnt100==PairMoreProfit) || (cnt100==PairMoreLoss))
                             {
                              if(TotalOrdersPlus[cnt100]>0) ClosePairPlus(cnt100,-1);
                              if(TotalOrdersMinus[cnt100]>0) ClosePairMinus(cnt100,-1);
                              if(HedgePlusOrders[cnt100]>0) ClosePairPlus(cnt100,HedgePlusTicket[cnt100]);
                              if(HedgeMinusOrders[cnt100]>0) ClosePairMinus(cnt100,HedgeMinusTicket[cnt100]);
                             }
                          }
                        CountHistory=true;
                        return;
                       }
                    }
                  //---Close all pairs
                  if(TotalProfitLoss>=MathMax(LevelProfitClosePlus[PairMoreLoss],LevelProfitCloseMinus[PairMoreLoss]))
                    {
                     for(cnt100=0; cnt100<NumberPairsTrade; cnt100++)
                       {
                        if(TotalOrdersPlus[cnt100]>0) ClosePairPlus(cnt100,-1);
                        if(TotalOrdersMinus[cnt100]>0) ClosePairMinus(cnt100,-1);
                        if(HedgePlusOrders[cnt100]>0) ClosePairPlus(cnt100,HedgePlusTicket[cnt100]);
                        if(HedgeMinusOrders[cnt100]>0) ClosePairMinus(cnt100,HedgeMinusTicket[cnt100]);
                       }
                     CountHistory=true;
                     return;
                    }
                  //---
                 }
               //---
              }
            //---
           }//end if(TypeOperation!=0)
         //---------------------------------------------------------------------
         //Calculate lot size per pair
         if(LotOrdersProgress==0)//Statical
           {
            MultiplierLotPlus[cnt]=1;
            MultiplierLotMinus[cnt]=1;
           }
         //---
         if(LotOrdersProgress==1)//Geometrical
           {
            MultiplierLotPlus[cnt]=TotalOrdersPlus[cnt]+1;
            MultiplierLotMinus[cnt]=TotalOrdersMinus[cnt]+1;
           }
         //---
         if(LotOrdersProgress==2)//Exponential
           {
            MultiplierLotPlus[cnt]=MathMax(1,MathPow(2,TotalOrdersPlus[cnt]));
            MultiplierLotMinus[cnt]=MathMax(1,MathPow(2,TotalOrdersMinus[cnt]));
           }
         //---------------------------------------------------------------------
         //Set lots for orders
         TotalLotsPair[cnt]=TotalLotPlus[cnt]+TotalLotMinus[cnt]+HedgePlusLot[cnt]+HedgeMinusLot[cnt];
         //---
         if((TypeOperation==1) || (TypeOperation==2))
           {
            if(TotalOrdersPlus[cnt]+TotalOrdersMinus[cnt]>0)
              {
               //---With out limits
               if((MaxLotPerPair==0) || (MaxMultiLotPerPair==0))
                 {
                  LotPlus[cnt]=NormalizeLot(FirstLotOfPair[cnt]*MultiplierLotPlus[cnt],cnt);
                  LotMinus[cnt]=NormalizeLot(FirstLotOfPair[cnt]*MultiplierLotMinus[cnt],cnt);
                 }
               //---
               if(MaxMultiLotPerPair>0)
                 {
                  LotPlus[cnt]=NormalizeLot(MathMin(LotSize*MaxMultiLotPerPair,FirstLotOfPair[cnt]*MultiplierLotPlus[cnt]),cnt);
                  LotMinus[cnt]=NormalizeLot(MathMin(LotSize*MaxMultiLotPerPair,FirstLotOfPair[cnt]*MultiplierLotMinus[cnt]),cnt);
                  LotHedgePlus[cnt]=NormalizeLot(MathMin(LotSize*MaxMultiLotPerPair,LotHedgePlus[cnt]),cnt);
                  LotHedgeMinus[cnt]=NormalizeLot(MathMin(LotSize*MaxMultiLotPerPair,LotHedgeMinus[cnt]),cnt);
                 }
               //---
               if(MaxLotPerPair>0)
                 {
                  LotPlus[cnt]=NormalizeLot(MathMax(MathMin(MaxLotPerPair-TotalLotsPair[cnt],FirstLotOfPair[cnt]*MultiplierLotPlus[cnt]),LotSize),cnt);
                  LotMinus[cnt]=NormalizeLot(MathMax(MathMin(MaxLotPerPair-TotalLotsPair[cnt],FirstLotOfPair[cnt]*MultiplierLotMinus[cnt]),LotSize),cnt);
                  LotHedgePlus[cnt]=NormalizeLot(MathMax(MathMin(MaxLotPerPair-TotalLotsPair[cnt],LotHedgePlus[cnt]),LotSize),cnt);
                  LotHedgeMinus[cnt]=NormalizeLot(MathMax(MathMin(MaxLotPerPair-TotalLotsPair[cnt],LotHedgeMinus[cnt]),LotSize),cnt);
                 }
               //---
              }
            else
              {
               //---
               if(MaxLotPerPair==0)
                 {
                  LotPlus[cnt]=NormalizeLot(LotSize,cnt);
                  LotMinus[cnt]=NormalizeLot(LotSize,cnt);
                 }
               //---
               if(MaxLotPerPair>0)
                 {
                  LotPlus[cnt]=NormalizeLot(MathMin(MaxLotPerPair,LotSize),cnt);
                  LotMinus[cnt]=NormalizeLot(MathMin(MaxLotPerPair,LotSize),cnt);
                 }
               //---
              }
            //---------------------------------------------------------------------
            //Check account margin and limit opened orders
            if(ReadySendPlus[cnt]==true) CheckMargin[cnt]+=AccountFreeMargin()-AccountFreeMarginCheck(SymbolPair[cnt],OP_BUY,LotPlus[cnt]);
            if(ReadySendMinus[cnt]==true) CheckMargin[cnt]+=AccountFreeMargin()-AccountFreeMarginCheck(SymbolPair[cnt],OP_SELL,LotMinus[cnt]);
            //---
            if(ReadySendHedgePlus[cnt]==true) CheckMargin[cnt]+=AccountFreeMargin()-AccountFreeMarginCheck(SymbolPair[cnt],OP_BUY,LotHedgePlus[cnt]);
            if(ReadySendHedgeMinus[cnt]==true) CheckMargin[cnt]+=AccountFreeMargin()-AccountFreeMarginCheck(SymbolPair[cnt],OP_SELL,LotHedgeMinus[cnt]);
            //---
            SumMargin=AccountFreeMargin()-CheckMargin[cnt];
            //---------------------------------------------------------------------
            //Open orders
            //---Margin is ok
            if(SumMargin>0.0)
              {
               if((OrdersTotal()<MaximumOrders-(PairsPerGroup)) || (MaximumOrders==0))
                 {
                  //---Send plus
                  if(ReadySendPlus[cnt]==true) OpenPairPlus(cnt,-1);
                  //---Send minus
                  if(ReadySendMinus[cnt]==true) OpenPairMinus(cnt,-1);
                  //---Hedge orders
                  if(EmergencyValue[cnt][2]>0)
                    {
                     if(ReadySendHedgePlus[cnt]==true) OpenPairPlus(cnt,1);
                     if(ReadySendHedgeMinus[cnt]==true) OpenPairMinus(cnt,1);
                    }
                 }
               else
                 {
                  CommentWarning=true;
                  WarningPrint=StringConcatenate("Orders are in limit (",OrdersTotal(),"/",MaximumOrders,")");
                 }
              }
            //---Low margin
            if(SumMargin<=0.0)
              {
               CommentWarning=true;
               WarningPrint=StringConcatenate("  Free margin is low (",DoubleToStr(SumMargin,0),")");
              }
           }//end if((TypeWorking==2)||(TypeWorking==0))
        }//end if((NewBar[cnt]==true)&&(MarketIsOpen==true))
      //---------------------------------------------------------------------
      //Close and stop
      if(TypeOperation==3)
        {
         //---There are not open orders
         if(TotalOrdersPlus[cnt]+TotalOrdersMinus[cnt]+HedgePlusOrders[cnt]+HedgeMinusOrders[cnt]==0)
           {
            if(cnt==NumberPairsTrade-1)
              {
               Comment(
                       "\n                  ",WindowExpertName()+
                       "\n\n           ~ Have Close All Orders ~ "+
                       "\n\n           ~ History Orders Results ~ "+
                       "\n  Pips: "+DoubleToStr(HistoryTotalPips,2)+" || Orders: "+DoubleToStr(HistoryTotalTrades,0)+" || PnL: "+DoubleToStr(HistoryTotalProfitLoss,2)
                       );
              }
           }
         //---There are open orders
         if(TotalOrdersPlus[cnt]+TotalOrdersMinus[cnt]+HedgePlusOrders[cnt]+HedgeMinusOrders[cnt]>0)
           {
            Comment("\n                  ",WindowExpertName(),
                    "\n\n           ~ Wait For Close Orders ~ ");
            //---Close orders
            if(TotalOrdersPlus[cnt]>0) ClosePairPlus(cnt,-1);
            if(TotalOrdersMinus[cnt]>0) ClosePairMinus(cnt,-1);
            if(HedgePlusOrders[cnt]>0) ClosePairPlus(cnt,HedgePlusTicket[cnt]);
            if(HedgeMinusOrders[cnt]>0) ClosePairMinus(cnt,HedgeMinusTicket[cnt]);
           }//end if(TotalOrdersPlus+TotalOrdersMinus>0)
        }//end if(StopAndClose==true)
     }//end for(i=0; i<NumberPairsTrade; i++)
//---------------------------------------------------------------------
//Call comment function
//if((TypeOperation<3)&&(!IsTesting())&&(!IsOptimization())) CommentChart();
   if(TypeOperation<3) CommentChart();
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//Normalize Lots
//====================================================================================================================================================//
double NormalizeLot(double LotsSize,int PairCount)
  {
//---------------------------------------------------------------------
   if(IsConnected())
      return(MathMin(MathMax((MathRound(LotsSize/MarketInfo(SymbolPair[PairCount],MODE_LOTSTEP))*MarketInfo(SymbolPair[PairCount],MODE_LOTSTEP)),MarketInfo(SymbolPair[PairCount],MODE_MINLOT)),MarketInfo(SymbolPair[PairCount],MODE_MAXLOT)));
   else
      return(LotsSize);
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//Open plus orders
//====================================================================================================================================================//
void OpenPairPlus(int PairOpen,int TypeOrder)
  {
//---------------------------------------------------------------------
   double PriceOpen=0;
   double StopLoss=0;
   double TakeProfit=0;
   double LotSizeOrder=0;
   color ColorOrder=0;
   int ID=0;
   double FreeMargin=0;
//---------------------------------------------------------------------
//Count free margin
   if(AccountFreeMargin()>AccountFreeMarginCheck(SymbolPair[PairOpen],OP_BUY,LotPlus[PairOpen])) FreeMargin=AccountFreeMargin()-AccountFreeMarginCheck(SymbolPair[PairOpen],OP_BUY,LotPlus[PairOpen]);
   if(AccountFreeMargin()<AccountFreeMarginCheck(SymbolPair[PairOpen],OP_BUY,LotPlus[PairOpen])) FreeMargin=AccountFreeMargin()+(AccountFreeMargin()-AccountFreeMarginCheck(SymbolPair[PairOpen],OP_BUY,LotPlus[PairOpen]));
//---------------------------------------------------------------------
   if(FreeMargin>=0)
     {
      CntTry=0;
      while(TRUE)
        {
         CntTry++;
         PriceOpen=MarketInfo(SymbolPair[PairOpen],MODE_ASK);
         ColorOrder=clrBlue;
         //---Normal order
         if(TypeOrder==-1)
           {
            LotSizeOrder=LotPlus[PairOpen];
            ID=MagicNo;
           }
         //---Hedge order
         if(TypeOrder==1)
           {
            LotSizeOrder=LotHedgePlus[PairOpen];
            ID=HedgeID;
           }
         //---
         TicketNo[PairOpen]=OrderSend(SymbolPair[PairOpen],OP_BUY,LotSizeOrder,PriceOpen,MaxSlippage,StopLoss,TakeProfit,CommentsEA,ID,0,ColorOrder);
         //---
         if(TicketNo[PairOpen]>0)
           {
            if(PrintLogReport==true) Print("Open Plus",SymbolPair[PairOpen]," - TicketNo: ",TicketNo[PairOpen]);
            break;
           }
         //---
         Sleep(100);
         if(CntTry>3) break;
         RefreshRates();
        }
     }
   else
     {
      CommentWarning=true;
      WarningPrint=StringConcatenate("  Free margin is low (",DoubleToStr(FreeMargin),")");
      Print(WarningPrint);
     }
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//Open minus orders
//====================================================================================================================================================//
void OpenPairMinus(int PairOpen,int TypeOrder)
  {
//---------------------------------------------------------------------
   double PriceOpen=0;
   double StopLoss=0;
   double TakeProfit=0;
   double LotSizeOrder=0;
   color ColorOrder=0;
   int ID=0;
   double FreeMargin=0;
//---------------------------------------------------------------------
//Count free margin
   if(AccountFreeMargin()>AccountFreeMarginCheck(SymbolPair[PairOpen],OP_SELL,LotMinus[PairOpen])) FreeMargin=AccountFreeMargin()-AccountFreeMarginCheck(SymbolPair[PairOpen],OP_SELL,LotMinus[PairOpen]);
   if(AccountFreeMargin()<AccountFreeMarginCheck(SymbolPair[PairOpen],OP_SELL,LotMinus[PairOpen])) FreeMargin=AccountFreeMargin()+(AccountFreeMargin()-AccountFreeMarginCheck(SymbolPair[PairOpen],OP_SELL,LotMinus[PairOpen]));
//---------------------------------------------------------------------
   if(FreeMargin>=0)
     {
      CntTry=0;
      while(TRUE)
        {
         CntTry++;
         PriceOpen=MarketInfo(SymbolPair[PairOpen],MODE_BID);
         ColorOrder=clrRed;
         //---Normal order
         if(TypeOrder==-1)
           {
            LotSizeOrder=LotMinus[PairOpen];
            ID=MagicNo;
           }
         //---Hedge order
         if(TypeOrder==1)
           {
            LotSizeOrder=LotHedgeMinus[PairOpen];
            ID=HedgeID;
           }
         //---
         TicketNo[PairOpen]=OrderSend(SymbolPair[PairOpen],OP_SELL,LotSizeOrder,PriceOpen,MaxSlippage,StopLoss,TakeProfit,CommentsEA,ID,0,ColorOrder);
         //---
         if(TicketNo[PairOpen]>0)
           {
            if(PrintLogReport==true) Print("Open Minus: ",SymbolPair[PairOpen]," || TicketNo: ",TicketNo[PairOpen]);
            break;
           }
         //---
         Sleep(100);
         if(CntTry>3) break;
         RefreshRates();
        }
     }
   else
     {
      CommentWarning=true;
      WarningPrint=StringConcatenate("  Free margin is low (",DoubleToStr(FreeMargin,0),")");
      Print(WarningPrint);
     }
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//Close plus orders
//====================================================================================================================================================//
void ClosePairPlus(int PairClose,int TicketClose)
  {
//---------------------------------------------------------------------
   double PriceClose=0;
   color ColorOrder=0;
   int ClosedOrders=0;
//---------------------------------------------------------------------
//No FIFO rules
   for(i=OrdersTotal()-1; i>=0; i--)//Last to first
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(((OrderMagicNumber()==MagicNo) || (OrderMagicNumber()==HedgeID)) && (OrderSymbol()==SymbolPair[PairClose]) && (OrderType()==OP_BUY))
           {
            if((OrderTicket()==TicketClose) || ((TicketClose==-1) && (OrderMagicNumber()==MagicNo)))
              {
               //---
               PriceClose=MarketInfo(OrderSymbol(),MODE_BID);
               ColorOrder=clrPowderBlue;
               //---
               CntTry=0;
               while(TRUE)
                 {
                  CntTry++;
                  TicketNo[PairClose]=OrderClose(OrderTicket(),OrderLots(),PriceClose,MaxSlippage,ColorOrder);
                  //---
                  if(TicketNo[PairClose]>0)
                    {
                     if(PrintLogReport==true) Print("Close Plus: ",SymbolPair[PairClose]," || TicketNo: ",OrderTicket());
                     break;
                    }
                  //---
                  Sleep(100);
                  if(CntTry>3) break;
                  RefreshRates();
                 }
              }
           }
        }
     }
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//Close minus orders
//====================================================================================================================================================//
void ClosePairMinus(int PairClose,int TicketClose)
  {
//---------------------------------------------------------------------
   double PriceClose=0;
   color ColorOrder=0;
   int ClosedOrders=0;
//---------------------------------------------------------------------
//No FIFO rules
   for(i=OrdersTotal()-1; i>=0; i--)//Last to first
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(((OrderMagicNumber()==MagicNo) || (OrderMagicNumber()==HedgeID)) && (OrderSymbol()==SymbolPair[PairClose]) && (OrderType()==OP_SELL))
           {
            if((OrderTicket()==TicketClose) || ((TicketClose==-1) && (OrderMagicNumber()==MagicNo)))
              {
               //---
               PriceClose=MarketInfo(OrderSymbol(),MODE_ASK);
               ColorOrder=clrPink;
               //---
               CntTry=0;
               while(TRUE)
                 {
                  CntTry++;
                  TicketNo[PairClose]=OrderClose(OrderTicket(),OrderLots(),PriceClose,MaxSlippage,ColorOrder);
                  //---
                  if(TicketNo[PairClose]>0)
                    {
                     if(PrintLogReport==true) Print("Close Minus: ",SymbolPair[PairClose]," || TicketNo: ",OrderTicket());
                     break;
                    }
                  //---
                  Sleep(100);
                  if(CntTry>3) break;
                  RefreshRates();
                 }
              }
           }
        }
     }
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//Count current orders and resuluts
//====================================================================================================================================================//
void CountCurrentOrders(int PairGet)
  {
//---------------------------------------------------------------------
   CountAllOpenedOrders=0;
   TotalProfitPlus[PairGet]=0;
   TotalProfitMinus[PairGet]=0;
   FirstLotPlus[PairGet]=0;
   FirstLotMinus[PairGet]=0;
   LastLotPlus[PairGet]=0;
   LastLotMinus[PairGet]=0;
   FirstTicketPlus[PairGet]=0;
   FirstTicketMinus[PairGet]=0;
   LastTicketPlus[PairGet]=0;
   LastTicketMinus[PairGet]=0;
   FirstProfitPlus[PairGet]=0;
   FirstProfitMinus[PairGet]=0;
   LastProfitPlus[PairGet]=0;
   LastProfitMinus[PairGet]=0;
   TotalOrdersPlus[PairGet]=0;
   TotalOrdersMinus[PairGet]=0;
   TotalGroupProfit[PairGet]=0;
   TotalOrdersMinus[PairGet]=0;
   FirstLotOfPair[PairGet]=0;
   TotalLotPlus[PairGet]=0;
   TotalLotMinus[PairGet]=0;
   TotalCommissionPlus[PairGet]=0;
   TotalCommissionMinus[PairGet]=0;
//---------------------------------------------------------------------
//Get orders informations
   if(OrdersTotal()>0)
     {
      //---Last to first
      for(i=OrdersTotal()-1; i>=0; i--)
        {
         //---Start check trades
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            CountAllOpenedOrders++;
            if(OrderMagicNumber()==MagicNo)
              {
               //---Plus pair 1
               if((OrderType()==OP_BUY) && (OrderSymbol()==SymbolPair[PairGet]))
                 {
                  FirstLotOfPair[PairGet]=OrderLots();
                  TotalProfitPlus[PairGet]+=OrderProfit()+OrderSwap()+OrderCommission();
                  TotalCommissionPlus[PairGet]+=MathAbs(OrderCommission()+OrderSwap());
                  FirstLotPlus[PairGet]=OrderLots();
                  TotalLotPlus[PairGet]+=OrderLots();
                  TotalOrdersPlus[PairGet]++;
                  FirstTicketPlus[PairGet]=OrderTicket();
                  FirstProfitPlus[PairGet]=OrderProfit()+OrderSwap()+OrderCommission();
                  if(LastTicketPlus[PairGet]==0) LastTicketPlus[PairGet]=OrderTicket();
                  if(LastLotPlus[PairGet]==0) LastLotPlus[PairGet]=OrderLots();
                  if(LastProfitPlus[PairGet]==0) LastProfitPlus[PairGet]=OrderProfit()+OrderSwap()+OrderCommission();
                 }
               //---Minus pair 1
               if((OrderType()==OP_SELL) && (OrderSymbol()==SymbolPair[PairGet]))
                 {
                  FirstLotOfPair[PairGet]=OrderLots();
                  TotalProfitMinus[PairGet]+=OrderProfit()+OrderSwap()+OrderCommission();
                  TotalCommissionMinus[PairGet]+=MathAbs(OrderCommission()+OrderSwap());
                  FirstLotMinus[PairGet]=OrderLots();
                  TotalLotMinus[PairGet]+=OrderLots();
                  TotalOrdersMinus[PairGet]++;
                  FirstTicketMinus[PairGet]=OrderTicket();
                  FirstProfitMinus[PairGet]=OrderProfit()+OrderSwap()+OrderCommission();
                  if(LastTicketMinus[PairGet]==0) LastTicketMinus[PairGet]=OrderTicket();
                  if(LastLotMinus[PairGet]==0) LastLotMinus[PairGet]=OrderLots();
                  if(LastProfitMinus[PairGet]==0) LastProfitMinus[PairGet]=OrderProfit()+OrderSwap()+OrderCommission();
                 }
              }
            //---
           }
        }
      if(CountAllOpenedOrders!=OrdersTotal()) return;//Pass again orders
     }//end if(OrdersTotal()>0)
//---------------------------------------------------------------------
//Processing orders informations
   TotalGroupProfit[PairGet]=TotalProfitPlus[PairGet]+TotalProfitMinus[PairGet];
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//Count orders for hedge mode resuluts
//====================================================================================================================================================//
void CountOrdersEmergencyMode(int PairGet)
  {
//---------------------------------------------------------------------
   LastPlusTotalProfit[PairGet]=0;
   LastMinusTotalProfit[PairGet]=0;
   FirstPlusTotalProfit[PairGet]=0;
   FirstMinusTotalProfit[PairGet]=0;
   HedgePlusOrders[PairGet]=0;
   HedgeMinusOrders[PairGet]=0;
   HedgePlusTicket[PairGet]=0;
   HedgeMinusTicket[PairGet]=0;
   HedgePlusProfit[PairGet]=0;
   HedgeMinusProfit[PairGet]=0;
   HedgePlusLot[PairGet]=0;
   HedgeMinusLot[PairGet]=0;
   TotalHedgeProfit[PairGet]=0;
   CountPlusEmergency[PairGet]=0;
   CountMinusEmergency[PairGet]=0;
//---------------------------------------------------------------------
//Get orders informations
   if(OrdersTotal()>0)
     {
      //---Last to first
      for(i=OrdersTotal()-1; i>=0; i--)
        {
         //---Reset value
         LastPlusInProfit[PairGet][i]=0;
         LastMinusInProfit[PairGet][i]=0;
         LastTicketPlusInProfit[PairGet][i]=-1;
         LastTicketMinusInProfit[PairGet][i]=-1;
         //---Start check trades
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            //---------------------------------------------------------------------
            //Partial close
            if(EmergencyValue[PairGet][1]>0)
              {
               //---Get for partial close plus
               if((OrderType()==OP_BUY) && (OrderSymbol()==SymbolPair[PairGet]) && (OrderMagicNumber()==MagicNo))
                 {
                  if((LastPlusInProfit[PairGet][i]==0) && (OrderProfit()+OrderSwap()+OrderCommission()>0))
                    {
                     LastPlusInProfit[PairGet][i]=OrderProfit()+OrderSwap()+OrderCommission();
                     LastTicketPlusInProfit[PairGet][i]=OrderTicket();
                     LastPlusTotalProfit[PairGet]+=LastPlusInProfit[PairGet][i];
                    }
                 }
               //---Get for partial close minus
               if((OrderType()==OP_SELL) && (OrderSymbol()==SymbolPair[PairGet]) && (OrderMagicNumber()==MagicNo))
                 {
                  if((LastMinusInProfit[PairGet][i]==0) && (OrderProfit()+OrderSwap()+OrderCommission()>0))
                    {
                     LastMinusInProfit[PairGet][i]=OrderProfit()+OrderSwap()+OrderCommission();
                     LastTicketMinusInProfit[PairGet][i]=OrderTicket();
                     LastMinusTotalProfit[PairGet]+=LastMinusInProfit[PairGet][i];
                    }
                 }
              }
           }
        }
      //---First to last
      for(i=0; i<OrdersTotal(); i++)
        {
         //---Reset value
         FirstPlusInProfit[PairGet][i]=0;
         FirstMinusInProfit[PairGet][i]=0;
         FirstTicketPlusInProfit[PairGet][i]=-1;
         FirstTicketMinusInProfit[PairGet][i]=-1;
         //---Start check trades
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            //---------------------------------------------------------------------
            //Hedge orders
            if(EmergencyValue[PairGet][2]>0)
              {
               //---Get for normal orders plus
               if((OrderType()==OP_BUY) && (OrderSymbol()==SymbolPair[PairGet]) && (OrderMagicNumber()==MagicNo))
                 {
                  CountPlusEmergency[PairGet]++;
                  if((FirstPlusInProfit[PairGet][i]==0) && (CountPlusEmergency[PairGet]<=NormalizeDouble(TotalOrdersPlus[PairGet]/DivisorOrders,0)))
                    {
                     FirstPlusInProfit[PairGet][i]=OrderProfit()+OrderSwap()+OrderCommission();
                     FirstTicketPlusInProfit[PairGet][i]=OrderTicket();
                     FirstPlusTotalProfit[PairGet]+=FirstPlusInProfit[PairGet][i];
                    }
                 }
               //---Get hedge orders plus
               if((OrderType()==OP_BUY) && (OrderSymbol()==SymbolPair[PairGet]) && (OrderMagicNumber()==HedgeID))
                 {
                  HedgePlusOrders[PairGet]++;
                  HedgePlusTicket[PairGet]=OrderTicket();
                  HedgePlusProfit[PairGet]=OrderProfit()+OrderSwap()+OrderCommission();
                  HedgePlusLot[PairGet]=OrderLots();
                 }
               //---Get for nomral orders minus
               if((OrderType()==OP_SELL) && (OrderSymbol()==SymbolPair[PairGet]) && (OrderMagicNumber()==MagicNo))
                 {
                  CountMinusEmergency[PairGet]++;
                  if((FirstMinusInProfit[PairGet][i]==0) && (CountMinusEmergency[PairGet]<=NormalizeDouble(TotalOrdersMinus[PairGet]/DivisorOrders,0)))
                    {
                     FirstMinusInProfit[PairGet][i]=OrderProfit()+OrderSwap()+OrderCommission();
                     FirstTicketMinusInProfit[PairGet][i]=OrderTicket();
                     FirstMinusTotalProfit[PairGet]+=FirstMinusInProfit[PairGet][i];
                    }
                 }
               //---Get hedge orders minus
               if((OrderType()==OP_SELL) && (OrderSymbol()==SymbolPair[PairGet]) && (OrderMagicNumber()==HedgeID))
                 {
                  HedgeMinusOrders[PairGet]++;
                  HedgeMinusTicket[PairGet]=OrderTicket();
                  HedgeMinusProfit[PairGet]=OrderProfit()+OrderSwap()+OrderCommission();
                  HedgeMinusLot[PairGet]=OrderLots();
                 }
              }
           }
        }
     }//end if(OrdersTotal()>0)
//---------------------------------------------------------------------
//Processing orders informations 
   TotalHedgeProfit[PairGet]=HedgePlusProfit[PairGet]+HedgeMinusProfit[PairGet];
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//Count history orders and resuluts
//====================================================================================================================================================//
void CountHistoryOrders(int PairGet)
  {
//---------------------------------------------------------------------
//Reset value
   CountAllHistoryOrders=0;
   HistoryPlusOrders[PairGet]=0;
   HistoryMinusOrders[PairGet]=0;
   HistoryPlusProfit[PairGet]=0;
   HistoryMinusProfit[PairGet]=0;
   HistoryTotalTrades=0;
   HistoryTotalProfitLoss=0;
   HistoryTotalPips=0;
//---------------------------------------------------------------------
   if(OrdersHistoryTotal()>0)
     {
      for(i=OrdersHistoryTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
           {
            CountAllHistoryOrders++;
            //---
            if((OrderMagicNumber()==MagicNo) || (OrderMagicNumber()==HedgeID))
              {
               //---------------------------------------------------------------------
               //Count plus orders
               if((OrderType()==OP_BUY) && (OrderSymbol()==SymbolPair[PairGet]))
                 {
                  HistoryPlusOrders[PairGet]++;
                  HistoryPlusProfit[PairGet]+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
               //---------------------------------------------------------------------
               //Count minus orders
               if((OrderType()==OP_SELL) && (OrderSymbol()==SymbolPair[PairGet]))
                 {
                  HistoryMinusOrders[PairGet]++;
                  HistoryMinusProfit[PairGet]+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
               //---------------------------------------------------------------------
               //History total results
               HistoryTotalTrades++;
               HistoryTotalProfitLoss+=OrderProfit()+OrderCommission()+OrderSwap();
               //---------------------------------------------------------------------
               //Count pips
               if(OrderType()==OP_BUY) HistoryTotalPips+=(OrderClosePrice()-OrderOpenPrice())/(MarketInfo(OrderSymbol(),MODE_POINT)*MultiplierPoint);
               if(OrderType()==OP_SELL) HistoryTotalPips+=(OrderOpenPrice()-OrderClosePrice())/(MarketInfo(OrderSymbol(),MODE_POINT)*MultiplierPoint);
               //---------------------------------------------------------------------
              }
           }
         if(CountAllHistoryOrders!=OrdersHistoryTotal()) CountHistory=true;//Pass again orders
        }
     }
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//Background for comments
//====================================================================================================================================================//
void ChartBackground(string StringName,color ImageColor,int TypeBorder,bool InBackGround,int Xposition,int Yposition,int Xsize,int Ysize)
  {
//---------------------------------------------------------------------
   ObjectCreate(0,StringName,OBJ_RECTANGLE_LABEL,0,0,0,0,0);
   ObjectSetInteger(0,StringName,OBJPROP_XDISTANCE,Xposition);
   ObjectSetInteger(0,StringName,OBJPROP_YDISTANCE,Yposition);
   ObjectSetInteger(0,StringName,OBJPROP_XSIZE,Xsize);
   ObjectSetInteger(0,StringName,OBJPROP_YSIZE,Ysize);
   ObjectSetInteger(0,StringName,OBJPROP_BGCOLOR,ImageColor);
   ObjectSetInteger(0,StringName,OBJPROP_BORDER_TYPE,TypeBorder);
   ObjectSetInteger(0,StringName,OBJPROP_BORDER_COLOR,clrBlack);
   ObjectSetInteger(0,StringName,OBJPROP_BACK,InBackGround);
   ObjectSetInteger(0,StringName,OBJPROP_SELECTABLE,FALSE);
   ObjectSetInteger(0,StringName,OBJPROP_SELECTED,FALSE);
   ObjectSetInteger(0,StringName,OBJPROP_HIDDEN,TRUE);
   ObjectSetInteger(0,StringName,OBJPROP_ZORDER,0);
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//Display Text/image
//====================================================================================================================================================//
void DisplayText(string StringName,string Image,int FontSize,string TypeImage,color FontColor,int Xposition,int Yposition)
  {
//---------------------------------------------------------------------
   ObjectCreate(StringName,OBJ_LABEL,0,0,0);
   ObjectSet(StringName,OBJPROP_CORNER,0);
   ObjectSet(StringName,OBJPROP_BACK,FALSE);
   ObjectSet(StringName,OBJPROP_XDISTANCE,Xposition);
   ObjectSet(StringName,OBJPROP_YDISTANCE,Yposition);
   ObjectSet(StringName,OBJPROP_SELECTABLE,FALSE);
   ObjectSet(StringName,OBJPROP_SELECTED,FALSE);
   ObjectSet(StringName,OBJPROP_HIDDEN,TRUE);
   ObjectSetText(StringName,Image,FontSize,TypeImage,FontColor);
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//Check value
//====================================================================================================================================================//
void CheckValue()
  {
//---------------------------------------------------------------------
   WrongSet=false;
//---------------------------------------------------------------------
//Check step value
   if((OpenOrdersInLoss==1) && (StepOpenNextOrders<=0) && (WrongSet==false))
     {
      Comment("\n "+StringOrdersEA+
              "\n\n\nStepOpenNextOrders parameter not correct ("+DoubleToStr(StepOpenNextOrders,2)+")"
              "\n\nPlease insert a value greater than 0");
      Print(" # "+WindowExpertName()+" # "+"StepOpenNextOrders parameter not correct ("+DoubleToStr(StepOpenNextOrders,2)+")");
      WrongSet=true;
      WarningMessage=MessageBox(" # "+WindowExpertName()+" # "+"StepOpenNextOrders parameter not correct ("+DoubleToStr(StepOpenNextOrders,2)+"), please insert a value greater than 0","RISK DISCLAIMER");
     }
//---------------------------------------------------------------------
//Check profit close value
   if((TargetCloseProfit<=0) && (WrongSet==false))
     {
      Comment("\n "+StringOrdersEA+
              "\n\n\nTargetCloseProfit parameter not correct ("+DoubleToStr(TargetCloseProfit,2)+")"
              "\n\nPlease insert a value greater than 0");
      Print(" # "+WindowExpertName()+" # "+"TargetCloseProfit parameter not correct ("+DoubleToStr(TargetCloseProfit,2)+")");
      WrongSet=true;
      WarningMessage=MessageBox(" # "+WindowExpertName()+" # "+"TargetCloseProfit parameter not correct ("+DoubleToStr(TargetCloseProfit,2)+"), please insert a value greater than 0","RISK DISCLAIMER");
     }
//---------------------------------------------------------------------
//Check loss close value
   if((TypeCloseInLoss<2) && (TargetCloseLoss<=0) && (WrongSet==false))
     {
      Comment("\n "+StringOrdersEA+
              "\n\n\nTargetCloseLoss parameter not correct ("+DoubleToStr(TargetCloseLoss,2)+")"
              "\n\nPlease insert a value greater than 0");
      Print(" # "+WindowExpertName()+" # "+"TargetCloseLoss parameter not correct ("+DoubleToStr(TargetCloseLoss,2)+")");
      WrongSet=true;
      WarningMessage=MessageBox(" # "+WindowExpertName()+" # "+"TargetCloseLoss parameter not correct ("+DoubleToStr(TargetCloseLoss,2)+"), please insert a value greater than 0","RISK DISCLAIMER");
     }
//---------------------------------------------------------------------
//Check time window value
   if(UseTimeWindow==true)
     {
      //---Start time format
      if(((StringSubstr(TimeStartTrade,2,1)!=":") || (StringSubstr(TimeStartTrade,5,1)!=":") || (StringLen(TimeStartTrade)!=8)) && (WrongSet==false))
        {
         Comment("\n "+StringOrdersEA+
                 "\n\n\nTimeStartTrade parameter not correct ("+TimeStartTrade+")"
                 "\n\nplease insert a value with format HH:MM:SS");
         Print(" # "+WindowExpertName()+" # "+"TimeStartTrade parameter not correct ("+TimeStartTrade+")");
         WrongSet=true;
         WarningMessage=MessageBox(" # "+WindowExpertName()+" # "+"TimeStartTrade parameter not correct ("+TimeStartTrade+"), please insert a value with format HH:MM:SS","RISK DISCLAIMER");
        }
      //---Stop time format
      if(((StringSubstr(TimeStopTrade,2,1)!=":") || (StringSubstr(TimeStopTrade,5,1)!=":") || (StringLen(TimeStopTrade)!=8)) && (WrongSet==false))
        {
         Comment("\n "+StringOrdersEA+
                 "\n\n\nTimeStopTrade parameter not correct ("+TimeStopTrade+")"
                 "\n\nplease insert a value with format HH:MM:SS");
         Print(" # "+WindowExpertName()+" # "+"TimeStopTrade parameter not correct ("+TimeStopTrade+")");
         WrongSet=true;
         WarningMessage=MessageBox(" # "+WindowExpertName()+" # "+"TimeStopTrade parameter not correct ("+TimeStopTrade+"), please insert a value with format HH:MM:SS","RISK DISCLAIMER");
        }
      //---Start time value
      if((StrToInteger(StringSubstr(TimeStartTrade,0,2))>23) && (WrongSet==false))//Hours
        {
         Comment("\n "+StringOrdersEA+
                 "\n\n\nTimeStartTrade parameter not correct ("+TimeStartTrade+")"
                 "\n\nplease insert a value for hour between 00 and 23");
         Print(" # "+WindowExpertName()+" # "+"TimeStartTrade parameter not correct ("+TimeStartTrade+")");
         WrongSet=true;
         WarningMessage=MessageBox(" # "+WindowExpertName()+" # "+"TimeStartTrade parameter not correct ("+TimeStartTrade+"), please insert a value for hour between 00 and 23","RISK DISCLAIMER");
        }
      //---
      if((StrToInteger(StringSubstr(TimeStartTrade,3,5))>59) && (WrongSet==false))//Minutes
        {
         Comment("\n "+StringOrdersEA+
                 "\n\n\nTimeStartTrade parameter not correct ("+TimeStartTrade+")"
                 "\n\nplease insert a value for minutes between 00 and 59");
         Print(" # "+WindowExpertName()+" # "+"TimeStartTrade parameter not correct ("+TimeStartTrade+")");
         WrongSet=true;
         WarningMessage=MessageBox(" # "+WindowExpertName()+" # "+"TimeStartTrade parameter not correct ("+TimeStartTrade+"), please insert a value for minutes between 00 and 59","RISK DISCLAIMER");
        }
      //---
      if((StrToInteger(StringSubstr(TimeStartTrade,6,8))>59) && (WrongSet==false))//Seconds
        {
         Comment("\n "+StringOrdersEA+
                 "\n\n\nTimeStartTrade parameter not correct ("+TimeStartTrade+")"
                 "\n\nplease insert a value for seconds between 00 and 59");
         Print(" # "+WindowExpertName()+" # "+"TimeStartTrade parameter not correct ("+TimeStartTrade+")");
         WrongSet=true;
         WarningMessage=MessageBox(" # "+WindowExpertName()+" # "+"TimeStartTrade parameter not correct ("+TimeStartTrade+"), please insert a value for seconds between 00 and 59","RISK DISCLAIMER");
        }
      //---Stop time value
      if((StrToInteger(StringSubstr(TimeStopTrade,0,2))>23) && (WrongSet==false))//Hours
        {
         Comment("\n "+StringOrdersEA+
                 "\n\n\nTimeStopTrade parameter not correct ("+TimeStopTrade+")"
                 "\n\nplease insert a value for hour between 00 and 23");
         Print(" # "+WindowExpertName()+" # "+"TimeStopTrade parameter not correct ("+TimeStopTrade+")");
         WrongSet=true;
         WarningMessage=MessageBox(" # "+WindowExpertName()+" # "+"TimeStopTrade parameter not correct ("+TimeStopTrade+"), please insert a value for hour between 00 and 23","RISK DISCLAIMER");
        }
      //---
      if((StrToInteger(StringSubstr(TimeStopTrade,3,5))>59) && (WrongSet==false))//Minutes
        {
         Comment("\n "+StringOrdersEA+
                 "\n\n\nTimeStopTrade parameter not correct ("+TimeStopTrade+")"
                 "\n\nplease insert a value for minutes between 00 and 59");
         Print(" # "+WindowExpertName()+" # "+"TimeStopTrade parameter not correct ("+TimeStopTrade+")");
         WrongSet=true;
         WarningMessage=MessageBox(" # "+WindowExpertName()+" # "+"TimeStopTrade parameter not correct ("+TimeStopTrade+"), please insert a value for minutes between 00 and 59","RISK DISCLAIMER");
        }
      //---
      if((StrToInteger(StringSubstr(TimeStopTrade,6,8))>59) && (WrongSet==false))//Seconds
        {
         Comment("\n "+StringOrdersEA+
                 "\n\n\nTimeStopTrade parameter not correct ("+TimeStopTrade+")"
                 "\n\nplease insert a value for seconds between 00 and 59");
         Print(" # "+WindowExpertName()+" # "+"TimeStopTrade parameter not correct ("+TimeStopTrade+")");
         WrongSet=true;
         WarningMessage=MessageBox(" # "+WindowExpertName()+" # "+"TimeStopTrade parameter not correct ("+TimeStopTrade+"), please insert a value for seconds between 00 and 59","RISK DISCLAIMER");
        }
     }
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//Comments in the chart
//====================================================================================================================================================//
void CommentChart()
  {
//---------------------------------------------------------------------
   datetime DiffTime;
   color TextColor=clrNONE;
   double LevelCloseInLossPlus[99];
   double LevelCloseInLossMinus[99];
   double ShowMaxProfit=0;
   double ShowMinProfit=0;
   string FirstLineStr;
   string CloseProfitStr;
   string CloseLossStr;
   string SpreadStr;
   string StepNextStr;
   string LotOrdersStr;
   string PairsInfo;
   double Hopen;
   double Mopen;
   double Sopen;
   string HopenStr;
   string MopenStr;
   string SopenStr;
   string EmergencyStr;
   string ShowInfoOfPairs;
   string SetSpace="";
   int Hdigits=1;
   int Mdigits=1;
   int Sdigits=1;
   int PosX=0;
   int PosY=0;
   int FileHandle;
//---------------------------------------------------------------------
//Reset values
   ArrayInitialize(LevelCloseInLossPlus,0);
   ArrayInitialize(LevelCloseInLossMinus,0);
   TotalOrders=0;
   TotalProfitLoss=0;
   TotalLots=0;
//---------------------------------------------------------------------
//First line comment
   if(TypeOperation==0) FirstLineStr=StringConcatenate("Expert Is In Stand By Mode");
   if(TypeOperation==1) FirstLineStr=StringConcatenate("Expert Is Ready To Open/Close Orders");
   if(TypeOperation==2) FirstLineStr=StringConcatenate("Expert Wait Close In Profit And Stop");
   if(TypeOperation==3) FirstLineStr=StringConcatenate("Expert Close Immediately All Orders");
   if(CommentWarning==true) FirstLineStr=StringConcatenate("Warning: ",WarningPrint);
//---------------------------------------------------------------------
//Emergency mode string
   if(UseEmergencyMode==true) EmergencyStr="Use Emergency Mode";
   if(UseEmergencyMode==false) EmergencyStr="Not Use Emergency";
//---------------------------------------------------------------------
//Close mode
   if(TypeCloseInProfit==0) CloseProfitStr="Single Ticket ("+DoubleToStr(TargetCloseProfit,2)+")";
   if(TypeCloseInProfit==1) CloseProfitStr="Basket Ticket ("+DoubleToStr(TargetCloseProfit,2)+")";
   if(TypeCloseInProfit==2) CloseProfitStr="Hybrid Mode ("+DoubleToStr(TargetCloseProfit,2)+")";
   if(TypeCloseInProfit==3) CloseProfitStr="Advanced Mode ("+DoubleToStr(TargetCloseProfit,2)+")";
//---
   if(TypeCloseInLoss==0) CloseLossStr="Whole Ticket ("+DoubleToStr(-TargetCloseLoss,2)+")";
   if(TypeCloseInLoss==1) CloseLossStr="Partial Ticket ("+DoubleToStr(-TargetCloseLoss,2)+")";
   if(TypeCloseInLoss==2) CloseLossStr="Not Close In Loss";
//---------------------------------------------------------------------
//Open next and step
   if(OpenOrdersInLoss==0) StepNextStr="Not Open Next In Loss";
//---
   if(OpenOrdersInLoss==1)
     {
      if(StepOrdersProgress==0) StepNextStr="Manual / Statical ("+DoubleToStr(StepOpenNextOrders,1)+")";
      if(StepOrdersProgress==1) StepNextStr="Manual / Geometrical ("+DoubleToStr(StepOpenNextOrders,1)+")";
     }
//---
   if(OpenOrdersInLoss==2)
     {
      if(StepOrdersProgress==0) StepNextStr="Automatic / Statical ("+DoubleToStr(TargetCloseProfit,1)+")";
      if(StepOrdersProgress==1) StepNextStr="Automatic / Geometrical ("+DoubleToStr(TargetCloseProfit,1)+")";
      if(StepOrdersProgress==2) StepNextStr="Automatic / Exponential ("+DoubleToStr(TargetCloseProfit,1)+")";
     }
//---------------------------------------------------------------------
//Lot orders
   if(AutoLotSize==false)
     {
      if(LotOrdersProgress==0) LotOrdersStr="Manual / Statical ("+DoubleToStr(ManualLotSize,2)+")";
      if(LotOrdersProgress==1) LotOrdersStr="Manual / Geometrical ("+DoubleToStr(ManualLotSize,2)+")";
      if(LotOrdersProgress==2) LotOrdersStr="Manual / Exponential ("+DoubleToStr(ManualLotSize,2)+")";
     }
//---
   if(AutoLotSize==true)
     {
      if(LotOrdersProgress==0) LotOrdersStr="Automatic / Statical ("+DoubleToStr((AccountBalance()/100000)*RiskFactor,2)+")";
      if(LotOrdersProgress==1) LotOrdersStr="Automatic / Geometrical ("+DoubleToStr((AccountBalance()/100000)*RiskFactor,2)+")";
      if(LotOrdersProgress==2) LotOrdersStr="Automatic / Exponential ("+DoubleToStr((AccountBalance()/100000)*RiskFactor,2)+")";
     }
//---------------------------------------------------------------------
//Show time info on chart
   if(UseTimeWindow==true)
     {
      //---Get remain time
      DiffTime=StringToTime(TimeStartTrade)-TimeGMT();
      //---Set hours
      Hopen=(double)DiffTime/3600;
      if(TimeGMT()>StringToTime(TimeStartTrade)) Hopen+=24;
      HopenStr=DoubleToStr(Hopen,5);
      if(Hopen>=10) Hdigits=2;
      //---Set minutes
      Mopen=((Hopen-(StrToDouble(StringSubstr(HopenStr,0,Hdigits))))*3600)/60;
      MopenStr=DoubleToStr(Mopen,5);
      if(Mopen>=10) Mdigits=2;
      //---Set seconds
      Sopen=((Mopen-(StrToDouble(StringSubstr(MopenStr,0,Mdigits))))*60)/1;
      SopenStr=DoubleToStr(Sopen,5);
      if(Sopen>=10) Sdigits=2;
      //---Set colors
      if(TimeToTrade==false) TextColor=clrOrangeRed;
      if(TimeToTrade==true) TextColor=clrLightSeaGreen;
      //---Set position for small panel
      if((ShowPairsInfo==0) || (ShowPairsInfo==2))
        {
         PosX=0;
         PosY=240;
        }
      //---Set position for big panel
      if(ShowPairsInfo==1)
        {
         PosX=250;
         PosY=12;
        }
      //---Text1
      ObjectDelete("Text1");
      if(ObjectFind("Text1")==-1) DisplayText("Text1"," GMT Time: "+TimeToStr(TimeGMT(),TIME_MINUTES),SizeFontsOfInfo,"Arial Black",TextColor,PosX,PosY+15);
      //---Text2
      ObjectDelete("Text2");
      if(ObjectFind("Text2")==-1) DisplayText("Text2"," Broker Time: "+TimeToStr(TimeCurrent(),TIME_MINUTES),SizeFontsOfInfo,"Arial Black",TextColor,PosX,PosY);
      //---Text3
      ObjectDelete("Text3");
      if(ObjectFind("Text3")==-1) DisplayText("Text3"," Time Start: "+StringSubstr(TimeStartTrade,0,5),SizeFontsOfInfo,"Arial Black",TextColor,PosX,PosY+30);
      //---Text4
      ObjectDelete("Text4");
      if(ObjectFind("Text4")==-1) DisplayText("Text4"," Time Stop: "+StringSubstr(TimeStopTrade,0,5),SizeFontsOfInfo,"Arial Black",TextColor,PosX,PosY+45);
      //---Text5
      ObjectDelete("Text5");
      if(TimeToTrade==false) if(ObjectFind("Text5")==-1) DisplayText("Text5"," Remain To Open: "+StringSubstr(HopenStr,0,Hdigits)+":"+StringSubstr(MopenStr,0,Mdigits)+":"+StringSubstr(SopenStr,0,Sdigits),SizeFontsOfInfo,"Arial Black",TextColor,PosX,PosY+60);
      if(TimeToTrade==true) if(ObjectFind("Text5")==-1) DisplayText("Text5"," EXPERT TRADE",SizeFontsOfInfo,"Arial Black",TextColor,PosX,PosY+60);
     }
//---------------------------------------------------------------------
//Set up pairs information
   for(i=0; i<NumberPairsTrade; i++)
     {
      //---------------------------------------------------------------------
      //Count total orders, lots and floating
      TotalOrders+=TotalOrdersPlus[i]+TotalOrdersMinus[i]+HedgePlusOrders[i]+HedgeMinusOrders[i];
      TotalProfitLoss+=TotalProfitPlus[i]+TotalProfitMinus[i]+TotalHedgeProfit[i];
      TotalLots+=TotalLotPlus[i]+TotalLotMinus[i]+HedgePlusLot[i]+HedgeMinusLot[i];
      //---------------------------------------------------------------------
      //Close levels
      if(TypeCloseInLoss<2)
        {
         LevelCloseInLossPlus[i]=LevelLossClosePlus[i];
         LevelCloseInLossMinus[i]=LevelLossCloseMinus[i];
        }
      //---------------------------------------------------------------------
      //Calculate max and min value
      MaxOrders[i]=MathMax(MaxOrders[i],TotalOrdersPlus[i]+TotalOrdersMinus[i]+HedgePlusOrders[i]+HedgeMinusOrders[i]);
      MaxFloating[i]=MathMin(MaxFloating[i],TotalProfitPlus[i]+TotalProfitMinus[i]+TotalHedgeProfit[i]);
      //---------------------------------------------------------------------
      //Pairs and orders
      if(ShowPairsInfo==1)
        {
         if(SymbolPair[i]!="") PairsInfo+=StringConcatenate("\n  "+IntegerToString(i+1)+". "+SymbolPair[i]+"|| "+
            DoubleToStr(TotalOrdersPlus[i]+TotalOrdersMinus[i]+HedgePlusOrders[i]+HedgeMinusOrders[i],0)+" || "+
            DoubleToStr(TotalProfitPlus[i]+TotalProfitMinus[i]+TotalHedgeProfit[i],2)+" || "+
            DoubleToStr(MathMax(LevelProfitClosePlus[i],LevelProfitCloseMinus[i]),2)+" || "+
            DoubleToStr(HistoryPlusOrders[i]+HistoryMinusOrders[i],0)+" / "+DoubleToStr(HistoryPlusProfit[i]+HistoryMinusProfit[i],2));
         //---
         ShowInfoOfPairs="  "+PairsInfo+"\n=================================";
        }
      //---------------------------------------------------------------------
      //Calculate max and min value
      if(TotalOrders>0)
        {
         MaxProfit=MathMax(TotalProfitLoss,MaxProfit);
         MinProfit=MathMin(TotalProfitLoss,MinProfit);
        }
      //---
      if(MaxProfit==-99999) ShowMaxProfit=0; else ShowMaxProfit=MaxProfit;
      if(MinProfit==99999) ShowMinProfit=0; else ShowMinProfit=MinProfit;
      MaxTotalOrders=MathMax(MaxTotalOrders,TotalOrders);
      //---------------------------------------------------------------------
      //Speread string
      if(MaxSpread==0) SpreadStr="Expert Not Check Spread";
      if(MaxSpread!=0) SpreadStr="Expert Check Spread ("+DoubleToStr(MaxSpread,2)+")";
      //---------------------------------------------------------------------
      //Set comments on chart
      if(ShowPairsInfo==2)
        {
         //---Set space
         if(i<9) SetSpace="  ";
         if(i>=9) SetSpace="";
         //---
         if(SymbolPair[i]!="")
           {
            //---Str1
            if(ObjectFind("Str1")==-1) DisplayText("Str1","Pairs",SizeFontsOfInfo,"Arial Black",ColorOfTitle,275,0);
            //---Str2
            if(ObjectFind("Str2")==-1) DisplayText("Str2","Orders",SizeFontsOfInfo,"Arial Black",ColorOfTitle,PositionOrders,0);
            //---Str3
            if(ObjectFind("Str3")==-1) DisplayText("Str3","PnL",SizeFontsOfInfo,"Arial Black",ColorOfTitle,PositionPnL,0);
            //---Str4
            if(ObjectFind("Str4")==-1) DisplayText("Str4","Close",SizeFontsOfInfo,"Arial Black",ColorOfTitle,PositionClose,0);
            //---Str5
            if(ObjectFind("Str5")==-1) DisplayText("Str5","History",SizeFontsOfInfo,"Arial Black",ColorOfTitle,PositionHistory,0);
            //---Str6
            if(ObjectFind("Str6")==-1) DisplayText("Str6","Maximum",SizeFontsOfInfo,"Arial Black",ColorOfTitle,PositionMaximum,0);
            //---Str7
            if(ObjectFind("Str7")==-1) DisplayText("Str7","Spread",SizeFontsOfInfo,"Arial Black",ColorOfTitle,PositionSpread,0);
            //---Comm1
            ObjectDelete("Comm1"+IntegerToString(i));
            if(ObjectFind("Comm1"+IntegerToString(i))==-1) DisplayText("Comm1"+IntegerToString(i),IntegerToString(i+1)+". "+SetSpace+StringSubstr(SymbolPair[i],0,6),SizeFontsOfInfo,"Arial Black",ColorOfInfo,245,20+(i*14));
            //---Comm2
            ObjectDelete("Comm2"+IntegerToString(i));
            if(ObjectFind("Comm2"+IntegerToString(i))==-1) DisplayText("Comm2"+IntegerToString(i),DoubleToStr(TotalOrdersPlus[i],0)+"-"+DoubleToStr(TotalOrdersMinus[i],0),SizeFontsOfInfo,"Arial Black",ColorOfInfo,PositionOrders+15,20+(i*14));
            //---Comm3
            ObjectDelete("Comm3"+IntegerToString(i));
            if(ObjectFind("Comm3"+IntegerToString(i))==-1) DisplayText("Comm3"+IntegerToString(i),DoubleToStr(TotalProfitPlus[i]+TotalProfitMinus[i]+TotalHedgeProfit[i],2),SizeFontsOfInfo,"Arial Black",ColorOfInfo,PositionPnL-5,20+(i*14));
            //---Comm4
            ObjectDelete("Comm4"+IntegerToString(i));
            if(ObjectFind("Comm4"+IntegerToString(i))==-1) DisplayText("Comm4"+IntegerToString(i),DoubleToStr(MathMax(LevelProfitClosePlus[i],LevelProfitCloseMinus[i]),2),SizeFontsOfInfo,"Arial Black",ColorOfInfo,PositionClose+5,20+(i*14));
            //---Comm5
            ObjectDelete("Comm5"+IntegerToString(i));
            if(ObjectFind("Comm5"+IntegerToString(i))==-1) DisplayText("Comm5"+IntegerToString(i),DoubleToStr(HistoryPlusOrders[i]+HistoryMinusOrders[i],0)+"/"+DoubleToStr(HistoryPlusProfit[i]+HistoryMinusProfit[i],2),SizeFontsOfInfo,"Arial Black",ColorOfInfo,PositionHistory,20+(i*14));
            //---Comm6
            ObjectDelete("Comm6"+IntegerToString(i));
            if(ObjectFind("Comm6"+IntegerToString(i))==-1) DisplayText("Comm6"+IntegerToString(i)," ("+DoubleToStr(MaxOrders[i],0)+"/"+DoubleToStr(MaxFloating[i],2)+")",SizeFontsOfInfo,"Arial Black",ColorOfInfo,PositionMaximum,20+(i*14));
            //---Comm7
            ObjectDelete("Comm7"+IntegerToString(i));
            if(ObjectFind("Comm7"+IntegerToString(i))==-1) DisplayText("Comm7"+IntegerToString(i),DoubleToStr(SpreadPair[i],1),SizeFontsOfInfo,"Arial Black",ColorOfInfo,PositionSpread+15,20+(i*14));
            //---Background0
            if(ObjectFind("BackgroundLine0")==-1) ChartBackground("BackgroundLine0",ColorLineTitles,EMPTY_VALUE,TRUE,245,0,PositionSpread-245+55,24);
            //---Background1
            if((i<NumberPairsTrade/2) && (MathMod(NumberPairsTrade,2)==0)) if(ObjectFind("BackgroundLine1"+IntegerToString(i))==-1) ChartBackground("BackgroundLine1"+IntegerToString(i),ColorOfLine1,EMPTY_VALUE,TRUE,245,22+(i*14*2),PositionSpread-245+55,16);
            if((i<=NumberPairsTrade/2) && (MathMod(NumberPairsTrade,2)==1)) if(ObjectFind("BackgroundLine1"+IntegerToString(i))==-1) ChartBackground("BackgroundLine1"+IntegerToString(i),ColorOfLine1,EMPTY_VALUE,TRUE,245,22+(i*14*2),PositionSpread-245+55,16);
            //---Background2
            if(i<NumberPairsTrade/2) if(ObjectFind("BackgroundLine2"+IntegerToString(i))==-1) ChartBackground("BackgroundLine2"+IntegerToString(i),ColorOfLine2,EMPTY_VALUE,TRUE,245,36+(i*14*2),PositionSpread-245+55,16);
           }
        }
     }
//---------------------------------------------------------------------
//Saving information about opened groups
   if((SaveInformations==true) && (TimeHour(TimeCurrent())!=LastHourSaved))
     {
      //---Set values
      int w=0;
      int FindGroup[100];
      int FindMaxFloating[100];
      int FindMaxOrders[100];
      int FindNext1[100];
      int FindNext2[100];
      string GetGroup[100];
      string GetMaxFloating[100];
      string GetMaxOrders[100];
      string ReadString;
      string NameOfFile=Symbol()+"-"+IntegerToString(MagicNo)+"-"+StringOrdersEA+"-"+IntegerToString(AccountNumber())+".log";
      //---Read existing file
      FileHandle=FileOpen(NameOfFile,FILE_READ|FILE_CSV|FILE_COMMON);
      //---Start prosses file
      if(FileHandle!=INVALID_HANDLE)
        {
         while(!FileIsEnding(FileHandle))
           {
            w++;
            //---Read informations
            ReadString=FileReadString(FileHandle);
            //---Find potitions
            FindGroup[w]=StringFind(ReadString,"Pair No: ",0);
            FindMaxFloating[w]=StringFind(ReadString,"Max Floating: ",0);
            FindMaxOrders[w]=StringFind(ReadString,"Max Orders: ",0);
            FindNext1[w]=StringFind(ReadString," || Pair: ",0);
            FindNext2[w]=StringFind(ReadString," || Max Floating: ",0);
            //---Get informations
            GetGroup[w]=StringSubstr(ReadString,FindGroup[w]+9,FindNext1[w]-(FindGroup[w]+9));
            GetMaxFloating[w]=StringSubstr(ReadString,FindMaxFloating[w]+14,10);
            GetMaxOrders[w]=StringSubstr(ReadString,FindMaxOrders[w]+11,FindNext2[w]-(FindMaxOrders[w]+11));
           }
         FileClose(FileHandle);
        }
      //---Reset maximum value
      for(int x=1; x<NumberPairsTrade+1; x++)
        {
         if((x==StrToInteger(GetGroup[x]))&&(StrToInteger(GetMaxOrders[x])>MaxOrders[x-1])) MaxOrders[x-1]=StrToInteger(GetMaxOrders[x]);
         if((x==StrToInteger(GetGroup[x]))&&(StrToInteger(GetMaxFloating[x])<MaxFloating[x-1])) MaxFloating[x-1]=StrToInteger(GetMaxFloating[x]);
        }
      //---Write first time the file
      FileHandle=FileOpen(NameOfFile,FILE_READ|FILE_WRITE|FILE_CSV|FILE_COMMON);
      //---Continue to write the file
      if(FileHandle!=INVALID_HANDLE)
        {
         for(i=0; i<NumberPairsTrade; i++)
           {
            FileWrite(FileHandle,"Pair No: "+IntegerToString(i+1)+" || Pair: "+StringSubstr(SymbolPair[i],0,6)+" || History Profit: "+DoubleToStr(HistoryPlusProfit[i]+HistoryMinusProfit[i],2)+" || Max Orders: "+DoubleToStr(MaxOrders[i],0)+" || Max Floating: "+DoubleToStr(MaxFloating[i],2));
            FileFlush(FileHandle);
            if(i==NumberPairsTrade-1) LastHourSaved=TimeHour(TimeCurrent());
           }
         FileClose(FileHandle);
        }
      //---
     }//End if(SaveInformations==true)
//---------------------------------------------------------------------
//Chart comment
   Comment("================================="+
           "\n  "+FirstLineStr+
           "\n================================="+
           "\n  Spread: "+SpreadStr+
           "\n================================="+
           "\n  Close In Profit Orders: "+CloseProfitStr+
           "\n  Close In Loss Orders  : "+CloseLossStr+
           "\n  Step For Next Order  : "+StepNextStr+
           "\n  Order Lot Size Type  : "+LotOrdersStr+
           "\n  Emergency Mode      : "+EmergencyStr+
           "\n================================="+
           ShowInfoOfPairs+
           "\n  Orders: "+DoubleToStr(TotalOrders,0)+" ("+DoubleToStr(MaxTotalOrders,0)+")"+"|PnL: "+DoubleToStr(TotalProfitLoss,2)+" ("+DoubleToStr(ShowMinProfit,2)+")"+"|Lots: "+DoubleToStr(TotalLots,2)+
           "\n================================="+
           "\n  T O T A L   H I S T O R Y   R E S U L T S"+
           "\n  Pips: "+DoubleToStr(HistoryTotalPips,2)+" | Orders: "+DoubleToStr(HistoryTotalTrades,0)+" | PnL: "+DoubleToStr(HistoryTotalProfitLoss,2)+
           "\n=================================");
//---------------------------------------------------------------------
  }
//====================================================================================================================================================//
//End of code
//====================================================================================================================================================//

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---