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

MegaDroidPro

mdpro_v101ee_bbr_v11.mq4

Похожие материалы по тегам

ares_indicator.pineTradingView · 1 общих теговgold_trend_revers.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 1 общих тегов! cycle-identifier.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 1 общих теговprecisionflowea.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

MegaDroidPro — торговый советник для MetaTrader 4, реализующий два независимых торговых алгоритма (Strategy1 и Strategy2), использующих технические индикаторы для генерации сигналов на покупку и продажу. Strategy1 работает на таймфреймах M15/M5 и задействует RSI, CCI и скользящую среднюю; Strategy2 использует CCI на таймфрейме M5.

Советник поддерживает четыре валютные пары (EURUSD, EURCHF, EURGBP, USDCHF) и автоматически подбирает параметры стратегий в зависимости от выбранной пары и режима логики. Доступны четыре варианта логики для разных пар.

Встроены функции управления рисками: расчёт размера лота на основе уровня риска и доступного маржинального баланса, режим восстановления позиций при убытке, фильтрация максимального спреда, ограничения по времени торговли и многопроцессное управление с распределением риска между экземплярами.

Советник включает режим Stealth для управления типом ордеров, режим Aggressive для одновременной работы обеих стратегий, отправку уведомлений по email, отслеживание истории позиций и отображение информации о состоянии торговли на графике.

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

НастройкаОписание
Version Версия — Текстовый параметр, содержащий версию советника.
_1 Заголовок системных параметров — Текстовый параметр-заголовок группы системных настроек.
Stealth Режим Stealth — Переключатель режима Stealth, влияющий на тип размещаемых ордеров — при активации используются ордера с отложенными стоп-лоссом и тейк-профитом.
Aggressive Агрессивный режим — Переключатель режима агрессивной торговли. При активации обе стратегии могут работать одновременно на одном счёте.
GmtOffset Смещение GMT — Числовое значение смещения GMT в часах, используемое для расчёта серверного и локального времени торговли.
1.01 (NFA) Правило FIFO — Переключатель правила FIFO (NFA), ограничивающего открытие новых позиций при наличии незакрытых ордеров других советников на счёте.
AutoLocalGmtOffset Автоматическое локальное GMT-смещение — Переключатель автоматического определения локального смещения GMT для корректного расчёта торгового времени.
S1_Reference С1: Магическое число — Целочисленное магическое число для идентификации ордеров, открытых первой стратегией.
S2_Reference С2: Магическое число — Целочисленное магическое число для идентификации ордеров, открытых второй стратегией.
ReceiptCode Код активации — Текстовый параметр для ввода кода активации или авторизации советника.
_2 Заголовок настроек комментариев — Текстовый параметр-заголовок группы настроек комментариев позиций.
TopPadding Отступ сверху — Целочисленное значение отступа в пикселях от верхнего края графика для размещения информационных меток.
LeftPadding Отступ слева — Целочисленное значение отступа в пикселях от левого края графика для размещения информационных меток.
TextColor1 Цвет текста 1 — Цвет текста основной информации, отображаемой на графике.
TextColor2 Цвет текста 2 — Цвет вспомогательного текста, отображаемого на графике.
_3 Заголовок параметров стратегии — Текстовый параметр-заголовок группы параметров стратегии.
Slippage Проскальзывание — Целочисленное допустимое отклонение цены исполнения ордера в пунктах.
SendEmails Отправка email-уведомлений — Переключатель отправки уведомлений по электронной почте при открытии новых ордеров.
_4 Заголовок управления ордерами — Текстовый параметр-заголовок группы управления ордерами.
LotSize Размер лота — Числовое значение фиксированного размера лота для торговли при нулевом уровне риска.
_5 Заголовок управления рисками — Текстовый параметр-заголовок группы управления рисками.
RiskLevel Уровень риска — Числовой коэффициент риска, определяющий долю маржи, используемую для расчёта размера торгового лота.
RecoveryMode Режим восстановления — Переключатель режима восстановления лота. При активации и наличии убыточной истории размер лота увеличивается для компенсации убытков.
RiskSharingEnabled Распределение риска — Переключатель режима распределения риска между несколькими одновременно работающими экземплярами советника на одном счёте.
_6 Заголовок настройки спреда — Текстовый параметр-заголовок настройки максимального спреда.
MaxSpread Максимальный спред — Целочисленный лимит максимального допустимого спреда в пунктах. Значение -1 включает автоматический режим, 0 — стандартный, >0 — пользовательский предел.
_7 Заголовок логики — Текстовый параметр-заголовок выбора логики стратегии.
Logic Логика стратегии — Целочисленный параметр выбора логики торговой стратегии: 1 — EU, 2 — EC, 3 — EG, 4 — UC, определяющий набор параметров для конкретной валютной пары.
OverrideTradeTimes Переопределение времени торговли — Переключатель, позволяющий задать пользовательские часы торговли вместо стандартных для каждой стратегии.
S1_StartHour С1: Час начала торговли — Целочисленный час начала торгового окна для первой стратегии в серверном времени.
S1_EndHour С1: Час окончания торговли — Целочисленный час окончания торгового окна для первой стратегии в серверном времени.
S2_StartHour С2: Час начала торговли — Целочисленный час начала торгового окна для второй стратегии в серверном времени.
S2_EndHour С2: Час окончания торговли — Целочисленный час окончания торгового окна для второй стратегии в серверном времени.
Получить полный код

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

