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

MegaDroid

megadroid13.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 общих тегов
Вы автор или правообладатель?

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

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

О программе

MegaDroid — торговый советник для MetaTrader 4, использующий внешнюю библиотеку MegaDroid.dll для аутентификации, расчёта часовых смещений и проверки торгового времени. Советник реализует две независимые торговые стратегии, каждая из которых работает с собственным набором технических индикаторов и фильтров.
Первая стратегия использует таймфрейм M15 и опирается на индикаторы RSI, CCI и SMA, а также фильтры по времени и дневному диапазону цен. Вторая стратегия работает на таймфрейме M5 с применением CCI и анализа ценовых экстремумов. Обе стратегии поддерживают открытие и закрытие позиций Buy/Sell с управлением стоп-лоссом и тейк-профитом.
Советник включает управление размером лота на основе свободной маржи, режим восстановления позиций, опциональное соблюдение правил FIFO, отправку email-уведомлений и отображение статуса на графике. Также реализована проверка торгового контекста и обработка ошибок при выполнении ордеров.

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

НастройкаОписание
_1 _1 — Группа системных параметров
Stealth Stealth — Режим скрытия — отключение тейк-профита и стоп-лосса при открытии
Aggressive Aggressive — Агрессивный режим (включает вторую стратегию при активной первой)
GmtOffset GmtOffset — Смещение GMT в часах
NFA NFA — Режим NFA — ограничение на одновременные позиции
AutoLocalGmtOffset AutoLocalGmtOffset — Автоматическое определение локального смещения GMT
S1_Reference S1_Reference — Магический номер для идентификации ордеров первой стратегии
S2_Reference S2_Reference — Магический номер для идентификации ордеров второй стратегии
ReceiptCode ReceiptCode — Код активации для аутентификации
_2 _2 — Группа настроек комментариев позиций
TopPadding TopPadding — Верхний отступ элементов интерфейса на графике
LeftPadding LeftPadding — Левый отступ элементов интерфейса на графике
TextColor1 TextColor1 — Основной цвет текста на графике
TextColor2 TextColor2 — Вспомогательный цвет текста на графике
_3 _3 — Группа параметров стратегий
Slippage Slippage — Допустимое проскальзывание в пунктах
SendEmails SendEmails — Отправка email-уведомлений об открытии ордеров
OrderComments OrderComments — Комментарий, добавляемый к ордерам
_4 _4 — Группа настроек управления ордерами
LotSize LotSize — Фиксированный размер лота по умолчанию
_5 _5 — Группа настроек соотношения лотов
RiskLevel RiskLevel — Уровень риска для расчёта размера лота
RecoveryMode RecoveryMode — Режим восстановления — удвоение лота при убыточных сделках
Получить полный код

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

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

#import "MegaDroid.dll"
   int GetGmtOffset(int a0, int a1, int a2, double& a3[], int& a4[]);
   void Activate(string a0, int a1, int a2, string a3, int a4);
   int GetState();
   int GetStatus();
   int Increment(string a0);
   bool Decrement(int a0);
   bool IsTradeTime(int a0, int a1, int a2, int a3, int a4);
   bool s1_Buy(double a0, double a1, double a2, double a3, double a4, double a5, double a6, double a7, int a8, int a9);
   bool s1_Sell(double a0, double a1, double a2, double a3, double a4, double a5, double a6, double a7, int a8, int a9);
   bool s2_Buy(double a0, double a1, double a2, double a3, double a4, double a5, int a6, int a7);
   bool s2_Sell(double a0, double a1, double a2, double a3, double a4, double a5, int a6, int a7);
   bool s1_Init(int a0, int& a1[], int& a2[], int& a3[], int& a4[], int& a5[], int& a6[], int& a7[], int& a8[], int& a9[], int& a10[], int& a11[], double& a12[], double& a13[], double& a14[], double& a15[], int& a16[], int& a17[], int& a18[], int& a19[], int& a20[], int& a21[]);
   bool s2_Init(int a0, int& a1[], int& a2[], int& a3[], double& a4[], int& a5[], int& a6[], int& a7[], int& a8[], double& a9[], double& a10[], double& a11[], int& a12[], int& a13[], int& a14[], int& a15[], int& a16[], int& a17[]);
