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

display info all pairs@amazing_owner.mq4

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

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

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

О программе

Этот индикатор MetaTrader 4 отображает рыночную информацию по множеству валютных пар на графике. Он создаёт текстовые метки с данными о ценах, спредах и других параметрах для каждой пары из заданного списка валют.

Основная функция — формирование информационной панели на чарте, где для каждой комбинации валют отображаются: цена бид, дневное движение цены, средний дневной диапазон (ADR), спред, стоимость тика и значения свопов. Данные получаются через функцию MarketInfo для каждой пары.

Индикатор поддерживает настройку внешнего вида текста (шрифт, размер, цвет, расположение на графике) и периодичности обновления информации. Пользователь может выбрать, какие именно параметры отображать для каждой пары.

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

НастройкаОписание
Currencies Список валют-аббревиатур через запятую, из которых формируются пары для отображения информации на графике.
Suffix Дополнительный суффикс, добавляемый к именам символов (например, суффикс брокера), при формировании пар для отображения.
FontName Название шрифта, используемого для отображения текстовых меток на графике.
FontSize Размер шрифта текстовых меток на графике в пунктах.
FontColorPrimary Основной цвет текста для информационных меток на графике.
FontColorSecondary Дополнительный цвет текста, чередующийся с основным для визуального разделения строк.
Window Номер подокна графика, в котором создаются текстовые метки (0 — основное окно).
Corner Угол графика, к которому привязывается расположение текстовых меток (0 — левый верхний, 1 — правый верхний, 2 — левый нижний, 3 — правый нижний).
HorizPos Горизонтальное расстояние от указанного угла графика до текстовых меток в пикселях.
VertPos Вертикальное расстояние от указанного угла графика до первой текстовой метки в пикселях.
VertSpacing Вертикальный интервал между текстовыми метками в пикселях.
UniqueID Уникальный идентификатор, используемый для генерации имени индикатора и различения объектов на графике.
ADRdays Количество дней для расчёта среднего дневного диапазона (ADR) каждой валютной пары.
RefreshEveryXMins Интервал обновления данных в минутах. При значении 0 обновление происходит один раз при запуске. Значения ограничиваются диапазоном от 1 до 240 минут.
FullSymbolIDs Переключатель отображения полных идентификаторов символов (например, EURUSD) вместо сокращённых обозначений (например, EU).
ShowBidPrice Переключатель отображения текущей цены бид для каждой валютной пары.
ShowDailyMove Переключатель отображения дневного изменения цены (в пунктах и в процентах) для каждой пары.
ShowADR Переключатель отображения среднего дневного диапазона (ADR) и связанных с ним значений для каждой пары.
ShowSpread Переключатель отображения текущего спреда и его процентного соотношения к дневному диапазону для каждой пары.
ShowTickval Переключатель отображения стоимости одного тика для каждой валютной пары.
ShowSwapval Переключатель отображения значений свопа для длинных и коротких позиций по каждой паре.
Получить полный код

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

#property indicator_chart_window

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

extern string   Currencies            = "AUD,CAD,CHF,EUR,GBP,JPY,NZD,USD";
extern string   Suffix                = "";
extern string   FontName              = "Courier New";
extern int      FontSize              = 11;
extern color    FontColorPrimary      = White;
extern color    FontColorSecondary    = DarkGray;
extern int      Window                = 0;
extern int      Corner                = 3;
extern int      HorizPos              = 20;
extern int      VertPos               = 4;
extern int      VertSpacing           = 14;
extern string   UniqueID              = "0";
extern int      ADRdays               = 30;
extern int      RefreshEveryXMins     = 0;
extern bool     FullSymbolIDs         = false;
extern bool     ShowBidPrice          = true;
extern bool     ShowDailyMove         = false;
extern bool     ShowADR               = true;
extern bool     ShowSpread            = true;
extern bool     ShowTickval           = true;
extern bool     ShowSwapval           = true;

double   spr, pnt, tickval, bidp, askp, lswap, sswap;
int      dig, tf, ccC;
string   IndiName, ccy, sym, C[40];
datetime prev_time;

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(IndiName)) == IndiName)  
      ObjectDelete(objname);
    else
      k++;
  }    
  return(0);
}

