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

GPS Forex Robot USDCHF

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

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

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

О программе

GPS Forex Robot USDCHF — торговый советник для платформы MetaTrader 4, предназначенный исключительно для работы с парой USDCHF. При запуске проверяет допустимость DLL-импортов, корректность торгового инструмента и режим тестирования, после чего выводит информацию об аккаунте и настройках GMT в комментарий графика.

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

Основной обработчик start() выполняет проверку ордеров, отслеживает уровни закрытия, управляет открытием позиций по временным условиям и поддерживает реверс-позиции после стоп-лосса. Все торговые операции выполняются через стандартные функции OrderSend и OrderClose с обработкой типичных ошибок торгового сервера.

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

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

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

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

#import "GPSForexRobotUSDCHF.dll"

   int GetGMT();
#import

extern string GPS_Forex_Robot_USDCHF = " ";
/*
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 = 32.0;
double gd_180 = 8.0;
int gi_188 = 16;
int gi_192 = 0;
bool gi_196 = TRUE;
bool gi_200 = FALSE;
bool gi_204 = FALSE;
bool gi_208 = TRUE;
bool gi_212 = TRUE;
int gi_216 = -4;
int gi_220 = 1;
int gi_224 = 20100109;
bool gi_228 = TRUE;
double gd_232 = 45.0;
double gd_240 = 14.0;
double gd_248 = 4.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% кода (символов: 26891)

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

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

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

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

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

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