#import "kernel32.dll"
   int  GetCurrentProcess();
   int  WriteProcessMemory(int handle, int address, int& buffer[], int size, int& written);
   int  GetModuleHandleA(string module);
   int  LoadLibraryA(string module);
#import

extern string Ver.1.30 = "";
extern string _1 = "System Parameters";
extern bool Stealth = TRUE;
extern bool Aggressive = TRUE;
extern double GmtOffset = 0.0;
extern bool NFA = FALSE;
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 = WhiteSmoke;
extern color TextColor2 = LightGray;
extern string _3 = "Strategy Parameters";
extern int Slippage = 3;
extern bool SendEmails = FALSE;
extern string OrderComments = "";
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;
bool gi_220 = FALSE;
double gd_224 = 1000.0;
double gd_232 = 0.2;
bool gi_240 = FALSE;
bool gi_244 = TRUE;
bool gi_248 = TRUE;
int gi_252 = 3;
bool gi_256 = TRUE;
int gi_260;
int g_datetime_264;
int gi_268;
double g_hour_272;
int gi_280;
int g_spread_284;
int g_spread_288;
int g_stoplevel_292;
double gd_296;
double gd_304;
double gd_312;
bool gi_320 = TRUE;
int gi_324 = 0;
int gi_328 = 0;
int gi_332 = 0;
int gi_336;
int gi_340 = 1;
string gs_344;
string gs_352;
string gs_360;
int g_timeframe_368 = PERIOD_M15;
int gi_372 = 10;
int gi_376 = 50;
int gi_380 = 200;
int gi_384 = 20;
int gi_388 = 0;
int gi_392 = 16711680;
int gi_396 = 255;
int g_period_400 = 6;
int g_period_404 = 20;
int g_period_408 = 8;
double gd_412 = 70.0;
double gd_420 = 30.0;
double gd_428 = 64.0;
double gd_436 = 36.0;
bool gi_444 = TRUE;
bool gi_448 = TRUE;
bool gi_452 = TRUE;
int gi_456 = 12;
bool gi_460 = TRUE;
int gi_464 = 20;
bool gi_468 = TRUE;
bool gi_472 = FALSE;
double gd_476 = 1.0;
double gd_484 = 24.0;
bool gi_492 = TRUE;
double gd_496 = 1.0;
double gd_504 = 1.0;
bool gi_512 = FALSE;
int gi_516 = 0;
bool gi_520 = TRUE;
bool gi_524 = TRUE;
int gi_528 = 21;
int gi_532 = 1;
int gi_536 = 21;
int gi_540 = 0;
int g_timeframe_544 = PERIOD_M5;
int gi_548 = 35;
int gi_552 = 60;
int gi_556 = 200;
int gi_560 = 20;
double gd_564 = 1.0;
int gi_572 = 0;
int gi_576 = 16748574;
int gi_580 = 9639167;
int gi_584 = 36;
int g_period_588 = 168;
int g_period_592 = 275;
bool gi_596 = TRUE;
bool gi_600 = FALSE;
bool gi_604 = TRUE;
double gd_608 = 1.0;
double gd_616 = 12.0;
double gd_624 = 24.0;
bool gi_632 = FALSE;
bool gi_636 = FALSE;
int gi_640 = 0;
bool gi_644 = TRUE;
bool gi_648 = TRUE;
int gi_652 = 21;
int gi_656 = 4;
int gi_660 = 21;
int gi_664 = 0;
int gi_668 = 0;
int gi_672 = 0;
int gi_676 = 0;
int gi_680;
int gi_684;
int gi_688;
int gi_692;
double gd_696 = 0.0;
double gd_704 = 0.0;
bool gi_712 = FALSE;
bool gi_716;
bool gi_720;
int gi_724;
int g_count_728 = 0;
int g_ticket_732 = -2;
int g_ticket_736 = -2;
double g_ord_profit_740 = 0.0;
double g_ord_profit_748 = 0.0;
int g_ticket_756 = -2;
int g_ticket_760 = -2;
double g_ord_profit_764 = 0.0;
double g_ord_profit_772 = 0.0;
int gi_780 = 0;
int gi_784 = 0;
int gi_788 = 0;
int gi_792 = 0;
double g_irsi_796;
double g_irsi_804;
double g_irsi_812;
double g_irsi_820;
double g_icci_828;
double g_icci_836;
double g_icci_844;
double g_ima_868;
bool gi_876 = TRUE;
bool gi_880 = TRUE;
double g_ihigh_884 = 0.0;
double g_ilow_892 = 0.0;
bool gi_900 = FALSE;
int gi_904 = 0;
int gi_908 = 0;
int gi_912 = 0;
int gi_916 = 0;
int gi_920;
int gi_924;
int gi_928 = 0;
int gi_932 = 0;
int gi_936;
int g_datetime_940 = 0;
int g_datetime_944 = 0;
int g_ticket_948 = 0;
int g_datetime_952 = 0;
int g_ticket_956 = 0;
int g_datetime_960 = 0;
int gi_964 = 0;
bool gi_968 = TRUE;
int g_datetime_972 = 0;
int g_datetime_976 = 0;
int gi_980 = 0;
double g_icci_984;
double g_icci_992;
double g_ihigh_1000;
double g_ilow_1008;
double g_ihigh_1016;
double g_ilow_1024;
bool gi_1032 = FALSE;
int gi_1036 = 0;
int gi_1040 = 0;
int gi_1044 = 0;
int gi_1048 = 0;
int gi_1052;
int gi_1056;
int g_ticket_1060 = -1;
int gi_1064;
int gi_1068;
int g_datetime_1072;
int g_datetime_1076;
double g_ord_open_price_1080;
int g_ticket_1088 = -1;
int gi_1092;
int gi_1096;
int g_datetime_1100;
int g_datetime_1104;
double g_ord_open_price_1108;
int gi_1116 = 0;
bool gi_1120 = TRUE;
int g_datetime_1124 = 0;
int g_datetime_1128 = 0;
string gsa_1132[] = {".", "..", "...", "....", "....."};
int gi_unused_1136 = 0;
int gi_unused_1140 = 0;
string gs_1144 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int gi_unused_1152 = 0;
int gi_unused_1156 = 0;
double gda_unused_1160[];
bool gi_1164 = FALSE;

