//====================================================================================================================================================// #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; i0) 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; i5)) { 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(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; cnt0.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(CntTick0) 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]=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]=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]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]*40) && (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]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]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; cnt100TotalMoreProfit) { TotalMoreProfit=TotalGroupProfit[cnt100]+TotalHedgeProfit[cnt100]; PairMoreProfit=cnt100; } //---Get more losses if(TotalGroupProfit[cnt100]+TotalHedgeProfit[cnt100]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; cnt1000) 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; cnt1000) 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()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; iAccountFreeMarginCheck(SymbolPair[PairOpen],OP_BUY,LotPlus[PairOpen])) FreeMargin=AccountFreeMargin()-AccountFreeMarginCheck(SymbolPair[PairOpen],OP_BUY,LotPlus[PairOpen]); if(AccountFreeMargin()=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()=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; i0) { //---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; i0) { 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((iMaxOrders[x-1])) MaxOrders[x-1]=StrToInteger(GetMaxOrders[x]); if((x==StrToInteger(GetGroup[x]))&&(StrToInteger(GetMaxFloating[x])