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

QUASMIDO

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

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

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

О программе

QUASMIDO — торговый советник для MetaTrader 4, реализующий две независимые торговые стратегии (Strategy1 и Strategy2). Каждая стратегия анализирует ценовые данные с использованием индикаторов RSI, CCI и скользящей средней, формируя сигналы на покупку и продажу. Советник поддерживает управление ордерами: открытие, модификацию и закрытие позиций с настройками стоп-лосса и тейк-профита.

В советнике реализованы фильтры по времени торговли (часы начала и окончания, специальный фильтр на пятницу, возможность торговли в воскресенье), а также мониторинг спреда с возможностью ограничения торгов при его превышении. Режим RecoveryMode позволяет корректировать размер лота на основе исторической прибыли. Режим NFA ограничивает одновременные позиции в рамках правил FIFO.

Внешняя библиотека QUASMIDO.dll используется для определения GMT-смещения и управления состоянием. Отображение информации выводится в виде меток на графике с настраиваемыми цветами и отступами.

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

НастройкаОписание
comment Комментарий версии — Текстовый параметр, содержащий версию советника
_1 Параметры системы — Группа параметров системы
Stealth Скрытый режим — Включает скрытый режим, влияющий на логику управления ордерами
Aggressive Агрессивный режим — Включает агрессивный режим работы стратегий
GmtOffset Смещение GMT — Величина смещения GMT для корректировки серверного времени
NFA Режим NFA — Включает режим NFA, ограничивающий одновременные открытые позиции
AutoLocalGmtOffset Авто локальный GMT — Автоматическое определение локального GMT-смещения
S1_Reference Ссылка стратегии 1 — Магический номер для идентификации ордеров стратегии 1
S2_Reference Ссылка стратегии 2 — Магический номер для идентификации ордеров стратегии 2
_2 Комментарий позиции — Группа параметров комментариев позиций
TopPadding Верхний отступ — Верхний отступ отображаемых меток на графике
LeftPadding Левый отступ — Левый отступ отображаемых меток на графике
TextColor1 Основной цвет текста — Основной цвет текста меток на графике
TextColor2 Вспомогательный цвет текста — Вспомогательный цвет текста меток на графике
Slippage Проскальзывание — Допустимое проскальзывание цены при исполнении ордеров
OrderComments Комментарий ордера — Текстовый комментарий, добавляемый к каждому ордеру
_3 Управление ордерами — Группа параметров управления ордерами
LotSize Размер лота — Фиксированный размер лота для торговых операций
_4 Управление соотношением ордеров — Группа параметров управления соотношением ордеров
RiskLevel Уровень риска — Уровень риска, определяющий процент от свободного маржинального баланса для расчёта лота
RecoveryMode Режим восстановления — Включает корректировку размера лота на основе исторической прибыли
_5 Фильтр времени — Группа параметров фильтра времени
gmt offset of the broker (gmtshift) Смещение GMT брокера — Смещение GMT брокера для корректировки локального времени
enable time filter (filter) Фильтр времени — Включает фильтр по времени торговли
Start opearation hour (start) Час начала — Час начала торговой сессии
Last operation hour (end) Час окончания — Час окончания торговой сессии
enable special time filter on friday (fridayfilter) Фильтр пятницы — Включает специальный фильтр времени торговли в пятницу
stop to trade after this hour (fridayend) Час окончания пятницы — Час окончания торгов в пятницу при включённом пятничном фильтре
Получить полный код

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

#include <WinUser32.mqh>
#include <stdlib.mqh>
#import "kernel32.dll"
int GetTimeZoneInformation(int& a0[]);
#import

#import "QUASMIDO.dll"
   int GetGmtOffset(int a0, int a1, int a2, double& a3[], int& a4[]);
   void Activate(string a0, int a1, double a2, string a3, int a4, string a5, int a6);
   int GetState();
   bool GetStateMessage(string a0, int a1, string a2, int a3);
   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, double& a1[]);
   bool s2_Init(int a0, double& a1[]);
#import 
extern string comment= "Ver.1.37";
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 = FALSE;
extern bool AutoServerGmtOffset = TRUE;
extern int S1_Reference = 77777773;
extern int S2_Reference = 33333337;

extern string _2 = "Comment Position";
extern int TopPadding = 30;
extern int LeftPadding = 20;
extern color TextColor1 = WhiteSmoke;
extern color TextColor2 = LightGray;