#include <WinUser32.mqh>
#include <stdlib.mqh>

#import "kernel32.dll"
   int   GetCurrentProcessId();
   void  GetLocalTime(int& TimeArray[]);
   int   GetTimeZoneInformation(int& TZInfoArray[]);
#import

extern string Version = "1.00";
extern string _1 = "System Parameters";
extern bool Stealth = TRUE;
extern bool Aggressive = TRUE;
extern double GmtOffset = 0.0;
extern bool NFA = FALSE; //1.01
extern bool AutoLocalGmtOffset = TRUE;
extern bool AutoServerGmtOffset = TRUE;
extern int S1_Reference = 77777773;
extern int S2_Reference = 33333337;
extern string ReceiptCode = "";
extern string _2 = "Comment Position";
extern int TopPadding = 30;
extern int LeftPadding = 20;
extern color TextColor1 = CadetBlue;
extern color TextColor2 = SkyBlue;
extern string _3 = "Strategy Parameters";
extern int Slippage = 3;
extern bool SendEmails = FALSE;
extern string _4 = "Order Management";
extern double LotSize = 0.1;
extern string _5 = "Ratio Order Management";
extern double RiskLevel = 0.1;
extern bool RecoveryMode = TRUE;
extern bool RiskSharingEnabled = TRUE;
extern string _6 = "MaxSpread: -1 auto, 0 default, >0 your limit";
extern int MaxSpread = 0;
extern string _7 = "Logic: 1: EU, 2: EC, 3: EG, 4: UC";
extern int Logic = 1;
extern bool OverrideTradeTimes = false;
extern int S1_StartHour = 21;
extern int S1_EndHour = 23;
extern int S2_StartHour = 22;
extern int S2_EndHour = 23;
int Gcount = 0;
bool gi_208 = FALSE;
double gd_212 = 1000.0;
double gd_220 = 0.2;
bool gi_228 = FALSE;
bool gi_240 = TRUE;
bool gi_244 = TRUE;
bool gi_248 = TRUE;
int gi_252 = 3;
int g_timeframe_256 = PERIOD_M15;
int gi_260 = 10;
int gi_264 = 50;
int gi_268 = 200;
int gi_272 = 20;
int gi_276 = 0;
int gi_280 = 16711680;
int gi_284 = 255;
int g_period_288 = 6;
int g_period_292 = 20;
int g_period_296 = 8;
double gd_300 = 70.0;
double gd_308 = 30.0;
double gd_316 = 64.0;
double gd_324 = 36.0;
bool gi_332 = TRUE;
bool gi_336 = TRUE;
bool gi_340 = TRUE;
int gi_344 = 12;
bool gi_348 = TRUE;
int gi_352 = 20;
bool gi_356 = TRUE;
bool gi_360 = FALSE;
double gd_364 = 1.0;
double gd_372 = 24.0;
bool gi_380 = TRUE;
double gd_384 = 1.0;
double gd_392 = 1.0;
bool gi_400 = FALSE;
int gi_404 = 0;
bool gi_408 = TRUE;
bool gi_412 = TRUE;
int gi_416 = 21;
int gi_420 = 1;
int gi_424 = 21;
int gi_428 = 0;
int g_timeframe_432 = PERIOD_M5;
int gi_436 = 35;
int gi_440 = 60;
int gi_444 = 200;
int gi_448 = 20;
double gd_452 = 1.0;
int gi_460 = 0;
int gi_464 = 16748574;
int gi_468 = 9639167;
int gi_472 = 36;
int g_period_476 = 168;
int g_period_480 = 275;
bool gi_484 = TRUE;
bool gi_488 = FALSE;
bool gi_492 = TRUE;
double gd_496 = 1.0;
double gd_504 = 12.0;
double gd_512 = 24.0;
bool gi_520 = FALSE;
bool gi_524 = FALSE;
int gi_528 = 0;
bool gi_532 = TRUE;
bool gi_536 = TRUE;
int gi_540 = 21;
int gi_544 = 4;
int gi_548 = 21;
int gi_552 = 0;
bool gi_556 = TRUE;
int gi_560;
int servertime;
int GMT_time;
double GMT_Hour;
int gi_580;
int g_spread_584;
int g_spread_588;
int g_stoplevel_592;
double gd_596;
double gd_604;
int gi_612 = 1;
double gd_616;
bool gi_624 = FALSE;
int gi_628 = 0;
int gi_632 = 0;
string gs_636;
string gs_644;
string gs_652;
int gi_660 = 0;
int gi_664 = 0;
int gi_668 = 0;
int gi_672;
int gi_676;
int gi_680 = 0;
double g_irsi_684;
double g_irsi_692;
double g_irsi_700;
double g_irsi_708;
double g_icci_716;
double g_icci_724;
double g_icci_732;
double g_ima_756;
bool gi_764 = TRUE;
bool gi_768 = TRUE;
double g_ihigh_772 = 0.0;
double g_ilow_780 = 0.0;
bool gi_788 = FALSE;
int gi_792 = 0;
int gi_796 = 0;
int gi_800 = 0;
int gi_804 = 0;
int gi_808;
int gi_812;
int gi_816 = 0;
int gi_820 = 0;
int gi_824;
int gi_828 = 0;
int gi_832 = 0;
int g_ticket_836 = 0;
int g_datetime_840 = 0;
int g_ticket_844 = 0;
int g_datetime_848 = 0;
int gi_852 = 0;
double g_icci_856;
double g_icci_864;
double g_ihigh_872;
double g_ilow_880;
double g_ihigh_888;
double g_ilow_896;
bool gi_904 = FALSE;
int gi_908 = 0;
int gi_912 = 0;
int gi_916 = 0;
int gi_920 = 0;
int gi_924;
int gi_928;
int g_ticket_932 = -1;
int gi_936;
int gi_940;
int g_datetime_944;
int g_datetime_948;
double g_ord_open_price_952;
int g_ticket_960 = -1;
int gi_964;
int gi_968;
int g_datetime_972;
int g_datetime_976;
double g_ord_open_price_980;
double gd_988 = 0.0;
double gd_996 = 0.0;
bool gi_1004 = FALSE;
bool gi_1008;
bool gi_1012;
int gi_1016;
int g_count_1024 = 0;
int g_ticket_1020 = -2;
int g_ticket_1024 = -2;
double g_ord_profit_1028 = 0.0;
double g_ord_profit_1036 = 0.0;
int g_ticket_1044 = -2;
int g_ticket_1048 = -2;
double g_ord_profit_1052 = 0.0;
double g_ord_profit_1060 = 0.0;
bool gi_1068 = FALSE;
int g_datetime_1076 = 0;
int g_datetime_1080 = 0;
bool gi_1084 = TRUE;
int g_datetime_1088 = 0;
int g_datetime_1092 = 0;
string gsa_1096[] = {".", "..", "...", "....", "....."};

