Graal-003(2)





//+------------------------------------------------------------------+
//|                                                    Graal-003.mq4 |
//|                                        Copyright © 2005, Registr |
//|                                                  Exsys@pochta.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Registr"
#property link      "Exsys@pochta.ru"
//----
#import "user32.dll"
   int MessageBoxA(int hWnd ,string lpText,string lpCaption,int uType);
#import "Registr.dll"
   string jLeft(string InStr,int Number);
   string jRight(string InStr,int Number);
   string jTrimAll(string InStr);
   string jTrimLeft(string InStr);
   string jTrimRight(string InStr);
   int    jLen(string InStr);
   string jCopy(string InStr,int Ind,int Count);
   int    jPos(string SubInStr,string InStr);
   string jGetProgramName();
   string jGetProgramDir(string ProgName);
   string jGetCurrDir();
   bool   jFileExists(string FileName);
   string jFileExt(string FileName);
   void   jDeleteLogs(string FolderName);
#import
//----
#include <stdlib.mqh>
//---- input parameters
extern double    Lots       =0.1;
extern int       TakeProfit=500;
extern int       StopLoss  =500;
extern int       Limit    =5;     // Óðîâåíü óñòàíîâêè îòëîæåííîãî îðäåðà
extern int       ProfitLevel= 30; // Îáùèé ïðîôèò äëÿ âñåõ ïîçèöèé ïðè êîòîðîì îíè çàêðûâàþòñÿ
extern int       ModeOpeningOfWarrants=1;
/* Ðåæèì óñòàíîâêè îðäåðîâ: 0 - ñíà÷àëà îòêðûâàþòñÿ ïîçèöèè, çàòåì óñòàíàâëèâàòñÿ îòëîæåííûå îðäåðà,
   1 - ñíà÷àëà óñòàíàâëèâàòñÿ îòëîæåííûå îðäåðà, çàòåì îòêðûâàþòñÿ ïîçèöèè, 2 - îòêðûâàþòñÿ òîëüêî 
   ïîçèöèè, 3 - óñòàíàâëèâàòñÿ òîëüêî îòëîæåííûå îðäåðà */
extern int       ModeClosingOfWarrants=1;
/* Ðåæèì çàêðûòèÿ îðäåðîâ: 0 - îðäåðà çàêðûâàòñÿ â ñìåøàííîì ïîðÿäêå ïî ïðèíöèïó ÔÈÔÎ ( ïîñëåäíèì
   îòêðûëñÿ, ïåðâûì çàêðûëÿ, 1 - ñíà÷àëà çàêðûâàþòñÿ îòêðûòûå ïîçèöèè, çàòåì îòëîæåííûå îðäåðà, 
   2 - ñíà÷àëà çàêðûâàþòñÿ îòëîæåííûå îðäåðà, çàòåì îòêðûòûå ïîçèöèè, 3 - òî æå ñàìîå, ÷òî 2 íî,
   îòëîæåííûå îðäåðà çàêðûâàþòñÿ â îáðàòíîì ïîðÿäêå(íå ðåàëèçîâàíî)*/
extern bool OpenOnlyOnDepthOfFChannel=false; /*Ðàçðåøàåò ñîâåòíèêó îòêðûâàòü ïîçèöèè òîëüêî íà ãëóáèíå 
ôðàêòàëüíîãî êàíàëà*/
extern int  DepthOfFChannel=25; /*Ãëóáèíà ôðàêòàëüíîãî êàíàëà íà êîòîðîé îòêðûâàþòñÿ îðäåðà, â ïðîöåíòàõ, ïðè 
çíà÷åíèè ðàâíîìó íóëþ êàíàë îòîáðàæàåòñÿ, íî ôèëüòð íå ðàáîòàåò*/
extern bool ReferenceOnChannel_HL=false; /*Ðàçðåøàåò ñîâåòíèêó îðåèíòèðîâàòüñÿ íà êàíàë High-Low, ýòî îçíà÷àåò,
÷òî ñîâåòíèê íå áóäåò îòêðûâàòü ïîçèöèþ Buy, åñëè öåíà íèæå óðîâíÿ îðåèíòàöèè Low, è íàîáîðîò*/
extern int  LevelOrientationOnChannel_HL=20; /*Óðîâåíü îðåèíòàöèè â ïðîöåíòàõ îò êàíàëà High-Low, ïðè çíà÷åíèè
ðàâíîìó íóëþ êàíàë îòîáðàæàåòñÿ, íî ôèëüòð íå ðàáîòàåò*/
extern bool ToTradeInFlat=true; /*Ðàçðåøàåò èëè çàïðåùàåò ñîâåòíèêó òîðãîâàòü âî ôëýòå*/
extern int  LevelChannel_HLForFlat=20; /*Óðîâåíü êàíàëà High-Low, ïðè êîòîðîì òåíäåíöèÿ ñ÷èòàåòñÿ ôëýòîì*/
extern bool UseWPRInClosePositions=false; /*Èñïîëüçîâàòü ëè èíäèêàòîð WPR â ïðèíÿòèå ðåøåíèÿ î çàêðûòèè îðäåðîâ*/
extern int  ControlLevelWPR=30; /*Êîíòðîëüíûé óðîâåíü èíäèêàòîðà WPR*/
extern bool ToExposeContrwarrants=false; /*Âûñòàâëÿòü êîíòðîðäåðà ïðè ñðàáàòûâàíèè îòëîæåííûõ îðäåðîâ*/
extern bool OnlyOnePosition=false; 
/* Äîïîëíèòåëüíàÿ íàñòðîéêà, êîòîðóþ ââîæó ïðÿìî ñ êîë¸ñ, ïîýòîìó â 
   èíôîðìàöèîííîì òàáëî îíà íå îòîáðàæàåòñÿ. Ðàçðåøàåò èëè çàïðåùàåò ñîâåòíèêó îòêðûâàòü òîëüêî îäèí
   îðäåð Buy è îäèí îðäåð Sell, â êàæäîé ñåññèè. Áóäåò ðàáîòàòü, òîëüêî ïðè ðàçðåøåíèè âûñòàâëÿòü êîíòðîðäåðà,
   ò.ê. â ïðîòèâíîì ñëó÷àå òåðÿåòñÿ ñìûñë èäåè. Ñîáñòâåííî, â äàëüíåéøåì, òîðãîâëÿ óæå âåä¸òñÿ íà îòëîæåííûõ îðäåðàõ...*/
extern bool      DeleteLogsOnClose=false; /*Ñòèðàòü âñå log-ôàéëû, ñîçäàâàåìûå ÌÒ4, ïðè çàâåðøåíèè ðàáîòû òåðìèíàëà*/
/* ýòîì ñëó÷àå, êàòàëîã ÌÒ4 íå áóäåò ðàçðàñòàòüñÿ äî ãèãàáàéòîâ*/
extern bool      EraseOldFileOfReport=true; /*Ñòèðàòü ñòàðûé ôàéë ïðîòîêîëà, åñëè ôàéë FileNameOfReport óæå ñóùåñòâóåò*/
extern string    FileNameOfReport; /*Íàçâàíèå ôàéëà ïðîòîêîëà*/
extern bool      UseSoundInOperations=false; /*Èñïîëüçîâàòü çâóêîâîå ñîïðîâîæäåíèå òîðãîâûõ îïåðàöèé*/
extern string    SoundOpenBuy="OpenBuy.wav"; /*Çâóê ïðè îòêðûòèè îðäåðà Buy*/
extern string    SoundOpenSell="OpenSell.wav"; /*Çâóê ïðè îòêðûòèè îðäåðà Sell*/
extern string    SoundOpenBuyStop="OpenBuyStop.wav"; /*Çâóê ïðè âûñòàâëåíèè îðäåðà BuyStop*/
extern string    SoundOpenSellStop="OpenSellStop.wav"; /*Çâóê ïðè âûñòàâëåíèè îðäåðà SellStop*/
extern string    SoundClosing="ClosePositions.wav"; /*Çâóê ïðè çàêðûòèè âñåõ îðäåðîâ*/
//----
static int magicNumber=123456;
static string NameOfExpert="Graal-003";
static datetime prev_min=D'1.1.1'; // âðåìÿ ïðåäûäóùåãî ôðàêòàëüíîãî ìèíèìóìà
static datetime prev_max=D'1.1.1'; // âðåìÿ ïðåäûäóùåãî ôðàêòàëüíîãî ìàêñèìóìà
//----
bool AllowTrade,OpenBuy,OpenSell,StopWorkOfExpert,beginning,WorkWPR;
bool TrendUp,TrendDn,SignalOnClosing,CheckClose,LockForClose;
datetime PrevTime,TimeOfClosing;
int CountBars,jk,CountSessions,CountOperations,CountOrders,CountBuy,CountSell;
int PerHL,TotalBuyStop,CountBuyStop,TotalSellStop,CountSellStop,MaximalDrawdown;
double iFractals_up,iFractals_lo,PrevPrice,FractalPrevUp,FractalPrevDn,UseOfDeposit;
double ChannelHLClose,MidLine,MaxH,MinL,SubMaxH,SubMinL,FChannel;
double CollectorBuy,CollectorSell,SubFractalUp,FractalUp,SubFractalDn,FractalDn;
double InfoOpenOrders[][4];
string FlagFractal;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   int buffer;
   //bool
   AllowTrade=true;OpenBuy=false;OpenSell=false;StopWorkOfExpert=false;beginning=true;
   WorkWPR=false;TrendUp=false;TrendDn=false;SignalOnClosing=false; CheckClose=false;
   LockForClose=true;
   //datetime
   PrevTime=Time[0];TimeOfClosing=0;
   //int
   CountBars=0;jk=0;CountSessions=0;CountOperations=0;CountOrders=0;CountBuy=0;CountSell=0;
   MaximalDrawdown=0;PerHL=14;TotalBuyStop=0;CountBuyStop=0;TotalSellStop=0;CountSellStop=0;
   //double
   iFractals_up=0;iFractals_lo=0;PrevPrice=0;FractalPrevUp=0;FractalPrevDn=0;UseOfDeposit=0;
   CollectorBuy=0;CollectorSell=0;SubFractalUp=0;FractalUp=0;SubFractalDn=0;FractalDn=0;
   //string
   FlagFractal="";
