FXI-CorrLines
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «fxi-corrlines.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
FXI-CorrLines — это пользовательский индикатор для MetaTrader 4, который рассчитывает и отображает аналитические линии корреляции между двумя валютными парами. Индикатор строит два графика в отдельном окне, отражающих ценовые изменения текущего символа и заданной корреляционной пары в соответствующие моменты времени.
Индикатор предоставляет визуальное оповещение: линия-разделитель между двумя значениями меняет цвет на предупреждающий, когда расстояние между линиями превышает заданный пользователем порог. На графике также отображается метка с текущим расстоянием между линиями в пунктах.
Поддерживаются различные типы ценовых данных для расчётов (Close, Open, High, Low) и настраиваемый таймфрейм анализа. Встроенная система авторизации проверяет регистрацию пользователя через внешние DLL-библиотеки и кэширует время входа для повторной валидации.
Настройки программы
| Настройка | Описание |
|---|---|
| Copyright | Авторские права — Текстовый параметр, содержащий строку авторства индикатора. |
| Indicator | Название индикатора — Текстовый параметр, содержащий название индикатора. |
| CorrPair | Корреляционная пара — Символ (валютная пара), используемый для расчёта корреляции с текущим символом графика. |
| UseTimeFrame | Таймфрейм анализа — Таймфрейм для анализа корреляции (M1, M5, M15, M30, H1, H4, D1, W1, MN1 и др.). |
| Mode | Режим расчёта — Режим расчёта: 0 — Close, 1 — Open, 2 — High, 3 — Low. |
| DistanceLineColor | Цвет линии расстояния — Цвет линии-разделителя при нормальном (не превышённом) расстоянии между двумя индикаторными линиями. |
| LabelColor | Цвет метки — Цвет текста метки расстояния, отображаемой на графике. |
| AlertColor | Цвет оповещения — Цвет линии-разделителя при превышении заданного расстояния между двумя индикаторными линиями. |
| DistanceForAlert | Расстояние для оповещения — Пороговое расстояние в пунктах, при превышении которого линия-разделитель меняет цвет на цвет оповещения. |
| DistanceLineWidth | Толщина линии расстояния — Толщина линии-разделителя на графике. |
Поиск по коду файла
/*
Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
Website:
E-mail : p******m*@gmail.com
*/
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Green
#import "FXI.dll"
string gGrab(string a0, string a1);
#import "corr_upd.dll"
string returnReg(string a0, string a1);
void runUpdater();
#import
extern string Copyright = "Copyright 2009 ForexImpact.com";
extern string Indicator = "FXI-CorrLines - 2 Currency Lines";
extern string CorrPair = "GBPUSD";
extern string UseTimeFrame = "D1";
extern int Mode = 0;
extern string modelbl = "0 - Close; 1 - Open; 2 - High; 3 - Low";
extern color DistanceLineColor = White;
extern color LabelColor = White;
extern color AlertColor = Red;
extern int DistanceForAlert = 20;
extern int DistanceLineWidth = 2;
int g_str2dbl_140 = 7;
double g_ibuf_144[];
double g_ibuf_148[];
int gi_unused_152 = 0;
double g_open_156;
double g_iopen_164;
double gd_172 = 0.0;
double gd_180 = 0.0;
bool gi_unused_188 = TRUE;
int gi_192;
int g_time_196 = -1;
int gi_200 = EMPTY;
double g_point_204;
int g_file_220;
bool gi_224 = FALSE;
double gda_unused_228[];
string gs_232;
double gd_240 = 1.3;
string StrToUpper(string as_0) {
int li_8;
for (int li_12 = 0; li_12 < StringLen(as_0); li_12++) {
li_8 = StringGetChar(as_0, li_12);
if (li_8 >= 'a' && li_8 <= 'z') as_0 = StringSetChar(as_0, li_12, li_8 - 32);
}
return (as_0);
}
int isPair(string a_symbol_0) {
double l_bid_8 = MarketInfo(a_symbol_0, MODE_BID);
double l_ask_16 = MarketInfo(a_symbol_0, MODE_ASK);
double l_point_24 = MarketInfo(a_symbol_0, MODE_POINT);
int l_digits_32 = MarketInfo(a_symbol_0, MODE_DIGITS);
int l_spread_36 = MarketInfo(a_symbol_0, MODE_SPREAD);
if (l_bid_8 <= 0.0 && l_ask_16 <= 0.0 && l_point_24 <= 0.0 && l_digits_32 <= 0 && l_spread_36 <= 0) return (0);
return (1);
}
int loginStart() {
int l_str2int_0;
bool li_4;
int li_8;
int li_16;
string ls_20;
double l_str2dbl_28;
g_file_220 = FileOpen("fxi_c.bin", FILE_CSV|FILE_READ);
if (g_file_220 < 1) li_4 = FALSE;
else {
l_str2int_0 = StrToInteger(FileReadString(g_file_220));
FileClose(g_file_220);
li_4 = TRUE;
}
if (TimeLocal() - l_str2int_0 >= 259200 || li_4 == FALSE) {
li_8 = doLogin();
switch (li_8) {
case 0:
Alert("The Correlation Code -- Logged In");
g_file_220 = FileOpen("fxi_c.bin", FILE_WRITE, 8);
if (g_file_220 < 1) {
Print("Cannot open password cache!");
return (0);
}
FileWrite(g_file_220, TimeLocal());
FileClose(g_file_220);
/*
li_16 = StringFind(gs_232, "-", 0);
if (li_16 == -1) return (0);
ls_20 = StringSubstr(gs_232, li_16 + 1);
l_str2dbl_28 = StrToDouble(ls_20);
Print("Global Version -- ", gd_240);
Print("Retrieved Version -- ", l_str2dbl_28);
if (gd_240 != l_str2dbl_28) dlVersions();
*/
break;
case 1:
Alert("Invalid key provided!! Please re-install the software with the correct key.");
gi_224 = TRUE;
break;
case 4:
Alert("Your account has been disabled! Please contact s*****t*@fximpact.com");
gi_224 = TRUE;
break;
case 5:
Alert("Server error!! Please make sure you are connected to the Internet and try again.");
gi_224 = TRUE;
break;
case 6:
Alert("No key found in your registry (bad install)! Please re-install the product.");
gi_224 = TRUE;
}
}
return (0);
}
int doLogin() {
/*
string ls_unused_0;
string ls_unused_8;
string ls_unused_16;
string ls_24 = returnReg("Software\\FXI\\Correlation", "key");
if (ls_24 == "") return (6);
string ls_32 = "key=" + ls_24;
string ls_40 = gGrab("", ls_32);
if (StringSubstr(ls_40, 0, 1) == "0") {
gs_232 = ls_40;
return (0);
}
if (StringSubstr(ls_40, 0, 1) == "1") return (1);
if (StringSubstr(ls_40, 0, 1) == "4") return (4);
return (5);
*/
return(0);
}
/*
void dlVersions() {
string ls_0 = "";
string ls_8 = gGrab(ls_0, "");
int l_file_16 = FileOpen("corr_update.txt", FILE_CSV|FILE_WRITE, ",");
if (l_file_16 < 1) Print("Can NOT load the versions.txt file! Not updating indicators...");
FileWrite(l_file_16, ls_8);
FileClose(l_file_16);
runUpdater();
}
*/
int init() {
// код доступен только после оплаты
}
loginStart();
if (gi_224) return (0);
IndicatorShortName("Correlation Lines -- " + Symbol() + " / " + CorrPair);
SetIndexBuffer(0, g_ibuf_144);
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(1, g_ibuf_148);
SetIndexStyle(1, DRAW_LINE);
if (!isPair(CorrPair)) Print("Invalid Pair! -- " + CorrPair);
setTimeFrame(UseTimeFrame);
if (g_str2dbl_140 < 1 || g_str2dbl_140 > 10) {
Alert("Timeframe must be between 1 and 10");
gi_unused_188 = FALSE;
return (0);
}
if (Period() == PERIOD_M5 && g_str2dbl_140 <= 1) {
Alert("Timeframe must be above 1 on a 5M chart -- Defaulting To \'2\'");
g_str2dbl_140 = 2;
}
if (Period() == PERIOD_M15 && g_str2dbl_140 <= 2) {
Alert("Timeframe must be above 2 on a 15M chart -- Defaulting To \'3\'");
g_str2dbl_140 = 3;
}
if (Period() == PERIOD_M30 && g_str2dbl_140 <= 3) {
Alert("Timeframe must be above 3 on a 30M chart -- Defaulting To \'4\'");
g_str2dbl_140 = 4;
}
if (Period() == PERIOD_H1 && g_str2dbl_140 <= 4) {
Alert("Timeframe must be above 4 on a 1H chart -- Defaulting To \'5\'");
g_str2dbl_140 = 5;
}
if (Period() == PERIOD_H4 && g_str2dbl_140 <= 5) {
Alert("Timeframe must be above 5 on a 4H chart -- Defaulting To \'6\'");
g_str2dbl_140 = 6;
}
if (Period() == PERIOD_D1 && g_str2dbl_140 <= 6) {
Alert("Timeframe must be above 6 on a Daily chart -- Defaulting To \'7\'");
g_str2dbl_140 = 7;
}
if (Period() == PERIOD_W1 && g_str2dbl_140 <= 7) {
Alert("Timeframe must be above 7 on a Weekly chart -- Defaulting To \'8\'");
g_str2dbl_140 = 8;
}
if (Period() == PERIOD_MN1 && g_str2dbl_140 <= 8) {
Alert("Timeframe must be above 8 on a Monthly chart -- Defaulting To \'9\'");
g_str2dbl_140 = 9;
}
if (g_str2dbl_140 == 1) gi_192 = 1;
if (g_str2dbl_140 == 2) gi_192 = 5;
if (g_str2dbl_140 == 3) gi_192 = 15;
if (g_str2dbl_140 == 4) gi_192 = 30;
if (g_str2dbl_140 == 5) gi_192 = 60;
if (g_str2dbl_140 == 6) gi_192 = 240;
if (g_str2dbl_140 == 7) gi_192 = 1440;
iПоказано первые 50% кода (символов: 9536)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.