← К каталогу
Исходный код · ID 959

Daily LinesBoxes

dailylinesboxes.mq4
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Daily LinesBoxes — это индикатор для MetaTrader 4, который рисует на графике графические объекты на основе ежедневных данных. Для каждого дня в заданном диапазоне он создаёт прямоугольники, горизонтальные и вертикальные линии, линии цен закрытия и открытия, текстовые метки и стрелки, настраиваемые через параметр свойств.

Индикатор перебирает дни за период LookbackDays, вычисляет ценовые уровни (максимум, минимум, объёмные экстремумы, диапазон и др.) в зависимости от режима, заданного строкой Properties, и размещает объекты с учётом фильтрации по дням недели и совместимости с таймфреймами.

Объекты обновляются автоматически с заданным интервалом RefreshEveryXMins, а также при смене таймфрейма. Параметр CandlesMustExist позволяет ограничить отрисовку только теми днями, на которых существуют свечи на целевом таймфрейме.

Настройки программы

НастройкаОписание
LookbackDays Количество дней назад — Количество дней назад, в пределах которых выполняется расчёт и отрисовка объектов.
StartHours Час начала — Час начала интервала для расчёта уровней (в часах от начала дня).
EndHours Час окончания — Час окончания интервала для расчёта уровней (в часах от начала дня).
ExtendHours Расширенный час — Час расширенного интервала, используемый для вертикальных линий и горизонтальных линий.
UniqueID Уникальный идентификатор — Уникальный идентификатор префикса для имён графических объектов, создаваемых индикатором.
BoxColor Цвет прямоугольников — Цёт прямоугольников, отображаемых на графике.
LineColor Цвет линий — Цвет горизонтальных, вертикальных и ценовых линий.
Properties Свойства — Строка свойств, управляющая типом отображаемых объектов, стилем линий, шириной и выбором ценового уровня (например, FTH2).
TextProperties Свойства текста — Строка параметров для отображения текстовых меток с информацией о высоте прямоугольника.
SymbolProperties Свойства символов — Строка параметров для отображения стрелочных символов (Wingdings) на графике.
DaysOfWeek Дни недели — Строка дней недели, на которых отображаются объекты (например, Mon,Tue,Wed,Thu,Fri).
Visibility Видимость — Строка таймфреймов, на которых видны создаваемые объекты (например, M1,M5,M15,M30,H1,H4).
TimeFrame Таймфрейм — Таймфрейм, на котором выполняется расчёт ценовых уровней (если пусто — используется текущий таймфрейм графика).
CandlesMustExist Свечи должны существовать — Переключатель: если включён, объекты рисуются только при наличии соответствующих свечей на целевом таймфрейме.
ClearancePips Профиль в пипсах — Смещение уровней прямоугольников в пипсах (прибавляется к верхней границе и вычитается из нижней).
RefreshEveryXMins Обновление каждые X минут — Интервал автоматического обновления объектов в минутах (значение ограничивается до ближайшего допустимого шага).
Получить полный код

Поиск по коду файла

#property indicator_chart_window

#import "kernel32.dll"
  void OutputDebugStringA(string msg);
#import

extern int      LookbackDays        = 20;
extern double   StartHours          = -1;
extern double   EndHours            = 6;
extern double   ExtendHours         = 23;
extern string   UniqueID            = "DLB#1";
extern color    BoxColor            = C'0,64,0';
extern color    LineColor           = Green;
extern string   Properties          = "FTH2";
extern string   TextProperties      = "Arial,9,White,4,7";
extern string   SymbolProperties    = "2,White,108,10";
extern string   DaysOfWeek          = "Mon,Tue,Wed,Thu,Fri";
extern string   Visibility          = "M1,M5,M15,M30,H1,H4";
extern string   TimeFrame           = "M5";
extern bool     CandlesMustExist    = false;
extern double   ClearancePips       = 0;
extern int      RefreshEveryXMins   = 1;

int tscale;

datetime prev_time;
string   sym, arr[5];
double   pnt;
int      dig;

int init()  {
      // код доступен только после оплаты
   }

int deinit()  {

  del_obj();
  return(0);
}

int start()  {
      // код доступен только после оплаты
   }

void del_obj()  {

  int k=0;
  while (k<ObjectsTotal())   {
    string objname = ObjectName(k);
    if (StringSubstr(objname,0,StringLen(UniqueID)) == UniqueID)  
      ObjectDelete(objname);
    else
      k++;
  }    
  return(0);
}