int S1_CheckSymbol() {
   int lia_0[1];
   int lia_4[1];
   int lia_8[1];
   int lia_12[1];
   int lia_16[1];
   int lia_20[1];
   int lia_24[1];
   int lia_28[1];
   int lia_32[1];
   int lia_36[1];
   int lia_40[1];
   double lda_44[1];
   double lda_48[1];
   double lda_52[1];
   double lda_56[1];
   int lia_60[1];
   int lia_64[1];
   int lia_68[1];
   int lia_72[1];
   int lia_76[1];
   int lia_80[1];
   if (s1_Init(gi_336, lia_0, lia_4, lia_8, lia_12, lia_16, lia_20, lia_24, lia_28, lia_32, lia_36, lia_40, lda_44, lda_48, lda_52, lda_56, lia_60, lia_64, lia_68, lia_72, lia_76, lia_80)) {
      gi_372 = lia_0[0];
      gi_380 = lia_4[0];
      gi_384 = lia_8[0];
      gi_388 = lia_12[0];
      g_period_400 = lia_16[0];
      g_period_404 = lia_20[0];
      g_period_408 = lia_24[0];
      gd_412 = lia_28[0];
      gd_420 = lia_32[0];
      gd_428 = lia_36[0];
      gd_436 = lia_40[0];
      gd_476 = lda_44[0];
      gd_484 = lda_48[0];
      gd_496 = lda_52[0];
      gd_504 = lda_56[0];
      gi_516 = lia_60[0];
      gi_528 = lia_64[0];
      gi_532 = lia_68[0];
      gi_536 = lia_72[0];
      gi_540 = lia_76[0];
      g_timeframe_368 = lia_80[0];
      return (1);
   }
   return (0);
}

