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

GPS Forex Robot EURGBP

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

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

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

О программе

GPS Forex Robot EURGBP — это торговый советник для платформы MetaTrader 4, ориентированный на работу с валютной парой EURGBP. Программа написана на языке MQL4 и использует торговый API MetaTrader 4 для открытия и закрытия ордеров, управления позициями и контроля условий торговли.

Советник поддерживает управление размером лотов в ручном и автоматическом режимах (с учётом кредитного плеча и свободного маржинального баланса), фильтрацию по времени и дням недели на основе GMT-смещения, а также отправку email-уведомлений и звуковых сигналов при открытии и закрытии сделок. Встроена проверка доступности DLL-импортов и валидация торгового счёта.

Программа взаимодействует с внешним DLL-файлом для получения GMT-времени и аутентификации, отображает информацию об аккаунте, спреде и настройках в комментарии на графике, а также ведёт журнал операций при соответствующей активации настроек.

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

НастройкаОписание
GPS_Forex_Robot_EURGBP Идентификатор советника — Текстовый параметр-идентификатор торгового советника.
____Size_of_lots________ Настройки размера лота — Группа настроек размера лота.
UseMM Автоматическое управление лотами — Переключатель автоматического управления размером лота на основе свободного маржинального баланса счёта и кредитного плеча.
Lots Размер лота — Фиксированный размер лота для открытия ордеров при отключённом автоматическом управлении объёмом позиции.
LotsRiskReductor Коэффициент снижения риска лота — Коэффициент, используемый при расчёте размера лота в автоматическом режиме управления рисками для корректировки допустимого объёма позиции.
MaxLots Максимальный лот — Максимально допустимый размер лота, ограничивающий объём открытых позиций независимо от расчётов управления рисками.
____General_Options_____ Общие настройки — Группа общих настроек советника.
AutoGMTOffset Автоматическое GMT-смещение — Включает или отключает автоматическое определение GMT-смещения. При активном значении смещение вычисляется автоматически на основе текущего серверного времени.
GMTOffset GMT-смещение — Числовое значение GMT-смещения, используемое для определения торговых сессий и фильтрации по времени. Применяется вручную при отключённом автоматическом определении.
____Others______________ Дополнительные настройки — Группа дополнительных настроек советника.
ExpertComment Комментарий советника — Текстовый комментарий, который присваивается каждому открываемому ордеру для идентификации в истории торгов.
ColorBuy Цвет покупки — Цвет отображения ордеров и комментариев, связанных с покупкой (Buy), на графике.
ColorSell Цвет продажи — Цвет отображения ордеров и комментариев, связанных с продажей (Sell), на графике.
SendEmail Отправка email — Включает или отключает отправку email-уведомлений при открытии и закрытии торговых ордеров.
SoundAlert Звуковые оповещения — Включает или отключает звуковые уведомления при открытии и закрытии ордеров.
SoundFileAtOpen Звуковой файл при открытии — Путь или имя звукового файла, воспроизводимого при открытии торгового ордера.
SoundFileAtClose Звуковой файл при закрытии — Путь или имя звукового файла, воспроизводимого при закрытии торгового ордера.
WriteLog Запись журнала — Включает или отключает запись основных логов работы советника, включая информацию об ошибках торговых операций.
WriteDebugLog Журнал отладки — Включает расширенный журнал отладки с дополнительной информацией о работе советника в лог-файл.
Получить полный код

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

/*
   Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: 
   E-mail : p******m*@gmail.com
*/

#import "GPSForexRobotEURGBP.dll"

   int GetGMT();
#import