bool RemoteSafetyMode = FALSE;
extern int Slippage = 3;
bool SendEmails = FALSE;
extern string OrderComments = "";
extern string _3 = "Order Management";
extern double LotSize = 0.01;
extern string _4 = "Ratio Order Management";
extern double RiskLevel = 0.05;
extern bool RecoveryMode = TRUE;
extern string _5="Time Filter";
extern int gmtshift=2;             // gmt offset of the broker
extern bool filter=false;          // enable time filter

enum Enum_Hour{
   h00=0,      //00:00
   h01=1,      //01:00
   h02=2,      //02:00
   h03=3,      //03:00
   h04=4,      //04:00
   h05=5,      //05:00
   h06=6,      //06:00
   h07=7,      //07:00
   h08=8,      //08:00
   h09=9,      //09:00
   h10=10,     //10:00
   h11=11,     //11:00
   h12=12,     //12:00
   h13=13,     //13:00
   h14=14,     //14:00
   h15=15,     //15:00
   h16=16,     //16:00
   h17=17,     //17:00
   h18=18,     //18:00
   h19=19,     //19:00
   h20=20,     //20:00
   h21=21,     //21:00
   h22=22,     //22:00
   h23=23,     //23:00
   };
input Enum_Hour start=h02;        //Start opearation hour
input Enum_Hour end=h20;          //Last operation hour
input start=4;                    // start to trade after this hour
input end=23;                     // stop to trade after this hour
bool tradesunday=true;            // trade on sunday
extern bool fridayfilter=false;   // enable special time filter on friday
input Enum_Hour fridayend=h19;     // stop to trade after this hour
int istart,iend; 

bool gi_224 = TRUE;
bool gi_228 = TRUE;
int gi_232 = 3;
bool gi_236 = TRUE;
int gi_240;
int g_datetime_244;
int gi_248;
double g_hour_252;
int gi_260;
int g_spread_264;
int g_spread_268;
int g_stoplevel_272;
double gd_276;
double gd_284;
bool gi_300 = TRUE;
int gi_304 = 0;
int gi_308 = 0;
int gi_312 = 0;
int gi_316;
int gi_unused_320 = 1;
bool g_global_var_324 = FALSE;
string gs_328 = "";
string gs_336 = "";
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;
double gd_788 = 2.0;
int gi_796 = 0;
int gi_800 = 0;
double g_irsi_804;
double g_irsi_812;
double g_irsi_820;
double g_irsi_828;
double g_icci_836;
double g_icci_844;
double g_icci_852;
double g_ima_876;
bool gi_884 = TRUE;
bool gi_888 = TRUE;
double g_ihigh_892 = 0.0;
double g_ilow_900 = 0.0;
bool gi_908 = FALSE;
int gi_912 = 0;
int gi_916 = 0;
int gi_920 = 0;
int gi_924 = 0;
int gi_928;
int gi_932;
int gi_936 = 0;
int gi_940 = 0;
int gi_944;
int g_datetime_948 = 0;
int g_datetime_952 = 0;
int g_ticket_956 = 0;
int g_datetime_960 = 0;
int g_ticket_964 = 0;
int g_datetime_968 = 0;
bool gi_972 = TRUE;
int g_datetime_976 = 0;
int g_datetime_980 = 0;
int gi_984 = 0;
double g_icci_988;
double g_icci_996;
double g_ihigh_1004;
double g_ilow_1012;
double g_ihigh_1020;
double g_ilow_1028;
bool gi_1036 = FALSE;
int gi_1040 = 0;
int gi_1044 = 0;
int gi_1048 = 0;
int gi_1052 = 0;
int gi_1056;
int gi_1060;
int g_ticket_1064 = -1;
int gi_1068;
int gi_1072;
int g_datetime_1076;
int g_datetime_1080;
double g_ord_open_price_1084;
int g_ticket_1092 = -1;
int gi_1096;
int gi_1100;
int g_datetime_1104;
int g_datetime_1108;
double g_ord_open_price_1112;
bool gi_1120 = TRUE;
int g_datetime_1124 = 0;
int g_datetime_1128 = 0;
string gsa_1132[] = {".", "..", "...", "....", "....."};
string gs_1144 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
bool gi_1164 = FALSE;