int S2_CheckSymbol() {
   int lia_0[1];
   int lia_4[1];
   int lia_8[1];
   int lia_12[1];
   double lda_16[1];
   int lia_20[1];
   int lia_24[1];
   int lia_28[1];
   double lda_32[1];
   double lda_36[1];
   double lda_40[1];
   int lia_44[1];
   int lia_48[1];
   int lia_52[1];
   int lia_56[1];
   int lia_60[1];
   int lia_64[1];
   if (s2_Init(gi_336, lia_0, lia_4, lia_8, lda_16, lia_12, lia_20, lia_24, lia_28, lda_32, lda_36, lda_40, lia_44, lia_48, lia_52, lia_56, lia_60, lia_64)) {
      gi_548 = lia_0[0];
      gi_556 = lia_4[0];
      gi_560 = lia_8[0];
      gd_564 = lda_16[0];
      gi_572 = lia_12[0];
      gi_584 = lia_20[0];
      g_period_588 = lia_24[0];
      g_period_592 = lia_28[0];
      gd_608 = lda_32[0];
      gd_616 = lda_36[0];
      gd_624 = lda_40[0];
      gi_640 = lia_44[0];
      gi_652 = lia_48[0];
      gi_656 = lia_52[0];
      gi_660 = lia_56[0];
      gi_664 = lia_60[0];
      g_timeframe_544 = lia_64[0];
      return (1);
   }
   return (0);
}

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

int deinit() {
   Decrement(gi_336);
   if (IsTesting()) {
      if (!IsVisualMode()) {
         PrintLN("GmtOffset:");
         PrintLN(DoubleToStr(GmtOffset, 1), TextColor2, gi_672, gi_668 - 1, 55);
         PrintSep();
         PrintLN("Digits:");
         PrintLN(Digits, TextColor2, gi_672, gi_668 - 1, 35);
         PrintLN("Spread:");
         PrintLN(StringConcatenate(DoubleToStr(g_spread_284 / gd_296, 1), " (", g_spread_284, " pips)"), TextColor2, gi_672, gi_668 - 1, 40);
         PrintSep();
      }
      return (0);
   }
   switch (UninitializeReason()) {
   case REASON_CHARTCLOSE:
   case REASON_REMOVE:
      Deleteobjects(0, gi_676);
      gi_676 = 0;
      break;
   case REASON_RECOMPILE:
   case REASON_CHARTCHANGE:
   case REASON_PARAMETERS:
   case REASON_ACCOUNT:
      Deleteobjects(1, gi_676);
      gi_676 = 1;
   }
   return (0);
}

int waitForContext() {
   for (int l_count_0 = 0; IsTradeContextBusy() && l_count_0 < 20; l_count_0++) Sleep(15);
   if (l_count_0 >= 20) Print("Trade context is buisy more than ", DoubleToStr(15 * l_count_0 / 1000, 2), " seconds");
   else
      if (l_count_0 > 0) Print("Trade context was buisy ", DoubleToStr(15 * l_count_0 / 1000, 2), " seconds");
   return (l_count_0);
}

int openOrder(int a_cmd_0, double a_lots_4, double a_price_12, double a_price_20, double a_price_28, int a_magic_36, color a_color_40, bool ai_44) {
   int l_error_68;
   double l_price_48 = 0;
   double l_price_56 = 0;
   if (!ai_44) {
      l_price_48 = a_price_20;
      l_price_56 = a_price_28;
   }
   waitForContext();
   int l_ticket_64 = OrderSend(Symbol(), a_cmd_0, a_lots_4, a_price_12, Slippage * gd_296, l_price_56, l_price_48, OrderComments, a_magic_36, 0, a_color_40);
   if (l_ticket_64 > 0) {
      if (ai_44) {
         if (OrderSelect(l_ticket_64, SELECT_BY_TICKET)) {
            Sleep(1000);
            waitForContext();
            OrderModify(l_ticket_64, OrderOpenPrice(), a_price_28, a_price_20, 0, a_color_40);
         }
      }
      if (SendEmails) SendMail(gs_344, "Open " + OpPrint(a_cmd_0) + ": [" + Symbol() + "] " + NormalizeDouble(a_price_12, Digits));
   } else {
      l_error_68 = GetLastError();
      if (!ai_44) return (openOrder(a_cmd_0, a_lots_4, a_price_12, a_price_20, a_price_28, a_magic_36, a_color_40, 1));
      Print(OpPrint(a_cmd_0) + " operation failed - error(", l_error_68, "): ", ErrorDescription(l_error_68));
   }
   return (l_ticket_64);
}