string my_symbol ="";

void SetSymbol(){
   my_symbol = StringSubstr(Symbol(), 0, 6);
   if (Logic < 1 || Logic > 4) Logic = 1;
   if(my_symbol != "EURUSD" && my_symbol != "EURCHF" && my_symbol != "EURGBP" && my_symbol != "USDCHF")
   {
      if (Logic == 1) my_symbol = "EURUSD";
      if (Logic == 2) my_symbol = "EURCHF";
      if (Logic == 3) my_symbol = "EURGBP";
      if (Logic == 4) my_symbol = "USDCHF";
   }
}

int S1_CheckSymbol() {
   if (my_symbol == "EURUSD")
   {
      gi_260 = 10;
      gi_268 = 150;
      gi_272 = 40;
      gi_276 = 0;
      g_period_288 = 6;
      g_period_292 = 20;
      g_period_296 = 8;
      gd_300 = 70.0;
      gd_308 = 30.0;
      gd_316 = 70.0;
      gd_324 = 30.0;
      gd_364 = 1.0;
      gd_372 = 12.0;
      gd_384 = 1.0;
      gd_392 = 1.0;
      gi_404 = 4;
      gi_416 = 21;
      gi_420 = 23;
      gi_424 = 21;
      gi_428 = 23;
      g_timeframe_256 = PERIOD_M15;
      return(1);
   }

   if (my_symbol == "EURCHF")
   {
      gi_260 = 10;
      gi_268 = 120;
      gi_272 = 40;
      gi_276 = 0;
      g_period_288 = 6;
      g_period_292 = 20;
      g_period_296 = 8;
      gd_300 = 70.0;
      gd_308 = 30.0;
      gd_316 = 64.0;
      gd_324 = 36.0;
      gd_364 = 1.0;
      gd_372 = 4.0;
      gd_384 = 1.0;
      gd_392 = 1.0;
      gi_404 = 6;
      gi_416 = 21;
      gi_420 = 0;
      gi_424 = 21;
      gi_428 = 23;
      g_timeframe_256 = PERIOD_M5;
      return(1);
   }

   if (my_symbol == "EURGBP")
   {
      gi_260 = 6;
      gi_268 = 120;
      gi_272 = 40;
      gi_276 = 0;
      g_period_288 = 6;
      g_period_292 = 20;
      g_period_296 = 16;
      gd_300 = 70.0;
      gd_308 = 30.0;
      gd_316 = 64.0;
      gd_324 = 36.0;
      gd_364 = 1.0;
      gd_372 = 3.0;
      gd_384 = 1.0;
      gd_392 = 1.0;
      gi_404 = 6;
      gi_416 = 21;
      gi_420 = 0;
      gi_424 = 21;
      gi_428 = 23;
      g_timeframe_256 = PERIOD_M5;
      return(1);
   }

   if (my_symbol == "USDCHF")
   {
      gi_260 = 10;
      gi_268 = 150;
      gi_272 = 30;
      gi_276 = 0;
      g_period_288 = 6;
      g_period_292 = 20;
      g_period_296 = 8;
      gd_300 = 70.0;
      gd_308 = 30.0;
      gd_316 = 70.0;
      gd_324 = 30.0;
      gd_364 = 1.0;
      gd_372 = 12.0;
      gd_384 = 1.0;
      gd_392 = 1.0;
      gi_404 = 6;
      gi_416 = 21;
      gi_420 = 23;
      gi_424 = 21;
      gi_428 = 23;
      g_timeframe_256 = PERIOD_M5;
      return(1);
   }
   return(0);
}