int S1_CheckSymbol() {
   double lda_0[21];
   if (s1_Init(gi_316, lda_0)) {
      gi_372 = lda_0[0];
      gi_380 = lda_0[1];
      gi_384 = lda_0[2];
      gi_388 = lda_0[3];
      g_period_400 = lda_0[4];
      g_period_404 = lda_0[5];
      g_period_408 = lda_0[6];
      gd_412 = lda_0[7];
      gd_420 = lda_0[8];
      gd_428 = lda_0[9];
      gd_436 = lda_0[10];
      gd_476 = lda_0[11];
      gd_484 = lda_0[12];
      gd_496 = lda_0[13];
      gd_504 = lda_0[14];
      gi_516 = lda_0[15];
      gi_528 = lda_0[16];
      gi_532 = lda_0[17];
      gi_536 = lda_0[18];
      gi_540 = lda_0[19];
      g_timeframe_368 = lda_0[20];
      return (1);
   }
   return (0);
}

int S2_CheckSymbol() {
   double lda_0[17];
   if (s2_Init(gi_316, lda_0)) {
      gi_548 = lda_0[0];
      gi_556 = lda_0[1];
      gi_560 = lda_0[2];
      gd_564 = lda_0[3];
      gi_572 = lda_0[4];
      gi_584 = lda_0[5];
      g_period_588 = lda_0[6];
      g_period_592 = lda_0[7];
      gd_608 = lda_0[8];
      gd_616 = lda_0[9];
      gd_624 = lda_0[10];
      gi_640 = lda_0[11];
      gi_652 = lda_0[12];
      gi_656 = lda_0[13];
      gi_660 = lda_0[14];
      gi_664 = lda_0[15];
      g_timeframe_544 = lda_0[16];
      return (1);
   }
   return (0);
}

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

/*void GetStMessage() {
   string ls_0 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
   string ls_8 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
   if (GetStateMessage(ls_0, 60, ls_8, 255)) {
      gs_328 = StringConcatenate(ls_0, ":");
      gs_336 = ls_8;
      return;
   }
   gs_328 = "";
   gs_336 = "";
}*/

int deinit() {
   Decrement(gi_316);
   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_264 / gd_276, 1), " (", g_spread_264, " pips)"), TextColor2, gi_672, gi_668 - 1, 40);
         PrintSep();
      }
      return (0);
   }
   GlobalVariableSet("GV_MegaDroid_MKT", g_global_var_324);
   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 < 10; l_count_0++) Sleep(15);
   if (l_count_0 >= 10) 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 = FALSE) {
   double l_price_48;
   double l_price_56;
   int l_error_68;
   double l_price_76;
   int l_ticket_64 = -1;
   int l_count_72 = 0;
   bool li_84 = FALSE;
   double ld_88 = gd_788 * gd_276 * Point;
   while (!li_84) {
      if (!ai_44) {
         l_price_48 = a_price_20;
         l_price_56 = a_price_28;
      } else {
         l_price_48 = 0;
         l_price_56 = 0;
      }

   istart=start+(gmtshift);if(istart>23)istart=istart-24;
   iend=end+(gmtshift);if(iend>23)iend=iend-24;

   if((tradesunday==false && DayOfWeek()==0) || (filter && DayOfWeek()>0 && ((istart<=iend && !(Hour()>=(istart) && Hour()<=(iend)))
   || (istart>iend && !((Hour()>=(istart) && Hour()<=23) || (Hour()>=0 && Hour()<=(iend)))))) || (fridayfilter && DayOfWeek()==5 && !(Hour()<(fridayend+(gmtshift))))){return(0);}

      if (a_cmd_0 == OP_BUY) l_price_76 = MarketInfo(Symbol(), MODE_ASK);
      else
         if (a_cmd_0 == OP_SELL) l_price_76 = MarketInfo(Symbol(), MODE_BID);
      if (l_count_72 > 0 && MathAbs(l_price_76 - a_price_12) > ld_88) {
         Print("Price is too far");
         break;
      }
      waitForContext();
      l_ticket_64 = OrderSend(Symbol(), a_cmd_0, a_lots_4, a_price_12, Slippage * gd_276, l_price_56, l_price_48, OrderComments, a_magic_36, 0, a_color_40);
      if (l_ticket_64 >= 0) break;
      l_count_72++;
      l_error_68 = GetLastError();
      switch (l_error_68) {
      case 130/* INVALID_STOPS */:
         if (!ai_44) g_global_var_324 = TRUE;
      case 0/* NO_ERROR */:
         if (!ai_44) ai_44 = TRUE;
         else li_84 = TRUE;
         break;
      case 4/* SERVER_BUSY */: break;
      case 6/* NO_CONNECTION */: break;
      case 129/* INVALID_PRICE */: break;
      case 136/* OFF_QUOTES */: break;
      case 137/* BROKER_BUSY */: break;
      case 146/* TRADE_CONTEXT_BUSY */: break;
      case 135/* PRICE_CHANGED */:
      case 138/* REQUOTE */:
         RefreshRates();
         break;
      default:
         li_84 = TRUE;
      }
      if (l_count_72 > 10) break;
   }
   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 (l_count_72 > 5) Print(OpPrint(a_cmd_0) + " operation attempts: ", l_count_72);
      if (SendEmails) SendMail(gs_344, "Open " + OpPrint(a_cmd_0) + ": [" + Symbol() + "] " + NormalizeDouble(a_price_12, Digits));
   } else Print(OpPrint(a_cmd_0) + " operation failed - error(", l_error_68, "): ", ErrorDescription(l_error_68), " attempts: ", l_count_72);
   return (l_ticket_64);
}