void plot_obj()  {

  if (TimeFrame == "")
    tscale = Period();
  else  
    tscale = StrToTF(TimeFrame);
  sym = Symbol();
  pnt = MarketInfo(sym,MODE_POINT);
  dig = MarketInfo(sym,MODE_DIGITS);
  if (dig == 3 || dig == 5) {
    pnt *= 10;
  }  

  DaysOfWeek = StringUpper(DaysOfWeek) + ",";
  Visibility = StringUpper(Visibility) + ",";
  string test_vis[9] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
  int vis = 0, inc = 1;
  for (int i=0; i<9; i++)  {
    if (StringFind(Visibility,test_vis[i]+",") >= 0)    vis+=inc;
    inc*=2;
  }  

  datetime tc  = TimeCurrent();
  for (i=0; i<LookbackDays; i++)   {
    int shifted = tc-i*86400;      
    if (shifted < Time[Bars-1])    break;
    if (StringFind(DaysOfWeek,StringUpper(DateToStr(shifted,"w"))+",") < 0)  continue;
    datetime dt1  = StrToTime(DateToStr(shifted,"Y.M.D")) + 3600 * StartHours;
    datetime dt2  = StrToTime(DateToStr(shifted,"Y.M.D")) + 3600 * EndHours;
    datetime dt3  = StrToTime(DateToStr(shifted,"Y.M.D")) + 3600 * ExtendHours;

    int exist1 = iBarShift(NULL,tscale,dt1,true);

    int exist2 = iBarShift(NULL,tscale,dt2,true);

    int exist3 = iBarShift(NULL,tscale,dt3,true);

    double   hi = 0, lo = 999999; 
    double   hivol = 0, lovol = 999999, vol = 0;
    double   hirng = 0, lorng = 999999, rng = 0;
    double   hivtr = 0, lovtr = 999999, vtr = 0;
    double   hivdr = 0, lovdr = 999999, vdr = 0;
    int      bar1 = iBarShift(NULL,tscale,dt1,false);
    int      bar2 = iBarShift(NULL,tscale,dt2,false);
    for (int j=bar1; j>bar2; j--)  {
      hi = MathMax(hi,iHigh(NULL,tscale,j));
      lo = MathMin(lo,iLow(NULL,tscale,j));
      double range    = iHigh(NULL,tscale,j) - iLow(NULL,tscale,j);
      double vtrtmp   = range * iVolume(NULL,tscale,j);
      double vdrtmp   = DivZero(iVolume(NULL,tscale,j), range);
      if (range > rng)    { rng = range;    hirng = iHigh(NULL,tscale,j);    lorng = iLow(NULL,tscale,j);  }  
      if (vtrtmp > vtr)   { vtr = vtrtmp;   hivtr = iHigh(NULL,tscale,j);    lovtr = iLow(NULL,tscale,j);  }  
      if (vdrtmp > vdr)   { vdr = vdrtmp;   hivdr = iHigh(NULL,tscale,j);    lovdr = iLow(NULL,tscale,j);  }
      if (iVolume(NULL,tscale,j) > vol)  {  vol = iVolume(NULL,tscale,j);    hivol = iHigh(NULL,tscale,j);    lovol = iLow(NULL,tscale,j);  } 
    }
    string prop = StringUpper(Properties); 
    if (StringFind(prop,"E",0) >= 0)  { hi = hivol;   lo = lovol;  }  else
    if (StringFind(prop,"R",0) >= 0)  { hi = hirng;   lo = lorng;  }  else
    if (StringFind(prop,"M",0) >= 0)  { hi = hivtr;   lo = lovtr;  }  else
    if (StringFind(prop,"D",0) >= 0)  { hi = hivdr;   lo = lovdr;  }  
    hi += ClearancePips * pnt;  
    lo -= ClearancePips * pnt;
    int width = StrToNumber(Properties);  
    int style = STYLE_SOLID;             
    if (StringFind(prop,"-..",0) >= 0)   style = STYLE_DASHDOTDOT;   else
    if (StringFind(prop,"-.",0) >= 0)    style = STYLE_DASHDOT;      else
    if (StringFind(prop,".",0) >= 0)     style = STYLE_DOT;          else
    if (StringFind(prop,"--",0) >= 0)    style = STYLE_DASH;

    if (StringFind(prop,"<",0) >= 0)     hi    = iOpen(NULL,tscale,bar1);
    if (StringFind(prop,">",0) >= 0)     lo    = iOpen(NULL,tscale,bar1);

    if (StringFind(prop,"F",0) >= 0  ||  StringFind(prop,"B",0) >= 0  ||  StringFind(prop,"T",0) >= 0)  {
      string objname = UniqueID+"-"+i+"-r";
      if (StringFind(prop,"T",0) >= 0)  {
        datetime dt4 = dt2;
        int exist4 = exist2;
      }  else  {
        dt4 = dt3;
        exist4 = exist3;
      }  
      if (!CandlesMustExist  ||  (exist1 >= 0 && exist4 >= 0))   {
        ObjectCreate(objname,OBJ_RECTANGLE,0,dt1,hi,dt4,lo);
        ObjectSet(objname,OBJPROP_COLOR,BoxColor);            
        ObjectSet(objname,OBJPROP_BACK,false);
        ObjectSet(objname,OBJPROP_TIMEFRAMES,vis);               
        if (StringFind(prop,"F",0) >= 0)    ObjectSet(objname,OBJPROP_BACK,true);
        if (StringFind(prop,"P",0) >= 0)    ObjectSetText(objname,DoubleToStr((hi-lo)/pnt,0));
    } }  

    if (StringFind(prop,"H",0) >= 0)  {
      if (!CandlesMustExist  ||  (exist1 >= 0 && exist3 >= 0))   {
        objname = UniqueID+"-"+i+"-hi";
        ObjectCreate(objname,OBJ_TREND,0,dt1,hi,dt3,hi); 
        ObjectSet(objname,OBJPROP_RAY,0);
        if (StringFind(prop,"X",0) >= 0)    ObjectSet(objname,OBJPROP_RAY,true); 
        ObjectSet(objname,OBJPROP_COLOR,LineColor);
        ObjectSet(objname,OBJPROP_WIDTH,width);
        ObjectSet(objname,OBJPROP_STYLE,style);
        ObjectSet(objname,OBJPROP_TIMEFRAMES,vis);
        objname = UniqueID+"-"+i+"-lo";
        ObjectCreate(objname,OBJ_TREND,0,dt1,lo,dt3,lo); 
        ObjectSet(objname,OBJPROP_RAY,0);
        if (StringFind(prop,"X",0) >= 0)    ObjectSet(objname,OBJPROP_RAY,true);  
        ObjectSet(objname,OBJPROP_COLOR,LineColor);
        ObjectSet(objname,OBJPROP_WIDTH,width);
        ObjectSet(objname,OBJPROP_STYLE,style);
        ObjectSet(objname,OBJPROP_TIMEFRAMES,vis);
    } } 

    if (StringFind(prop,"C",0) >= 0)  {
      if (!CandlesMustExist  ||  (exist1 >= 0 && exist3 >= 0))   {
        objname = UniqueID+"-"+i+"-cl";
        double price = iClose(NULL,tscale,bar1);
        ObjectCreate(objname,OBJ_TREND,0,dt1,price,dt3,price); 
        ObjectSet(objname,OBJPROP_RAY,0);
        if (StringFind(prop,"X",0) >= 0)    ObjectSet(objname,OBJPROP_RAY,true); 
        ObjectSet(objname,OBJPROP_COLOR,LineColor);
        ObjectSet(objname,OBJPROP_WIDTH,width);
        ObjectSet(objname,OBJPROP_STYLE,style);
        ObjectSet(objname,OBJPROP_TIMEFRAMES,vis);
    } } 

    if (StringFind(prop,"O",0) >= 0)  {
      if (!CandlesMustExist  ||  (exist1 >= 0 && exist3 >= 0))   {
        objname = UniqueID+"-"+i+"-op";
        price = iOpen(NULL,tscale,bar1);
        ObjectCreate(objname,OBJ_TREND,0,dt1,price,dt3,price); 
        ObjectSet(objname,OBJPROP_RAY,0);
        if (StringFind(prop,"X",0) >= 0)    ObjectSet(objname,OBJPROP_RAY,true); 
        ObjectSet(objname,OBJPROP_COLOR,LineColor);
        ObjectSet(objname,OBJPROP_WIDTH,width);
        ObjectSet(objname,OBJPROP_STYLE,style);
        ObjectSet(objname,OBJPROP_TIMEFRAMES,vis);
    } } 

    if (StringFind(prop,"V",0) >= 0)  { 
      if (!CandlesMustExist  ||  exist1 >= 0)   {
        objname = UniqueID+"-"+i+"-va";
        ObjectCreate(objname,OBJ_VLINE,0,dt1,0);
        ObjectSet(objname,OBJPROP_COLOR,LineColor);
        ObjectSet(objname,OBJPROP_WIDTH,width);
        ObjectSet(objname,OBJPROP_STYLE,style);
        ObjectSet(objname,OBJPROP_TIMEFRAMES,vis);
        if (StringFind(prop,"^",0) >= 0)    ObjectSet(objname,OBJPROP_BACK,true);
      }  
      if (StringFind(prop,"VV",0) >= 0)  {
        if (!CandlesMustExist  ||  exist3 >= 0)   {
          objname = UniqueID+"-"+i+"-vb";
          ObjectCreate(objname,OBJ_VLINE,0,dt3,0); 
          ObjectSet(objname,OBJPROP_COLOR,LineColor);
          ObjectSet(objname,OBJPROP_WIDTH,width);
          ObjectSet(objname,OBJPROP_STYLE,style);
          ObjectSet(objname,OBJPROP_TIMEFRAMES,vis);
          if (StringFind(prop,"^",0) >= 0)    ObjectSet(objname,OBJPROP_BACK,true);
    } } }

    if (TextProperties > "")    {
      StrToStringArray(TextProperties,arr);
      double prc = StrToNumber(arr[3]);
      prc = (hi+prc*pnt)*(prc>=0) + (lo+prc*pnt)*(prc<0);
      objname = UniqueID+"-"+i+"-t";
      ObjectCreate(objname,OBJ_TEXT,0,dt1,prc);
      ObjectSetText(objname,NumberToStr((hi-lo)/pnt,arr[4]),StrToInteger(arr[1]),arr[0],StrToColor(arr[2])); 
    }

    if (StringFind(prop,"W",0) >= 0 && SymbolProperties > "")  {
      if (!CandlesMustExist  ||  exist1 >= 0)   {
        int bar     = iBarShift(NULL,0,dt1,true); 
        double high = iHigh(NULL,0,bar); 
        double low  = iLow(NULL,0,bar); 
        StrToStringArray(SymbolProperties,arr);
        prc = StrToNumber(arr[3]);
        prc = (high+prc*pnt)*(prc>=0) + (low+prc*pnt)*(prc<0);
        objname = UniqueID+"-"+i+"-wa";
        ObjectCreate(objname,OBJ_ARROW,0,dt1,prc); 
        ObjectSet(objname,OBJPROP_ARROWCODE,StrToInteger(arr[2]));
        ObjectSet(objname,OBJPROP_COLOR,StrToColor(arr[1]));
        ObjectSet(objname,OBJPROP_WIDTH,StrToInteger(arr[0]));
        ObjectSet(objname,OBJPROP_TIMEFRAMES,vis);
      }
      if (StringFind(prop,"WW",0) >= 0 && SymbolProperties > "")  { 
        if (!CandlesMustExist  ||  exist3 >= 0)   {
          bar  = iBarShift(NULL,0,dt3,true); 
          high = iHigh(NULL,0,bar); 
          low  = iLow(NULL,0,bar); 
          prc  = StrToNumber(arr[3]);
          prc  = (high+prc*pnt)*(prc>=0) + (low+prc*pnt)*(prc<0);
          objname = UniqueID+"-"+i+"-wb";
          ObjectCreate(objname,OBJ_ARROW,0,dt3,prc); 
          ObjectSet(objname,OBJPROP_ARROWCODE,StrToInteger(arr[2]));
          ObjectSet(objname,OBJPROP_COLOR,StrToColor(arr[1]));
          ObjectSet(objname,OBJPROP_WIDTH,StrToInteger(arr[0]));
          ObjectSet(objname,OBJPROP_TIMEFRAMES,vis);
  } } } }
  return(0);
}