int S2_CheckSymbol()
{
   if (my_symbol == "EURUSD")
   {
      gi_436 = 15;
      gi_444 = 150;
      gi_448 = 30;
      gd_452 = 2.0;
      gi_460 = 0;
      gi_472 = 36;
      g_period_476 = 168;
      g_period_480 = 275;
      gd_496 = 1.0;
      gd_504 = 10.0;
      gd_512 = 12.0;
      gi_528 = 4;
      gi_540 = 22;
      gi_544 = 23;
      gi_548 = 22;
      gi_552 = 23;
      g_timeframe_432 = PERIOD_M5;
      return(1);
   }

   if (my_symbol == "EURCHF")
   {
      gi_436 = 15;
      gi_444 = 150;
      gi_448 = 40;
      gd_452 = 2.0;
      gi_460 = 0;
      gi_472 = 12;
      g_period_476 = 46;
      g_period_480 = 275;
      gd_496 = 1.0;
      gd_504 = 2.0;
      gd_512 = 5.0;
      gi_528 = 6;
      gi_540 = 22;
      gi_544 = 0;
      gi_548 = 22;
      gi_552 = 0;
      g_timeframe_432 = PERIOD_M5;
      return(1);
   }

   if (my_symbol == "EURGBP")
   {
      gi_436 = 6;
      gi_444 = 120;
      gi_448 = 60;
      gd_452 = 1.0;
      gi_460 = 0;
      gi_472 = 12;
      g_period_476 = 168;
      g_period_480 = 275;
      gd_496 = 1.0;
      gd_504 = 10.0;
      gd_512 = 12.0;
      gi_528 = 5;
      gi_540 = 22;
      gi_544 =23;
      gi_548 = 22;
      gi_552 = 23;
      g_timeframe_432 = PERIOD_M5;
      return(1);
   }

   if (my_symbol == "USDCHF")
   {
      gi_436 = 10;
      gi_444 = 100;
      gi_448 = 60;
      gd_452 = 3.0;
      gi_460 = 0;
      gi_472 = 12;
      g_period_476 = 70;
      g_period_480 = 275;
      gd_496 = 1.0;
      gd_504 = 4.0;
      gd_512 = 18.0;
      gi_528 = 5;
      gi_540 = 22;
      gi_544 = 23;
      gi_548 = 22;
      gi_552 = 23;
      g_timeframe_432 = PERIOD_M5;
      return(1);
   }         
   return(0);
}

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

int deinit() {
   if (gi_240 && !IsTesting()) Decrement();
   switch (UninitializeReason()) {
   case REASON_CHARTCLOSE:
   case REASON_REMOVE:
      Deleteobjects(0, gi_668);
      gi_668 = 0;
      break;
   case REASON_RECOMPILE:
   case REASON_CHARTCHANGE:
   case REASON_PARAMETERS:
   case REASON_ACCOUNT:
      Deleteobjects(1, gi_668);
      gi_668 = 1;
   }
   return (0);
}

int s1_direction() {
   if (g_icci_716 >= 0.0 || g_irsi_684 >= 50.0) gi_832 = servertime;
   if (g_icci_716 <= 0.0 || g_irsi_684 <= 50.0) gi_828 = servertime;
   if (gi_832 > 0 && servertime - gi_832 > 3600.0 * gd_384) return (2);
   if (gi_828 > 0 && servertime - gi_828 > 3600.0 * gd_384) return (3);
   if (gi_832 == 0 || gi_828 == 0) return (0);
   return (1);
}

void s1_dayRange() {
   int l_shift_0;
   if (servertime - gi_580 < 3600.0 * gi_344) l_shift_0 = iBarShift(NULL, g_timeframe_256, gi_580 - 86400);
   else l_shift_0 = iBarShift(NULL, g_timeframe_256, gi_580);
   g_ihigh_772 = iHigh(NULL, g_timeframe_256, iHighest(NULL, g_timeframe_256, MODE_HIGH, l_shift_0 - gi_560, gi_560));
   g_ilow_780 = iLow(NULL, g_timeframe_256, iLowest(NULL, g_timeframe_256, MODE_LOW, l_shift_0 - gi_560, gi_560));
}

void s1_setRules() {
   int li_0;
   HideTestIndicators(TRUE);
   g_irsi_684 = iRSI(NULL, g_timeframe_256, g_period_288, PRICE_CLOSE, gi_560);
   g_irsi_692 = iRSI(NULL, g_timeframe_256, g_period_288, PRICE_CLOSE, gi_560 + 1);
   g_irsi_700 = iRSI(NULL, g_timeframe_256, g_period_288, PRICE_CLOSE, gi_560 + 2);
   if (gi_332) g_irsi_708 = iRSI(NULL, PERIOD_M1, g_period_292, PRICE_CLOSE, gi_560);
   g_icci_716 = iCCI(NULL, g_timeframe_256, g_period_296, PRICE_TYPICAL, gi_560);
   g_icci_724 = iCCI(NULL, g_timeframe_256, g_period_296, PRICE_TYPICAL, gi_560 + 1);
   g_icci_732 = iCCI(NULL, g_timeframe_256, g_period_296, PRICE_TYPICAL, gi_560 + 2);
   g_ima_756 = iMA(NULL, g_timeframe_256, g_period_296, 0, MODE_SMA, PRICE_MEDIAN, gi_560);
   if (gi_348) {
      if (g_irsi_684 >= 50 - gi_352 / 2 && g_irsi_684 <= gi_352 / 2 + 50) {
         gi_764 = TRUE;
         gi_768 = TRUE;
      }
   }
   if (gi_340) s1_dayRange();
   if (gi_380) {
      li_0 = gi_816;
      gi_816 = s1_direction();
      if (li_0 != gi_816) {
         gi_820 = li_0;
         if (gi_816 == 1) gi_824 = servertime + 3600.0 * gd_392;
      }
   }
   if (gi_404 > 0) {
      if (g_spread_584 > gi_404 * gd_596) {
         if (g_spread_588 < g_spread_584) {
            Print("Strategy1: Safe spread limit exceeded: spread = ", g_spread_584);
            if (gi_408) Print("Strategy1: Using DayDirection filter");
         }
         gi_788 = TRUE;
      } else gi_788 = FALSE;
   }
   HideTestIndicators(FALSE);
   if (gi_788) {
      gi_808 = gi_424;
      gi_812 = gi_428;
      return;
   }
   gi_808 = gi_416;
   gi_812 = gi_420;
}

int s1_openBuyRule() {
   double l_iclose_0;
   double l_iclose_8;
   int l_shift_16;
   int l_shift_20;
   if (!gi_764) return (0);
   if (gi_788 && !gi_408) return (0);
   if (gi_380) {
      if (gi_816 == 2) return (0);
      if (servertime <= gi_824)
         if (gi_820 == 2) return (0);
   }
   if (gi_400 || gi_788) {
      if (servertime - gi_580 < 43200.0) {
         l_shift_16 = iBarShift(NULL, g_timeframe_256, gi_580 - 86400);
         l_shift_20 = iBarShift(NULL, g_timeframe_256, gi_580);
      } else {
         l_shift_16 = iBarShift(NULL, g_timeframe_256, gi_580);
         l_shift_20 = gi_560;
      }
      l_iclose_8 = iClose(NULL, g_timeframe_256, l_shift_16);
      l_iclose_0 = iClose(NULL, g_timeframe_256, l_shift_20);
      if (l_iclose_0 < l_iclose_8) return (0);
   }
   return (s1_Buy(Ask, g_icci_716, g_irsi_684, g_irsi_708, g_ima_756, gd_308, gd_324, gi_260 * gd_596 * Point, gi_336, gi_332));
}

int s1_openSellRule() {
   double l_iclose_0;
   double l_iclose_8;
   int l_shift_16;
   int l_shift_20;
   if (!gi_768) return (0);
   if (gi_788 && !gi_408) return (0);
   if (gi_380) {
      if (gi_816 == 3) return (0);
      if (servertime <= gi_824)
         if (gi_820 == 3) return (0);
   }
   if (gi_400 || gi_788) {
      if (servertime - gi_580 < 43200.0) {
         l_shift_16 = iBarShift(NULL, g_timeframe_256, gi_580 - 86400);
         l_shift_20 = iBarShift(NULL, g_timeframe_256, gi_580);
      } else {
         l_shift_16 = iBarShift(NULL, g_timeframe_256, gi_580);
         l_shift_20 = gi_560;
      }
      l_iclose_8 = iClose(NULL, g_timeframe_256, l_shift_16);
      l_iclose_0 = iClose(NULL, g_timeframe_256, l_shift_20);
      if (l_iclose_0 > l_iclose_8) return (0);
   }
   return (s1_Sell(Bid, g_icci_716, g_irsi_684, g_irsi_708, g_ima_756, gd_300, gd_316, gi_260 * gd_596 * Point, gi_336, gi_332));
}

bool s1_closeBuyRule() {
   if (Stealth || OrderTakeProfit() == 0.0) {
      if (gi_260 > 0)
         if (NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= NormalizeDouble(gi_260 * Point * gd_596, Digits)) return (TRUE);
   }
   if (OrderStopLoss() == 0.0) {
      if (gi_796 > 0)
         if (NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= NormalizeDouble(gi_796 * Point * gd_596, Digits)) return (TRUE);
   }
   if (gi_360) {
      if (g_ticket_836 != OrderTicket()) {
         g_datetime_840 = OrderOpenTime();
         g_ticket_836 = OrderTicket();
      }
      if (g_icci_716 >= 0.0 || g_irsi_684 >= 50.0) g_datetime_840 = servertime;
      if (g_icci_732 < g_icci_724 && g_irsi_700 < g_irsi_692) g_datetime_840 = iTime(NULL, g_timeframe_256, gi_560);
      if (servertime - g_datetime_840 > 3600.0 * gd_364 && OrderProfit() < 0.0) return (TRUE);
   }
   if (gi_356) {
      if (servertime - OrderOpenTime() > 3600.0 * gd_364) {
         if (g_icci_716 > 0.0 && g_irsi_684 > 50.0 && OrderProfit() > 0.0) return (TRUE);
         if (servertime - OrderOpenTime() > 3600.0 * gd_372) return (TRUE);
      }
   }
   return (FALSE);
}

bool s1_closeSellRule() {
   if (Stealth || OrderTakeProfit() == 0.0) {
      if (gi_260 > 0)
         if (NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= NormalizeDouble(gi_260 * Point * gd_596, Digits)) return (TRUE);
   }
   if (OrderStopLoss() == 0.0) {
      if (gi_804 > 0)
         if (NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= NormalizeDouble(gi_804 * Point * gd_596, Digits)) return (TRUE);
   }
   if (gi_360) {
      if (g_ticket_844 != OrderTicket()) {
         g_datetime_848 = OrderOpenTime();
         g_ticket_844 = OrderTicket();
      }
      if (g_icci_716 <= 0.0 || g_irsi_684 <= 50.0) g_datetime_848 = servertime;
      if (g_icci_732 > g_icci_724 && g_irsi_700 > g_irsi_692) g_datetime_848 = iTime(NULL, g_timeframe_256, gi_560);
      if (servertime - g_datetime_848 > 3600.0 * gd_364 && OrderProfit() < 0.0) return (TRUE);
   }
   if (gi_356) {
      if (servertime - OrderOpenTime() > 3600.0 * gd_364) {
         if (g_icci_716 < 0.0 && g_irsi_684 < 50.0 && OrderProfit() > 0.0) return (TRUE);
         if (servertime - OrderOpenTime() > 3600.0 * gd_372) return (TRUE);
      }
   }
   return (FALSE);
}

int s1_openBuy() {
   double ld_0 = 0;
   double ld_8 = 0;
   if (g_ilow_780 > 0.0) {
      gi_796 = (Bid - g_ilow_780 + Point * gd_596) / Point;
      if (gi_268 > 0 && gi_796 > gi_268 * gd_596) gi_796 = gi_268 * gd_596;
      if (gi_796 < gi_272 * gd_596) gi_796 = gi_272 * gd_596;
   } else gi_796 = gi_272 * gd_596;
   if (gi_796 < g_stoplevel_592) gi_796 = g_stoplevel_592;
   if (Stealth) gi_792 = gi_264 * gd_596;
   else gi_792 = gi_260 * gd_596;
   if (gi_792 < g_stoplevel_592) gi_792 = g_stoplevel_592;
   ld_8 = NormalizeDouble(Bid - gi_796 * Point, Digits);
   ld_0 = NormalizeDouble(Ask + gi_792 * Point, Digits);
   return (openOrder(OP_BUY, gd_604, Ask, ld_0, ld_8, S1_Reference, gi_280, 0));
}