int closeOrder(int ai_0, color a_color_4, bool ai_8 = FALSE) {
   double l_price_12;
   double l_ord_takeprofit_20;
   double l_ord_stoploss_28;
   int l_error_40;
   if (ai_8) {
      waitForContext();
      l_ord_takeprofit_20 = OrderTakeProfit();
      l_ord_stoploss_28 = OrderStopLoss();
      OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0, a_color_4);
   }
   for (int l_count_36 = 0; l_count_36 < 10; l_count_36++) {
      if (waitForContext() > 5) RefreshRates();
      if (ai_0 == 0) l_price_12 = Bid;
      else l_price_12 = Ask;
      if (OrderClose(OrderTicket(), OrderLots(), l_price_12, Slippage * gd_276, a_color_4)) return (-1);
      l_error_40 = GetLastError();
      Print("Order close operation failed - error(", l_error_40, "): ", ErrorDescription(l_error_40));
      RefreshRates();
   }
   if (ai_8) {
      waitForContext();
      OrderModify(OrderTicket(), OrderOpenPrice(), l_ord_stoploss_28, l_ord_takeprofit_20, 0, a_color_4);
   }
   Print("Order close operation failed");
   return (OrderTicket());
}

double MMLots(double ad_0, double ad_8, int &ai_16) {
   if (AccountLeverage() < 100) return (NormalizeLots(ad_0 * ad_8 / MarketInfo(Symbol(), MODE_MARGINREQUIRED), 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_796) return (NormalizeLots(1.6 * ad_0, li_8));
   gi_796 = 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_836 >= 0.0 || g_irsi_804 >= 50.0) g_datetime_952 = g_datetime_244;
   if (g_icci_836 <= 0.0 || g_irsi_804 <= 50.0) g_datetime_948 = g_datetime_244;
   if (g_datetime_952 > 0 && g_datetime_244 - g_datetime_952 > 3600.0 * gd_496) return (2);
   if (g_datetime_948 > 0 && g_datetime_244 - g_datetime_948 > 3600.0 * gd_496) return (3);
   if (g_datetime_952 == 0 || g_datetime_948 == 0) return (0);
   return (1);
}

void s1_dayRange() {
   int l_shift_0;
   if (g_datetime_244 - gi_260 < 3600.0 * gi_456) l_shift_0 = iBarShift(NULL, g_timeframe_368, gi_260 - 86400);
   else l_shift_0 = iBarShift(NULL, g_timeframe_368, gi_260);
   g_ihigh_892 = iHigh(NULL, g_timeframe_368, iHighest(NULL, g_timeframe_368, MODE_HIGH, l_shift_0 - gi_240, gi_240));
   g_ilow_900 = iLow(NULL, g_timeframe_368, iLowest(NULL, g_timeframe_368, MODE_LOW, l_shift_0 - gi_240, gi_240));
}