extern string GPS_Forex_Robot_EURGBP = " ";
/*
extern string ____Authentication________ = "---------------------------------------------";
extern string EMail = "";
extern string CBReceipt = "";
*/
extern string ____Size_of_lots________ = "---------------------------------------------";
extern bool UseMM = FALSE;
extern double Lots = 0.01;
extern double LotsRiskReductor = 10.0;
extern double MaxLots = 1000.0;
extern string ____General_Options_____ = "---------------------------------------------";
extern bool AutoGMTOffset = TRUE;
extern int GMTOffset = 1;
bool gi_160 = FALSE;
int gi_164 = 2;
bool gi_168 = TRUE;
double gd_172 = 34.0;
double gd_180 = 10.0;
int gi_188 = 7;
int gi_192 = 0;
bool gi_196 = FALSE;
bool gi_200 = TRUE;
bool gi_204 = FALSE;
bool gi_208 = TRUE;
bool gi_212 = FALSE;
int gi_216 = -6;
int gi_220 = 1;
int gi_224 = 20100109;
bool gi_228 = TRUE;
double gd_232 = 30.0;
double gd_240 = 11.0;
double gd_248 = 3.0;
int gi_256 = 20100129;
extern string ____Others______________ = "---------------------------------------------";
extern string ExpertComment = "GPS Forex Robot";
extern color ColorBuy = Blue;
extern color ColorSell = Red;
extern bool SendEmail = FALSE;
extern bool SoundAlert = FALSE;
extern string SoundFileAtOpen = "alert.wav";
extern string SoundFileAtClose = "alert.wav";
extern bool WriteLog = FALSE;
extern bool WriteDebugLog = FALSE;
bool gi_316 = TRUE;
int gi_320 = 2;
int gi_324 = 1;
string gs_unused_328 = "New Trade Information";
string gs_336 = "New Trade Information";
int g_bool_344;
int gi_348;
int gi_352;
int g_slippage_356;
double gd_360;
double g_maxlot_368;
double g_minlot_376;
double gd_384;
double gd_392;
double g_lotstep_400;
double gd_408;
string g_symbol_416;
string gs_424;
bool gba_432[4];
double gda_436[4];
double gda_440[4];
int gia_444[4];
int gia_448[4];
bool gba_452[4][5];
int gia_456[4];
int gia_460[4];
int gia_464[4];
bool gba_468[4];
double gda_472[4];
double gda_476[4];
double gda_480[4];
int gia_484[4];
bool gi_488;
bool gi_492;
int gi_496 = 0;
bool gi_500 = FALSE;
int gi_504 = 0;
double gda_508[52] = {0};
string gs_512 = "";
string gs_520 = "";
string gs_528 = "";
bool gi_536 = FALSE;

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

int deinit() {
   Comment("");
   if (WriteDebugLog) Print("*************************** Deinitialization ***************************");
   return (0);
}

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