//----
   string StrYear=(CharToStr(50)+CharToStr(48)+CharToStr(48)+CharToStr(54));
   string StrMonth=(CharToStr(51));
   int YearWork=StrToInteger(StrYear),MonthWork=StrToInteger(StrMonth);
   if(TimeYear(CurTime())>=YearWork)
     {//001
      if((TimeMonth(CurTime())>MonthWork)||(TimeYear(CurTime())>YearWork))
        {//002
         Alert("Ñðîê äåéñòâèÿ ñîâåòíèêà èñò¸ê!");
         StopWorkOfExpert=true;return(0);
        }//002
     }//001
   if(!IsTesting())
     {
      ObjectsDeleteAll(WindowOnDropped());
      Comment("");
      if((!IsDllsAllowed())||(!IsLibrariesAllowed()))
        {
         Alert("Äëÿ ðàáîòû ýêñïåðòà íåîáõîäèìî ðàçðåøèòü èìïîðò ôóíêöèé",
          "\n"+"èç âíåøíèõ è dll áèáëèîòåê! Ðàáîòà ýêñïåðòà íå âîçìîæíà!");
         StopWorkOfExpert=true;return(0);
        }
      if(!IsTradeAllowed())
        {
         MessageBoxA(WindowHandle(Symbol(),0),
         "Ñîâåòíèêó íå ðàçðåøåíî òîðãîâàòü! Â ñâîéñòâàõ ñîâåòíèêà ïîñòàâüòå"
         +"\n"+"ãàëî÷êó íà ïðîòèâ îïöèè - \" ÐÀÇÐÅØÈÒÜ ÑÎÂÅÒÍÈÊÓ ÒÎÐÃÎÂÀÒÜ \"."
         ,"Ñîâåòíèêó "+NameOfExpert+" òîðãîâëÿ íå ðàçðåøåíà!",16);
         StopWorkOfExpert=true;return(0);
        }
      Sleep(2000);
      PlaySound("Money.wav");
      buffer=ToInformTheUser();
      if(buffer==2) { StopWorkOfExpert=true;return(0); }
      if(!IsConnected())
        {
         Alert("Îòñóòñòâóåò ñîåäèíåíèå ñ ñåðâåðîì! Ðàáîòà ñîâåòíèêà ïðèîñòàíîâëåíà!");
        }
     }
   else
     {
      Alert("Âíèìàíèå! Â òåñòåðå ìíîãèå ôóíêöèè íå ðàáîòàþò!");
     }

   if(StringLen(FileNameOfReport)==0) { FileNameOfReport=("Report"+Symbol()+Period()); }
   if(EraseOldFileOfReport) { FileDelete(FileNameOfReport); }
   //
   Print("Âûïîëíåí áëîê init");
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   if(!IsTesting())
     {
      ObjectsDeleteAll(WindowOnDropped());
      Comment("");
     }
   WriteLineInFile(FileNameOfReport,GetCurRusTime()
   +"Îêîí÷àíèå ðàáîòû ñîâåòíèêà "+NameOfExpert);
   if(DeleteLogsOnClose)
     {
      jDeleteLogs(jGetCurrDir()+"\\experts\logs");
      jDeleteLogs(jGetCurrDir()+"\\tester\logs");
     }
   Print("Âûïîëíåí áëîê deinit");
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   //if ((Year()<2005) || (Month()<10)) return (0);
   if(StopWorkOfExpert) return(0);
   bool NewBar=false;int i,size;
   //êîíòðîëüíàÿ ìåòêà
   int a=0; int b=0; int c=0;
   if(a==b)
     {//?
      c=a+b;
     }//?
   if(beginning)
     {
      WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íà÷àëî ðàáîòû ñîâåòíèêà "+NameOfExpert);
      if(IsTesting())WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Âíèìàíèå! Â òåñòåðå ìíîãèå ôóíêöèè íå ðàáîòàþò!");
      WriteLineInFile(FileNameOfReport,"");
      CountSessions++;
      WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íà÷àëî òîðãîâîé ñåñèè ¹"+CountSessions);
      WriteLineInFile(FileNameOfReport,"");
      beginning=false;
     }
   if(!IsTesting()&&(jk<3))
     {
      if(CalculationOfWarrants(Symbol(),0,8,0)>0)
        {
         int answer=InfoByOpenOrders();jk=3;
         if(answer==6) { StopWorkOfExpert=true;return(0); }
        }
      jk++;
     }
   if (Time[0]!=PrevTime)
     {
      CountBars++;
      NewBar=True;
      PrevPrice=0;
      PrevTime=Time[0];
     }
   if((CountBuyStop>CalculationOfWarrants(Symbol(),0,4,0))||
      (CountSellStop>CalculationOfWarrants(Symbol(),0,5,0)))
     {
      int resSS=0,resSB=0,intSize=0;
      size=ArrayRange(InfoOpenOrders,0);
      for(i=0;i<size;i++)
        {
         if(OrderSelect(InfoOpenOrders[i][0],SELECT_BY_TICKET))
           {
            if(OrderType()==InfoOpenOrders[i][2]) continue;
            else
              {
               switch(OrderType())
                 {
                  case OP_BUY:
                     CountOperations++;
                     WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Òîðãîâàÿ îïåðàöèÿ ¹"+CountOperations);
                     WriteLineInFile(FileNameOfReport,GetCurRusTime()
                     +"Ñðàáîòàë îðäåð BuyStop òèêåò "+DoubleToStr(InfoOpenOrders[i][0],0)
                     +" âíóòðåííèé ¹"+DoubleToStr(InfoOpenOrders[i][1],0)+" íà îòìåòêå: "
                     +DoubleToStr(InfoOpenOrders[i][3],Digits));
                     WriteLineInFile(FileNameOfReport,GetCurRusTime()
                     +"Îòêðûòà ïîçèöèÿ Buy òèêåò "+DoubleToStr(InfoOpenOrders[i][0],0)
                     +" âíóòðåííèé ¹"+DoubleToStr(InfoOpenOrders[i][1],0)+" ïî öåíå: "
                     +DoubleToStr(InfoOpenOrders[i][3],Digits));
                     InfoOpenOrders[i][2]=OP_BUY;
                     FlagFractal="buy";
                     CountBuyStop--;
                     UseOfDeposit=UseOfDeposit+((NormalizeDouble(Ask,Digits)*1000)*OrderLots());
                     if(ToExposeContrwarrants&&AllowTrade)
                       {
                        WriteLineInFile(FileNameOfReport,"Ðàçðåøåíî âûñòàâëåíèå êîíòðîðäåðîâ!");
                        CountOrders++;
                        resSS=PerformanceOpenSellStop(Symbol(),Lots,(FractalDn-(Limit*Point)),5,StopLoss,TakeProfit,
                        CountOrders+" SellStop "+NameOfExpert,magicNumber,UseSoundInOperations,SoundOpenSellStop);
                        if(resSS>0)
                          {
                           CountSellStop++;TotalSellStop++;
                           intSize=ArrayRange(InfoOpenOrders,0);
                           ArrayResize(InfoOpenOrders,size+1);
                           InfoOpenOrders[intSize][0]=resSS;
                           InfoOpenOrders[intSize][1]=CountOrders;
                           InfoOpenOrders[intSize][2]=OP_SELLSTOP;
                           InfoOpenOrders[intSize][3]=NormalizeDouble((FractalDn-(Limit*Point)),Digits);
                          }
                        else
                          {
                           WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûñòàâèòü îòëîæåííûé êîíòðîðäåð!");
                           CountOrders--;
                          }
                       }
                     WriteLineInFile(FileNameOfReport,"");
                     break;
                  case OP_SELL:
                     CountOperations++;
                     WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Òîðãîâàÿ îïåðàöèÿ ¹"+CountOperations);
                     WriteLineInFile(FileNameOfReport,GetCurRusTime()
                     +"Ñðàáîòàë îðäåð SellStop òèêåò "+DoubleToStr(InfoOpenOrders[i][0],0)
                     +" âíóòðåííèé ¹"+DoubleToStr(InfoOpenOrders[i][1],0)+" íà îòìåòêå: "
                     +DoubleToStr(InfoOpenOrders[i][3],Digits));
                     WriteLineInFile(FileNameOfReport,GetCurRusTime()
                     +"Îòêðûòà ïîçèöèÿ Sell òèêåò "+DoubleToStr(InfoOpenOrders[i][0],0)
                     +" âíóòðåííèé ¹"+DoubleToStr(InfoOpenOrders[i][1],0)+" ïî öåíå: "
                     +DoubleToStr(InfoOpenOrders[i][3],Digits));
                     InfoOpenOrders[i][2]=OP_SELL;
                     FlagFractal="sell";
                     CountSellStop--;
                     UseOfDeposit=UseOfDeposit+((NormalizeDouble(Bid,Digits)*1000)*OrderLots());
                     if(ToExposeContrwarrants&&AllowTrade)
                       {
                        WriteLineInFile(FileNameOfReport,"Ðàçðåøåíî âûñòàâëåíèå êîíòðîðäåðîâ!");
                        CountOrders++;
                        resSB=PerformanceOpenBuyStop(Symbol(),Lots,(FractalUp+(Limit*Point)),5,StopLoss,TakeProfit,
                        CountOrders+" SellStop "+NameOfExpert,magicNumber,UseSoundInOperations,SoundOpenBuyStop);
                        if(resSB>0)
                          {
                           CountBuyStop++;TotalBuyStop++;
                           intSize=ArrayRange(InfoOpenOrders,0);
                           ArrayResize(InfoOpenOrders,size+1);
                           InfoOpenOrders[intSize][0]=resSB;
                           InfoOpenOrders[intSize][1]=CountOrders;
                           InfoOpenOrders[intSize][2]=OP_BUYSTOP;
                           InfoOpenOrders[intSize][3]=NormalizeDouble(FractalUp+(Limit*Point),Digits);
                          }
                        else
                          {
                           WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûñòàâèòü îòëîæåííûé êîíòðîðäåð!");
                           CountOrders--;
                          }
                       }
                     WriteLineInFile(FileNameOfReport,"");
                     break;
                  default:
                     WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Ïóòàíèöà â îðäåðàõ íà ñåðâåðå!");
                     Print("Ïóòàíèöà â îðäåðàõ íà ñåðâåðå!");
                     break;
                 }
              }
           }
         else
           {
            WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûáðàòü îðäåð "+ InfoOpenOrders[i][0]
            +" âíóòðåííèé ¹"+InfoOpenOrders[i][1]+", ïðè÷èíà: "+ErrorDescription(GetLastError()));
            Print("Íå óäàëîñü âûáðàòü îðäåð "+ InfoOpenOrders[i][0]+" âíóòðåííèé ¹"+InfoOpenOrders[i][1]
            +", ïðè÷èíà: "+ErrorDescription(GetLastError()));
           }
        }
     }
   if(MaximalDrawdown>(CalculationOfWarrants(Symbol(),magicNumber,0,1)+CalculationOfWarrants(Symbol(),magicNumber,1,1)))
     {
      MaximalDrawdown=CalculationOfWarrants(Symbol(),magicNumber,0,1)+CalculationOfWarrants(Symbol(),magicNumber,1,1);
     }
   if (CalculationOfWarrants(Symbol(),magicNumber,6,1)>ProfitLevel)
     {
      AllowTrade=false;
      if(LockForClose)
        {
         SignalOnClosing=true;
         WriteLineInFile(FileNameOfReport,GetCurRusTime()
         +"Îáùèé óðîâåíü ïðèáûëè ïðèâûñèë ProfitLevel, ñãåíåðèðîâàí ñèãíàë íà çàêðûòèå îðäåðîâ - SignalOnClosing");
         if(!UseWPRInClosePositions) { WriteLineInFile(FileNameOfReport,""); }
        }
     }
   if(SignalOnClosing&&UseWPRInClosePositions&&LockForClose)
     {
      double InitWPRPrev=0,InitWPRCurr=0;
      InitWPRPrev=iWPR(Symbol(),0,14,1);
      InitWPRCurr=iWPR(Symbol(),0,14,0);
      if((InitWPRPrev>(0-ControlLevelWPR))&&(InitWPRCurr>InitWPRPrev))
        {
         WriteLineInFile(FileNameOfReport,GetCurRusTime()
         +"Ñèãíàë SignalOnClosing îòìåíåí ôèëüòðîì \"WPR\", ò.ê. òðåíä ââåðõ");
         WorkWPR=true;TrendUp=true;SignalOnClosing=false;
        }
      if((InitWPRPrev<(-100+ControlLevelWPR))&&(InitWPRCurr<InitWPRPrev))
        {
         WriteLineInFile(FileNameOfReport,GetCurRusTime()
         +"Ñèãíàë SignalOnClosing îòìåíåí ôèëüòðîì \"WPR\", ò.ê. òðåíä âíèç");
         WorkWPR=true;TrendDn=true;SignalOnClosing=false;
        }
      WriteLineInFile(FileNameOfReport,"");
      LockForClose=false;
     }
   if(WorkWPR)
     {
      double WPRPrev=0,WPRCurr=0;
      WPRPrev=iWPR(Symbol(),0,14,1);
      WPRCurr=iWPR(Symbol(),0,14,0);
      if(TrendUp&&(WPRCurr<(0-ControlLevelWPR)))
        {
         WriteLineInFile(FileNameOfReport,GetCurRusTime()
         +"Ôèëüòð \"WPR\" ñãåíåðèðîâàí ñèãíàë íà çàêðûòèå îðäåðîâ - SignalOnClosing");
         WriteLineInFile(FileNameOfReport,"");
         WorkWPR=false;TrendUp=false;SignalOnClosing=true;
        }
      if(TrendDn&&(WPRCurr>(-100+ControlLevelWPR)))
        {
         WriteLineInFile(FileNameOfReport,GetCurRusTime()
         +"Ôèëüòð \"WPR\" ñãåíåðèðîâàí ñèãíàë íà çàêðûòèå îðäåðîâ - SignalOnClosing");
         WriteLineInFile(FileNameOfReport,"");
         WorkWPR=false;TrendDn=false;SignalOnClosing=true;
        }
      if ((CalculationOfWarrants(Symbol(),magicNumber,0,1))
      +(CalculationOfWarrants(Symbol(),magicNumber,1,1))<ProfitLevel/2)
        {
         WriteLineInFile(FileNameOfReport,GetCurRusTime()
         +"Äåéñòâèå ôèëüòðà \"WPR\" îòìåíåíî,ñãåíåðèðîâàí ñèãíàë íà çàêðûòèå îðäåðîâ - SignalOnClosing");
         WriteLineInFile(FileNameOfReport,"");
         WorkWPR=false;TrendUp=false;TrendDn=false;SignalOnClosing=true;
        }
     }
   if(SignalOnClosing)
     {
      if(!IsTesting())
        {
         if((UseSoundInOperations)&&(CheckSoundFileName(SoundClosing)=="")) PlaySound(SoundClosing);
        }
      CloseAllPositions(Symbol(),magicNumber,ModeClosingOfWarrants);
      SetBadge("K",CurTime(),((Ask+Bid)/2)-3*Point,170,Violet);
      SignalOnClosing=false;LockForClose=false;CheckClose=true;
     }
   if(CheckClose)
     {
      if(CalculationOfWarrants(Symbol(),magicNumber,8,0)==0)
        {
         WriteLineInFile(FileNameOfReport,"Âñå îðäåðà çàêðûòû!");
         WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Îêîí÷àíèå òîðãîâîé ñåñèè ¹"+CountSessions);
         WriteLineInFile(FileNameOfReport,"");
         WriteLineInFile(FileNameOfReport,"Îò÷¸ò ïî ñåññèè: ");
         WriteLineInFile(FileNameOfReport,"Âñåãî îòêðûòî îðäåðîâ: "+CountOrders);
         WriteLineInFile(FileNameOfReport,"Âñåãî îòêðûòî îðäåðîâ Buy: "+CountBuy+" ,îðäåðîâ SellStop: "
         +TotalSellStop+" ,èç íèõ ñðàáîòàâøèõ: "+(TotalSellStop-CountSellStop));
         WriteLineInFile(FileNameOfReport,"Âñåãî îòêðûòî îðäåðîâ Sell: "+CountSell+" ,îðäåðîâ BuyStop: "
         +TotalBuyStop+" ,èç íèõ ñðàáîòàâøèõ: "+(TotalBuyStop-CountBuyStop));
         WriteLineInFile(FileNameOfReport,"Âðåìÿ çàêðûòèÿ îðäåðîâ: "+TimeToStr(TimeOfClosing,TIME_SECONDS ));
         WriteLineInFile(FileNameOfReport,"Ïðèáûëü/óáûòîê ïî ïîçèöèÿì Buy: "+DoubleToStr(CollectorBuy,2));
         WriteLineInFile(FileNameOfReport,"Ïðèáûëü/óáûòîê ïî ïîçèöèÿì Sell: "+DoubleToStr(CollectorSell,2));
         WriteLineInFile(FileNameOfReport,"Ïðèáûëü/óáûòîê ïî âñåì ïîçèöèÿì: "+DoubleToStr((CollectorBuy+CollectorSell),2));
         WriteLineInFile(FileNameOfReport,"Îáñîëþòíîå èñïîëüçîâàíèå äåïîçèòà: "+DoubleToStr(UseOfDeposit,2));
         WriteLineInFile(FileNameOfReport,"Îòíîñèòåëüíîå èñïîëüçîâàíèå äåïîçèòà: "
         +DoubleToStr((UseOfDeposit/((AccountBalance()-(CollectorBuy+CollectorSell))/100)),2)+"%");
         WriteLineInFile(FileNameOfReport,"Ìàêñèìàëüíàÿ ïðîñàäêà çà ñåññèþ: "+MaximalDrawdown);
         WriteLineInFile(FileNameOfReport,"");
         CountBuy=0;TotalSellStop=0;CountSellStop=0;CountSell=0;TotalBuyStop=0;CountBuyStop=0;
         TimeOfClosing=0;CollectorBuy=0;CollectorSell=0;UseOfDeposit=0;MaximalDrawdown=0;
         CountOperations=0;CountOrders=0;WorkWPR=false;TrendUp=false;TrendDn=false;
         SignalOnClosing=false;LockForClose=true;CheckClose=false;//FlagFractal="";
         ArrayResize(InfoOpenOrders,0);
         Sleep(5000);
         WriteLineInFile(FileNameOfReport,"");
         WriteLineInFile(FileNameOfReport,"");
         CountSessions++;
         WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íà÷àëî òîðãîâîé ñåñèè ¹"+CountSessions);
         WriteLineInFile(FileNameOfReport,"");
         AllowTrade=true;
        }
     }
   for(i=0; i < 300; i++)
     {
      iFractals_up=iFractals(NULL, 0, MODE_UPPER, i);
      iFractals_lo=iFractals(NULL, 0, MODE_LOWER, i);
      if ((iFractals_up!=0) || (iFractals_lo!=0)) break;
     }
   if ((iFractals_up!=0) && (Time[i]!=prev_max) && (i < 3))
     {
      prev_max=Time[i];
      if(AllowTrade)
        {
         OpenSell=true;
         WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Èíäèêàòîð iFractals ñãåíåðèðîâàë ñèãíàë OpenSell");
        }
     }
   if ((iFractals_lo!=0) && (Time[i]!=prev_min) && (i < 3))
     {
      prev_min=Time[i];
      if(AllowTrade)
        {
         OpenBuy=true;
         WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Èíäèêàòîð iFractals ñãåíåðèðîâàë ñèãíàë OpenBuy");
        }
     }
   FractalUp=0;FractalDn=0;
   FractalUp=iFractals_up;
   FractalDn=iFractals_lo;
   if(FractalUp==0)
     {
      if(FractalPrevUp==0)
        {
         FractalUp=High[PerHL];
         for(i=0;i<PerHL;i++)
           {
            if (FractalUp<High[i]) FractalUp=High[i];
           }
        }
         else FractalUp=FractalPrevUp;
     }
      else FractalPrevUp=FractalUp;
   if(FractalDn==0)
     {
      if(FractalPrevDn==0)
        {
         FractalDn=Low[PerHL];
         for(i=0;i<PerHL;i++)
           {
            if (FractalDn>Low[i])  FractalDn=Low[i];
           }
        }
         else FractalDn=FractalPrevDn;
     }
      else FractalPrevDn=FractalDn;
   if(OpenOnlyOnDepthOfFChannel)
     {
      FChannel=MathRound((FractalUp-FractalDn)/Point);
      SubFractalUp=FractalUp-(((FChannel/100)*DepthOfFChannel)*Point);
      SubFractalDn=FractalDn+(((FChannel/100)*DepthOfFChannel)*Point);
      if(!IsTesting())
        {
         bool R1=DrawChannel("FChannel",FractalUp,FractalDn,SubFractalUp,SubFractalDn);
         if(!R1) WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Îøèáêà â îòîáðàæåíèè êàíàëà FChannel");
        }
      if(DepthOfFChannel>0)
        {
         if(OpenBuy)
           {
            RefreshRates();
            if(Close[0]<SubFractalDn)
              {
               OpenBuy=false;
               SetBadge("C",CurTime(),Close[0],76,MediumVioletRed);
               WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Ñèãíàë OpenBuy îòìåíåí ôèëüòðîì \"FChannel\", ò.ê. öåíà íå äîñòèãëà çàäàííîé ãëóáèíû êàíàëà");
               WriteLineInFile(FileNameOfReport,"");
              }
           }
         if(OpenSell)
           {
            RefreshRates();
            if(Close[0]>SubFractalUp)
              {
               OpenSell=false;
               SetBadge("C",CurTime(),Close[0],76,DodgerBlue);
               WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Ñèãíàë OpenSell îòìåíåí ôèëüòðîì \"FChannel\", ò.ê. öåíà íå äîñòèãëà çàäàííîé ãëóáèíû êàíàëà");
               WriteLineInFile(FileNameOfReport,"");
              }
           }
        }
     }
   MaxH=Close[PerHL];MinL=Close[PerHL];
   for(i=1;i<PerHL;i++)
     {
      if (MaxH<Close[i]) MaxH=Close[i];
      if (MinL>Close[i]) MinL=Close[i];
     }
   MidLine=NormalizeDouble((MaxH+MinL)/2,Digits);
   ChannelHLClose=MathRound((MaxH-MinL)/Point);
   if(ReferenceOnChannel_HL)
     {
      SubMaxH=MaxH-(((ChannelHLClose/100)*LevelOrientationOnChannel_HL)*Point);
      SubMinL=MinL+(((ChannelHLClose/100)*LevelOrientationOnChannel_HL)*Point);
      if(!IsTesting())
        {
         bool R2=DrawChannel("ChannelHLClose",MaxH,MinL,SubMaxH,SubMinL,MidLine);
         if(!R2) WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Îøèáêà â îòîáðàæåíèè êàíàëà ChannelHLClose");
        }
      if(LevelOrientationOnChannel_HL>0)
        {
         if(OpenBuy)
           {
            RefreshRates();
            if(Close[0]<SubMinL)
              {
               OpenBuy=false;
               SetBadge("R",CurTime(),Close[0],251,MediumVioletRed);
               WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Ñèãíàë OpenBuy îòìåíåí ôèëüòðîì \"ChannelHLClose\", ò.ê. öåíà íèæå óðîâíÿ îðåèíòàöèè êàíàëà");
               WriteLineInFile(FileNameOfReport,"");
              }
           }
         if(OpenSell)
           {
            RefreshRates();
            if(Close[0]>SubMaxH)
              {
               OpenSell=false;
               SetBadge("R",CurTime(),Close[0],251,DodgerBlue);
               WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Ñèãíàë OpenBuy îòìåíåí ôèëüòðîì \"ChannelHLClose\", ò.ê. öåíà âûøå óðîâíÿ îðåèíòàöèè êàíàëà");
               WriteLineInFile(FileNameOfReport,"");
              }
           }
        }
     }
   if(!ToTradeInFlat)
     {
      if((ChannelHLClose<LevelChannel_HLForFlat)
      &&(CalculationOfWarrants(Symbol(),magicNumber,0,0)==CalculationOfWarrants(Symbol(),magicNumber,1,0)))
        {
         if(OpenBuy)
           {
            SetBadge("F",CurTime(),((Ask+Bid)/2)-3*Point,104,MediumVioletRed);
            WriteLineInFile(FileNameOfReport,GetCurRusTime()
            +"Ñèãíàë OpenBuy îòìåíåí ôèëüòðîì \"Flat\", ò.ê. ðûíî÷íàÿ òåíäåíöèÿ îòñóòñâóåò");
            WriteLineInFile(FileNameOfReport,"");
            OpenBuy=false;
           }
         if(OpenSell)
           {
            SetBadge("F",CurTime(),((Ask+Bid)/2)+3*Point,104,DodgerBlue);
            WriteLineInFile(FileNameOfReport,GetCurRusTime()
            +"Ñèãíàë OpenSell îòìåíåí ôèëüòðîì \"Flat\", ò.ê. ðûíî÷íàÿ òåíäåíöèÿ îòñóòñâóåò");
            WriteLineInFile(FileNameOfReport,"");
            OpenSell=false;
           }
        }
     }
   if(OnlyOnePosition&&ToExposeContrwarrants)
     {
      if(OpenBuy)
        {
         if(CalculationOfWarrants(Symbol(),magicNumber,0,0)>0)
           {
            WriteLineInFile(FileNameOfReport,GetCurRusTime()
            +"Ñèãíàë OpenBuy îòìåíåí ôèëüòðîì \"OnlyOnePosition\", ò.ê. ïîçèöèÿ óæå Buy åñòü");
            WriteLineInFile(FileNameOfReport,"");
            OpenBuy=false;
           }
        }
      if(OpenSell)
        {
         if(CalculationOfWarrants(Symbol(),magicNumber,1,0)>0)
           {
            WriteLineInFile(FileNameOfReport,GetCurRusTime()
            +"Ñèãíàë OpenSell îòìåíåí ôèëüòðîì \"OnlyOnePosition\", ò.ê. ïîçèöèÿ óæå Sell åñòü");
            WriteLineInFile(FileNameOfReport,"");
            OpenSell=false;
           }
        }
     }
   if(OpenBuy)
     {
      if(FlagFractal=="buy")
        {
         SetBadge("Z",CurTime(),((Ask+Bid)/2)-3*Point,65,MediumVioletRed);
         WriteLineInFile(FileNameOfReport,GetCurRusTime()
         +"Ñèãíàë OpenBuy îòìåíåí ôèëüòðîì \"DoublePosition\", ò.ê. íà ýòîì óðîâíå ïîçèöèÿ Buy óæå åñòü");
         OpenBuy=false;
         WriteLineInFile(FileNameOfReport,"");
        }
      else WriteLineInFile(FileNameOfReport,"");
     }
   if(OpenSell)
     {
      if(FlagFractal=="sell")
        {
         SetBadge("Z",CurTime(),((Ask+Bid)/2)+3*Point,65,DodgerBlue);
         WriteLineInFile(FileNameOfReport,GetCurRusTime()
         +"Ñèãíàë OpenSell îòìåíåí ôèëüòðîì \"DoublePosition\", ò.ê. íà ýòîì óðîâíå ïîçèöèÿ Sell óæå åñòü");
         OpenSell=false;
         WriteLineInFile(FileNameOfReport,"");
        }
      else WriteLineInFile(FileNameOfReport,"");
     }
   if((OpenBuy)&&(AllowTrade))
     {
      int resBuy,resSellStop,process1=0,mode1=ModeOpeningOfWarrants;
      CountOperations++;
      WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Òîðãîâàÿ îïåðàöèÿ ¹"+CountOperations);
      SetBadge("B",CurTime(),((Ask+Bid)/2)-3*Point,241,Red);
      if((mode1==0)||(mode1==1)) process1=2;
      if((mode1==2)||(mode1==3)) process1=1;
      while(process1>0)
        {
         if((mode1==0)||(mode1==2))
           {
            CountOrders++;
            resBuy=PerformanceOpenBuy(Symbol(),Lots,5,StopLoss,TakeProfit,CountOrders
            +" Buy "+NameOfExpert,magicNumber,UseSoundInOperations,SoundOpenBuy);
            if(resBuy>0)
              {
               CountBuy++;process1--;FlagFractal="buy";
               size=ArrayRange(InfoOpenOrders,0);
               ArrayResize(InfoOpenOrders,size+1);
               InfoOpenOrders[size][0]=resBuy;
               InfoOpenOrders[size][1]=CountOrders;
               InfoOpenOrders[size][2]=OP_BUY;
               InfoOpenOrders[size][3]=NormalizeDouble(Ask,Digits);
               UseOfDeposit=UseOfDeposit+((NormalizeDouble(Ask,Digits)*1000)*Lots);
              }
            else
              {
               WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûïîëíèòü òîðãîâûå îïåðàöèè!");
               CountOrders--;
               break;
              }
            if(mode1==0) mode1=3;
           }
         if((mode1==1)||(mode1==3))
           {
            CountOrders++;
            resSellStop=PerformanceOpenSellStop(Symbol(),Lots,(FractalDn-(Limit*Point)),5,StopLoss,TakeProfit,
            CountOrders+" SellStop "+NameOfExpert,magicNumber,UseSoundInOperations,SoundOpenSellStop);
            if(resSellStop>0)
              {
               CountSellStop++;TotalSellStop++;process1--;
               size=ArrayRange(InfoOpenOrders,0);
               ArrayResize(InfoOpenOrders,size+1);
               InfoOpenOrders[size][0]=resSellStop;
               InfoOpenOrders[size][1]=CountOrders;
               InfoOpenOrders[size][2]=OP_SELLSTOP;
               InfoOpenOrders[size][3]=NormalizeDouble((FractalDn-(Limit*Point)),Digits);
              }
            else
              {
               WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü çàâåðøèòü òîðãîâûå îïåðàöèè!");
               CountOrders--;
               break;
              }
            if(mode1==1) mode1=2;
           }
        }
      WriteLineInFile(FileNameOfReport,"");
      OpenBuy=false;
     }
   if((OpenSell)&&(AllowTrade))
     {
      int resSell,resBuyStop,process2=0,mode2=ModeOpeningOfWarrants;
      CountOperations++;
      WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Òîðãîâàÿ îïåðàöèÿ ¹"+CountOperations);
      SetBadge("S",CurTime(),((Ask+Bid)/2)+7*Point,242,Blue);
      if((mode2==0)||(mode2==1)) process2=2;
      if((mode2==2)||(mode2==3)) process2=1;
      while(process2>0)
        {
         if((mode2==0)||(mode2==2))
           {
            CountOrders++;
            resSell=PerformanceOpenSell(Symbol(),Lots,5,StopLoss,TakeProfit,CountOrders
            +" Sell "+NameOfExpert,magicNumber,UseSoundInOperations,SoundOpenSell);
            if(resSell>0)
              {
               CountSell++;process2--;FlagFractal="sell";
               size=ArrayRange(InfoOpenOrders,0);
               ArrayResize(InfoOpenOrders,size+1);
               InfoOpenOrders[size][0]=resSell;
               InfoOpenOrders[size][1]=CountOrders;
               InfoOpenOrders[size][2]=OP_SELL;
               InfoOpenOrders[size][3]=NormalizeDouble(Bid,Digits);
               UseOfDeposit=UseOfDeposit+((NormalizeDouble(Bid,Digits)*1000)*Lots);
              }
            else
              {
               WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûïîëíèòü òîðãîâûå îïåðàöèè!");
               CountOrders--;
               break;
              }
            if(mode2==0) mode2=3;
           }
         if((mode2==1)||(mode2==3))
           {
            CountOrders++;
            resBuyStop=PerformanceOpenBuyStop(Symbol(),Lots,(FractalUp+(Limit*Point)),5,StopLoss,TakeProfit,
            CountOrders+" SellStop "+NameOfExpert,magicNumber,UseSoundInOperations,SoundOpenBuyStop);
            if(resBuyStop>0)
              {
               CountBuyStop++;TotalBuyStop++;process2--;
               size=ArrayRange(InfoOpenOrders,0);
               ArrayResize(InfoOpenOrders,size+1);
               InfoOpenOrders[size][0]=resBuyStop;
               InfoOpenOrders[size][1]=CountOrders;
               InfoOpenOrders[size][2]=OP_BUYSTOP;
               InfoOpenOrders[size][3]=NormalizeDouble(FractalUp+(Limit*Point),Digits);
              }
            else
              {
               WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü çàâåðøèòü òîðãîâûå îïåðàöèè!");
               CountOrders--;
               break;
              }
            if(mode2==1) mode2=2;
           }
        }
      WriteLineInFile(FileNameOfReport,"");
      OpenSell=false;
     }
   if(!IsTesting())
     {
      string com=("Äàòà: "+GetCurRusTime());
      if(OpenOnlyOnDepthOfFChannel) { com=com + ("  Êàíàë FChannel: "+DoubleToStr(FChannel,2)); }
      if(ReferenceOnChannel_HL) { com=com + ("  Êàíàë ChannelHLClose: "+DoubleToStr(ChannelHLClose,2)); }
      Comment(com);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int ToInformTheUser()
  {
   string InitialMsg,Msg0,Msg1,Msg2,Msg3,Msg4,Msg5,Msg6,Msg7,Msg8,Msg9,Msg10,Msg11,Msg12,Msg13,Msg14,Msg15,Msg16,
   Msg18,Msg19,Msg20,Msg21,Msg22,Msg23,Msg24,Msg25,Msg26,Msg27,Msg28,Msg29,Msg30,Msg31,Msg32,Msg33,Msg34,
   Msg35,Msg36,Msg37,Msg38,Msg39,Msg40,Msg41,Msg42,Msg43,Msg44,Msg45,Msg46,Msg47,Msg48,Msg49,Msg50,Msg51,Msg52,
   Msg53,Msg54,Msg55,Msg56,Msg57,Msg58,Msg59;
   if(IsDemo()) { Msg0=" íà äåìî-ñ÷¸òå ¹"+AccountNumber(); } else { Msg0=" íà ðåàëüíîì ñ÷¸òå ¹"+AccountNumber(); }
   Msg1=("Ýêñïåðò "+NameOfExpert+" íà÷èíàåò ñâîþ ðàáîòó"+Msg0+" ñî ñëåäóþùèìè âõîäíûìè ïàðàìåòðàìè: "+"\n");
   Msg2=(""+"\n");
   Msg3=("Èíôîðìàöèÿ î ñ÷¸òå:"+"\n");
   Msg4=(""+"\n");
   Msg5=("Íàçâàíèå áðîêåðñêîé êàìïàíèè: "+" "+AccountCompany()+"\n");
   Msg6=("Íàèìåíîâàíèå âëàäåëüöà ñ÷¸òà: "+AccountName()+"\n"+"\n");
   Msg7=("Íîìåð ñ÷¸òà ó áðîêåðà: "+AccountNumber()+"  ");
   Msg8=("Âàëþòà ñ÷¸òà: "+AccountCurrency()+"  ");
   Msg9=("Êðåäèòíîå ïëå÷î: 1 ê "+AccountLeverage()+"\n");
   Msg10=(""+"\n");
   Msg11=("Âàø äåïîçèò: "+""+DoubleToStr(AccountBalance(),2)+"  ");
   Msg12=("Òåêóùèé áàëàíñ (ñðåäñòâà): "+""+DoubleToStr(AccountEquity(),2)+"  ");
   if(AccountMargin()!=0) Msg13=("Çàëîã: "+""+DoubleToStr(AccountMargin(),2)+"  "); else Msg13="";
   Msg14=("Ñâîáîäíûå ñðåäñòâà: "+""+DoubleToStr(AccountFreeMargin(),2)+"\n");
   if(AccountMargin()!=0) Msg15=("Íåðåàëèçîâàííàÿ ïðèáûëü/óáûòîê: "+""+DoubleToStr(AccountProfit(),2)
   +"\n"); else Msg15="";
   Msg16=(""+"\n");
   Msg18=("Âõîäíûå ïàðàìåòðû:"+"\n");
   Msg19=(""+"\n");
   Msg20=("Lots: "+"           "+DoubleToStr(Lots,1)+(" (Ðàçìåð ëîòà)")+"\n");
   Msg21=("TakeProfit: "+" "+TakeProfit+(" (Îáùèé óðîâåíü ôèêñàöèè ïðèáûëè)")+"\n");
   Msg22=("StopLoss: "+"   "+StopLoss+(" (Îáùèé óðîâåíü ôèêñàöèè óáûòêà)")+"\n");
   Msg23=("Limit: "+"           "+Limit
   +(" (Âåëè÷èíà, íà êîòîðóþ, âûøå èëè íèæå óðîâíÿ ôðàêòàëà, âûñòàâëÿþòñÿ îòëîæåííûå îðäåðà)")+"\n");
   Msg24=("ProfitLevel: "+" "+ProfitLevel+(" (Óðîâåíü ïðèáûëè, ïðè êîòîðîì çàêðûâàþòñÿ âñå îðäåðà)")+"\n");
   Msg25=(""+"\n");
   Msg26=("ModeOpeningOfWarrants: "+ModeOpeningOfWarrants+" (Ðåæèì îòêðûòèÿ îðäåðîâ)"+"\n");
   Msg27=("ModeClosingOfWarrants: "+"  "+ModeClosingOfWarrants+" (Ðåæèì çàêðûòèÿ îðäåðîâ)"+"\n");
   Msg28=(""+"\n");
   if(OpenOnlyOnDepthOfFChannel)
     {
      Msg29="Äà";
      Msg31=("DepthOfFChannel: "+"                       "+DepthOfFChannel
      +" (Ãëóáèíà îòêðûòèÿ ïîçèöèé, â ïðîöåíòàõ ôðàêòàëüíîãî êàíàëà)"+"\n");
     }
   else
     {
      Msg29="Íåò";Msg31="";
     }
   Msg30=("OpenOnlyOnDepthOfFChannel: "+"  "+Msg29+" (Îòêðûâàòüñÿ òîëüêî íà ãëóáèíå ôðàêòàëüíîãî êàíàëà)"+"\n");
   if(ReferenceOnChannel_HL)
     {
      Msg32="Äà";
      Msg34=("LevelOrientationOnChannel_HL: "+" "+LevelOrientationOnChannel_HL+" (Óðîâåíü îðåèíòàöèè â ïðîöåíòàõ îò êàíàëà High-Low)"+"\n");
     }
   else
     {
      Msg32="Íåò";Msg34="";
     }
   Msg33=("ReferenceOnChannel_HL: "+"           "+Msg32+" (Ðàçðåøàòü ñîâåòíèêó îðåèíòèðîâàòüñÿ íà êàíàë High-Low)"+"\n");
   if(ToTradeInFlat)
     {
      Msg35="Äà";
      Msg37="";
     }
   else
     {
      Msg35="Íåò";
      Msg37=("LevelChannel_HLForFlat: "+"             "+LevelChannel_HLForFlat+" (Óðîâåíü êàíàëà High-Low, ïðè êîòîðîì òåíäåíöèÿ ñ÷èòàåòñÿ ôëýòîì)"+"\n");
     }
   Msg36=("ToTradeInFlat: "+"                             "+Msg35+" (Ðàçðåøàòü ñîâåòíèêó òîðãîâàòü âî ôëýòå)"+"\n");
   if(UseWPRInClosePositions)
     {
      Msg38="Äà";
      Msg40=("ControlLevelWPR: "+"                        "+ControlLevelWPR+" (Êîíòðîëüíûé óðîâåíü èíäèêàòîðà WPR)"+"\n");
     }
   else
     {
      Msg38="Íåò";Msg40="";
     }
   Msg39=("UseWPRInClosePositions: "+"            "+Msg38+" (Èñïîëüçîâàòü èíäèêàòîð WPR â ïðèíÿòèè ðåøåíèÿ î çàêðûòèè îðäåðîâ)"+"\n");
   if(ToExposeContrwarrants)
     {
      Msg41="Äà";
     }
   else
     {
      Msg41="Íåò";
     }
   Msg42=("ToExposeContrwarrants: "+"             "+Msg41+" (Âûñòàâëÿòü êîíòðîðäåðà ïðè ñðàáàòûâàíèè îòëîæåííûõ îðäåðîâ)"+"\n");
   Msg43=(""+"\n");
   if(DeleteLogsOnClose)
     {
      Msg56="Äà";
     }
   else
     {
      Msg56="Íåò";
     }
   Msg59=("DeleteLogsOnClose: "+"               "+Msg56+" (Ñòèðàòü âñå log-ôàéëû ñîçäàâàåìûå òåðìèíàëîì è òåñòåðîì)"+"\n");
   if(EraseOldFileOfReport)
     {
      Msg44="Äà";
      Msg47=("-- Âíèìàíèå! Åñëè óêàçàííûé ôàéë ïðîòîêîëà óæå ñóæåñòâóåò, îí áóäåò ñò¸ðò! --"+"\n");
     }
   else
     {
      Msg44="Íåò";
      Msg47=("-- Âíèìàíèå! Åñëè óêàçàííûé ôàéë ïðîòîêîëà óæå ñóæåñòâóåò, â íåãî áóäåò ïðîäîëæåíà çàïèñü! --"+"\n");
     }
   Msg45=("EraseOldFileOfReport: "+"           "+Msg44+" (Ñòèðàòü ñòàðûé ôàéë ïðîòîêîëà, åñëè ôàéë óæå ñóùåñòâóåò)"+"\n");
//----
   if(StringLen(FileNameOfReport)==0)
     {//14
      Msg46=("FileNameOfReport: "+""+"Íå óêàçàíî íàçâàíèå ôàéëà ïðîòîêîëà. Áóäåò èñïîëüçîâàíî íàçâàíèå Report"+Symbol()+Period()+"\n");
     }
   else
     {
      Msg46=("FileNameOfReport: "+"                     "+FileNameOfReport+" (Íàçâàíèå ôàéëà ïðîòîêîëà)"+"\n");
     }
   Msg48=(""+"\n");
   if(UseSoundInOperations)
     {
      Msg49="Äà";
      if(StringLen(SoundOpenBuy)==0) SoundOpenBuy="";
      if(StringLen(SoundOpenSell)==0) SoundOpenSell="";
      if(StringLen(SoundOpenBuyStop)==0) SoundOpenBuyStop="";
      if(StringLen(SoundOpenSellStop)==0) SoundOpenSellStop="";
      if(StringLen(SoundClosing)==0) SoundClosing="";
      if(StringLen(CheckSoundFileName(SoundOpenBuy))==0)
        {
         Msg51=("SoundOpenBuy: "+"             "+SoundOpenBuy+" (Çâóê ïðè îòêðûòèè îðäåðà Buy)"+"\n");
        }
      else
        {
         Msg51=("SoundOpenBuy: "+"        "+CheckSoundFileName(SoundOpenBuy)+" Çâóêà äëÿ Buy íå áóäåò."+"\n");
        }
      if(StringLen(CheckSoundFileName(SoundOpenSell))==0)
        {
         Msg52=("SoundOpenSell: "+"             "+SoundOpenSell+" (Çâóê ïðè îòêðûòèè îðäåðà Sell)"+"\n");
        }
      else
        {
         Msg52=("SoundOpenSell: "+"         "+CheckSoundFileName(SoundOpenSell)+" Çâóêà äëÿ Sell íå áóäåò."+"\n");
        }
      if(StringLen(CheckSoundFileName(SoundOpenBuyStop))==0)
        {
         Msg53=("SoundOpenBuyStop: "+"     "+SoundOpenBuyStop+" (Çâóê ïðè îòêðûòèè îðäåðà BuyStop)"+"\n");
        }
      else
        {
         Msg53=("SoundOpenBuyStop: "+" "+CheckSoundFileName(SoundOpenBuyStop)+" Çâóêà äëÿ BuyStop íå áóäåò."+"\n");
        }
      if(StringLen(CheckSoundFileName(SoundOpenSellStop))==0)
        {
         Msg54=("SoundOpenSellStop: "+"      "+SoundOpenSellStop+" (Çâóê ïðè îòêðûòèè îðäåðà SellStop)"+"\n");
        }
      else
        {
         Msg54=("SoundOpenSellStop: "+" "+CheckSoundFileName(SoundOpenSellStop)+" Çâóêà äëÿ SellStop íå áóäåò."+"\n");
        }
      if(StringLen(CheckSoundFileName(SoundClosing))==0)
        {
         Msg55=("SoundClosing: "+"                "+SoundClosing+" (Çâóê ïðè çàêðûòèè âñåõ îðäåðîâ)"+"\n");
        }
      else
        {
         Msg55=("SoundClosing: "+"           "+CheckSoundFileName(SoundClosing)+" Çâóêà äëÿ Close íå áóäåò."+"\n");
        }
     }
   else
     {
      Msg49="Íåò";Msg51="";Msg52="";Msg53="";Msg54="";Msg55="";
     }
   Msg50=("UseSoundInOperations: "+" "+Msg49+" (Èñïîëüçîâàòü çâóêîâîå ñîïðîâîæäåíèå òîðãîâûõ îïåðàöèé)"+"\n");
   Msg57=(""+"\n");
   Msg58=("Åñëè Âàñ óñòðàèâàþò âõîäíûå ïàðàìåòðû ñîâåòíèêà íàæìèòå êíîïêó  \" Îê \"  è ïðîãðàììà ïðîäîëæèò ñâîþ"+"\n"+"ðàáîòó, èíà÷å íàæìèòå êíîïêó \" Îòìåíà \"."+"\n");
//----
   InitialMsg=Msg1+Msg2+Msg3+Msg4+Msg5+Msg6+Msg7+Msg8+Msg9+Msg10+Msg11+Msg12+Msg13+Msg14
   +Msg15+Msg16+Msg18+Msg19+Msg20+Msg21+Msg22+Msg23+Msg24+Msg25+Msg26+Msg27+Msg28
   +Msg30+Msg31+Msg33+Msg34+Msg36+Msg37+Msg39+Msg40+Msg42+Msg43+Msg59+Msg45+Msg46+Msg47+Msg48
   +Msg50+Msg51+Msg52+Msg53+Msg54+Msg55+Msg57+Msg58;
//----
   return(MessageBoxA(WindowHandle(Symbol(),0),InitialMsg,"Íà÷àëüíûå ïàðàìåòðû ýêïåðòà "+NameOfExpert,65));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string CheckSoundFileName(string SoundFileName)
  {
   if(StringLen(SoundFileName)==0)
     {
      return("Íå óêàçàíî èìÿ ôàéëà çâóêîâîãî ñîïðîâîæäåíèÿ.");
     }
   else
      if((StringFind(SoundFileName,".wav",0))!=(StringLen(SoundFileName)-4))
        {
         return("Íåâåðíî óêàçàíî èìÿ ôàéëà çâóêîâîãî ñîïðîâîæäåíèÿ.");
        }
      else
         if(!jFileExists(jGetCurrDir()+"\sounds"+CharToStr(92)+SoundFileName))
           {
            return("Óêàçàííûé ôàéë íå ñóùåñòâóåò â êàòàëîãå ..\sounds.");
           }
         else
           {
            return("");
           }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int InfoByOpenOrders()
  {
   string Msg1,Msg2,Msg3,Msg4,Msg5,Msg6,Msg7,Msg8,Msg9,Msg10,Msg11,Msg12,OutString;
//----
   Msg1=("Âíèìàíèå! Ïî òåêóùåìó èíñòðóìåíòó "+Symbol()+" ó Âàñ èìåþòñÿ ñëåäóþùèå îòêðûòûå îðäåðà:"+"\n");
   Msg2=(""+"\n");
   if(CalculationOfWarrants(Symbol(),0,0,0)>0)
     {
      Msg3=(" BUY - "+""+CalculationOfWarrants(Symbol(),0,0,0)+"  ");
     }  else Msg3="";
   if(CalculationOfWarrants(Symbol(),0,1,0)>0)
     {
      Msg4=(" SELL - "+""+CalculationOfWarrants(Symbol(),0,1,0)+"  ");
     }  else Msg4="";
   if(CalculationOfWarrants(Symbol(),0,2,0)>0)
     {
      Msg5=(" BUYLIMIT - "+""+CalculationOfWarrants(Symbol(),0,2,0)+"  ");
     }  else Msg5="";
   if(CalculationOfWarrants(Symbol(),0,3,0)>0)
     {
      Msg6=(" SELLLIMIT - "+""+CalculationOfWarrants(Symbol(),0,3,0)+"  ");
     }  else Msg6="";
   if(CalculationOfWarrants(Symbol(),0,4,0)>0)
     {
      Msg7=(" BUYSTOP - "+""+CalculationOfWarrants(Symbol(),0,4,0)+"  ");
     }  else Msg7="";
   if(CalculationOfWarrants(Symbol(),0,5,0)>0)
     {
      Msg8=(" SELLSTOP - "+""+CalculationOfWarrants(Symbol(),0,5,0)+"  ");
     }  else Msg8="";
   Msg9=(""+"\n");
   Msg10=("Ñîâåòíèê íå áóäåò êàñàòüñÿ â ñâîåé ðàáîòå ýòèõ îðäåðîâ, åñëè òîëüêî ýòè îðäåðà íå áûëè"
    +"\n"+"îòêðûòû ðàíåå ýòèì æå ñîâåòíèêîì. Îäíàêî, âî èçáåæàíèè èñêàæåíèÿ ðåçóëüòàòîâ ðàáîòû"
    +"\n"+"ñîâåòíèêà, íàñòîÿòåëüíî ðåêîìåíäóåì çàêðûòü âñå îòêðûòûå îðäåðà!"+"\n");
   Msg11=(""+"\n");
   Msg12=("Âû ìîæåòå çàâåðøèòü ðàáîòó ñîâåòíèêà è çàêðûòü âûøå óêàçàííûå îðäåðà. Äëÿ ïðîäîëæå-"
    +"\n"+"íèÿ ðàáîòû ñîâåòíèêà, çàéäèòå â åãî ñâîéñòâà è ñíèìèòå, à çàòåì âíîâü ïîñòàâüòå ãàëî÷êó"
    +"\n"+"íà ïðîòèâ îïöèè \" ÐÀÇÐÅØÈÒÜ ÑÎÂÅÒÍÈÊÓ ÒÎÐÃÎÂÀÒÜ \".  Çàâåðøèòü ðàáîòó ñîâåòíèêà?"+"\n");
   OutString=Msg1+Msg2+Msg3+Msg4+Msg5+Msg6+Msg7+Msg8+Msg9+Msg9+Msg10+Msg11+Msg12;
   return(MessageBoxA(WindowHandle(Symbol(),0),OutString,"Èìåþòñÿ îòêðûòûå îðäåðà!",52));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CalculationOfWarrants(string NameOfToll,int UniqueMagic,int Index1,int Index2)
  {
   int Inform[9][2],Zero[9][2];int n=0;
   ArrayCopy(Inform,Zero,0,0,WHOLE_ARRAY);
   bool Condition1;
   if(UniqueMagic==0)
     {
      Condition1=(OrderSymbol()==NameOfToll);
     }
   else
     {
      Condition1=((OrderSymbol()==NameOfToll)&&(OrderMagicNumber()==UniqueMagic));
     }
   for(n=OrdersTotal()-1;n>=0;n--)
     {
      OrderSelect(n,SELECT_BY_POS,MODE_TRADES);
      if (Condition1)
        {
         if(OrderType()==0) {Inform[0][0]=Inform[0][0]+1;Inform[0][1]=Inform[0][1]+OrderProfit();}
         if(OrderType()==1) {Inform[1][0]=Inform[1][0]+1;Inform[1][1]=Inform[1][1]+OrderProfit();}
         if(OrderType()==2) {Inform[2][0]=Inform[2][0]+1;}
         if(OrderType()==3) {Inform[3][0]=Inform[3][0]+1;}
         if(OrderType()==4) {Inform[4][0]=Inform[4][0]+1;}
         if(OrderType()==5) {Inform[5][0]=Inform[5][0]+1;}
        }
     }
   Inform[6][0]=Inform[0][0]+Inform[1][0];
   Inform[6][1]=Inform[0][1]+Inform[1][1];
   Inform[7][0]=Inform[2][0]+Inform[3][0]+Inform[4][0]+Inform[5][0];
   Inform[8][0]=Inform[0][0]+Inform[1][0]+Inform[2][0]+Inform[3][0]
   +Inform[4][0]+Inform[5][0];
   return(Inform[Index1][Index2]);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void WriteLineInFile(string FileName,string Line)
  {
   int HFile=FileOpen(FileName,FILE_READ|FILE_WRITE," ");
   if(HFile>0)
     {
      FileSeek(HFile,0,SEEK_END);
      FileWrite(HFile,Line);
      FileFlush(HFile);
      FileClose(HFile);
     }
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string GetCurRusTime()
  {
   string StrMonth="",StrDay="",StrHour="",StrMinute="",StrSeconds="";
   RefreshRates();
   if(Month()<10) { StrMonth="0"+Month(); } else { StrMonth=Month(); }
   if(Day()<10) { StrDay="0"+Day(); } else { StrDay=Day(); }
   if(Hour()<10) { StrHour="0"+Hour(); } else { StrHour=Hour(); }
   if(Minute()<10) { StrMinute="0"+Minute(); } else { StrMinute=Minute(); }
   if(Seconds()<10) { StrSeconds="0"+Seconds(); } else { StrSeconds=Seconds(); }
   return(""+StrDay+"."+StrMonth+"."+Year()+" "+StrHour+":"+StrMinute+":"+StrSeconds+" ");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SetBadge(string BadgeName, datetime BadgeTime, double BadgePrice,int BadgeType,color BadgeColor)
  {
   string Name=BadgeName+CurTime();
   if(PrevPrice>0)
     {
      if(((BadgePrice-PrevPrice)>=0*Point)&&((BadgePrice-PrevPrice)<3*Point)) BadgePrice=BadgePrice+3*Point;
      if(((PrevPrice-BadgePrice)>=0*Point)&&((PrevPrice-BadgePrice)<3*Point)) BadgePrice=BadgePrice-3*Point;
     }
   ObjectCreate(Name,OBJ_ARROW,0,BadgeTime,BadgePrice);
   ObjectSet(Name,OBJPROP_ARROWCODE,BadgeType);
   ObjectSet(Name,OBJPROP_COLOR,BadgeColor);
   PrevPrice=BadgePrice;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool DrawChannel(string NaneChannel,double Upper=0,double Down=0,double SubUp=0,double SubDn=0,double Average=0)
  {
   bool res[11];
   if(NaneChannel=="FChannel")
     {
      if(ObjectFind(NaneChannel+"H")>0) ObjectDelete(NaneChannel+"H");
      ObjectCreate(NaneChannel+"H", OBJ_HLINE, 0, Time[0],Close[0]);
      ObjectSet(NaneChannel+"H",OBJPROP_COLOR,Pink);
      if(ObjectFind(NaneChannel+"L")>0) ObjectDelete(NaneChannel+"L");
      ObjectCreate(NaneChannel+"L", OBJ_HLINE, 0, Time[0],Close[0]);
      ObjectSet(NaneChannel+"L",OBJPROP_COLOR,SkyBlue);
      if(ObjectFind(NaneChannel+"SH")>0) ObjectDelete(NaneChannel+"SH");
      ObjectCreate(NaneChannel+"SH",OBJ_RECTANGLE,0 ,0,0,0,0);
      ObjectSet(NaneChannel+"SH",OBJPROP_COLOR,Pink);
      if(ObjectFind(NaneChannel+"LH")>0) ObjectDelete(NaneChannel+"LH");
      ObjectCreate(NaneChannel+"LH",OBJ_RECTANGLE,0 ,0,0,0,0);
      ObjectSet(NaneChannel+"LH",OBJPROP_COLOR,SkyBlue);
     }
   if(NaneChannel=="ChannelHLClose")
     {
      if(ObjectFind(NaneChannel+"H")>0) ObjectDelete(NaneChannel+"H");
      ObjectCreate(NaneChannel+"H", OBJ_HLINE, 0, Time[0],Close[0]);
      ObjectSet(NaneChannel+"H",OBJPROP_COLOR,HotPink);
      if(ObjectFind(NaneChannel+"L")>0) ObjectDelete(NaneChannel+"L");
      ObjectCreate(NaneChannel+"L", OBJ_HLINE, 0, Time[0],Close[0]);
      ObjectSet(NaneChannel+"L",OBJPROP_COLOR,RoyalBlue);
      if(ObjectFind(NaneChannel+"M")>0) ObjectDelete(NaneChannel+"M");
      ObjectCreate(NaneChannel+"M", OBJ_HLINE, 0, Time[0],Close[0]);
      ObjectSet(NaneChannel+"M",OBJPROP_COLOR,Gold);
      if(ObjectFind(NaneChannel+"SH")>0) ObjectDelete(NaneChannel+"SH");
      ObjectCreate(NaneChannel+"SH",OBJ_RECTANGLE,0 ,0,0,0,0);
      ObjectSet(NaneChannel+"SH",OBJPROP_COLOR,HotPink);
      if(ObjectFind(NaneChannel+"LH")>0) ObjectDelete(NaneChannel+"LH");
      ObjectCreate(NaneChannel+"LH",OBJ_RECTANGLE,0 ,0,0,0,0);
      ObjectSet(NaneChannel+"LH",OBJPROP_COLOR,RoyalBlue);
     }
   if((NaneChannel=="FChannel")||(NaneChannel=="ChannelHLClose"))
     {
      res[0]=ObjectSet(NaneChannel+"H",OBJPROP_PRICE1,Upper);
      res[1]=ObjectSet(NaneChannel+"L",OBJPROP_PRICE1,Down);
      if(Average>0)
        {
         res[2]=ObjectSet(NaneChannel+"M",OBJPROP_PRICE1,Average);
        }
      else { res[2]=true; }
      res[3]=ObjectSet(NaneChannel+"SH",OBJPROP_TIME1,CurTime());
      res[4]=ObjectSet(NaneChannel+"SH",OBJPROP_PRICE1,SubUp);
      res[5]=ObjectSet(NaneChannel+"SH",OBJPROP_TIME2,CurTime()-(5760*Period()));
      res[6]=ObjectSet(NaneChannel+"SH",OBJPROP_PRICE2,Upper);
      res[7]=ObjectSet(NaneChannel+"LH",OBJPROP_TIME1,CurTime());
      res[8]=ObjectSet(NaneChannel+"LH",OBJPROP_PRICE1,Down);
      res[9]=ObjectSet(NaneChannel+"LH",OBJPROP_TIME2,CurTime()-(5760*Period()));
      res[10]=ObjectSet(NaneChannel+"LH",OBJPROP_PRICE2,SubDn);
      ObjectsRedraw();
     }
   if(res[0]&&res[1]&&res[2]&&res[3]&&res[4]&&res[5]&&res[6]&&res[7]&&res[8]&&res[9]&&res[10])
      return(true);else return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int PerformanceOpenBuy(string Toll,double SizeOfLot,int Accuracy,int FixingOfLoss,
int FixingOfProfit,string Note,int UniqueNumber,bool UseSound=false,string NameOfSound="")
  {
   double OpenPrice=0,SL=0,TP=0;int ticket=0,index=0,err=0,attempt=0;datetime InitialTime=CurTime();
   while(ticket<=0)
     {
      while(!IsTradeAllowed()) Sleep(1000);
      RefreshRates();
      OpenPrice=NormalizeDouble(Ask,Digits);
      SL=OpenPrice - FixingOfLoss   * Point;
      TP=OpenPrice + FixingOfProfit * Point;
      ticket=OrderSend(Toll,OP_BUY,SizeOfLot,OpenPrice,Accuracy,SL,TP,Note,UniqueNumber,0,Gold);
      if(ticket>0)
        {
         if(!IsTesting())
           {
            if((UseSound)&&(CheckSoundFileName(NameOfSound)=="")) PlaySound(NameOfSound);
           }
         index=StringFind(Note," ", 0);
         WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Îòêðûòà ïîçèöèÿ Buy òèêåò "
         +ticket+" âíóòðåííèé ¹ "+StringSubstr(Note,0,index)+" ïî öåíå: "+DoubleToStr(OpenPrice,Digits));
         Sleep(5000);
         return(ticket);
        }
      else
        {
         err=GetLastError();attempt++;
         WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü îòêðûòü îðäåð Buy, ïðè÷èíà: "
         +ErrorDescription(err));
         Print(TimeToStr(CurTime(),TIME_SECONDS)+" InitialTime: "+TimeToStr(InitialTime,TIME_SECONDS)
         +" Íå óäàëîñü îòêðûòü îðäåð Buy, ïðè÷èíà: "+ErrorDescription(err));
         if((err==135)&&(Accuracy<11)) Accuracy++;
         if(((CurTime()-InitialTime)>180)||(attempt==10)) break;
         Sleep(1000);
        }
     }
   return(-1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int PerformanceOpenSell(string Toll,double SizeOfLot,int Accuracy,int FixingOfLoss,
int FixingOfProfit,string Note,int UniqueNumber,bool UseSound=false,string NameOfSound="")
  {
   double OpenPrice=0,SL=0,TP=0;int ticket=0,index=0,err=0,attempt=0;datetime InitialTime=CurTime();
   while(ticket<=0)
     {
      while(!IsTradeAllowed()) Sleep(1000);
      RefreshRates();
      OpenPrice=NormalizeDouble(Bid,Digits);
      SL=OpenPrice + StopLoss   * Point;
      TP=OpenPrice - TakeProfit * Point;
      ticket=OrderSend(Toll,OP_SELL,SizeOfLot,OpenPrice,Accuracy,SL,TP,Note,UniqueNumber,0,DeepSkyBlue);
      if(ticket>0)
        {
         if(!IsTesting())
           {
            if((UseSound)&&(CheckSoundFileName(NameOfSound)=="")) PlaySound(NameOfSound);
           }
         index=StringFind(Note," ", 0);
         WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Îòêðûòà ïîçèöèÿ Sell òèêåò "
         +ticket+" âíóòðåííèé ¹ "+StringSubstr(Note,0,index)+" ïî öåíå: "+DoubleToStr(OpenPrice,Digits));
         Sleep(5000);
         return(ticket);
        }
      else
        {
         err=GetLastError();attempt++;
         WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü îòêðûòü îðäåð Sell, ïðè÷èíà: "
         +ErrorDescription(err));
         Print(TimeToStr(CurTime(),TIME_SECONDS)+" InitialTime: "+TimeToStr(InitialTime,TIME_SECONDS)
         +" Íå óäàëîñü îòêðûòü îðäåð Sell, ïðè÷èíà: "+ErrorDescription(err));
         if((err==135)&&(Accuracy<11)) Accuracy++;
         if(((CurTime()-InitialTime)>180)||(attempt==10)) break;
         Sleep(1000);
        }
     }
   return(-1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int PerformanceOpenBuyStop(string Toll,double SizeOfLot,double OpenPrice,int Accuracy,int FixingOfLoss,
int FixingOfProfit,string Note,int UniqueNumber,bool UseSound=false,string NameOfSound="")
  {
   double SL=0,TP=0;int ticket=0,index=0,err=0,attempt=0;datetime InitialTime=CurTime();
   while(ticket<=0)
     {
      while(!IsTradeAllowed()) Sleep(1000);
      RefreshRates();
      OpenPrice=NormalizeDouble(OpenPrice,Digits);
      SL=OpenPrice - FixingOfLoss   * Point;
      TP=OpenPrice + FixingOfProfit * Point;
      ticket=OrderSend(Toll,OP_BUYSTOP,SizeOfLot,OpenPrice,Accuracy,SL,TP,Note,UniqueNumber,0,Orange);
      if(ticket>0)
        {
         if(!IsTesting())
           {
            if((UseSound)&&(CheckSoundFileName(NameOfSound)=="")) PlaySound(NameOfSound);
           }
         index=StringFind(Note," ", 0);
         WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Âûñòàâëåí îðäåð BuyStop òèêåò "
         +ticket+" âíóòðåííèé ¹ "+StringSubstr(Note,0,index)+" íà îòìåòêó: "+DoubleToStr(OpenPrice,Digits));
         Sleep(5000);
         return(ticket);
        }
      else
        {
         err=GetLastError();attempt++;
         WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûñòàâèòü îðäåð BuyStop, ïðè÷èíà: "
         +ErrorDescription(err));
         Print(TimeToStr(CurTime(),TIME_SECONDS)+" InitialTime: "+TimeToStr(InitialTime,TIME_SECONDS)
         +"Íå óäàëîñü âûñòàâèòü îðäåð BuyStop, ïðè÷èíà: "+ErrorDescription(err));
         if((err==135)&&(Accuracy<11)) Accuracy++;
         if(((CurTime()-InitialTime)>180)||(attempt==10)) break;
         Sleep(1000);
        }
     }
   return(-1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int PerformanceOpenSellStop(string Toll,double SizeOfLot,double OpenPrice,int Accuracy,int FixingOfLoss,
int FixingOfProfit,string Note,int UniqueNumber,bool UseSound=false,string NameOfSound="")
  {
   double SL=0,TP=0;int ticket=0,index=0,err=0,attempt=0;datetime InitialTime=CurTime();
   while(ticket<=0)
     {
      while(!IsTradeAllowed()) Sleep(1000);
      RefreshRates();
      OpenPrice=NormalizeDouble(OpenPrice,Digits);
      SL=OpenPrice + StopLoss   * Point;
      TP=OpenPrice - TakeProfit * Point;
      ticket=OrderSend(Toll,OP_SELLSTOP,SizeOfLot,OpenPrice,Accuracy,SL,TP,Note,UniqueNumber,0,Blue);
      if(ticket>0)
        {
         if(!IsTesting())
           {
            if((UseSound)&&(CheckSoundFileName(NameOfSound)=="")) PlaySound(NameOfSound);
           }
         index=StringFind(Note," ", 0);
         WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Âûñòàâëåí îðäåð SellStop òèêåò "
         +ticket+" âíóòðåííèé ¹ "+StringSubstr(Note,0,index)+" íà îòìåòêó: "+DoubleToStr(OpenPrice,Digits));
         Sleep(5000);
         return(ticket);
        }
      else
        {
         err=GetLastError();attempt++;
         WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûñòàâèòü îðäåð SellStop, ïðè÷èíà: "
         +ErrorDescription(err));
         Print(TimeToStr(CurTime(),TIME_SECONDS)+" InitialTime: "+TimeToStr(InitialTime,TIME_SECONDS)
         +"Íå óäàëîñü âûñòàâèòü îðäåð SellStop, ïðè÷èíà: "+ErrorDescription(err));
         if((err==135)&&(Accuracy<11)) Accuracy++;
         if(((CurTime()-InitialTime)>180)||(attempt==10)) break;
         Sleep(1000);
        }
     }
   return(-1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAllPositions(string NameOfToll,int UniqueMagic,int ModeClosing)
  {
   bool WorkWarrant=false,PostWarrant=false,result=false;
   int attempt,cnt,index=0,NumberOfTry=2,PauseAfterError=1;
   double TimeProfit;
   datetime InitTime=CurTime();
//----
   if(ModeClosing==0) {WorkWarrant=true;PostWarrant=true;}
   if(ModeClosing==1) {WorkWarrant=true;PostWarrant=false;}
   if(ModeClosing==2) {WorkWarrant=false;PostWarrant=true;}
   CountOperations++;
   WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Òîðãîâàÿ îïåðàöèÿ ¹"+CountOperations);
   while(OrdersTotal()>0)
     {
      for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
        {
         result=false;
         TimeProfit=0;
         if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if ((OrderSymbol()==NameOfToll)&&(OrderMagicNumber()==UniqueMagic))
              {
               for(attempt=0;attempt<NumberOfTry;attempt++)
                 {
                  RefreshRates();
                  while(!IsTradeAllowed()) Sleep(2000);
                  if((OrderType()==0)&&WorkWarrant)
                    {
                     TimeProfit=OrderProfit();
                     result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5,Yellow);
                     if (result)
                       {
                        index=StringFind(OrderComment()," ", 0);
                        WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Çàêðûòà ïîçèöèÿ Buy òèêåò "+OrderTicket()
                        +" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)+" ïî öåíå: "
                        +DoubleToStr(OrderClosePrice(),Digits));
                        CollectorBuy=CollectorBuy+TimeProfit;
                        Sleep(2000);
                        break;
                       }
                     else
                       {
                        index=StringFind(OrderComment()," ", 0);
                        WriteLineInFile(FileNameOfReport,GetCurRusTime()
                        +" Îðäåð Buy òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)
                        +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1);
                        Alert(" Îðäåð Buy òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)
                        +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1);
                        if(ModeClosing==1) {PostWarrant=true;}
                        Sleep(1000*PauseAfterError);
                       }
                    }
                  if((OrderType()==1)&&WorkWarrant)
                    {
                     TimeProfit=OrderProfit();
                     result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),5,Blue );
                     if (result)
                       {
                        index=StringFind(OrderComment()," ", 0);
                        WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Çàêðûòà ïîçèöèÿ Sell òèêåò "+OrderTicket()
                        +" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)+" ïî öåíå: "
                        +DoubleToStr(OrderClosePrice(),Digits));
                        CollectorSell=CollectorSell+TimeProfit;
                        Sleep(2000);
                        break;
                       }
                     else
                       {
                        index=StringFind(OrderComment()," ", 0);
                        WriteLineInFile(FileNameOfReport,GetCurRusTime()
                        +" Îðäåð Sell òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)
                        +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1);
                        Alert(" Îðäåð Sell òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)
                        +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1);
                        if(ModeClosing==1) {PostWarrant=true;}
                        Sleep(1000*PauseAfterError);
                       }
                    }
                  if((OrderType()==2)&&PostWarrant)
                    {
                     result=OrderDelete(OrderTicket());
                     if (result)
                       {
                        index=StringFind(OrderComment()," ", 0);
                        WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Óäàë¸í îðäåð BuyLimit òèêåò "+OrderTicket()
                        +" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)+" ñ îòìåòêè: "
                        +DoubleToStr(OrderOpenPrice(),Digits));
                        Sleep(2000);
                        break;
                       }
                     else
                       {
                        index=StringFind(OrderComment()," ", 0);
                        WriteLineInFile(FileNameOfReport,GetCurRusTime()
                        +" Îðäåð BuyLimit òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)
                        +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1);
                        Alert(" Îðäåð BuyLimit òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)
                        +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1);
                        if(ModeClosing==1) {PostWarrant=true;}
                        Sleep(1000*PauseAfterError);
                       }
                    }
                  if((OrderType()==3)&&PostWarrant)
                    {
                     result=OrderDelete(OrderTicket());
                     if (result)
                       {
                        index=StringFind(OrderComment()," ", 0);
                        WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Óäàë¸í îðäåð SellLimit òèêåò "+OrderTicket()
                        +" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)+" ñ îòìåòêè: "
                        +DoubleToStr(OrderOpenPrice(),Digits));
                        Sleep(2000);
                        break;
                       }
                     else
                       {
                        index=StringFind(OrderComment()," ", 0);
                        WriteLineInFile(FileNameOfReport,GetCurRusTime()
                        +" Îðäåð SellLimit òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)
                        +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1);
                        Alert(" Îðäåð SellLimit òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)
                        +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1);
                        if(ModeClosing==1) {PostWarrant=true;}
                        Sleep(1000*PauseAfterError);
                       }
                    }
                  if((OrderType()==4)&&PostWarrant)
                    {
                     result=OrderDelete(OrderTicket());
                     if (result)
                       {
                        index=StringFind(OrderComment()," ", 0);
                        WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Óäàë¸í îðäåð BuyStop òèêåò "+OrderTicket()
                        +" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)+" ñ îòìåòêè: "
                        +DoubleToStr(OrderOpenPrice(),Digits));
                        Sleep(2000);
                        break;
                       }
                     else
                       {
                        index=StringFind(OrderComment()," ", 0);
                        WriteLineInFile(FileNameOfReport,GetCurRusTime()
                        +" Îðäåð BuyStop òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)
                        +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1);
                        Alert(" Îðäåð BuyStop òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)
                        +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1);
                        if(ModeClosing==1) {PostWarrant=true;}
                        Sleep(1000*PauseAfterError);
                       }
                    }
                  if((OrderType()==5)&&PostWarrant)
                    {
                     result=OrderDelete(OrderTicket());
                     if (result)
                       {
                        index=StringFind(OrderComment()," ", 0);
                        WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Óäàë¸í îðäåð SellStop òèêåò "+OrderTicket()
                        +" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)+" ñ îòìåòêè: "
                        +DoubleToStr(OrderOpenPrice(),Digits));
                        Sleep(2000);
                        break;
                       }
                     else
                       {
                        index=StringFind(OrderComment()," ", 0);
                        WriteLineInFile(FileNameOfReport,GetCurRusTime()
                        +" Îðäåð SellStop òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)
                        +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1);
                        Alert(" Îðäåð SellStop òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)
                        +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1);
                        if(ModeClosing==1) {PostWarrant=true;}
                        Sleep(1000*PauseAfterError);
                       }
                    }
                 }
               if((ModeClosing==1)&&(CalculationOfWarrants(NameOfToll,UniqueMagic,6,0)==0))
               {PostWarrant=true;}
               if((ModeClosing==2)&&(CalculationOfWarrants(NameOfToll,UniqueMagic,7,0)==0))
               {WorkWarrant=true;cnt=OrdersTotal();}
              }
           }
         else
           {
            switch(OrderType())
              {//0
               case 0:
                  WriteLineInFile(FileNameOfReport,GetCurRusTime()
                  +"Íå óäàëîñü âûáðàòü îðäåð Buy ¹ "+OrderTicket()
                  +" Ïðè÷èíà: "+ErrorDescription(GetLastError()));
                  Alert("Íå óäàëîñü âûáðàòü îðäåð Buy ¹ ",OrderTicket(),
                  " Ïðè÷èíà: ",ErrorDescription(GetLastError()));
                  break;
               case 1:
                  WriteLineInFile(FileNameOfReport,GetCurRusTime()
                  +"Íå óäàëîñü âûáðàòü îðäåð Sell ¹ "+OrderTicket()
                  +" Ïðè÷èíà: "+ErrorDescription(GetLastError()));
                  Alert("Íå óäàëîñü âûáðàòü îðäåð Sell ¹ ",OrderTicket(),
                  " Ïðè÷èíà: ",ErrorDescription(GetLastError()));
                  break;
               case 2:
                  WriteLineInFile(FileNameOfReport,GetCurRusTime()
                  +"Íå óäàëîñü âûáðàòü îðäåð BuyLimit ¹ "+OrderTicket()
                  +" Ïðè÷èíà: "+ErrorDescription(GetLastError()));
                  Alert("Íå óäàëîñü âûáðàòü îðäåð BuyLimit ¹ ",OrderTicket(),
                  " Ïðè÷èíà: ",ErrorDescription(GetLastError()));
                  break;
               case 3:
                  WriteLineInFile(FileNameOfReport,GetCurRusTime()
                  +"Íå óäàëîñü âûáðàòü îðäåð SellLimit ¹ "+OrderTicket()
                  +" Ïðè÷èíà: "+ErrorDescription(GetLastError()));
                  Alert("Íå óäàëîñü âûáðàòü îðäåð SellLimit ¹ ",OrderTicket(),
                  " Ïðè÷èíà: ",ErrorDescription(GetLastError()));
                  break;
               case 4:
                  WriteLineInFile(FileNameOfReport,GetCurRusTime()
                  +"Íå óäàëîñü âûáðàòü îðäåð BuyStop ¹ "+OrderTicket()
                  +" Ïðè÷èíà: "+ErrorDescription(GetLastError()));
                  Alert("Íå óäàëîñü âûáðàòü îðäåð BuyStop ¹ ",OrderTicket(),
                  " Ïðè÷èíà: ",ErrorDescription(GetLastError()));
                  break;
               case 5:
                  WriteLineInFile(FileNameOfReport,GetCurRusTime()
                  +"Íå óäàëîñü âûáðàòü îðäåð SellStop ¹ "+OrderTicket()
                  +" Ïðè÷èíà: "+ErrorDescription(GetLastError()));
                  Alert("Íå óäàëîñü âûáðàòü îðäåð SellStop ¹ ",OrderTicket(),
                  " Ïðè÷èíà: ",ErrorDescription(GetLastError()));
                  break;
              }//0
           }
        }
     }
   TimeOfClosing=CurTime()-InitTime;
   WriteLineInFile(FileNameOfReport,"");
   return;
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:

Larry William percent range indicator
Fractals


Custom Indicators Used:
user32
Registr

Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It Closes Orders by itself

Other Features:

It issuies visual alerts to the screen
It plays sound alerts

Uses files from the file system
It writes information to file

BackTest : USDJPY on H1

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

BackTest : USDCHF on H1

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

BackTest : EURUSD on H1

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

BackTest : USDCAD on H1

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

BackTest : EURUSD on H1

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

BackTest : GBPUSD on H1

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

BackTest : EURUSD on H1

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

BackTest : EURUSD on H1

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

BackTest : EURUSD on H1

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

Request Backtest for Graal-003(2)


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

Pair: Period: