e-closebytime

Author: Kim Igor V. aka KimIV
Orders Execution
It Closes Orders by itself Checks for the total of open orders
Miscellaneous
It plays sound alertsIt issuies visual alerts to the screenIt sends emails
0 Views
0 Downloads
0 Favorites
e-closebytime
//+----------------------------------------------------------------------------+
//|                                                         e-CloseByTime.mq4  |
//|                                                                            |
//|  Èäåÿ è ÒÇ       : stamen [http://kimiv.ru/forum/viewtopic.php?p=4830#4830]|
//|  Ïðîãðàììèðîâàíèå: Kim Igor V. aka KimIV [http://www.kimiv.ru]             |
//|                                                                            |
//|  21.04.2013  Çàêðûòèå ïîçèöèé, óäàëåíèå îðäåðîâ, çàêðûòèå òåðìèíàëà        |
//|              â çàäàííîå âðåìÿ.                                             |
//+----------------------------------------------------------------------------+
#property copyright "Kim Igor V. aka KimIV"
#property link      "http://www.kimiv.ru"

//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -----------------------------------------+
extern string _P_Expert="---------- Ïàðàìåòðû ñîâåòíèêà";
datetime DateTime;//=D'2015.12.29 00:57';  // Äàòà è âðåìÿ çàêðûòèÿ
datetime DateTimeDelete;
extern int    HourClose=3;      // Òîðãîâàÿ îïåðàöèÿ:
extern int    MinuteClose=20;      // Òîðãîâàÿ îïåðàöèÿ:
extern int    HourDelete=3;      // Òîðãîâàÿ îïåðàöèÿ:
extern int    MinuteDelete=15;      // Òîðãîâàÿ îïåðàöèÿ:
extern int    NumberAccount = 0;       // Íîìåð òîðãîâîãî ñ÷¸òà
                                       //   0 - ðàáîòà ñîâåòíèêà ðàçðåøåíà íà ëþáîì ñ÷¸òå
extern string symbol        = "";      // Òîðãîâûé èíñòðóìåíò
                                       //   ""  - ëþáîé
//   "0" - òåêóùèé
extern int    Operation     = -1;      // Òîðãîâàÿ îïåðàöèÿ:
                                       //   -1 - ëþáàÿ
//    0 - OP_BUY
//    1 - OP_SELL
extern int    MagicNumber   = -1;      // MagicNumber
extern bool   SetVLine      = True;    // Óñòàíîâèòü âåðòèêàëüíóþ ëèíèþ
extern bool   SetVLineDelete= True;    // Óñòàíîâèòü âåðòèêàëüíóþ ëèíèþ
extern color  colorLine     = Red;     // Öâåò ëèíèè
extern color  colorLineDelete=Blue;     // Öâåò ëèíèè
extern int    styleLine=0;       // Ñòèëü ëèíèè
extern int    styleLineDelete=0;       // Ñòèëü ëèíèè
                                       //  0 - STYLE_SOLID - Ñïëîøíàÿ ëèíèÿ
//  1 - STYLE_DASH - Øòðèõîâàÿ ëèíèÿ
//  2 - STYLE_DOT - Ïóíêòèðíàÿ ëèíèÿ
//  3 - STYLE_DASHDOT - Øòðèõ-ïóíêòèðíàÿ ëèíèÿ
//  4 - STYLE_DASHDOTDOT - Øòðèõ-ïóíêòèðíàÿ ëèíèÿ ñ äâîéíûìè òî÷êàìè
extern int    widthLine=2;       // Øèðèíà ëèíèè
extern int    widthLineDelete=2;       // Øèðèíà ëèíèè
extern bool   DeleteOrders=True;   // Óäàëÿòü îðäåðà
extern bool   CloseTerminal=False;   // Çàêðûâàòü òåðìèíàë

extern string _P_Performance="---------- Ïàðàìåòðû èñïîëíåíèÿ";
extern bool   ShowComment  = True;          // Ïîêàçûâàòü êîììåíòàðèé
extern bool   UseSound     = True;          // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern string SoundSuccess = "expert.wav";  // Çâóê óñïåõà
extern string SoundError   = "timeout.wav"; // Çâóê îøèáêè
extern int    Slippage=5;            // Ïðîñêàëüçûâàíèå öåíû â ïóíêòàõ
extern int    NumberOfTry=5;             // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê ïðè îøèáêàõ

//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+
bool   gbDisabled   = False;           // Ôëàã áëîêèðîâêè ñîâåòíèêà
bool   gbNoInit     = False;           // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè
color  clCloseBuy   = Blue;            // Öâåò çíà÷êà çàêðûòèÿ ïîêóïêè
color  clCloseSell  = Red;             // Öâåò çíà÷êà çàêðûòèÿ ïðîäàæè
color  clDelete     = Yellow;          // Öâåò çíà÷êà óäàëåíèÿ îðäåðîâ

//------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -----------------------------------------+
#include <stdlib.mqh>                  // Ñòàíäàðòíàÿ áèáëèîòåêà
#import "user32.dll"
int GetParent(int hWnd);
int PostMessageA(int hWnd,int Msg,int wParam,int lParam);
#import
#define WM_CLOSE 0x0010
//+----------------------------------------------------------------------------+
//|                                                                            |
//|  ÏÐÅÄÎÏÐÅÄÅ˨ÍÍÛÅ ÔÓÍÊÖÈÈ                                                  |
//|                                                                            |
//+----------------------------------------------------------------------------+
//|  expert initialization function                                            |
//+----------------------------------------------------------------------------+
void init()
  {
   int day=TimeDay(TimeCurrent());
   int mon=TimeMonth(TimeCurrent());
   int year=TimeYear(TimeCurrent());
   DateTime=StrToTime(year+"."+mon+"."+day+" "+HourClose+":"+MinuteClose);
   DateTimeDelete=StrToTime(year+"."+mon+"."+day+" "+HourDelete+":"+MinuteDelete);

   gbNoInit=False;
   if(!IsTradeAllowed())
     {
      Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
              "Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü");
      gbNoInit=True; return;
     }
   if(!IsLibrariesAllowed())
     {
      Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
              "Ðàçðåøèòü èìïîðò èç âíåøíèõ ýêñïåðòîâ");
      gbNoInit=True; return;
     }
   if(Operation<-1 || Operation>1)
     {
      Message("Íåäîïóñòèìîå çíà÷åíèå âíåøíåãî ïàðàìåòðà Operation");
      gbNoInit=True; return;
     }
   if(symbol!="0" && symbol!="")
     {
      if(MarketInfo(StringUpper(symbol),MODE_BID)==0)
        {
         Message("Â îáçîðå ðûíêà îòñóòñòâóåò ñèìâîë "+symbol);
         gbNoInit=True; return;
        }
     }
   if(!IsTesting())
     {
      if(IsExpertEnabled()) Message("Ñîâåòíèê áóäåò çàïóùåí ñëåäóþùèì òèêîì");
      else Message("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\"");
     }
   start();
  }
//+----------------------------------------------------------------------------+
//|  expert deinitialization function                                          |
//+----------------------------------------------------------------------------+
void deinit()
  {
   if(!IsTesting()) Comment("");
   ObjectDelete(WindowExpertName());
  }
//+----------------------------------------------------------------------------+
//|  expert start function                                                     |
//+----------------------------------------------------------------------------+
void start()
  {
   if(gbDisabled)
     {
      Message("Êðèòè÷åñêàÿ îøèáêà! Ñîâåòíèê ÎÑÒÀÍÎÂËÅÍ!"); return;
     }
   if(gbNoInit)
     {
      Message("Íå óäàëîñü èíèöèàëèçèðîâàòü ñîâåòíèê!"); return;
     }
   if(!IsTesting())
     {
      if(NumberAccount>0 && NumberAccount!=AccountNumber())
        {
         Comment("Ðàáîòà ñîâåòíèêà íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!");
         return;
        }
      else Comment("");
     }

   if(ShowComment)
     {
      Comment("Current=",TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES),"  "
              ,"CloseOrder=",TimeToStr(DateTime,TIME_DATE|TIME_MINUTES),"  "
              ,"DeleteOrder=",TimeToStr(DateTimeDelete,TIME_DATE|TIME_MINUTES),"  "
              ,"\n"
              ,"NumberAccount=",IIFs(NumberAccount>0,DoubleToStr(NumberAccount,0),"All"),"  "
              ,"Symbol=",IIFs(symbol=="","All",IIFs(symbol=="0",Symbol(),StringUpper(symbol))),"  "
              ,"Operation=",IIFs(Operation<0,"All",GetNameOP(Operation)),"  "
              ,"MagicNumber=",IIFs(MagicNumber<0,"All",DoubleToStr(MagicNumber,0)),"  "
              ,"\n"
              ,IIFs(DeleteOrders,"DeleteOrders  ","")
              ,IIFs(CloseTerminal,"CloseTerminal  ","")
              ,"Slippage=",DoubleToStr(Slippage,0)," ï.  "
              ,"NumberOfTry=",DoubleToStr(NumberOfTry,0),"  "
              );
     }
   else Comment("");

   if(SetVLine)
     {
      SetVLine(colorLine,"OrderClose",DateTime,styleLine,widthLine);

     }
   if(SetVLineDelete)
     {
      SetVLine(colorLineDelete,"OrderDelete",DateTimeDelete,styleLineDelete,widthLineDelete);

     }

   if(TimeCurrent()>=DateTime)
     {
      ClosePosFirstProfit(symbol,Operation,MagicNumber);
      ClosePositions(symbol,Operation,MagicNumber);
      if(DeleteOrders) DeleteOrders(symbol,Operation,MagicNumber);
      if(CloseTerminal) CloseTerminal();
     }
   if(TimeCurrent()>=DateTimeDelete)
     {
      if(DeleteOrders) DeleteOrders(symbol,Operation,MagicNumber);
      if(CloseTerminal) CloseTerminal();
     }
  }
//+----------------------------------------------------------------------------+
//|                                                                            |
//|  ÏÎËÜÇÎÂÀÒÅËÜÑÊÈÅ ÔÓÍÊÖÈÈ                                                  |
//|                                                                            |
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ  : 26.03.2013                                                      |
//|  Îïèñàíèå: Çàêðûòèå îäíîé ïðåäâàðèòåëüíî âûáðàííîé ïîçèöèè                 |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    ll - ðàçìåð ëîòà.                                                       |
//+----------------------------------------------------------------------------+
void ClosePosBySelect(double ll=0)
  {
   bool   fc;
   color  clClose;
   double pa,pb,pp;
   int    dg=MarketInfo(OrderSymbol(),MODE_DIGITS),err,it;

   if(OrderType()==OP_BUY || OrderType()==OP_SELL)
     {
      for(it=1; it<=NumberOfTry; it++)
        {
         if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))
           {
            Message("ClosePosBySelect(): Îñòàíîâêà ðàáîòû ôóíêöèè");
            break;
           }
         while(!IsTradeAllowed()) Sleep(5000);
         RefreshRates();
         pa=MarketInfo(OrderSymbol(), MODE_ASK);
         pb=MarketInfo(OrderSymbol(), MODE_BID);
         if(OrderType()==OP_BUY)
           {
            pp=pb; clClose=clCloseBuy;
              } else {
            pp=pa; clClose=clCloseSell;
           }
         if(ll<=0) ll=OrderLots();
         pp=NormalizeDouble(pp, dg);
         fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
         if(fc)
           {
            if(UseSound) PlaySound(SoundSuccess); break;
              } else {
            err=GetLastError();
            if(UseSound) PlaySound(SoundError);
            if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
            Message("Error("+err+") Close "+GetNameOP(OrderType())+" "
                    +ErrorDescription(err)+", try "+it+"\n"
                    +OrderTicket()+"  Ask="+DoubleToStr(pa,dg)
                    +"  Bid="+DoubleToStr(pb,dg)+"  pp="+DoubleToStr(pp,dg)+"\n"
                    +"sy="+OrderSymbol()+"  ll="+DoubleToStr(ll,2)
                    +"  sl="+DoubleToStr(OrderStopLoss(),dg)
                    +"  tp="+DoubleToStr(OrderTakeProfit(),dg)+"  mn="+OrderMagicNumber());
            Sleep(1000*5);
           }
        }
     }
   else Message("Íåêîððåêòíàÿ òîðãîâàÿ îïåðàöèÿ. Close "+GetNameOP(OrderType()));
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Çàêðûòèå ïîçèöèé ïî ðûíî÷íîé öåíå ñíà÷àëà ïðèáûëüíûõ           |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
void ClosePosFirstProfit(string sy="",int op=-1,int mn=-1)
  {
   int i,k=OrdersTotal();
   if(sy=="0") sy=Symbol();

// Ñíà÷àëà çàêðûâàåì ïðèáûëüíûå ïîçèöèè
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(mn<0 || OrderMagicNumber()==mn)
                 {
                  if(OrderProfit()+OrderCommission()+OrderSwap()>0) ClosePosBySelect();
                 }
              }
           }
        }
     }