string ErrorDescription(int ai_0) {
   string ls_ret_8;
   switch (ai_0) {
   case 0:
   case 1:
      ls_ret_8 = "no error";
      break;
   case 2:
      ls_ret_8 = "common error";
      break;
   case 3:
      ls_ret_8 = "invalid trade parameters";
      break;
   case 4:
      ls_ret_8 = "trade server is busy";
      break;
   case 5:
      ls_ret_8 = "old version of the client terminal";
      break;
   case 6:
      ls_ret_8 = "no connection with trade server";
      break;
   case 7:
      ls_ret_8 = "not enough rights";
      break;
   case 8:
      ls_ret_8 = "too frequent requests";
      break;
   case 9:
      ls_ret_8 = "malfunctional trade operation (never returned error)";
      break;
   case 64:
      ls_ret_8 = "account disabled";
      break;
   case 65:
      ls_ret_8 = "invalid account";
      break;
   case 128:
      ls_ret_8 = "trade timeout";
      break;
   case 129:
      ls_ret_8 = "invalid price";
      break;
   case 130:
      ls_ret_8 = "invalid stops";
      break;
   case 131:
      ls_ret_8 = "invalid trade volume";
      break;
   case 132:
      ls_ret_8 = "market is closed";
      break;
   case 133:
      ls_ret_8 = "trade is disabled";
      break;
   case 134:
      ls_ret_8 = "not enough money";
      break;
   case 135:
      ls_ret_8 = "price changed";
      break;
   case 136:
      ls_ret_8 = "off quotes";
      break;
   case 137:
      ls_ret_8 = "broker is busy (never returned error)";
      break;
   case 138:
      ls_ret_8 = "requote";
      break;
   case 139:
      ls_ret_8 = "order is locked";
      break;
   case 140:
      ls_ret_8 = "long positions only allowed";
      break;
   case 141:
      ls_ret_8 = "too many requests";
      break;
   case 145:
      ls_ret_8 = "modification denied because order too close to market";
      break;
   case 146:
      ls_ret_8 = "trade context is busy";
      break;
   case 147:
      ls_ret_8 = "expirations are denied by broker";
      break;
   case 148:
      ls_ret_8 = "amount of open and pending orders has reached the limit";
      break;
   case 149:
      ls_ret_8 = "hedging is prohibited";
      break;
   case 150:
      ls_ret_8 = "prohibited by FIFO rules";
      break;
   case 4000:
      ls_ret_8 = "no error (never generated code)";
      break;
   case 4001:
      ls_ret_8 = "wrong function pointer";
      break;
   case 4002:
      ls_ret_8 = "array index is out of range";
      break;
   case 4003:
      ls_ret_8 = "no memory for function call stack";
      break;
   case 4004:
      ls_ret_8 = "recursive stack overflow";
      break;
   case 4005:
      ls_ret_8 = "not enough stack for parameter";
      break;
   case 4006:
      ls_ret_8 = "no memory for parameter string";
      break;
   case 4007:
      ls_ret_8 = "no memory for temp string";
      break;
   case 4008:
      ls_ret_8 = "not initialized string";
      break;
   case 4009:
      ls_ret_8 = "not initialized string in array";
      break;
   case 4010:
      ls_ret_8 = "no memory for array\' string";
      break;
   case 4011:
      ls_ret_8 = "too long string";
      break;
   case 4012:
      ls_ret_8 = "remainder from zero divide";
      break;
   case 4013:
      ls_ret_8 = "zero divide";
      break;
   case 4014:
      ls_ret_8 = "unknown command";
      break;
   case 4015:
      ls_ret_8 = "wrong jump (never generated error)";
      break;
   case 4016:
      ls_ret_8 = "not initialized array";
      break;
   case 4017:
      ls_ret_8 = "dll calls are not allowed";
      break;
   case 4018:
      ls_ret_8 = "cannot load library";
      break;
   case 4019:
      ls_ret_8 = "cannot call function";
      break;
   case 4020:
      ls_ret_8 = "expert function calls are not allowed";
      break;
   case 4021:
      ls_ret_8 = "not enough memory for temp string returned from function";
      break;
   case 4022:
      ls_ret_8 = "system is busy (never generated error)";
      break;
   case 4050:
      ls_ret_8 = "invalid function parameters count";
      break;
   case 4051:
      ls_ret_8 = "invalid function parameter value";
      break;
   case 4052:
      ls_ret_8 = "string function internal error";
      break;
   case 4053:
      ls_ret_8 = "some array error";
      break;
   case 4054:
      ls_ret_8 = "incorrect series array using";
      break;
   case 4055:
      ls_ret_8 = "custom indicator error";
      break;
   case 4056:
      ls_ret_8 = "arrays are incompatible";
      break;
   case 4057:
      ls_ret_8 = "global variables processing error";
      break;
   case 4058:
      ls_ret_8 = "global variable not found";
      break;
   case 4059:
      ls_ret_8 = "function is not allowed in testing mode";
      break;
   case 4060:
      ls_ret_8 = "function is not confirmed";
      break;
   case 4061:
      ls_ret_8 = "send mail error";
      break;
   case 4062:
      ls_ret_8 = "string parameter expected";
      break;
   case 4063:
      ls_ret_8 = "integer parameter expected";
      break;
   case 4064:
      ls_ret_8 = "double parameter expected";
      break;
   case 4065:
      ls_ret_8 = "array as parameter expected";
      break;
   case 4066:
      ls_ret_8 = "requested history data in update state";
      break;
   case 4099:
      ls_ret_8 = "end of file";
      break;
   case 4100:
      ls_ret_8 = "some file error";
      break;
   case 4101:
      ls_ret_8 = "wrong file name";
      break;
   case 4102:
      ls_ret_8 = "too many opened files";
      break;
   case 4103:
      ls_ret_8 = "cannot open file";
      break;
   case 4104:
      ls_ret_8 = "incompatible access to a file";
      break;
   case 4105:
      ls_ret_8 = "no order selected";
      break;
   case 4106:
      ls_ret_8 = "unknown symbol";
      break;
   case 4107:
      ls_ret_8 = "invalid price parameter for trade function";
      break;
   case 4108:
      ls_ret_8 = "invalid ticket";
      break;
   case 4109:
      ls_ret_8 = "trade is not allowed in the expert properties";
      break;
   case 4110:
      ls_ret_8 = "longs are not allowed in the expert properties";
      break;
   case 4111:
      ls_ret_8 = "shorts are not allowed in the expert properties";
      break;
   case 4200:
      ls_ret_8 = "object is already exist";
      break;
   case 4201:
      ls_ret_8 = "unknown object property";
      break;
   case 4202:
      ls_ret_8 = "object is not exist";
      break;
   case 4203:
      ls_ret_8 = "unknown object type";
      break;
   case 4204:
      ls_ret_8 = "no object name";
      break;
   case 4205:
      ls_ret_8 = "object coordinates error";
      break;
   case 4206:
      ls_ret_8 = "no specified subwindow";
      break;
   default:
      ls_ret_8 = "unknown error";
   }
   return (ls_ret_8);
}

string OrderTypeToStr(int ai_0) {
   string ls_ret_8;
   switch (ai_0) {
   case 0:
      ls_ret_8 = "Buy";
      break;
   case 1:
      ls_ret_8 = "Sell";
      break;
   case 2:
      ls_ret_8 = "BuyLimit";
      break;
   case 3:
      ls_ret_8 = "SellLimit";
      break;
   case 4:
      ls_ret_8 = "BuyStop";
      break;
   case 5:
      ls_ret_8 = "SellStop";
      break;
   default:
      ls_ret_8 = "Unknown";
   }
   return (ls_ret_8);
}

int GetGMTCorrection(int ai_0) {
   ai_0 += GMTOffset;
   while (true) {
      if (ai_0 >= 24) {
         ai_0 -= 24;
         continue;
      }
      if (ai_0 >= 0) break;
      ai_0 += 24;
   }
   return (ai_0);
}

void SetOrderLevels(double ad_0, double ad_8, int a_magic_16) {
   int l_cmd_36;
   double ld_40;
   double l_price_48;
   double ld_56;
   double ld_64;
   bool li_72;
   double l_price_76;
   bool li_84;
   double l_price_88;
   bool l_bool_96;
   double ld_20 = NormalizeDouble(MarketInfo(g_symbol_416, MODE_STOPLEVEL) * Point, Digits);
   int li_28 = OrdersTotal() - 1;
   for (int l_pos_32 = li_28; l_pos_32 >= 0; l_pos_32--) {
      if (!OrderSelect(l_pos_32, SELECT_BY_POS, MODE_TRADES)) {
         if (WriteLog) Print(StringConcatenate("SetOrderLevels: OrderSelect() error = ", ErrorDescription(GetLastError())));
      } else {
         if (OrderMagicNumber() == a_magic_16) {
            if (OrderSymbol() == g_symbol_416) {
               l_cmd_36 = OrderType();
               ld_40 = NormalizeDouble(OrderClosePrice(), Digits);
               l_price_48 = NormalizeDouble(OrderOpenPrice(), Digits);
               if (l_cmd_36 > OP_SELL)
                  if (NormalizeDouble(MathAbs(l_price_48 - ld_40), Digits) <= ld_20) continue;
               ld_56 = NormalizeDouble(OrderStopLoss(), Digits);
               ld_64 = NormalizeDouble(OrderTakeProfit(), Digits);
               li_72 = FALSE;
               if (ld_56 == 0.0) {
                  if (ad_8 < 0.0) {
                     if (l_cmd_36 % 2 == 0) {
                        l_price_76 = NormalizeDouble(l_price_48 + ad_8, Digits);
                        if (NormalizeDouble(ld_40 - l_price_76, Digits) > ld_20) li_72 = TRUE;
                        else l_price_76 = ld_56;
                     } else {
                        l_price_76 = NormalizeDouble(l_price_48 - ad_8, Digits);
                        if (NormalizeDouble(l_price_76 - ld_40, Digits) > ld_20) li_72 = TRUE;
                        else l_price_76 = ld_56;
                     }
                  } else l_price_76 = ld_56;
               } else l_price_76 = ld_56;
               li_84 = FALSE;
               if (ld_64 == 0.0) {
                  if (ad_0 > 0.0) {
                     if (l_cmd_36 % 2 == 0) {
                        l_price_88 = NormalizeDouble(l_price_48 + ad_0, Digits);
                        if (NormalizeDouble(l_price_88 - ld_40, Digits) > ld_20) li_84 = TRUE;
                        else l_price_88 = ld_64;
                     } else {
                        l_price_88 = NormalizeDouble(l_price_48 - ad_0, Digits);
                        if (NormalizeDouble(ld_40 - l_price_88, Digits) > ld_20) li_84 = TRUE;
                        else l_price_88 = ld_64;
                     }
                  } else l_price_88 = ld_64;
               } else l_price_88 = ld_64;
               if (li_72 || li_84) {
                  while (!IsTradeAllowed()) Sleep(1000);
                  l_bool_96 = OrderModify(OrderTicket(), l_price_48, l_price_76, l_price_88, 0, CLR_NONE);
                  if (!l_bool_96)
                     if (WriteLog) Print(StringConcatenate("SetOrderLevels: OrderModify(", OrderTypeToStr(OrderType()), ") error = ", ErrorDescription(GetLastError())));
               }
            }
         }
      }
   }
}