void plot_obj()   {

  color colr = FontColorSecondary;      
  int c = 0;
  int xp = HorizPos;
  for (int i=0; i<40; i++)  {
    if (StringLen(C[i]) < 1)   continue;
    for (int j=0; j<40; j++)  {
      if (i==j)   continue;
      if (StringLen(C[j]) < 1)   continue;
      ccy     = C[i] + C[j] + Suffix;
      pnt     = MarketInfo(ccy,MODE_POINT);
      dig     = MarketInfo(ccy,MODE_DIGITS);
      spr     = MarketInfo(ccy,MODE_SPREAD);
      tickval = MarketInfo(ccy,MODE_TICKVALUE);
      lswap   = MarketInfo(ccy,MODE_SWAPLONG);
      sswap   = MarketInfo(ccy,MODE_SWAPSHORT);
      if (dig == 3 || dig == 5) {
        pnt     *= 10;
        spr     /= 10;
        tickval *= 10;
      }
      if (spr == 0)  continue;
      c++;

      double sum = 0;
      double cnt = 0;
      for (int k=1; k<=ADRdays; k++)   {
        datetime dt = iTime(ccy,PERIOD_D1,k);
        if (TimeDayOfWeek(dt) == 0)   continue;
        sum += (iHigh(ccy,PERIOD_D1,k) - iLow(ccy,PERIOD_D1,k))/pnt;
        cnt += 1;
      }
      double tdy    = (iHigh(ccy,PERIOD_D1,0) - iLow(ccy,PERIOD_D1,0))/pnt;
      double adr    = DivZero(sum,cnt);
      double pctadr = DivZero(100*tdy*cnt,sum);
      double pctspr = DivZero(100*spr*cnt,sum);
      string ast0 = " ", ast1 = " ", ast2 = " ", ast3 = " ";
      if (ccy == sym)    ast0 = "*";
      if (pctadr >= 75)  ast1 = "*";
      if (spr < 3)       ast2 = "*";
      if (pctspr < 2.5)  ast3 = "*";
      if (dig>3) string msk = "':'R2.4"; else msk = "':'R4.2";
      bidp    = MarketInfo(ccy,MODE_BID);
      askp    = MarketInfo(ccy,MODE_ASK);
      double dmove = (bidp-iOpen(ccy,PERIOD_D1,0))/pnt;
      double pmove = 100*(bidp-iOpen(ccy,PERIOD_D1,0))/iOpen(ccy,PERIOD_D1,0);

      string tstr1 = ast0 + ReduceCcy(ccy);
      if (FullSymbolIDs)    tstr1 = ast0 + ccy;
      if (ShowBidPrice)     tstr1 = tstr1 + NumberToStr(bidp,msk);
      if (ShowDailyMove)    tstr1 = tstr1 + NumberToStr(dmove,"R+4.1") + NumberToStr(pmove,"R+3.1'%'");
      if (ShowADR)          tstr1 = tstr1 + NumberToStr(tdy,"R5") + NumberToStr(adr,"':'R3") + NumberToStr(-pctadr,"R(4%") + ast1;
      if (ShowSpread)       tstr1 = tstr1 + NumberToStr(spr,"3.1") + ast2 + NumberToStr(-pctspr,"R(~2.1%") + ast3;
      if (ShowTickval)      tstr1 = tstr1 + NumberToStr(tickval,"R4.2");
      if (ShowSwapval)      tstr1 = tstr1 + NumberToStr(lswap,"R+3.2") + NumberToStr(sswap,"R+3.2");
      int yp = VertPos+c*VertSpacing;
      string objname = IndiName + NumberToStr(-i-1,"T-6") + NumberToStr(-j-1,"T-6") ;
      ObjectCreate(objname,OBJ_LABEL,Window,0,0);
      ObjectSet(objname,OBJPROP_CORNER,Corner);
      ObjectSet(objname,OBJPROP_XDISTANCE,xp);
      ObjectSet(objname,OBJPROP_YDISTANCE,yp);
      if (colr == FontColorPrimary)
        colr = FontColorSecondary;
      else
        colr = FontColorPrimary;

      ObjectSetText(objname,tstr1,FontSize,FontName,colr);
  } } 
  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(0);
}  

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("E

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

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

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

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

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

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

Стоимость полного кода
2 946,20₽ ≈ $36.01