display info all pairs@amazing_owner.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.