int s1_openSell() {
   double ld_0 = 0;
   double ld_8 = 0;
   if (g_ihigh_772 > 0.0) {
      gi_804 = (g_ihigh_772 - Ask + Point * gd_596) / Point;
      if (gi_268 > 0 && gi_804 > gi_268 * gd_596) gi_804 = gi_268 * gd_596;
      if (gi_804 < gi_272 * gd_596) gi_804 = gi_272 * gd_596;
   } else gi_804 = gi_272 * gd_596;
   if (gi_804 < g_stoplevel_592) gi_804 = g_stoplevel_592;
   if (Stealth) gi_800 = gi_264 * gd_596;
   else gi_800 = gi_260 * gd_596;
   if (gi_800 < g_stoplevel_592) gi_800 = g_stoplevel_592;
   ld_8 = NormalizeDouble(Ask + gi_804 * Point, Digits);
   ld_0 = NormalizeDouble(Bid - gi_800 * Point, Digits);
   return (openOrder(OP_SELL, gd_604, Bid, ld_0, ld_8, S1_Reference, gi_284, 0));
}

int s1_buyControl() {
   int li_ret_16;
   double l_ord_takeprofit_0 = OrderTakeProfit();
   double l_ord_stoploss_8 = OrderStopLoss();
   if (l_ord_takeprofit_0 == 0.0 || l_ord_stoploss_8 == 0.0) {
      if (l_ord_takeprofit_0 == 0.0) {
         if (gi_792 < g_stoplevel_592) gi_792 = g_stoplevel_592;
         l_ord_takeprofit_0 = NormalizeDouble(Ask + gi_792 * Point, Digits);
      }
      if (l_ord_stoploss_8 == 0.0) {
         if (gi_796 < g_stoplevel_592) gi_796 = g_stoplevel_592;
         l_ord_stoploss_8 = NormalizeDouble(Bid - gi_796 * Point, Digits);
      }
      waitForContext();
      OrderModify(OrderTicket(), OrderOpenPrice(), l_ord_stoploss_8, l_ord_takeprofit_0, 0, Green);
   }
   if (s1_closeBuyRule()) {
      li_ret_16 = closeOrder(0, Violet);
      if (li_ret_16 < 0) return (li_ret_16);
   }
   if (gi_276 > 0) {
      if (Bid - OrderOpenPrice() > Point * gd_596 * gi_276) {
         if (OrderStopLoss() < Bid - Point * gd_596 * gi_276 || OrderStopLoss() == 0.0) {
            waitForContext();
            OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - Point * gd_596 * gi_276, Digits), OrderTakeProfit(), 0, Green);
         }
      }
   }
   return (OrderTicket());
}

int s1_sellControl() {
   int li_ret_16;
   double l_ord_takeprofit_0 = OrderTakeProfit();
   double l_ord_stoploss_8 = OrderStopLoss();
   if (l_ord_takeprofit_0 == 0.0 || l_ord_stoploss_8 == 0.0) {
      if (l_ord_takeprofit_0 == 0.0) {
         if (gi_800 < g_stoplevel_592) gi_800 = g_stoplevel_592;
         l_ord_takeprofit_0 = NormalizeDouble(Bid - gi_800 * Point, Digits);
      }
      if (l_ord_stoploss_8 == 0.0) {
         if (gi_804 < g_stoplevel_592) gi_804 = g_stoplevel_592;
         l_ord_stoploss_8 = NormalizeDouble(Ask + gi_804 * Point, Digits);
      }
      waitForContext();
      OrderModify(OrderTicket(), OrderOpenPrice(), l_ord_stoploss_8, l_ord_takeprofit_0, 0, Red);
   }
   if (s1_closeSellRule()) {
      li_ret_16 = closeOrder(1, Violet);
      if (li_ret_16 < 0) return (li_ret_16);
   }
   if (gi_276 > 0) {
      if (OrderOpenPrice() - Ask > Point * gd_596 * gi_276) {
         if (OrderStopLoss() > Ask + Point * gd_596 * gi_276 || OrderStopLoss() == 0.0) {
            waitForContext();
            OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + Point * gd_596 * gi_276, Digits), OrderTakeProfit(), 0, Red);
         }
      }
   }
   return (OrderTicket());
}

void s2_setRules() {
   HideTestIndicators(TRUE);
   if (gi_484 || gi_492) g_icci_856 = iCCI(NULL, g_timeframe_432, g_period_476, PRICE_TYPICAL, gi_560);
   if (gi_488) g_icci_864 = iCCI(NULL, g_timeframe_432, g_period_480, PRICE_TYPICAL, gi_560);
   g_ihigh_872 = iHigh(NULL, g_timeframe_432, iHighest(NULL, g_timeframe_432, MODE_HIGH, gi_472, 1));
   g_ilow_880 = iLow(NULL, g_timeframe_432, iLowest(NULL, g_timeframe_432, MODE_LOW, gi_472, 1));
   if (gi_528 > 0) {
      if (g_spread_584 > gi_528 * gd_596) {
         if (g_spread_588 < g_spread_584) {
            Print("Strategy2: Safe spread limit exceeded: spread = ", g_spread_584);
            if (gi_532) Print("Strategy2: Using DayDirection filter");
         }
         gi_904 = TRUE;
      } else gi_904 = FALSE;
   }
   HideTestIndicators(TRUE);
   if (gi_904) {
      gi_924 = gi_548;
      gi_928 = gi_552;
      return;
   }
   gi_924 = gi_540;
   gi_928 = gi_544;
}