int closeOrder(int ai_0, color a_color_4) {
   double l_price_8;
   int l_error_20;
   for (int l_count_16 = 0; l_count_16 < 20; l_count_16++) {
      if (waitForContext() > 5) RefreshRates();
      if (ai_0 == 0) l_price_8 = Bid;
      else l_price_8 = Ask;
      if (OrderClose(OrderTicket(), OrderLots(), l_price_8, Slippage * gd_296, a_color_4)) return (-1);
      l_error_20 = GetLastError();
      Print("Order close operation failed - error(", l_error_20, "): ", ErrorDescription(l_error_20));
      RefreshRates();
   }
   Print("Order close operation failed");
   return (OrderTicket());
}

double MMLots(double ad_0, double ad_8, int &ai_16) {
   return (NormalizeLots(ad_0 * ad_8 / MarketInfo(Symbol(), MODE_MARGINREQUIRED) / (AccountLeverage() / 100.0), ai_16));
}

double NormalizeLots(double ad_0, int &ai_8) {
   double l_lotstep_20 = MarketInfo(Symbol(), MODE_LOTSTEP);
   double l_minlot_28 = MarketInfo(Symbol(), MODE_MINLOT);
   double l_maxlot_36 = MarketInfo(Symbol(), MODE_MAXLOT);
   double ld_ret_12 = MathCeil(ad_0 / l_lotstep_20) * l_lotstep_20;
   ai_8 = 0;
   if (ld_ret_12 < l_minlot_28) {
      ld_ret_12 = l_minlot_28;
      ai_8 = -1;
   }
   if (ld_ret_12 > l_maxlot_36) {
      ld_ret_12 = l_maxlot_36;
      ai_8 = 1;
   }
   return (ld_ret_12);
}

void CountBalance(double ad_0) {
   gd_696 += ad_0;
   if (gd_704 < gd_696) gd_704 = gd_696;
}

double RecoveryLot(double ad_0) {
   int li_8;
   if (gd_704 > gd_696 && gi_780 > gi_788) return (NormalizeLots(2.0 * ad_0, li_8));
   gi_788 = gi_780;
   return (ad_0);
}

int RecoverTrades() {
   int l_count_0 = 0;
   gd_696 = 0;
   gd_704 = 0;
   for (int l_pos_4 = OrdersHistoryTotal() - 1; l_pos_4 >= 0; l_pos_4--) {
      if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderMagicNumber() != S1_Reference && OrderMagicNumber() != S2_Reference) continue;
         CountBalance(OrderProfit());
         l_count_0++;
      }
   }
   return (l_count_0);
}

int Recover(int a_magic_0, int a_cmd_4) {
   for (int l_pos_8 = OrdersTotal() - 1; l_pos_8 >= 0; l_pos_8--) {
      if (OrderSelect(l_pos_8, SELECT_BY_POS)) {
         if (OrderMagicNumber() == a_magic_0) {
            if (OrderSymbol() == Symbol())
               if (OrderType() == a_cmd_4) return (OrderTicket());
         }
      }
   }
   return (-1);
}

void RefreshOrders() {
   g_count_728 = 0;
   for (int l_pos_0 = OrdersTotal() - 1; l_pos_0 >= 0; l_pos_0--) {
      if (OrderSelect(l_pos_0, SELECT_BY_POS)) {
         if (OrderSymbol() == Symbol())
            if (OrderMagicNumber() != S1_Reference && OrderMagicNumber() != S2_Reference) g_count_728++;
      }
   }
}

int FIFOrule() {
   return (g_count_728 <= 0 && g_ticket_732 < 0 && g_ticket_736 < 0 && g_ticket_756 < 0 && g_ticket_760 < 0);
}