void log(string s1, string s2="", string s3="", string s4="", string s5="", string s6="", string s7="", string s8="")   {

   string out = StringTrimRight(StringConcatenate(WindowExpertName(), ".mq4 ", Symbol(), " ", s1, " ", s2, " ", s3, " ", s4, " ", s5, " ", s6, " ", s7, " ", s8));
   OutputDebugStringA(out);
}

int BarConvert(int bar, string FromTF, string ToTF, string ccy="")   {

  if (ccy == "")  ccy = Symbol();
  return(iBarShift(ccy,StrToTF(ToTF),iTime(ccy,StrToTF(FromTF),bar)));
}  

int StrToColor(string str)

{
  str = StringLower(str);
  if (str == "aliceblue")              return(0xFFF8F0);
  if (str == "antiquewhite")           return(0xD7EBFA);
  if (str == "aqua")                   return(0xFFFF00);
  if (str == "aquamarine")             return(0xD4FF7F);
  if (str == "beige")                  return(0xDCF5F5);
  if (str == "bisque")                 return(0xC4E4FF);
  if (str == "black")                  return(0x000000);
  if (str == "blanchedalmond")         return(0xCDEBFF);
  if (str == "blue")                   return(0xFF0000);
  if (str == "blueviolet")             return(0xE22B8A);
  if (str == "brown")                  return(0x2A2AA5);
  if (str == "burlywood")              return(0x87B8DE);
  if (str == "cadetblue")              return(0xA09E5F);
  if (str == "chartreuse")             return(0x00FF7F);
  if (str == "chocolate")              return(0x1E69D2);
  if (str == "coral")                  return(0x507FFF);
  if (str == "cornflowerblue")         return(0xED9564);
  if (str == "cornsilk")               return(0xDCF8FF);
  if (str == "crimson")                return(0x3C14DC);
  if (str == "darkblue")               return(0x8B0000);
  if (str == "darkgoldenrod")          return(0x0B86B8);
  if (str == "darkgray")               return(0xA9A9A9);
  if (str == "darkgreen")              return(0x006400);
  if (str == "darkkhaki")              return(0x6BB7BD);
  if (str == "darkolivegreen")         return(0x2F6B55);
  if (str == "darkorange")             return(0x008CFF);
  if (str == "darkorchid")             return(0xCC3299);
  if (str == "darksalmon")             return(0x7A96E9);
  if (str == "darkseagreen")           return(0x8BBC8F);
  if (str == "darkslateblue")          return(0x8B3D48);
  if (str == "darkslategray")          return(0x4F4F2F);
  if (str == "darkturquoise")          return(0xD1CE00);
  if (str == "darkviolet")             return(0xD30094);
  if (str == "deeppink")               return(0x9314FF);
  if (str == "deepskyblue")            return(0xFFBF00);
  if (str == "dimgray")                return(0x696969);
  if (str == "dodgerblue")             return(0xFF901E);
  if (str == "firebrick")              return(0x2222B2);
  if (str == "forestgreen")            return(0x228B22);
  if (str == "gainsboro")              return(0xDCDCDC);
  if (str == "gold")                   return(0x00D7FF);
  if (str == "goldenrod")              return(0x20A5DA);
  if (str == "gray")                   return(0x808080);
  if (str == "green")                  return(0x008000);
  if (str == "greenyellow")            return(0x2FFFAD);
  if (str == "honeydew")               return(0xF0FFF0);
  if (str == "hotpink")                return(0xB469FF);
  if (str == "indianred")              return(0x5C5CCD);
  if (str == "indigo")                 return(0x82004B);
  if (str == "ivory")                  return(0xF0FFFF);
  if (str == "khaki")                  return(0x8CE6F0);
  if (str == "lavender")               return(0xFAE6E6);
  if (str == "lavenderblush")          return(0xF5F0FF);
  if (str == "lawngreen")              return(0x00FC7C);
  if (str == "lemonchiffon")           return(0xCDFAFF);
  if (str == "lightblue")              return(0xE6D8AD);
  if (str == "lightcoral")             return(0x8080F0);
  if (str == "lightcyan")              return(0xFFFFE0);
  if (str == "lightgoldenrod")         return(0xD2FAFA);
  if (str == "lightgray")              return(0xD3D3D3);
  if (str == "lightgreen")             return(0x90EE90);
  if (str == "lightpink")              return(0xC1B6FF);
  if (str == "lightsalmon")            return(0x7AA0FF);
  if (str == "lightseagreen")          return(0xAAB220);
  if (str == "lightskyblue")           return(0xFACE87);
  if (str == "lightslategray")         return(0x998877);
  if (str == "lightsteelblue")         return(0xDEC4B0);
  if (str == "lightyellow")            return(0xE0FFFF);
  if (str == "lime")                   return(0x00FF00);
  if (str == "limegreen")              return(0x32CD32);
  if (str == "linen")                  return(0xE6F0FA);
  if (str == "magenta")                return(0xFF00FF);
  if (str == "maroon")                 return(0x000080);
  if (str == "mediumaquamarine")       return(0xAACD66);
  if (str == "mediumblue")             return(0xCD0000);
  if (str == "mediumorchid")           return(0xD355BA);
  if (str == "mediumpurple")           return(0xDB7093);
  if (str == "mediumseagreen")         return(0x71B33C);
  if (str == "mediumslateblue")        return(0xEE687B);
  if (str == "mediumspringgreen")      return(0x9AFA00);
  if (str == "mediumturquoise")        return(0xCCD148);
  if (str == "mediumvioletred")        return(0x8515C7);
  if (str == "midnightblue")           return(0x701919);
  if (str == "mintcream")              return(0xFAFFF5);
  if (str == "mistyrose")              return(0xE1E4FF);
  if (str == "moccasin")               return(0xB5E4FF);
  if (str == "navajowhite")            return(0xADDEFF);
  if (str == "navy")                   return(0x800000);
  if (str == "none")                   return(C'0x00,0x00,0x00');
  if (str == "oldlace")                return(0xE6F5FD);
  if (str == "olive")                  return(0x008080);
  if (str == "olivedrab")              return(0x238E6B);
  if (str == "orange")                 return(0x00A5FF);
  if (str == "orangered")              return(0x0045FF);
  if (str == "orchid")                 return(0xD670DA);
  if (str == "palegoldenrod")          return(0xAAE8EE);
  if (str == "palegreen")              return(0x98FB98);
  if (str == "paleturquoise")          return(0xEEEEAF);
  if (str == "palevioletred")          return(0x9370DB);
  if (str == "papayawhip")             return(0xD5EFFF);
  if (str == "peachpuff")              return(0xB9DAFF);
  if (str == "peru")                   return(0x3F85CD);
  if (str == "pink")                   return(0xCBC0FF);
  if (str == "plum")                   return(0xDDA0DD);
  if (str == "powderblue")             return(0xE6E0B0);
  if (str == "purple")                 return(0x800080);
  if (str == "red")                    return(0x0000FF);
  if (str == "rosybrown")              return(0x8F8FBC);
  if (str == "royalblue")              return(0xE16941);
  if (str == "saddlebrown")            return(0x13458B);
  if (str == "salmon")                 return(0x7280FA);
  if (str == "sandybrown")             return(0x60A4F4);
  if (str == "seagreen")               return(0x578B2E);
  if (str == "seashell")               return(0xEEF5FF);
  if (str == "sienna")                 return(0x2D52A0);
  if (str == "silver")                 return(0xC0C0C0);
  if (str == "skyblue")                return(0xEBCE87);
  if (str == "slateblue")              return(0xCD5A6A);
  if (str == "slategray")              return(0x908070);
  if (str == "snow")                   return(0xFAFAFF);
  if (str == "springgreen")            return(0x7FFF00);
  if (str == "steelblue")              return(0xB48246);
  if (str == "tan")                    return(0x8CB4D2);
  if (str == "teal")                   return(0x808000);
  if (str == "thistle")                return(0xD8BFD8);
  if (str == "tomato")                 return(0x4763FF);
  if (str == "turquoise")              return(0xD0E040);
  if (str == "violet")                 return(0xEE82EE);
  if (str == "wheat")                  return(0xB3DEF5);
  if (str == "white")                  return(0xFFFFFF);
  if (str == "whitesmoke")             return(0xF5F5F5);
  if (str == "yellow")                 return(0x00FFFF);
  if (str == "yellowgreen")            return(0x32CD9A);

  int t1 = StringFind(str,",",0);
  int t2 = StringFind(str,",",t1+1);
  if (t1>0 && t2>0) {
    int red   = StrToInteger(StringSubstr(str,0,t1));
    int green = StrToInteger(StringSubstr(str,t1+1,t2-1));
    int blue  = StrToInteger(StringSubstr(str,t2+1,StringLen(str)));
    return(blue*256*256+green*256+red);
  }  

  if (StringSubstr(str,0,2) == "0x")  {
    string cnvstr = "0123456789abcdef";
    string seq    = "234567";
    int    retval = 0;
    for(int i=0; i<6; i++)  {
      int pos = StrToInteger(StringSubstr(seq,i,1));
      int val = StringFind(cnvstr,StringSubstr(str,pos,1),0);
      if (val < 0)  return(val);
      retval = retval * 16 + val;
    }
    return(retval);
  }

  string cclr = "", tmp = "";
  red = 0;
  blue = 0;
  green = 0;
  if (StringFind("rgb",StringSubstr(str,0,1)) >= 0)  {
    for(i=0; i<StringLen(str); i++)  {
      tmp = StringSubstr(str,i,1);
      if (StringFind("rgb",tmp,0) >= 0)
        cclr = tmp;
      else {
        if (cclr == "b")  blue  = blue  * 10 + StrToInteger(tmp);
        if (cclr == "g")  green = green * 10 + StrToInteger(tmp);
        if (cclr == "r")  red   = red   * 10 + StrToInteger(tmp);
    } }  
    return(blue*256*256+green*256+red);
  }    

  return(0);
}  