int s2_openBuyRule() {
   double l_iclose_0;
   double l_iclose_8;
   int l_shift_16;
   int l_shift_20;
   if (gi_904 && !gi_532) return (0);
   if (gi_524 || gi_904) {
      if (servertime - gi_580 < 43200.0) {
         l_shift_16 = iBarShift(NULL, g_timeframe_432, gi_580 - 86400);
         l_shift_20 = iBarShift(NULL, g_timeframe_432, gi_580);
      } else {
         l_shift_16 = iBarShift(NULL, g_timeframe_432, gi_580);
         l_shift_20 = gi_560;
      }
      l_iclose_8 = iClose(NULL, g_timeframe_432, l_shift_16);
      l_iclose_0 = iClose(NULL, g_timeframe_432, l_shift_20);
      if (l_iclose_0 < l_iclose_8) return (0);
   }
   return (s2_Buy(Ask, Bid, g_icci_856, g_icci_864, g_ilow_880, g_ihigh_872, gi_484, gi_488));
}

int s2_openSellRule() {
   double l_iclose_0;
   double l_iclose_8;
   int l_shift_16;
   int l_shift_20;
   if (gi_904 && !gi_532) return (0);
   if (gi_524 || gi_904) {
      if (servertime - gi_580 < 43200.0) {
         l_shift_16 = iBarShift(NULL, g_timeframe_432, gi_580 - 86400);
         l_shift_20 = iBarShift(NULL, g_timeframe_432, gi_580);
      } else {
         l_shift_16 = iBarShift(NULL, g_timeframe_432, gi_580);
         l_shift_20 = gi_560;
      }
      l_iclose_8 = iClose(NULL, g_timeframe_432, l_shift_16);
      l_iclose_0 = iClose(NULL, g_timeframe_432, l_shift_20);
      if (l_iclose_0 > l_iclose_8) return (0);
   }
   return (s2_Sell(Ask, Bid, g_icci_856, g_icci_864, g_ilow_880, g_ihigh_872, gi_484, gi_488));
}

bool s2_closeBuyRule() {
   double l_ord_profit_0;
   if (Stealth || OrderTakeProfit() == 0.0) {
      if (gi_436 > 0)
         if (NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= NormalizeDouble(gi_436 * Point * gd_596, Digits)) return (TRUE);
   }
   if (OrderStopLoss() == 0.0) {
      if (gi_912 > 0)
         if (NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= NormalizeDouble(gi_912 * Point * gd_596, Digits)) return (TRUE);
   }
   if (gi_492) {
      if (g_ticket_932 != OrderTicket()) {
         gi_936 = 0;
         gi_940 = 0;
         g_datetime_948 = OrderOpenTime();
         g_datetime_944 = g_datetime_948;
         g_ticket_932 = OrderTicket();
         g_ord_open_price_952 = OrderOpenPrice();
      }
      l_ord_profit_0 = OrderProfit();
      if (Ask > g_ord_open_price_952) {
         gi_936 += servertime - g_datetime_944;
         g_datetime_944 = servertime;
      } else {
         gi_940 += servertime - g_datetime_944;
         g_datetime_944 = servertime;
      }
      if (servertime - g_datetime_948 > 3600.0 * gd_496) {
         if (g_icci_856 > 0.0 && l_ord_profit_0 > 0.0 && gi_936 < gi_940) return (TRUE);
         if (g_icci_856 > 100.0 && l_ord_profit_0 > 0.0) return (TRUE);
         if (servertime - g_datetime_948 > 3600.0 * gd_504 && l_ord_profit_0 > 0.0) return (TRUE);
         if (servertime - g_datetime_948 > 3600.0 * gd_512) return (TRUE);
      }
   }
   if (gi_520) return (Bid >= g_ihigh_872);
   return (Bid >= g_ihigh_888);
}

bool s2_closeSellRule() {
   double l_ord_profit_0;
   if (Stealth || OrderTakeProfit() == 0.0) {
      if (gi_436 > 0)
         if (NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= NormalizeDouble(gi_436 * Point * gd_596, Digits)) return (TRUE);
   }
   if (OrderStopLoss() == 0.0) {
      if (gi_920 > 0)
         if (NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= NormalizeDouble(gi_920 * Point * gd_596, Digits)) return (TRUE);
   }
   if (gi_492) {
      if (g_ticket_960 != OrderTicket()) {
         gi_964 = 0;
         gi_968 = 0;
         g_datetime_976 = OrderOpenTime();
         g_datetime_972 = g_datetime_976;
         g_ticket_960 = OrderTicket();
         g_ord_open_price_980 = OrderOpenPrice();
     

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

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

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

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

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

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

Стоимость полного кода
3 976,40₽ ≈ $48.60