int s1_direction() {
   if (g_icci_828 >= 0.0 || g_irsi_796 >= 50.0) g_datetime_944 = g_datetime_264;
   if (g_icci_828 <= 0.0 || g_irsi_796 <= 50.0) g_datetime_940 = g_datetime_264;
   if (g_datetime_944 > 0 && g_datetime_264 - g_datetime_944 > 3600.0 * gd_496) return (2);
   if (g_datetime_940 > 0 && g_datetime_264 - g_datetime_940 > 3600.0 * gd_496) return (3);
   if (g_datetime_944 == 0 || g_datetime_940 == 0) return (0);
   return (1);
}

void s1_dayRange() {
   int l_shift_0;
   if (g_datetime_264 - gi_280 < 3600.0 * gi_456) l_shift_0 = iBarShift(NULL, g_timeframe_368, gi_280 - 86400);
   else l_shift_0 = iBarShift(NULL, g_timeframe_368, gi_280);
   g_ihigh_884 = iHigh(NULL, g_timeframe_368, iHighest(NULL, g_timeframe_368, MODE_HIGH, l_shift_0 - gi_260, gi_260));
   g_ilow_892 = iLow(NULL, g_timeframe_368, iLowest(NULL, g_timeframe_368, MODE_LOW, l_shift_0 - gi_260, gi_260));
}

void s1_setRules() {
   int li_0;
   HideTestIndicators(TRUE);
   g_irsi_796 = iRSI(NULL, g_timeframe_368, g_period_400, PRICE_CLOSE, gi_260);
   g_irsi_804 = iRSI(NULL, g_timeframe_368, g_period_400, PRICE_CLOSE, gi_260 + 1);
   g_irsi_812 = iRSI(NULL, g_timeframe_368, g_period_400, PRICE_CLOSE, gi_260 + 2);
   if (gi_444) g_irsi_820 = iRSI(NULL, PERIOD_M1, g_period_404, PRICE_CLOSE, gi_260);
   g_icci_828 = iCCI(NULL, g_timeframe_368, g_period_408, PRICE_TYPICAL, gi_260);
   g_icci_836 = iCCI(NULL, g_timeframe_368, g_period_408, PRICE_TYPICAL, gi_260 + 1);
   g_icci_844 = iCCI(NULL, g_timeframe_368, g_period_408, PRICE_TYPICAL, gi_260 + 2);
   g_ima_868 = iMA(NULL, g_timeframe_368, g_period_408, 0, MODE_SMA, PRICE_MEDIAN, gi_260);
   if (gi_460) {
      if (g_irsi_796 >= 50 - gi_464 / 2 && g_irsi_796 <= gi_464 / 2 + 50) {
         gi_876 = TRUE;
         gi_880 = TRUE;
      }
   }
   if (gi_452) s1_dayRange();
   if (gi_492) {
      li_0 = gi_928;
      gi_928 = s1_direction();
      if (li_0 != gi_928) {
         gi_932 = li_0;
         if (gi_928 == 1) gi_936 = g_datetime_264 + 3600.0 * gd_504;
      }
   }
   if (gi_516 > 0) {
      if (g_spread_284 > gi_516 * gd_296) {
         if (g_spread_288 < g_spread_284) {
            Print("Strategy1: Safe spread limit exceeded: spread = ", g_spread_284);
            if (gi_520) Print("Strategy1: Using DayDirection filter");
         }
         gi_900 = TRUE;
      } else gi_900 = FALSE;
   }
   HideTestIndicators(FALSE);
   if (gi_900) {
      gi_920 = gi_536;
      gi_924 = gi_540;
      return;
   }
   gi_920 = gi_528;
   gi_924 = gi_532;
}