void s1_setRules() {
   int li_0;
   HideTestIndicators(TRUE);
   g_irsi_804 = iRSI(NULL, g_timeframe_368, g_period_400, PRICE_CLOSE, gi_240);
   g_irsi_812 = iRSI(NULL, g_timeframe_368, g_period_400, PRICE_CLOSE, gi_240 + 1);
   g_irsi_820 = iRSI(NULL, g_timeframe_368, g_period_400, PRICE_CLOSE, gi_240 + 2);
   if (gi_444) g_irsi_828 = iRSI(NULL, PERIOD_M1, g_period_404, PRICE_CLOSE, gi_240);
   g_icci_836 = iCCI(NULL, g_timeframe_368, g_period_408, PRICE_TYPICAL, gi_240);
   g_icci_844 = iCCI(NULL, g_timeframe_368, g_period_408, PRICE_TYPICAL, gi_240 + 1);
   g_icci_852 = iCCI(NULL, g_timeframe_368, g_period_408, PRICE_TYPICAL, gi_240 + 2);
   g_ima_876 = iMA(NULL, g_timeframe_368, g_period_408, 0, MODE_SMA, PRICE_MEDIAN, gi_240);
   if (gi_460) {
      if (g_irsi_804 >= 50 - gi_464 / 2 && g_irsi_804 <= gi_464 / 2 + 50) {
         gi_884 = TRUE;
         gi_888 = TRUE;
      }
   }
   if (gi_452) s1_dayRange();
   if (gi_492) {
      li_0 = gi_936;
      gi_936 = s1_direction();
      if (li_0 != gi_936) {
         gi_940 = li_0;
         if (gi_936 == 1) gi_944 = g_datetime_244 + 3600.0 * gd_504;
      }
   }
   if (gi_516 > 0) {
      if (g_spread_264 > gi_516 * gd_276) {
         if (g_spread_268 < g_spread_264) {
            Print("Strategy1: Safe spread limit exceeded: spread = ", g_spread_264);
            if (gi_520) Print("Strategy1: Using DayDirection filter");
         }
         gi_908 = TRUE;
      } else {
         if (g_spread_268 > gi_516 * gd_276) Print("Strategy1: Safe spread limit normalized: spread = ", g_spread_264);
         gi_908 = FALSE;
      }
   }
   HideTestIndicators(FALSE);
   if (gi_908) {
      gi_928 = gi_536;
      gi_932 = gi_540;
      return;
   }
   gi_928 = gi_528;
   gi_932 = gi_532;
}

int s1_openBuyRule() {
   double l_iclose_0;
   double l_iclose_8;
   int l_shift_16;
   int l_shift_20;
   if (!gi_884) return (0);
   if (gi_908 && !gi_520) return (0);
   if (gi_492) {
      if (gi_936 == 2) return (0);
      if (g_datetime_244 <= gi_944)
         if (gi_940 == 2) return (0);
   }
   if (gi_512 || gi_908) {
      if (g_datetime_244 - gi_260 < 43200.0) {
         l_shift_16 = iBarShift(NULL, g_timeframe_368, gi_260 - 86400);
         l_shift_20 = iBarShift(NULL, g_timeframe_368, gi_260);
      } else {
         l_shift_16 = iBarShift(NULL, g_timeframe_368, gi_260);
         l_shift_20 = gi_240;
      }
      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_836, g_irsi_804, g_irsi_828, g_ima_876, gd_420, gd_436, gi_372 * gd_276 * 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_888) return (0);
   if (gi_908 && !gi_520) return (0);
   if (gi_492) {
      if (gi_936 == 3) return (0);
      if (g_datetime_244 <= gi_944)
         if (gi_940 == 3) return (0);
   }
   if (gi_512 || gi_908) {
      if (g_datetime_244 - gi_260 < 43200.0) {
         l_shift_16 = iBarShift(NULL, g_timeframe_368, gi_260 - 86400);
         l_shift_20 = iBarShift(NULL, g_timeframe_368, gi_260);
      } else {
         l_shift_16 = iBarShift(NULL, g_timeframe_368, gi_260);
         l_shift_20 = gi_240;
      }
      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_836, g_irsi_804, g_irsi_828, g_ima_876, gd_412, gd_428, gi_372 * gd_276 * 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_276, Digits)) return (TRUE);
   }
   if (OrderStopLoss() == 0.0) {
      if (gi_916 > 0)
         if (NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= NormalizeDouble(gi_916 * Point * gd_276, Digits)) return (TRUE);
   }
   if (gi_472) {
      if (g_ticket_956 != OrderTicket()) {
         g_datetime_960 = OrderOpenTime();
         g_ticket_956 = OrderTicket();
      }
      if (g_icci_836 >= 0.0 || g_irsi_804 >= 50.0) g_datetime_960 = g_datetime_244;
      if (g_icci_852 < g_icci_844 && g_irsi_820 < g_irsi_812) g_datetime_960 = iTime(NULL, g_timeframe_368, gi_240);
      if (g_datetime_244 - g_datetime_960 > 3600.0 * gd_476 && OrderProfit() < 0.0) return (TRUE);
   }
   if (gi_468) {
      if (g_datetime_244 - OrderOpenTime() > 3600.0 * gd_476) {
         if (g_icci_836 > 0.0 && g_irsi_804 > 50.0 && OrderProfit() > 0.0) return (TRUE);
         if (g_datetime_244 - 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_276, Digits)) return (TRUE);
   }
   if (OrderStopLoss() == 0.0) {
      if (gi_924 > 0)
         if (NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= NormalizeDouble(gi_924 * Point * gd_276, Digits)) return (TRUE);
   }
   if (gi_472) {
      if (g_ticket_964 != OrderTicket()) {
         g_datetime_968 = OrderOpenTime();
         g_ticket_964 = OrderTicket();
      }
      if (g_icci_836 <= 0.0 || g_irsi_804 <= 50.0) g_datetime_968 = g_datetime_244;
      if (g_icci_852 > g_icci_844 && g_irsi_820 > g_irsi_812) g_datetime_968 = iTime(NULL, g_timeframe_368, gi_240);
      if (g_datetime_244 - g_datetime_968 > 3600.0 * gd_476 && OrderProfit() < 0.0) return (TRUE);
   }
   if (gi_468) {
      if (g_datetime_244 - OrderOpenTime() > 3600.0 * gd_476) {
         if (g_icci_836 < 0.0 && g_irsi_804 < 50.0 && OrderProfit() > 0.0) return (TRUE);
         if (g_datetime_244 - OrderOpenTime() > 3600.0 * gd_484) return (TRUE);
      }
   }
   return (FALSE);
}

int s1_openBuy() {
   double ld_0 = 0;
   double ld_8 = 0;
   if (g_ilow_900 > 0.0) {
      gi_916 = (Bid - g_ilow_900 + Point * gd_276) / Point;
      if (gi_380 > 0 && gi_916 > gi_380 * gd_276) gi_916 = gi_380 * gd_276;
      if (gi_916 < gi_384 * gd_276) gi_916 = gi_384 * gd_276;
   } else gi_916 = gi_384 * gd_276;
   if (gi_916 < g_stoplevel_272) gi_916 = g_stoplevel_272;
   if (Stealth) gi_912 = gi_376 * gd_276;
   else gi_912 = gi_372 * gd_276;
   if (gi_912 < g_stoplevel_272) gi_912 = g_stoplevel_272;
   ld_8 = NormalizeDouble(Bid - gi_916 * Point, Digits);
   ld_0 = NormalizeDouble(Ask + gi_912 * Point, Digits);
   return (openOrder(OP_BUY, gd_284, Ask, ld_0, ld_8, S1_Reference, gi_392, g_global_var_324));
}

int s1_openSell() {
   double ld_0 = 0;
   double ld_8 = 0;
   if (g_ihigh_892 > 0.0) {
      gi_924 = (g_ihigh_892 - Ask + Point * gd_276) / Point;
      if (gi_380 > 0 && gi_924 > gi_380 * gd_276) gi_924 = gi_380 * gd_276;
      if (gi_924 < gi_384 * gd_276) gi_924 = gi_384 * gd_276;
   } else gi_924 = gi_384 * gd_276;
   if (gi_924 < g_stoplevel_272) gi_924 = g_stoplevel_272;
   if (Stealth) gi_920 = gi_376 * gd_276;
   else gi_920 = gi_372 * gd_276;
   if (gi_920 < g_stoplevel_272) gi_920 = g_stoplevel_272;
   ld_8 = NormalizeDouble(Ask + gi_924 * Point, Digits);
   ld_0 = NormalizeDouble(Bid - gi_920 * Point, Digits);
   return (openOrder(OP_SELL, gd_284, Bid, ld_0, ld_8, S1_Reference, gi_396, g_global_var_324));
}

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_912 < g_stoplevel_272) gi_912 = g_stoplevel_272;
         l_ord_takeprofit_0 = NormalizeDouble(Ask + gi_912 * Point, Digits);
      }
      if (l_ord_stoploss_8 == 0.0) {
         if (gi_916 < g_stoplevel_272) gi_916 = g_stoplevel_272;
         l_ord_stoploss_8 = NormalizeDouble(Bid - gi_916 * 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, g_global_var_324);
      if (li_ret_16 < 0) return (li_ret_16);
   }
   if (gi_388 > 0) {
      if (Bid - OrderOpenPrice() > Point * gd_276 * gi_388) {
         if (OrderStopLoss() < Bid - Point * gd_276 * gi_388 || OrderStopLoss() == 0.0) {
            waitForContext();
            OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - Point * gd_276 * 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_920 < g_stoplevel_272) gi_920 = g_stoplevel_272;
         l_ord_tak

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

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

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

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

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

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

Стоимость полного кода
4 362,30₽ ≈ $53.32