// Ïîòîì âñå îñòàëüíûå
   k=OrdersTotal();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
              }
           }
        }
     }
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.03.2013                                                     |
//|  Îïèñàíèå : Çàêðûòèå ïîçèöèé ïî ðûíî÷íîé öåíå                              |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//|    ll - ðàçìåð ëîòà.                                                       |
//+----------------------------------------------------------------------------+
void ClosePositions(string sy="",int op=-1,int mn=-1,double ll=0)
  {
   int i,k=OrdersTotal();

   if(sy=="0") sy=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(mn<0 || OrderMagicNumber()==mn)
                 {
                  if(ll<=0) ll=OrderLots();
                  if(ll>OrderLots())
                    {
                     ClosePosBySelect(OrderLots());
                     ll-=OrderLots();
                    }
                  else ClosePosBySelect(ll);
                 }
              }
           }
        }
     }
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 18.04.2013                                                     |
//|  Îïèñàíèå : Çàêðûâàåò òîðãîâûé òåðìèíàë.                                   |
//+----------------------------------------------------------------------------+
void CloseTerminal()
  {
   Print("Ñðàáîòàëà ôóíêöèÿ CloseTerminal()");
   int hwnd=WindowHandle(Symbol(),Period());
   int hwnd_parent=0;

   while(hwnd==0)
     {
      hwnd=WindowHandle(Symbol(),Period());
      if(IsStopped()) break;
      Sleep(5);
     }
   while(!IsStopped())
     {
      hwnd=GetParent(hwnd);
      if(hwnd==0) break;
      hwnd_parent=hwnd;
     }
   if(hwnd_parent!=0) PostMessageA(hwnd_parent,WM_CLOSE,0,0);
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 08.03.2013                                                     |
//|  Îïèñàíèå : Óäàëåíèå îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà.              |
//+----------------------------------------------------------------------------+
void DeleteOrderBySelect()
  {
   bool fd;
   int  err,it;

   for(it=1; it<=NumberOfTry; it++)
     {
      if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
      while(!IsTradeAllowed()) Sleep(5000);
      fd=OrderDelete(OrderTicket(),clDelete);
      if(fd)
        {
         if(UseSound) PlaySound(SoundSuccess); break;
           } else {
         err=GetLastError();
         if(UseSound) PlaySound(SoundError);
         Message("Error("+err+") delete order "+GetNameOP(OrderType())
                 +": "+ErrorDescription(err)+", try "+it);
         Sleep(1000*5);
        }
     }
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 08.03.2013                                                     |
//|  Îïèñàíèå : Óäàëåíèå îðäåðîâ                                               |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáîé îðäåð)                    |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="",int op=-1,int mn=-1)
  {
   int  i,k=OrdersTotal(),ot;

   if(sy=="0") sy=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         ot=OrderType();
         if(ot>1 && ot<6)
           {
            if((OrderSymbol()==sy || sy=="") && (op<0 || ot==op))
              {
               if(mn<0 || OrderMagicNumber()==mn) DeleteOrderBySelect();
              }
           }
        }
     }
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.09.2005                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè                      |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op)
  {
   switch(op)
     {
      case OP_BUY      : return("Buy");
      case OP_SELL     : return("Sell");
      case OP_BUYLIMIT : return("BuyLimit");
      case OP_SELLLIMIT: return("SellLimit");
      case OP_BUYSTOP  : return("BuyStop");
      case OP_SELLSTOP : return("SellStop");
      default          : return("Unknown Operation");
     }
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ.      |
//+----------------------------------------------------------------------------+
string IIFs(bool condition,string ifTrue,string ifFalse)
  {
   if(condition) return(ifTrue); else return(ifFalse);
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 08.03.2013                                                     |
//|  Îïèñàíèå : Âûâîä òåêñòîâîãî ñîîáùåíèÿ.                                    |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    ms - òåêñò ñîîáùåíèÿ                                                    |
//|    nv - ôëàãè íàïðàâëåíèé âûâîäà ñîîáùåíèÿ:   (0-âûêë, 1-âêë)              |
//|           Alert, Comment, Print, SendMail, SendNotification                |
//|    am - ôëàã âñåõ ïîâòîðÿþùèõñÿ ñîîáùåíèé                                  |
//+----------------------------------------------------------------------------+
void Message(string ms,string nv="01100",bool am=False)
  {
   static string prevMessage="";
   string as[];
   int    i,k;

   if(StrToInteger(StringSubstr(nv,1,1))==1) Comment(ms);
   if((StringLen(ms)>0) && (am || prevMessage!=ms))
     {
      if(StrToInteger(StringSubstr(nv,0,1))==1)
        {
         k=StrSplit(ms,as,"\n");
         for(i=0; i<k; i++) Alert(as[i]);
        }
      if(StrToInteger(StringSubstr(nv,2,1))==1)
        {
         k=StrSplit(ms,as,"\n");
         for(i=0; i<k; i++) Print(as[i]);
        }
      if(StrToInteger(StringSubstr(nv, 3, 1))==1) SendMail(WindowExpertName(), ms);
      if(StrToInteger(StringSubstr(nv, 4, 1))==1) SendNotification(ms);
      prevMessage=ms;
     }
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 02.07.2008                                                     |
//|  Îïèñàíèå : Óñòàíîâêà îáúåêòà OBJ_VLINE âåðòèêàëüíàÿ ëèíèÿ                 |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    cl - öâåò ëèíèè                                                         |
//|    nm - íàèìåíîâàíèå               ("" - âðåìÿ îòêðûòèÿ òåêóùåãî áàðà)     |
//|    t1 - âðåìÿ                      (0  - âðåìÿ îòêðûòèÿ òåêóùåãî áàðà)     |
//|    st - ñòèëü ëèíèè                (0  - ïðîñòàÿ ëèíèÿ)                    |
//|    wd - øèðèíà ëèíèè               (1  - ïî óìîë÷àíèþ)                     |
//+----------------------------------------------------------------------------+
void SetVLine(color cl,string nm="",datetime t1=0,int st=0,int wd=1)
  {
   if(nm=="") nm=DoubleToStr(Time[0],0);
   if(t1<=0) t1=Time[0];
   if(ObjectFind(nm)<0) ObjectCreate(nm,OBJ_VLINE,0,0,0);
   ObjectSet(nm,OBJPROP_TIME1,t1);
   ObjectSet(nm,OBJPROP_COLOR,cl);
   ObjectSet(nm,OBJPROP_STYLE,st);
   ObjectSet(nm,OBJPROP_WIDTH,wd);
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.09.2005                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò ñòðîêó â ÂÅÐÕÍÅÌ ðåãèñòðå                           |
//+----------------------------------------------------------------------------+
string StringUpper(string s)
  {
   int c,i,k=StringLen(s),n;
   for(i=0; i<k; i++)
     {
      n=0;
      c=StringGetChar(s, i);
      if(c>96 && c<123) n=c-32;    // a-z -> A-Z
      if(c>223 && c<256) n=c-32;   // à-ÿ -> À-ß
      if(c==184) n=168;            //  ¸  ->  ¨
      if(n>0) s=StringSetChar(s,i,n);
     }
   return(s);
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 20.01.2012                                                     |
//|  Îïèñàíèå : Ðàçáèåíèå ñòðîêè íà ìàññèâ ýëåìåíòîâ                           |
//+----------------------------------------------------------------------------+
//|  Âîçâðàò:                                                                  |
//|    Êîëè÷åñòâî ýëåìåíòîâ â ìàññèâå                                          |
//|  Ïàðàìåòðû:                                                                |
//|    st - ñòðîêà ñ ðàçäåëèòåëÿìè                                             |
//|    as - ñòðîêîâûé ìàññèâ                                                   |
//|    de - ðàçäåëèòåëü                                                        |
//+----------------------------------------------------------------------------+
int StrSplit(string st,string &as[],string de=",")
  {
   int    i=0,np;
   string stp;

   ArrayResize(as,0);
   while(StringLen(st)>0)
     {
      np=StringFind(st,de);
      if(np<0)
        {
         stp=st;
         st="";
           } else {
         if(np==0) stp=""; else stp=StringSubstr(st,0,np);
         st=StringSubstr(st,np+1);
        }
      i++;
      ArrayResize(as,i);
      as[i-1]=stp;
     }
   return(ArraySize(as));
  }
//+----------------------------------------------------------------------------+

Comments