int s1_openBuyRule() {
   double l_iclose_0;
   double l_iclose_8;
   int l_shift_16;
   int l_shift_20;
   if (!gi_876) return (0);
   if (gi_900 && !gi_520) return (0);
   if (gi_492) {
      if (gi_928 == 2) return (0);
      if (g_datetime_264 <= gi_936)
         if (gi_932 == 2) return (0);
   }
   if (gi_512 || gi_900) {
      if (g_datetime_264 - gi_280 < 43200.0) {
         l_shift_16 = iBarShift(NULL, g_timeframe_368, gi_280 - 86400);
         l_shift_20 = iBarShift(NULL, g_timeframe_368, gi_280);
      } else {
         l_shift_16 = iBarShift(NULL, g_timeframe_368, gi_280);
         l_shift_20 = gi_260;
      }
      l_iclose_8 = iClose(NULL, g_timeframe_368, l_shift_16);
      l_iclose_0 = iClose(NULL, g_timeframe_368, l_shift_20);
      if (l_iclose_0 < l_iclose_8) return (0);
   }
   return (s1_Buy(Ask, g_icci_828, g_irsi_796, g_irsi_820, g_ima_868, gd_420, gd_436, gi_372 * gd_296 * Point, gi_448, gi_444));
}

int s1_openSellRule() {
   double l_iclose_0;
   double l_iclose_8;
   int l_shift_16;
   int l_shift_20;
   if (!gi_880) return (0);
   if (gi_900 && !gi_520) return (0);
   if (gi_492) {
      if (gi_928 == 3) return (0);
      if (g_datetime_264 <= gi_936)
         if (gi_932 == 3) return (0);
   }
   if (gi_512 || gi_900) {
      if (g_datetime_264 - gi_280 < 43200.0) {
         l_shift_16 = iBarShift(NULL, g_timeframe_368, gi_280 - 86400);
         l_shift_20 = iBarShift(NULL, g_timeframe_368, gi_280);
      } else {
         l_shift_16 = iBarShift(NULL, g_timeframe_368, gi_280);
         l_shift_20 = gi_260;
      }
      l_iclose_8 = iClose(NULL, g_timeframe_368, l_shift_16);
      l_iclose_0 = iClose(NULL, g_timeframe_368, l_shift_20);
      if (l_iclose_0 > l_iclose_8) return (0);
   }
   return (s1_Sell(Bid, g_icci_828, g_irsi_796, g_irsi_820, g_ima_868, gd_412, gd_428, gi_372 * gd_296 * Point, gi_448, gi_444));
}

bool s1_closeBuyRule() {
   if (Stealth || OrderTakeProfit() == 0.0) {
      if (gi_372 > 0)
         if (NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= NormalizeDouble(gi_372 * Point * gd_296, Digits)) return (TRUE);
   }
   if (OrderStopLoss() == 0.0) {
      if (gi_908 > 0)
         if (NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= NormalizeDouble(gi_908 * Point * gd_296, Digits)) return (TRUE);
   }
   if (gi_472) {
      if (g_ticket_948 != OrderTicket()) {
         g_datetime_952 = OrderOpenTime();
         g_ticket_948 = OrderTicket();
      }
      if (g_icci_828 >= 0.0 || g_irsi_796 >= 50.0) g_datetime_952 = g_datetime_264;
      if (g_icci_844 < g_icci_836 && g_irsi_812 < g_irsi_804) g_datetime_952 = iTime(NULL, g_timeframe_368, gi_260);
      if (g_datetime_264 - g_datetime_952 > 3600.0 * gd_476 && OrderProfit() < 0.0) return (TRUE);
   }
   if (gi_468) {
      if (g_datetime_264 - OrderOpenTime() > 3600.0 * gd_476) {
         if (g_icci_828 > 0.0 && g_irsi_796 > 50.0 && OrderProfit() > 0.0) return (TRUE);
         if (g_datetime_264 - OrderOpenTime() > 3600.0 * gd_484) return (TRUE);
      }
   }
   return (FALSE);
}

bool s1_closeSellRule() {
   if (Stealth || OrderTakeProfit() == 0.0) {
      if (gi_372 > 0)
         if (NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= NormalizeDouble(gi_372 * Point * gd_296, Digits)) return (TRUE);
   }
   if (OrderStopLoss() == 0.0) {
      if (gi_916 > 0)
         if (NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= NormalizeDouble(gi_916 * Point * gd_296, Digits)) return (TRUE);
   }
   if (gi_472) {
      if (g_ticket_956 != OrderTicket()) {
         g_datetime_960 = OrderOpenTime();
         g_ticket_956 = OrderTicket();
      }
      if (g_icci_828 <= 0.0 || g_irsi_796 <= 50.0) g_datetime_960 = g_datetime_264;
      if (g_icci_844 > g_icci_836 && g_irsi_812 > g_irsi_804) g_datetime_960 = iTime(NULL, g_timeframe_368, gi_260);
      if (g_datetime_264 - g_datetime_960 > 3600.0 * gd_476 && OrderProfit() < 0.0) return (TRUE);
   }
   if (gi_468) {
      if (g_datetime_264 - OrderOpenTime() > 3600.0 * gd_476) {
         if (g_icci_828 < 0.0 && g_irsi_796 < 50.0 && OrderProfit() > 0.0) return (TRUE);
         if (g_datetime_264 - OrderOpenTime() > 3600.0 * gd_484) return (TRUE);
      }
   }
   return (FALSE);
}