bool StrToBool(string str)

{
  str = StringLower(StringSubstr(str,0,1));
  if (str == "t" || str == "y" || str == "1")   return(true);
  return(false);
}  

string BoolToStr(bool bval)

{
  if (bval)   return("true");
  return("false");
}  

int StrToTF(string str)

{
  str = StringUpper(str);
  if (str == "M1")   return(1);
  if (str == "M5")   return(5);
  if (str == "M15")  return(15);
  if (str == "M30")  return(30);
  if (str == "H1")   return(60);
  if (str == "H4")   return(240);
  if (str == "D1")   return(1440);
  if (str == "W1")   return(10080);
  if (str == "MN")   return(43200);
  return(0);
}  

string TFToStr(int tf)

{
  switch (tf)  {
    case     1 :  return("M1");
    case     5 :  return("M5");
    case    15 :  return("M15");
    case    30 :  return("M30");
    case    60 :  return("H1");
    case   240 :  return("H4");
    case  1440 :  return("D1");
    case 10080 :  return("W1");
    case 43200 :  return("MN");
  }  
  return("");
}  

string err_msg(int e)

{
  switch (e)   {
    case 0:     return("Error 0000:  No error returned.");
    case 1:     return("Error 0001:  No error returned, but the result is unknown.");
    case 2:     return("Error 0002:  Common error.");
    case 3:     return("Error 0003:  Invalid trade parameters.");
    case 4:     return("Error 0004:  Trade server is busy.");
    case 5:     return("Error 0005:  Old version of the client terminal.");
    case 6:     return("Error 0006:  No connection with trade server.");
    case 7:     return("Error 0007:  Not enough rights.");
    case 8:     return("Error 0008:  Too frequent requests.");
    case 9:     return("Error 0009:  Malfunctional trade operation.");
    case 64:    return("Error 0064:  Account disabled.");
    case 65:    return("Error 0065:  Invalid account.");
    case 128:   return("Error 0128:  Trade timeout.");
    case 129:   return("Error 0129:  Invalid price.");
    case 130:   return("Error 0130:  Invalid stops.");
    case 131:   return("Error 0131:  Invalid trade volume.");
    case 132:   return("Error 0132:  Market is closed.");
    case 133:   return("Error 0133:  Trade is disabled.");
    case 134:   return("Error 0134:  Not enough money.");
    case 135:   return("Error 0135:  Price changed.");
    case 136:   return("Error 0136:  Off quotes.");
    case 137:   return("Error 0137:  Broker is busy.");
    case 138:   return("Error 0138:  Requote.");
    case 139:   return("Error 0139:  Order is locked.");
    case 140:   return("Error 0140:  Long positions only allowed.");
    case 141:   return("Error 0141:  Too many requests.");
    case 145:   return("Error 0145:  Modification denied because order too close to market.");
    case 146:   return("Error 0146:  Trade context is busy.");
    case 147:   return("Error 0147:  Expirations are denied by broker.");
    case 148:   return("Error 0148:  The amount of open and pending orders has reached the limit set by the broker.");
    case 4000:  return("Error 4000:  No error.");
    case 4001:  return("Error 4001:  Wrong function pointer.");
    case 4002:  return("Error 4002:  Array index is out of range.");
    case 4003:  return("Error 4003:  No memory for function call stack.");
    case 4004:  return("Error 4004:  Recursive stack overflow.");
    case 4005:  return("Error 4005:  Not enough stack for parameter.");
    case 4006:  return("Error 4006:  No memory for parameter string.");
    case 4007:  return("Error 4007:  No memory for temp string.");
    case 4008:  return("Error 4008:  Not initialized string.");
    case 4009:  return("Error 4009:  Not initialized string in array.");
    case 4010:  return("Error 4010:  No memory for array string.");
    case 4011:  return("Error 4011:  Too long string.");
    case 4012:  return("Error 4012:  Remainder from zero divide.");
    case 4013:  return("Error 4013:  Zero divide.");
    case 4014:  return("Error 4014:  Unknown command.");
    case 4015:  return("Error 4015:  Wrong jump (never generated error).");
    case 4016:  return("Error 4016:  Not initialized array.");
    case 4017:  return("Error 4017:  DLL calls are not allowed.");
    case 4018:  return("Error 4018:  Cannot load library.");
    case 4019:  return("Error 4019:  Cannot call function.");
    case 4020:  return("Error 4020:  Expert function calls are not allowed.");
    case 4021:  return("Error 4021:  Not enough memory for temp string returned from function.");
    case 4022:  return("Error 4022:  System is busy (never generated error).");
    case 4050:  return("Error 4050:  Invalid function parameters count.");
    case 4051:  return("Error 4051:  Invalid function parameter value.");
    case 4052:  return("Error 4052:  String function internal error.");
    case 4053:  return("Error 4053:  Some array error.");
    case 4054:  return("Error 4054:  Incorrect series array using.");
    case 4055:  return("Error 4055:  Custom indicator error.");
    case 4056:  return("Error 4056:  Arrays are incompatible.");
    case 4057:  return("Error 4057:  Global variables processing error.");
    case 4058:  return("Error 4058:  Global variable not found.");
    case 4059:  return("Error 4059:  Function is not allowed in testing mode.");
    case 4060:  return("Error 4060:  Function is not confirmed.");
    case 4061:  return("Error 4061:  Send mail error.");
    case 4062:  return("Error 4062:  String parameter expected.");
    case 4063:  return("Error 4063:  Integer parameter expected.");
    case 4064:  return("Error 4064:  Double parameter expected.");
    case 4065:  return("Error 4065:  Array as parameter expected.");
    case 4066:  return("Error 4066:  Requested history data in updating state.");
    case 4067:  return("Error 4067:  Some error in trading function.");
    case 4099:  return("Error 4099:  End of file.");
    case 4100:  return("Error 4100:  Some file error.");
    case 4101:  return("Error 4101:  Wrong file name.");
    case 4102:  return("Error 4102:  Too many opened files.");
    case 4103:  return("Error 4103:  Cannot open file.");
    case 4104:  return("Error 4104:  Incompatible access to a file.");
    case 4105:  return("Error 4105:  No order selected.");
    case 4106:  return("Error 4106:  Unknown symbol.");
    case 4107:  return("Error 4107:  Invalid price.");
    case 4108:  return("Error 4108:  Invalid ticket.");
    case 4109:  return("Error 4109:  Trade is not allowed. Enable checkbox 'Allow live trading' in the expert properties.");
    case 4110:  return("Error 4110:  Longs are not allowed. Check the expert properties.");
    case 4111:  return("Error 4111:  Shorts are not allowed. Check the expert properties.");
    case 4200:  return("Error 4200:  Object exists already.");
    case 4201:  return("Error 4201:  Unknown object property.");
    case 4202:  return("Error 4202:  Object does not exist.");
    case 4203:  return("Error 4203:  Unknown object type.");
    case 4204:  return("Error 4204:  No object name.");
    case 4205:  return("Error 4205:  Object coordinates error.");
    case 4206:  return("Error 4206:  No specified subwindow.");
    case 4207:  return("Error 4207:  Some error in object function.");

    default:    return("Error " + e + ": ??? Unknown error.");
  }   
  return(0);   
}

string StringLeft(string str, int n=1)

{
  if (n > 0)  return(StringSubstr(str,0,n));
  if (n < 0)  return(StringSubstr(str,0,StringLen(str)+n));
  return("");
}

string StringRight(string str, int n=1)

{
  if (n > 0)  return(StringSubstr(str,StringLen(str)-n,n));
  if (n < 0)  return(StringSubstr(str,-n,StringLen(str)-n));
  return("");
}

string StringLeftPad(string str, int n=1, string str2=" ")

{
  return(StringRepeat(str2,n-StringLen(str)) + str);
}

string StringRightPad(string str, int n=1, string str2=" ")

{
  return(str + StringRepeat(str2,n-StringLen(str)));
}

string StringReverse(string str)

{
  string outstr = ""

Показано первые 50% кода (символов: 41060)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
4 106₽ ≈ $50.18