void WatchOrderLevels(double ad_0, double ad_8, int a_magic_16) {
   double ld_28;
   double ld_36;
   double ld_44;
   if (ad_0 <= 0.0 && ad_8 >= 0.0) return;
   int li_20 = OrdersTotal() - 1;
   for (int l_pos_24 = li_20; l_pos_24 >= 0; l_pos_24--) {
      if (!OrderSelect(l_pos_24, SELECT_BY_POS, MODE_TRADES)) {
         if (WriteLog) Print(StringConcatenate("WatchOrderLevels: OrderSelect() error = ", ErrorDescription(GetLastError())));
      } else {
         if (OrderMagicNumber() == a_magic_16) {
            if (OrderType() <= OP_SELL) {
               if (OrderSymbol() == g_symbol_416) {
                  ld_28 = NormalizeDouble(OrderClosePrice(), Digits);
                  ld_36 = NormalizeDouble(OrderOpenPrice(), Digits);
                  if (OrderType() == OP_BUY) {
                     ld_44 = NormalizeDouble(ld_28 - ld_36, Digits);
                     if ((ad_0 > 0.0 && ld_44 >= ad_0) || (ad_8 < 0.0 && ld_44 <= ad_8)) {
                        if (WriteLog) Print("WatchOrderLevels: level for close BUY");
                        CloseOrder(OrderTicket(), OrderLots(), 0, g_slippage_356);
                     }
                  } else {
                     ld_44 = NormalizeDouble(ld_36 - ld_28, Digits);
                     if ((ad_0 > 0.0 && ld_44 >= ad_0) || (ad_8 < 0.0 && ld_44 <= ad_8)) {
                        if (WriteLog) Print("WatchOrderLevels: level for close SELL");
                        CloseOrder(OrderTicket(), OrderLots(), 1, g_slippage_356);
                     }
                  }
               }
            }
         }
      }
   }
}

double LotsOptimized(int ai_unused_0) {
   double ld_ret_4;
   double ld_12;
   double ld_20;
   if (!UseMM) ld_ret_4 = Lots;
   else {
      ld_12 = AccountFreeMargin() * gd_408 / 100.0;
      ld_20 = MarketInfo(g_symbol_416, MODE_MARGINREQUIRED) * g_lotstep_400;
      ld_ret_4 = NormalizeDouble(MathFloor(ld_12 / ld_20) * g_lotstep_400, gi_348);
   }
   if (ld_ret_4 > MaxLots) ld_ret_4 = MaxLots;
   if (ld_ret_4 < g_minlot_376) ld_ret_4 = g_minlot_376;
   if (ld_ret_4 > g_maxlot_368) ld_ret_4 = g_maxlot_368;
   return (ld_ret_4);
}

int OpenOrder(int a_cmd_0, int a_magic_4, string a_comment_8, double ad_16, double a_price_24 = 0.0) {
   color l_color_36;
   int l_ticket_72;
   int l_error_76;
   

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

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

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

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

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

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

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