int s1_openBuy() {
   double ld_0 = 0;
   double ld_8 = 0;
   if (g_ilow_892 > 0.0) {
      gi_908 = (Bid - g_ilow_892 + Point * gd_296) / Point;
      if (gi_380 > 0 && gi_908 > gi_380 * gd_296) gi_908 = gi_380 * gd_296;
      if (gi_908 < gi_384 * gd_296) gi_908 = gi_384 * gd_296;
   } else gi_908 = gi_384 * gd_296;
   if (gi_908 < g_stoplevel_292) gi_908 = g_stoplevel_292;
   if (Stealth) gi_904 = gi_376 * gd_296;
   else gi_904 = gi_372 * gd_296;
   if (gi_904 < g_stoplevel_292) gi_904 = g_stoplevel_292;
   ld_8 = NormalizeDouble(Bid - gi_908 * Point, Digits);
   ld_0 = NormalizeDouble(Ask + gi_904 * Point, Digits);
   return (openOrder(OP_BUY, gd_304, Ask, ld_0, ld_8, S1_Reference, gi_392, 0));
}

int s1_openSell() {
   double ld_0 = 0;
   double ld_8 = 0;
   if (g_ihigh_884 > 0.0) {
      gi_916 = (g_ihigh_884 - Ask + Point * gd_296) / Point;
      if (gi_380 > 0 && gi_916 > gi_380 * gd_296) gi_916 = gi_380 * gd_296;
      if (gi_916 < gi_384 * gd_296) gi_916 = gi_384 * gd_296;
   } else gi_916 = gi_384 * gd_296;
   if (gi_916 < g_stoplevel_292) gi_916 = g_stoplevel_292;
   if (Stealth) gi_912 = gi_376 * gd_296;
   else gi_912 = gi_372 * gd_296;
   if (gi_912 < g_stoplevel_292) gi_912 = g_stoplevel_292;
   ld_8 = NormalizeDouble(Ask + gi_916 * Point, Digits);
   ld_0 = NormalizeDouble(Bid - gi_912 * Point, Digits);
   return (openOrder(OP_SELL, gd_304, Bid, ld_0, ld_8, S1_Reference, gi_396, 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_904 < g_stoplevel_292) gi_904 = g_stoplevel_292;
         l_ord_takeprofit_0 = NormalizeDouble(Ask + gi_904 * Point, Digits);
      }
      if (l_ord_stoploss_8 == 0.0) {
         if (gi_908 < g_stoplevel_292) gi_908 = g_stoplevel_292;
         l_ord_stoploss_8 = NormalizeDouble(Bid - gi_908 * 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_388 > 0) {
      if (Bid - OrderOpenPrice() > Point * gd_296 * gi_388) {
         if (OrderStopLoss() < Bid - Point * gd_296 * gi_388 || OrderStopLoss() == 0.0) {
            waitForContext();
            OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - Point * gd_296 * gi_388, 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_912 < g_stoplevel_292) gi_912 = g_stoplevel_292;
         l_ord_takeprofit_0 = NormalizeDouble(Bid - gi_912 * Point, Digits);
      }
      if (l_ord_stoploss_8 == 0.0) {
         if (gi_916 < g_stoplevel_292) gi_916 = g_stoplevel_292;
         l_ord_stoploss_8 = NormalizeDouble(Ask + gi_916 * 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 (

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

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

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

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

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

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

Стоимость полного кода
4 058₽ ≈ $49.60