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

apex trade pro v1.18.mq4

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

xauusd_gold_perfect.mq4MQL4 / MetaTrader 4 · 2 общих теговtm sniper pro.pineTradingView · 2 общих теговsniper pro.mq5MQL5 / MetaTrader 5 · 2 общих теговpro +.pineTradingView · 2 общих теговofada_gold_trader_v230.mq5MQL5 / MetaTrader 5 · 2 общих теговmulti strategy algo combined by enigma mode.pineTradingView · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

Apex Trade Pro — торговый советник для MetaTrader 4, работающий по нескольким независимым стратегиям на одном графике. Советник использует сигналы технических индикаторов (CCI, RSI, MACD, Stochastic, WPR) и управляет сетками ордеров с настраиваемыми параметрами риска и сопровождения. Реализованы модули перекрытия убыточных ордеров, лока и дополнительной сетки, а также фильтр экономических новостей. Все ключевые параметры вынесены во входные настройки, что позволяет гибко конфигурировать поведение советника под конкретные условия торговли.

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

НастройкаОписание
mc5 Общие настройки — Разделитель группы общих настроек советника.
работа в обе стороны одновременно (two_way) работа в обе стороны одновременно — Разрешение одновременной торговли в обе стороны.
автоматический меджик (auto_magic) автоматический меджик — Автоматическое назначение магического номера ордерам советника.
комментарий ордеров (orders_comment) комментарий ордеров — Комментарий, добавляемый к ордерам советника.
запрет торговли в одном направлении (limit_one_direction) запрет торговли в одном направлении — Запрет на одновременную торговлю в одном направлении.
подсчет комиссии и свопов (calc_swap_and_comission) подсчет комиссии и свопов — Учитывать свопы и комиссии при расчёте прибыли и убытка по ордерам.
закрытие всего при просадке % (equity_target_percent) закрытие всего при просадке % — Уровень просадки в процентах, при котором закрываются все позиции.
начало торговли в январе (january_start) начало торговли в январе — День января, с которого начинается торговля.
окончание тоговли в декабре (december_stop) окончание тоговли в декабре — День декабря, после которого торговля прекращается.
mc4 Группа настроек увеличения ТФ — Разделитель группы настроек увеличения таймфрейма принятия решений.
общее изменений ТФ по ордерам (decision_switch_tf_all) общее изменений ТФ по ордерам — Общее изменение таймфреймов принятия решений по ордерам.
стартовый ТФ (decision_time_frame_1) стартовый ТФ — Стартовый таймфрейм принятия решений.
ордеров первого уровня (decision_orders_1) ордеров первого уровня — Количество ордеров, при котором происходит переход на второй таймфрейм принятия решений.
второй ТФ (decision_time_frame_2) второй ТФ — Второй таймфрейм принятия решений.
ордеров второго уровня (decision_orders_2) ордеров второго уровня — Количество ордеров, при котором происходит переход на третий таймфрейм принятия решений.
третий ТФ (decision_time_frame_3) третий ТФ — Третий таймфрейм принятия решений.
ордеров третьего уровня (decision_orders_3) ордеров третьего уровня — Количество ордеров, при котором происходит переход на четвёртый таймфрейм принятия решений.
послений ТФ (decision_time_frame_4) послений ТФ — Последний таймфрейм принятия решений.
mc6 Группа настроек фильтра новостей — Разделитель группы настроек фильтра новостей.
фильтр новостей (news_filter) фильтр новостей — Включение фильтра экономических новостей.
количество минут до новости (AfterNewsStop) количество минут до новости — Количество минут до новости, в течение которых торговля приостанавливается при включённом фильтре новостей.
количество минут после новости (BeforeNewsStop) количество минут после новости — Количество минут после новости, в течение которых торговля приостанавливается при включённом фильтре новостей.
смещение брокера по GMT (offset) смещение брокера по GMT — Смещение времени брокера относительно GMT для корректной работы фильтра новостей.
учитывать новости низкой важности (NewsLight) учитывать новости низкой важности — Учитывать новости низкой важности при работе фильтра новостей.
учитывать новости средней важности (NewsMedium) учитывать новости средней важности — Учитывать новости средней важности при работе фильтра новостей.
учитывать новости высокой важности (NewsHard) учитывать новости высокой важности — Учитывать новости высокой важности при работе фильтра новостей.
mc0 Группа настроек стратегии 1 — Разделитель группы настроек первой стратегии.
стратегия 1 (strategy_1) стратегия 1 — Включение первой торговой стратегии советника.
меджик (magic_1) меджик — Магический номер ордеров первой стратегии.
рабочий ТФ 1 (time_frame_level1_1) рабочий ТФ 1 — Рабочий таймфрейм первого уровня для первой стратегии.
количество ордеров для изменения ТФ на 2 (order_level1_1) количество ордеров для изменения ТФ на 2 — Количество ордеров, при котором происходит изменение рабочего таймфрейма на второй уровень в первой стратегии.
рабочий ТФ 2 (time_frame_level2_1) рабочий ТФ 2 — Рабочий таймфрейм второго уровня для первой стратегии.
количество ордеров для изменения ТФ на 3 (order_level2_1) количество ордеров для изменения ТФ на 3 — Количество ордеров, при котором происходит изменение рабочего таймфрейма на третий уровень в первой стратегии.
рабочий ТФ 3 (time_frame_level3_1) рабочий ТФ 3 — Рабочий таймфрейм третьего уровня для первой стратегии.
количество ордеров для изменения ТФ на 4 (order_level3_1) количество ордеров для изменения ТФ на 4 — Количество ордеров, при котором происходит изменение рабочего таймфрейма на четвёртый уровень в первой стратегии.
рабочий ТФ 4 (time_frame_level4_1) рабочий ТФ 4 — Рабочий таймфрейм четвёртого уровня для первой стратегии.
тип сигнала (signal_type_1) тип сигнала — Тип сигнала, используемый первой стратегией.
тайм фрейм свечей (bars_time_frame_1) тайм фрейм свечей — Таймфрейм, по которому анализируются свечи для сигналов первой стратегии.
тайм фрейм CCI (cci_time_frame_1) тайм фрейм CCI — Таймфрейм, по которому рассчитывается индикатор CCI для первой стратегии.
тайм фрейм RSI (rsi_time_frame_1) тайм фрейм RSI — Таймфрейм, по которому рассчитывается индикатор RSI для первой стратегии.
тайм фрейм MACD (macd_time_frame_1) тайм фрейм MACD — Таймфрейм, по которому рассчитывается индикатор MACD для первой стратегии.
тайм фрейм Stochastic (stochastic_time_frame_1) тайм фрейм Stochastic — Таймфрейм, по которому рассчитывается индикатор Stochastic для первой стратегии.
верхний уровень CCI (cci_level_up_1) верхний уровень CCI — Верхний уровень CCI, используемый для формирования сигналов первой стратегии.
нижний уровень CCI (cci_level_down_1) нижний уровень CCI — Нижний уровень CCI, используемый для формирования сигналов первой стратегии.
верхний уровень RSI (rsi_level_up_1) верхний уровень RSI — Верхний уровень RSI, используемый для формирования сигналов первой стратегии.
нижний уровень RSI (rsi_level_down_1) нижний уровень RSI — Нижний уровень RSI, используемый для формирования сигналов первой стратегии.
верхний уровень Stochastic (stoch_level_up_1) верхний уровень Stochastic — Верхний уровень Stochastic, используемый для формирования сигналов первой стратегии.
нижний уровень Stochastic (stoch_level_down_1) нижний уровень Stochastic — Нижний уровень Stochastic, используемый для формирования сигналов первой стратегии.
вариант стартового лота (mm_type_1) вариант стартового лота — Вариант расчёта стартового лота для первой стратегии.
фиксированный лот (lot_fix_1) фиксированный лот — Фиксированный размер лота для первой стратегии.
риск на сделку (lot_risk_1) риск на сделку — Риск на сделку в процентах для первой стратегии.
множитель лота (lot_coefficient_1) множитель лота — Множитель лота для последующих ордеров первой стратегии.
стартовый шаг между ордерами (step_start_1) стартовый шаг между ордерами — Стартовый шаг между ордерами первой стратегии.
множитель шага между ордерами (step_coefficient_1) множитель шага между ордерами — Множитель шага между ордерами первой стратегии.
тейк профит (take_profit_1) тейк профит — Размер тейк-профита для ордеров первой стратегии.
проскальзывание (slippage_1) проскальзывание — Допустимое проскальзывание при открытии ордеров первой стратегии.
максимум ордеров (max_orders_1) максимум ордеров — Максимальное количество ордеров в сетке первой стратегии.
старт трейлинг стопа (trail_start_1) старт трейлинг стопа — Уровень прибыли, при котором начинается трейлинг-стоп для ордеров первой стратегии.
размер трейлинг стопа (trail_stop_1) размер трейлинг стопа — Размер трейлинг-стопа для ордеров первой стратегии.
mc1 Группа настроек стратегии 2 — Разделитель группы настроек второй стратегии.
стратегия 1 (strategy_2) стратегия 1 — Включение второй торговой стратегии советника.
меджик (magic_2) меджик — Магический номер ордеров второй стратегии.
тип сигнала (signal_type_2) тип сигнала — Тип сигнала, используемый второй стратегией.
рабочий ТФ 1 (time_frame_level1_2) рабочий ТФ 1 — Рабочий таймфрейм первого уровня для второй стратегии.
количество ордеров для изменения ТФ на 2 (order_level1_2) количество ордеров для изменения ТФ на 2 — Количество ордеров, при котором происходит изменение рабочего таймфрейма на второй уровень во второй стратегии.
рабочий ТФ 2 (time_frame_level2_2) рабочий ТФ 2 — Рабочий таймфрейм второго уровня для второй стратегии.
количество ордеров для изменения ТФ на 3 (order_level2_2) количество ордеров для изменения ТФ на 3 — Количество ордеров, при котором происходит изменение рабочего таймфрейма на третий уровень во второй стратегии.
рабочий ТФ 3 (time_frame_level3_2) рабочий ТФ 3 — Рабочий таймфрейм третьего уровня для второй стратегии.
количество ордеров для изменения ТФ на 4 (order_level3_2) количество ордеров для изменения ТФ на 4 — Количество ордеров, при котором происходит изменение рабочего таймфрейма на четвёртый уровень во второй стратегии.
рабочий ТФ 4 (time_frame_level4_2) рабочий ТФ 4 — Рабочий таймфрейм четвёртого уровня для второй стратегии.
тайм фрейм свечей (bars_time_frame_2) тайм фрейм свечей — Таймфрейм, по которому анализируются свечи для сигналов второй стратегии.
тайм фрейм CCI (cci_time_frame_2) тайм фрейм CCI — Таймфрейм, по которому рассчитывается индикатор CCI для второй стратегии.
тайм фрейм RSI (rsi_time_frame_2) тайм фрейм RSI — Таймфрейм, по которому рассчитывается индикатор RSI для второй стратегии.
тайм фрейм Stochastic (stochastic_time_frame_2) тайм фрейм Stochastic — Таймфрейм, по которому рассчитывается индикатор Stochastic для второй стратегии.
тайм фрейм WPR (wpr_time_frame_2) тайм фрейм WPR — Таймфрейм, по которому рассчитывается индикатор WPR для второй стратегии.
верхний уровень CCI (cci_level_up_2) верхний уровень CCI — Верхний уровень CCI, используемый для формирования сигналов второй стратегии.
нижний уровень CCI (cci_level_down_2) нижний уровень CCI — Нижний уровень CCI, используемый для формирования сигналов второй стратегии.
верхний уровень RSI (rsi_level_up_2) верхний уровень RSI — Верхний уровень RSI, используемый для формирования сигналов второй стратегии.
нижний уровень RSI (rsi_level_down_2) нижний уровень RSI — Нижний уровень RSI, используемый для формирования сигналов второй стратегии.
верхний уровень Stochastic (stoch_level_up_2) верхний уровень Stochastic — Верхний уровень Stochastic, используемый для формирования сигналов второй стратегии.
нижний уровень Stochastic (stoch_level_down_2) нижний уровень Stochastic — Нижний уровень Stochastic, используемый для формирования сигналов второй стратегии.
верхний уровень WPR (wpr_level_up_2) верхний уровень WPR — Верхний уровень WPR, используемый для формирования сигналов второй стратегии.
нижний уровень WPR (wpr_level_down_2) нижний уровень WPR — Нижний уровень WPR, используемый для формирования сигналов второй стратегии.
вариант стартового лота (mm_type_2) вариант стартового лота — Вариант расчёта стартового лота для второй стратегии.
фиксированный лот (lot_fix_2) фиксированный лот — Фиксированный размер лота для второй стратегии.
риск на сделку (lot_risk_2) риск на сделку — Риск на сделку в процентах для второй стратегии.
множитель лота (lot_coefficient_2) множитель лота — Множитель лота для последующих ордеров второй стратегии.
стартовый шаг между ордерами (step_start_2) стартовый шаг между ордерами — Стартовый шаг между ордерами второй стратегии.
множитель шага между ордерами (step_coefficient_2) множитель шага между ордерами — Множитель шага между ордерами второй стратегии.
тейк профит (take_profit_2) тейк профит — Размер тейк-профита для ордеров второй стратегии.
проскальзывание (slippage_2) проскальзывание — Допустимое проскальзывание при открытии ордеров второй стратегии.
максимум ордеров (max_orders_2) максимум ордеров — Максимальное количество ордеров в сетке второй стратегии.
старт трейлинг стопа (trail_start_2) старт трейлинг стопа — Уровень прибыли, при котором начинается трейлинг-стоп для ордеров второй стратегии.
размер трейлинг стопа (trail_stop_2) размер трейлинг стопа — Размер трейлинг-стопа для ордеров второй стратегии.
mc2 Группа настроек стратегии 3 — Разделитель группы настроек третьей стратегии.
стратегия 1 (strategy_3) стратегия 1 — Включение третьей торговой стратегии советника.
меджик (magic_3) меджик — Магический номер ордеров третьей стратегии.
тип сигнала (signal_type_3) тип сигнала — Тип сигнала, используемый третьей стратегией.
рабочий ТФ 1 (time_frame_level1_3) рабочий ТФ 1 — Рабочий таймфрейм первого уровня для третьей стратегии.
количество ордеров для изменения ТФ на 2 (order_level1_3) количество ордеров для изменения ТФ на 2 — Количество ордеров, при котором происходит изменение рабочего таймфрейма на второй уровень в третьей стратегии.
Получить полный код

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

int         account_number = *******;
datetime    account_date   = D'2026.06.12';

#property strict

enum ENUM_MM_TYPE
  {
   MM_TYPE_FIX_LOT   = 0,  // фиксированный лот
   MM_TYPE_RISK      = 1,  // риск от размера депозита
  };

enum ENUM_SIGNAL_TYPE
  {
   SIGNAL_TYPE_SIMPLE      = 0,  // простой сигнал
   SIGNAL_TYPE_COMPLICATED = 1,  // сложный сигнал
  };

enum ENUM_STEP_TYPE
  {
   STEP_TYPE_FIX        = 0,  // фиксированный шаг
   STEP_TYPE_ATR        = 1,  // шаг от АТР
  };

input string               mc5                  = "----------- Общие настройки -----------"; //---------------------------
input bool                 two_way              = false;             // работа в обе стороны одновременно
input bool                 auto_magic           = false;             // автоматический меджик
input string               orders_comment       = "ApexTrade str";   // комментарий ордеров
input bool                 limit_one_direction  = true;              // запрет торговли в одном направлении
input bool                 calc_swap_and_comission = true;           // подсчет комиссии и свопов
input double               account_drow_down    = 30;                // запрет новых сеток при просадке %
input double               equity_target_percent= 50;                // закрытие всего при просадке %
input int                  january_start        = 10;                // начало торговли в январе
input int                  december_stop        = 22;                // окончание тоговли в декабре
input string               mc4                  = "----------- увеличение ТФ принятия решения -----------"; //---------------------------
input bool                 decision_switch_tf_all = true;      // общее изменений ТФ по ордерам
input ENUM_TIMEFRAMES      decision_time_frame_1= PERIOD_M5;   // стартовый ТФ
input int                  decision_orders_1    = 6;           // ордеров первого уровня
input ENUM_TIMEFRAMES      decision_time_frame_2= PERIOD_H1;   // второй ТФ
input int                  decision_orders_2    = 8;           // ордеров второго уровня
input ENUM_TIMEFRAMES      decision_time_frame_3= PERIOD_H4;   // третий ТФ
input int                  decision_orders_3    = 10;          // ордеров третьего уровня
input ENUM_TIMEFRAMES      decision_time_frame_4= PERIOD_D1;   // послений ТФ

input string               mc6                  = "----------- фильтр новостей -----------"; //---------------------------
input bool                 news_filter          = false; // фильтр новостей
input int                  AfterNewsStop        = 5;     // количество минут до новости
input int                  BeforeNewsStop       = 5;     // количество минут после новости
input int                  offset               = 2;     // смещение брокера по GMT
input bool                 NewsLight            = false; // учитывать новости низкой важности
input bool                 NewsMedium           = false; // учитывать новости средней важности
input bool                 NewsHard             = true;  // учитывать новости высокой важности

input string               mc0                  = "----------- Стратегия 1 -----------"; //---------------------------
input bool                 strategy_1           = true;              // стратегия 1
input int                  magic_1              = 1231;              // меджик
input ENUM_TIMEFRAMES      time_frame_level1_1  = PERIOD_M5;         // рабочий ТФ 1
input int                  order_level1_1       = 7;                 // количество ордеров для изменения ТФ на 2
input ENUM_TIMEFRAMES      time_frame_level2_1  = PERIOD_M5;         // рабочий ТФ 2
input int                  order_level2_1       = 7;                 // количество ордеров для изменения ТФ на 3
input ENUM_TIMEFRAMES      time_frame_level3_1  = PERIOD_M5;         // рабочий ТФ 3
input int                  order_level3_1       = 7;                 // количество ордеров для изменения ТФ на 4
input ENUM_TIMEFRAMES      time_frame_level4_1  = PERIOD_M5;         // рабочий ТФ 4
input ENUM_SIGNAL_TYPE     signal_type_1        = SIGNAL_TYPE_COMPLICATED; // тип сигнала
input ENUM_TIMEFRAMES      bars_time_frame_1       = PERIOD_H1;      // тайм фрейм свечей
input ENUM_TIMEFRAMES      cci_time_frame_1        = PERIOD_H1;      // тайм фрейм CCI
input ENUM_TIMEFRAMES      rsi_time_frame_1        = PERIOD_H1;      // тайм фрейм RSI
input ENUM_TIMEFRAMES      macd_time_frame_1       = PERIOD_H1;      // тайм фрейм MACD
input ENUM_TIMEFRAMES      stochastic_time_frame_1 = PERIOD_H1;      // тайм фрейм Stochastic
ENUM_TIMEFRAMES      wpr_time_frame_1        = PERIOD_H1;      // тайм фрейм WPR
input double               cci_level_up_1       = 120;               // верхний уровень CCI
input double               cci_level_down_1     = -120;           // нижний уровень CCI
input double               rsi_level_up_1       = 60;             // верхний уровень RSI
input double               rsi_level_down_1     = 40;             // нижний уровень RSI
input double               stoch_level_up_1     = 80;             // верхний уровень Stochastic
input double               stoch_level_down_1   = 18;             // нижний уровень Stochastic
double               wpr_level_up_1       = -20;            // верхний уровень WPR
double               wpr_level_down_1     = -80;            // нижний уровень WPR
input ENUM_MM_TYPE         mm_type_1            = MM_TYPE_FIX_LOT;   // вариант стартового лота
input double               lot_fix_1            = 0.1;               // фиксированный лот
input double               lot_risk_1           = 5;                 // риск на сделку
input double               lot_coefficient_1    = 2.0;               // множитель лота
input double               step_start_1         = 20;                // стартовый шаг между ордерами
input double               step_coefficient_1   = 1.2;               // множитель шага между ордерами
input double               take_profit_1        = 20;                // тейк профит
input int                  slippage_1           = 3;                 // проскальзывание
input int                  max_orders_1         = 13;                // максимум ордеров
input double               trail_start_1        = 10;                // старт трейлинг стопа
input double               trail_stop_1         = 5;                 // размер трейлинг стопа

input string               mc1                  = "----------- Стратегия 2 -----------"; //---------------------------
input bool                 strategy_2           = true;              // стратегия 1
input int                  magic_2              = 1232;              // меджик
input ENUM_SIGNAL_TYPE     signal_type_2        = SIGNAL_TYPE_COMPLICATED; // тип сигнала
input ENUM_TIMEFRAMES      time_frame_level1_2  = PERIOD_M5;         // рабочий ТФ 1
input int                  order_level1_2       = 7;                 // количество ордеров для изменения ТФ на 2
input ENUM_TIMEFRAMES      time_frame_level2_2  = PERIOD_M5;         // рабочий ТФ 2
input int                  order_level2_2       = 7;                 // количество ордеров для изменения ТФ на 3
input ENUM_TIMEFRAMES      time_frame_level3_2  = PERIOD_M5;         // рабочий ТФ 3
input int                  order_level3_2       = 7;                 // количество ордеров для изменения ТФ на 4
input ENUM_TIMEFRAMES      time_frame_level4_2  = PERIOD_M5;         // рабочий ТФ 4
input ENUM_TIMEFRAMES      bars_time_frame_2       = PERIOD_H1;      // тайм фрейм свечей
input ENUM_TIMEFRAMES      cci_time_frame_2        = PERIOD_H1;      // тайм фрейм CCI
input ENUM_TIMEFRAMES      rsi_time_frame_2        = PERIOD_H1;      // тайм фрейм RSI
ENUM_TIMEFRAMES      macd_time_frame_2       = PERIOD_H1;      // тайм фрейм MACD
input ENUM_TIMEFRAMES      stochastic_time_frame_2 = PERIOD_H1;      // тайм фрейм Stochastic
input ENUM_TIMEFRAMES      wpr_time_frame_2        = PERIOD_H1;      // тайм фрейм WPR
input double               cci_level_up_2       = 110;               // верхний уровень CCI
input double               cci_level_down_2     = -110;           // нижний уровень CCI
input double               rsi_level_up_2       = 65;             // верхний уровень RSI
input double               rsi_level_down_2     = 35;             // нижний уровень RSI
input double               stoch_level_up_2     = 80;             // верхний уровень Stochastic
input double               stoch_level_down_2   = 20;             // нижний уровень Stochastic
input double               wpr_level_up_2       = -20;            // верхний уровень WPR
input double               wpr_level_down_2     = -80;            // нижний уровень WPR
input ENUM_MM_TYPE         mm_type_2            = MM_TYPE_FIX_LOT;   // вариант стартового лота
input double               lot_fix_2            = 0.1;               // фиксированный лот
input double               lot_risk_2           = 5;                 // риск на сделку
input double               lot_coefficient_2    = 2.0;               // множитель лота
input double               step_start_2         = 20;                // стартовый шаг между ордерами
input double               step_coefficient_2   = 1.2;               // множитель шага между ордерами
input double               take_profit_2        = 20;                // тейк профит
input int                  slippage_2           = 3;                 // проскальзывание
input int                  max_orders_2         = 13;                // максимум ордеров
input double               trail_start_2        = 10;                // старт трейлинг стопа
input double               trail_stop_2         = 5;                 // размер трейлинг стопа

input string               mc2                  = "----------- Стратегия 3 -----------"; //---------------------------
input bool                 strategy_3           = true;              // стратегия 1
input int                  magic_3              = 1233;              // меджик
input ENUM_SIGNAL_TYPE     signal_type_3        = SIGNAL_TYPE_COMPLICATED; // тип сигнала
input ENUM_TIMEFRAMES      time_frame_level1_3  = PERIOD_M5;         // рабочий ТФ 1
input int                  order_level1_3       = 7;                 // количество ордеров для изменения ТФ на 2
input ENUM_TIMEFRAMES      time_frame_level2_3  = PERIOD_M5;         // рабочий ТФ 2
input int                  order_level2_3       = 7;                 // количество ордеров для изменения ТФ на 3
input ENUM_TIMEFRAMES      time_frame_level3_3  = PERIOD_M5;         // рабочий ТФ 3
input int                  order_level3_3       = 7;                 // количество ордеров для изменения ТФ на 4
input ENUM_TIMEFRAMES      time_frame_level4_3  = PERIOD_M5;         // рабочий ТФ 4
input ENUM_TIMEFRAMES      bars_time_frame_3       = PERIOD_H1;      // тайм фрейм свечей
input ENUM_TIMEFRAMES      cci_time_frame_3        = PERIOD_H1;      // тайм фрейм CCI
input ENUM_TIMEFRAMES      rsi_time_frame_3        = PERIOD_H1;      // тайм фрейм RSI
ENUM_TIMEFRAMES      macd_time_frame_3       = PERIOD_H1;      // тайм фрейм MACD
input ENUM_TIMEFRAMES      stochastic_time_frame_3 = PERIOD_H1;      // тайм фрейм Stochastic
input ENUM_TIMEFRAMES      wpr_time_frame_3        = PERIOD_H1;      // тайм фрейм WPR
input double               cci_level_up_3       = 120;               // верхний уровень CCI
input double               cci_level_down_3     = -120;           // нижний уровень CCI
input double               rsi_level_up_3       = 70;             // верхний уровень RSI
input double               rsi_level_down_3     = 30;             // нижний уровень RSI
input double               stoch_level_up_3     = 80;             // верхний уровень Stochastic
input double               stoch_level_down_3   = 20;             // нижний уровень Stochastic
input double               wpr_level_up_3       = -20;            // верхний уровень WPR
input double               wpr_level_down_3     = -80;            // нижний уровень WPR
input ENUM_MM_TYPE         mm_type_3            = MM_TYPE_FIX_LOT;   // вариант стартового лота
input double               lot_fix_3            = 0.1;               // фиксированный лот
input double               lot_risk_3           = 5;                 // риск на сделку
input double               lot_coefficient_3    = 2.0;               // множитель лота
input double               step_start_3         = 20;                // стартовый шаг между ордерами
input double               step_coefficient_3   = 1.2;               // множитель шага между ордерами
input double               take_profit_3        = 20;                // тейк профит
input int                  slippage_3           = 3;                 // проскальзывание
input int                  max_orders_3         = 13;                // максимум ордеров
input double               trail_start_3        = 10;                // старт трейлинг стопа
input double               trail_stop_3         = 5;                 // размер трейлинг стопа

input string               mc7                  = "----------- Алгоритм перекрытия Первый-----------"; //---------------------------
input double               module_drow_down     = 30;             // просадка для активации модуля
input int                  TypeOverlap          = 2;
int                  Typeoverlap;
input int                  LevelMargTypeOverlap = 10000;
input bool                 PartOverlap          = false;
bool                 Partoverlap;
input int                  LevelMargPartOverlap = 15000;
input int                  LeadingOrder         = 4;
input int                  ProfitPersent        = 30;
input double               MultOver             = 1.3;
input int                  OverTralStart        = 5;
input int                  OverTralSize         = 2;

input string               mc8                  = "----------- Алгоритм Лока и OpenLOCK -----------"; //---------------------------
input double               crushing_drow_down   = 999;            // просадка для активации алгоритма
input int                  crushing_magic       = 1239;           // меджик
input ENUM_STEP_TYPE       crushing_step_type   = STEP_TYPE_FIX;  // тип шага докупки
input double               crushing_step_fix    = 10;             // шаг докупки
input int                  crushing_atr_period  = 14;             // период АТР
input double               crushing_atr_coefficient   = 1.0;      // коэффициент АТР
input double               crushing_lot_start_div     = 40;       // делитель для стартовый лот
input double               crushing_lot_coefficient   = 1.7;      // множитель лота
input double               crushing_lot_over_factor   = 0.5;      // множитель лота для перекрытия
input double               crushing_tp_over     = 3;              // на сколько пунктов должны перекрыть
input int                  crushing_orders_max  = 9;              // максимум ордеров сетки
input double               crushing_stop_loss   = 30;             // стоп лосс сетки

input string               mc3                  = "----------- Общие настройки индикаторов -----------"; //---------------------------
input int                  cci_period           = 14;             // период CCI
input ENUM_APPLIED_PRICE   cci_price            = PRICE_TYPICAL;  // цена CCI
input int                  rsi_period           = 14;             // период RSI
input ENUM_APPLIED_PRICE   rsi_price            = PRICE_CLOSE;    // цена RSI
input int                  macd_fast_ema_period = 12;             // период быстрой средней MACD
input int                  macd_slow_ema_period = 26;             // период медленной средней MACD
input int                  macd_signal_period   = 9;              // период сигнальной линии MACD
input ENUM_APPLIED_PRICE   macd_applied_price   = PRICE_CLOSE;    // тип цены MACD
input int                  stoch_k_period       = 5;              // период линии K Stochastic
input int                  stoch_d_period       = 3;              // период линии D Stochastic
input int                  stoch_slowing        = 3;              // замедление Stochastic
input ENUM_MA_METHOD       stoch_method         = MODE_SMA;       // метод усреднения Stochastic
input ENUM_STO_PRICE       stoch_price_field    = STO_LOWHIGH;    // тип цены Stochastic
input int                  wpr_period           = 14;             // период WPR

bool                 Info                 = true;
int                  slippage_open        = 3;
int                  slippage_close       = 15;
int                  TryToTrade           = 20;
int                  WaitTime             = 1500;
int                  CommentSize          = 0;

int      i, r, z,                               // переменные для пересчетов for
         dg, dig,                               // округление лотов и цены
         last_ticket;                           // последние тикет для пересчета ордеров for
bool     Work=true, Test=false,                 // флаг разрашения работы и фраг работы в тестере
         long_allowed=true, short_allowed=true, // разрешение покупать и продавать
         market_close=false,                    // закрыт ли рынок
         can_trade=true;                        // возможность торговать
datetime market_close_local_time,               // отметка о времени закрытия рынка
         time_bar_can_open;                     // время минутной свечи для разрешения торговать
double   Pp, Mnoj,                              // Point округленный до 2/4 знака и обратный множитель
         Pp2, Mnoj2,                            // стандартный Point и обратный множитель
         min_lot, max_lot;                      // минимальный и максимальный лот
string   Symb,                                  // валюта инструмента
         CommentBox[1],cm2;                      // комментарий на графике

bool              strategy[3];
int               magic[3];
ENUM_TIMEFRAMES   time_frame_level1[3];
int               order_level1[3];
ENUM_TIMEFRAMES   time_frame_level2[3];
int               order_level2[3];
ENUM_TIMEFRAMES   time_frame_level3[3];
int               order_level3[3];
ENUM_TIMEFRAMES   time_frame_level4[3];

ENUM_SIGNAL_TYPE     signal_type[3];
ENUM_TIMEFRAMES      bars_time_frame[3];
ENUM_TIMEFRAMES      time_frame_signal[3];
ENUM_TIMEFRAMES      cci_time_frame[3];
ENUM_TIMEFRAMES      rsi_time_frame[3];
ENUM_TIMEFRAMES      macd_time_frame[3];
ENUM_TIMEFRAMES      stochastic_time_frame[3];
ENUM_TIMEFRAMES      wpr_time_frame[3];
double cci_level_up[3];
double cci_level_down[3];
double rsi_level_up[3];
double rsi_level_down[3];
double stoch_level_up[3];
double stoch_level_down[3];
double wpr_level_up[3];
double wpr_level_down[3];
ENUM_MM_TYPE         mm_type[3];
double               lot_fix[3];
double               lot_risk[3];
double               lot_coefficient[3];
double               step_start[3];
double               step_coefficient[3];
double               take_profit[3];
int                  slippage[3];
int                  max_orders[3];
double               trail_start[3];
double               trail_stop[3];
double               trail_buy_price[3];
double               trail_sell_price[3];

datetime             time_bar[3];
datetime             time_bar_outbid_buy[3];
datetime             time_bar_outbid_sell[3];

bool                 info_state = true;
int                  info_total_buy[3];
int                  info_total_sell[3];
ENUM_TIMEFRAMES      info_time_frame_now[3];
double               info_profit[3];

int                  NomNews=0;
string               NewsArr[4][1000];
int                  Now=0;
datetime             LastUpd;
string               str1;

bool              decision_can_open_new = false;
ENUM_TIMEFRAMES   decision_time_frame[4];
int               decision_orders[3];
datetime          decision_time_bar;
bool              near_news   = false;
datetime          news_time_bar;

bool              can_open_new_buy   = false;
bool              can_open_new_sell  = false;

bool              can_open_second_buy = false;
bool              can_open_second_sell = false;

int      TicketB[],TicketS[],TicketBS[],TicketSS[],TicketBL[],TicketSL[],hp[4,6],TicketLB,TicketLS;
int      ticket,Session,Lpos[],Lpos1,Cpos[],cmagic,totalord,totalbuy,totalsell,slip,Acc,levels,infoProfit,sens,pricedistance,distance_ma,overlap,totb,tots,buybtn,sellbtn,closebtn,
         lottxt,lotbtnp,lotbtnm,closesellbtn,closebuybtn,hwnd,btn1,sum,FirstTicketBuy,FirstTicketSell,
         MagicNumber,LastTicketBuy,LastTicketSell,cu=1,ticketbuy,ticketsell,PLastTicketBuy,PLastTicketSell,totalbs,totalss,totalbl,totalsl,
                                                  bs,cbs,wllevel,wlstart,stopLVL;

color    col,ZLcolor,TPcolor,ColOver0,ColOver1;
double   pips,TPPrice,Cprofit[],Lprofit[],total_plus_money,CurrentDrawdown,CurrentMargLevel,Profit,SumProfit,SumLotBuy,SumLotSell,LotR,Sum_lot,Sumlot,minLot,delta,TV,DrawDownRate,FreeMargin,Balance,Sredstva,Step,LastSLBuy,
         LastSLSell,spr,freez,stlev,ProfitBuy,ProfitSell,LastLotBuy,LastLotSell,LastPriceBuy,LastPriceSell,
         FirstPriceBuy,FirstPriceSell,maxlot,PrOver,
         ProfitLockB,ProfitLockS,LotLockB,LotLockS,FirstProfitBuy,FirstProfitSell,FirstLotBuy,FirstLotSell,LastProfitBuy,LastProfitSell,
         Llot[],Llot1,Clot[],total_minus_money,loss_div_lot,lastprice,pointProfit,zeroPrace;

string   comment,Typetral="";
datetime TimeStart,TimeL;
bool     CloseTrigger,NoTrade,fixlotexp,InitFail,spreadON,flag,flag1;

datetime crushing_start_time_buy = 0;
datetime crushing_start_time_sell = 0;

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

void work(int index)
  {

   double high[2];
   double low[2];
   double close[2];
   double rsi[2];
   double cci[2];
   double macd[2];
   double stoch[2];
   double wpr[2];

   bool signal_buy = false;
   bool signal_sell = false;
   if(iTime(NULL,time_frame_signal[index],0) > time_bar[index])
     {
      time_bar[index] = iTime(NULL,time_frame_signal[index],0);

      if(signal_type[index]==SIGNAL_TYPE_SIMPLE)
        {

         if(index==0)
           {
            rsi[0] = iRSI(NULL,rsi_time_frame[index],rsi_period,rsi_price,1);
            high[0] = iHigh(NULL,bars_time_frame[index],1);
            low[1] = iLow(NULL,bars_time_frame[index],2);
            if(NormalizeDouble(rsi[0] - rsi_level_down[index],_Digits) > 0.0 &&
               NormalizeDouble(high[0] - low[1],_Digits) > 0.0)
               signal_sell = true;
            if(NormalizeDouble(rsi_level_up[index] - rsi[0],_Digits) > 0.0)
               signal_buy = true;
           }

         if(index==1)
           {
            close[0] = iClose(NULL,bars_time_frame[index],1);
            close[1] = iClose(NULL,bars_time_frame[index],2);
            if(NormalizeDouble(close[1] - close[0],_Digits) > 0.0)
               signal_sell = true;
            signal_buy = true;
           }

         if(index==2)
           {
            rsi[0] = iRSI(NULL,rsi_time_frame[index],rsi_period,rsi_price,1);
            if(NormalizeDouble(rsi[0]-rsi_level_down[index],_Digits) > 0.0)
               signal_sell = true;
            if(NormalizeDouble(rsi_level_up[index] - rsi[0],_Digits) > 0.0)
               signal_buy = true;
           }
        }

      if(signal_type[index]==SIGNAL_TYPE_COMPLICATED)
        {

         if(index==0)
           {
            cci[0] = iCCI(NULL,cci_time_frame[index],cci_period,cci_price,1);
            rsi[0] = iRSI(NULL,rsi_time_frame[index],rsi_period,rsi_price,1);
            macd[0]= iMACD(NULL,macd_time_frame[index],macd_fast_ema_period,macd_slow_ema_period,macd_signal_period,macd_applied_price,MODE_MAIN,1);
            macd[1]= iMACD(NULL,macd_time_frame[index],macd_fast_ema_period,macd_slow_ema_period,macd_signal_period,macd_applied_price,MODE_MAIN,2);
            stoch[0] = iStochastic(NULL,stochastic_time_frame[index],stoch_k_period,stoch_d_period,stoch_slowing,stoch_method,stoch_price_field,MODE_MAIN,1);
            if(NormalizeDouble(cci[0] - cci_level_up[index],_Digits) > 0.0 &&
               NormalizeDouble(rsi[0] - rsi_level_up[index],_Digits) > 0.0 &&
               NormalizeDouble(macd[1] - macd[0],_Digits) > 0.0 &&
               NormalizeDouble(stoch[0] - stoch_level_up[index],_Digits) > 0.0)
              {
               signal_sell = true;
              }
            if(NormalizeDouble(cci[0] - cci_level_down[index],_Digits) < 0.0 &&
               NormalizeDouble(rsi[0] - rsi_level_down[index],_Digits) < 0.0 &&
               NormalizeDouble(macd[1] - macd[0],_Digits) < 0.0 &&
               NormalizeDouble(stoch[0] - stoch_level_down[index],_Digits) < 0.0)
              {
               signal_buy = true;
              }
           }

         if(index==1)
           {
            cci[0] = iCCI(NULL,cci_time_frame[index],cci_period,cci_price,1);
            rsi[0] = iRSI(NULL,rsi_time_frame[index],rsi_period,rsi_price,1);
            stoch[0] = iStochastic(NULL,stochastic_time_frame[index],stoch_k_period,stoch_d_period,stoch_slowing,stoch_method,stoch_price_field,MODE_MAIN,1);
            wpr[0] = iWPR(NULL,wpr_time_frame[index],wpr_period,1);
            if(NormalizeDouble(cci[0] - cci_level_up[index],_Digits) > 0.0 &&
               NormalizeDouble(rsi[0] - rsi_level_up[index],_Digits) > 0.0 &&
               NormalizeDouble(stoch[0] - stoch_level_up[index],_Digits) > 0.0 &&
               NormalizeDouble(wpr[0] - wpr_level_up[index],_Digits) > 0.0)
               signal_sell = true;
            if(NormalizeDouble(cci[0] - cci_level_down[index],_Digits) < 0.0 &&
               NormalizeDouble(rsi[0] - rsi_level_down[index],_Digits) < 0.0 &&
               NormalizeDouble(stoch[0] - stoch_level_down[index],_Digits) < 0.0 &&
               NormalizeDouble(wpr[0] - wpr_level_down[index],_Digits) < 0.0)
               signal_buy = true;
           }

         if(index==2)
           {
            cci[0] = iCCI(NULL,cci_time_frame[index],cci_period,cci_price,1);
            rsi[0] = iRSI(NULL,rsi_time_frame[index],rsi_period,rsi_price,1);
            stoch[0] = iStochastic(NULL,stochastic_time_frame[index],stoch_k_period,stoch_d_period,stoch_slowing,stoch_method,stoch_price_field,MODE_MAIN,1);
            wpr[0] = iWPR(NULL,wpr_time_frame[index],wpr_period,1);
            if(NormalizeDouble(cci[0] - cci_level_up[index],_Digits) > 0.0 &&
               NormalizeDouble(rsi[0] - rsi_level_up[index],_Digits) > 0.0 &&
               NormalizeDouble(stoch[0] - stoch_level_up[index],_Digits) > 0.0 &&
               NormalizeDouble(wpr[0] - wpr_level_up[index],_Digits) > 0.0)
               signal_sell = true;
            if(NormalizeDouble(cci[0] - cci_level_down[index],_Digits) < 0.0 &&
               NormalizeDouble(rsi[0] - rsi_level_down[index],_Digits) < 0.0 &&
               NormalizeDouble(stoch[0] - stoch_level_down[index],_Digits) < 0.0 &&
               NormalizeDouble(wpr[0] - wpr_level_down[index],_Digits) < 0.0)
               signal_buy = true;
           }
        }
     }

   int      buy_orders        = 0;
   double   buy_price_last    = 0;
   double   buy_price_sum     = 0;
   double   buy_lot_sum       = 0;
   double   buy_snc           = 0;
   double   buy_lot_first     = 0;

   int      sell_orders        = 0;
   double   sell_price_last    = 0;
   double   sell_price_sum     = 0;
   double   sell_lot_sum       = 0;
   double   sell_snc           = 0;
   double   sell_lot_first     = 0;

   double   open_profit       = 0;

   last_ticket = -1;
   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderSymbol()!=_Symbol)
         continue;
      if(OrderMagicNumber()!=magic[index])
         continue;

      if(last_ticket == OrderTicket())
         continue;
      last_ticket = OrderTicket();

      int comment_dash = StringFind(OrderComment(),"-",0);
      int order_index    = (int)StringSubstr(OrderComment(),comment_dash+1,0);

      open_profit += OrderProfit()+OrderSwap()+OrderCommission();

      if(OrderType()==OP_BUY)
        {
         buy_orders++;
         if(OrderOpenPrice() < buy_price_last || buy_price_last==0)
            buy_price_last = OrderOpenPrice();
         buy_price_sum += OrderOpenPrice() * OrderLots();
         buy_lot_sum += OrderLots();
         buy_snc += OrderSwap()+OrderCommission();
         if(OrderLots()<buy_lot_first || buy_lot_first==0)
            buy_lot_first = OrderLots();
        }
      if(OrderType()==OP_SELL)
        {
         sell_orders++;
         if(OrderOpenPrice() > sell_price_last)
            sell_price_last = OrderOpenPrice();
         sell_price_sum += OrderOpenPrice() * OrderLots();
         sell_lot_sum += OrderLots();
         sell_snc += OrderSwap()+OrderCommission();
         if(OrderLots()<sell_lot_first || sell_lot_first==0)
            sell_lot_first = OrderLots();
        }
     }
   if(buy_lot_sum>0)
      buy_price_sum /= buy_lot_sum;
   if(sell_lot_sum>0)
      sell_price_sum /= sell_lot_sum;
   if(calc_swap_and_comission)
     {
      if(buy_lot_sum>0)
         buy_price_sum -= (buy_snc / (MarketInfo(_Symbol,MODE_TICKVALUE) * buy_lot_sum)) * _Point;
      if(sell_lot_sum>0)
         sell_price_sum += (sell_snc / (MarketInfo(_Symbol,MODE_TICKVALUE) * sell_lot_sum)) * _Point;
     }

   bool can_outbid_buy = false;
   ENUM_TIMEFRAMES work_tf_buy = time_frame_level1[index];
   if(buy_orders >= order_level1[index])
      work_tf_buy = time_frame_level2[index];
   if(buy_orders >= order_level2[index])
      work_tf_buy = time_frame_level3[index];
   if(buy_orders >= order_level3[index])
      work_tf_buy = time_frame_level4[index];
   if(iTime(NULL,work_tf_buy,0) > time_bar_outbid_buy[index])
     {
      time_bar_outbid_buy[index] = iTime(NULL,work_tf_buy,0);
      can_outbid_buy = true;
     }

   bool can_outbid_sell = false;
   ENUM_TIMEFRAMES work_tf_sell = time_frame_level1[index];
   if(sell_orders >= order_level1[index])
      work_tf_sell = time_frame_level2[index];
   if(sell_orders >= order_level2[index])
      work_tf_sell = time_frame_level3[index];
   if(sell_orders >= order_level3[index])
      work_tf_sell = time_frame_level4[index];
   if(iTime(NULL,work_tf_sell,0) > time_bar_outbid_sell[index])
     {
      time_bar_outbid_sell[index] = iTime(NULL,work_tf_sell,0);
      can_outbid_sell = true;
     }

   info_total_buy[index] = buy_orders;
   info_total_sell[index] = sell_orders;
   info_profit[index]   = open_profit;
   if(sell_orders>0)
     {
      info_time_frame_now[index] = work_tf_sell;
     }
   else
     {
      info_time_frame_now[index] = work_tf_buy;
     }

   double new_lot;

   if(decision_can_open_new)
     {
      if(buy_orders==0 && signal_buy && can_open_new_buy && (sell_orders==0 || two_way))
        {
         if(limit_one_direction)
            can_open_new_buy = false;
         new_lot = lot_fix[index];
         if(mm_type[index]==MM_TYPE_RISK)
           {
            new_lot = (AccountBalance() / lot_risk[index]) * 0.00001;
            new_lot *= MathPow(10,dg);
            new_lot = MathFloor(new_lot);
            new_lot /= MathPow(10,dg);
            new_lot = NormalizeDouble(new_lot,dg);
           }
         SendOrder(last_ticket,OP_BUY,new_lot,-1,0,0,1,take_profit[index],orders_comment+(string)(index+1)+"-1",magic[index]);
         return;
        }
      if(sell_orders==0 && signal_sell && can_open_new_sell && (buy_orders==0 || two_way))
        {
         if(limit_one_direction)
            can_open_new_sell = false;
         new_lot = lot_fix[index];
         if(mm_type[index]==MM_TYPE_RISK)
           {
            new_lot = (AccountBalance() / lot_risk[index]) * 0.00001;
            new_lot *= MathPow(10,dg);
            new_lot = MathFloor(new_lot);
            new_lot /= MathPow(10,dg);
            new_lot = NormalizeDouble(new_lot,dg);
           }
         SendOrder(last_ticket,OP_SELL,new_lot,-1,0,0,1,take_profit[index],orders_comment+(string)(index+1)+"-1",magic[index]);
         return;
        }
     }

   if(decision_can_open_new)
     {
      if(can_open_second_buy && can_outbid_buy && buy_orders>0 && buy_orders < max_orders[index] && NormalizeDouble((buy_price_last - Ask) - (step_start[index] * MathPow(step_coefficient[index],buy_orders-1))*Pp,_Digits) >= 0.0)
        {
         SendOrder(last_ticket,OP_BUY,NormalizeDouble(buy_lot_first * MathPow(lot_coefficient[index],buy_orders),dg),-1,0,0,0,0,orders_comment+(string)(index+1)+"-"+(string)(buy_orders+1),magic[index]);
        }
      if(can_open_second_sell && can_outbid_sell && sell_orders>0 && sell_orders < max_orders[index] && NormalizeDouble((Bid - sell_price_last) - (step_start[index] * MathPow(step_coefficient[index],sell_orders-1))*Pp,_Digits) >= 0.0)
        {
         SendOrder(last_ticket,OP_SELL,NormalizeDouble(sell_lot_first * MathPow(lot_coefficient[index],sell_orders),dg),-1,0,0,0,0,orders_comment+(string)(index+1)+"-"+(string)(sell_orders+1),magic[index]);
        }
     }

   double set_tp = 0;
   if(buy_orders>0)
     {
      set_tp = buy_price_sum + take_profit[index]*Pp;
      last_ticket = -1;
      for(i=OrdersTotal()-1; i>=0; i--)
        {
         if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
            continue;
         if(OrderSymbol()!=_Symbol)
            continue;
         if(OrderMagicNumber()!=magic[index])
            continue;

         if(last_ticket == OrderTicket())
            continue;
         last_ticket = OrderTicket();

         if(OrderType()!=OP_BUY)
            continue;

         if(NormalizeDouble(OrderTakeProfit(),_Digits)!=NormalizeDouble(set_tp,_Digits))
            ModifyOrder(OrderTicket(),-1,0,0,0,set_tp);
        }
     }
   if(sell_orders>0)
     {
      set_tp = sell_price_sum - take_profit[index]*Pp;
      last_ticket = -1;
      for(i=OrdersTotal()-1; i>=0; i--)
        {
         if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
            continue;
         if(OrderSymbol()!=_Symbol)
            continue;
         if(OrderMagicNumber()!=magic[index])
            continue;

         if(last_ticket == OrderTicket())
            continue;
         last_ticket = OrderTicket();

         if(OrderType()!=OP_SELL)
            continue;

         if(NormalizeDouble(OrderTakeProfit(),_Digits)!=NormalizeDouble(set_tp,_Digits))
           {
            ModifyOrder(OrderTicket(),-1,0,0,0,set_tp);
           }
        }
     }

   if(trail_stop[index]>0)
     {
      if(buy_orders>0)
        {

         if(!IsOptimization() && ObjectFind(0,"atp_trall_buy_"+(string)index)>=0)
            trail_buy_price[index] = ObjectGetDouble(0,"atp_trall_buy_"+(string)index,OBJPROP_PRICE,0);

         if(NormalizeDouble((Bid - buy_price_sum) - trail_start[index]*Pp,_Digits) >=0.0 &&
            NormalizeDouble((Bid - trail_buy_price[index]) - trail_stop[index]*Pp,_Digits) > 0.0)
           {
            trail_buy_price[index] = Bid - trail_stop[index]*Pp;
            create_hline("atp_trall_buy_"+(string)index,trail_buy_price[index],STYLE_DOT,1,clrDeepSkyBlue);
           }

         if(NormalizeDouble(trail_buy_price[index] - Bid,_Digits) >=0.0)
           {
            last_ticket = -1;
            for(i=OrdersTotal()-1; i>=0; i--)
              {
               if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                  continue;
               if(OrderSymbol()!=_Symbol)
                  continue;
               if(OrderMagicNumber()!=magic[index])
                  continue;

               if(last_ticket == OrderTicket())
                  continue;
               last_ticket = OrderTicket();

               if(OrderType()!=OP_BUY)
                  continue;

               CloseOrder(OrderTicket());
              }
            trail_buy_price[index] = 0.0;
            ObjectDelete(0,"atp_trall_buy_"+(string)index);
           }
        }
      else
        {
         trail_buy_price[index] = 0.0;
         ObjectDelete(0,"atp_trall_buy_"+(string)index);
        }
      if(sell_orders>0)
        {

         if(!IsOptimization() && ObjectFind(0,"atp_trall_sell_"+(string)index)>=0)
            trail_sell_price[index] = ObjectGetDouble(0,"atp_trall_sell_"+(string)index,OBJPROP_PRICE,0);

         if(NormalizeDouble((sell_price_sum - Ask) - trail_start[index]*Pp,_Digits) >=0.0 &&
            (NormalizeDouble((trail_sell_price[index] - Ask) - trail_stop[index]*Pp,_Digits) > 0.0 || trail_sell_price[index]==0))
           {
            trail_sell_price[index] = Ask + trail_stop[index]*Pp;
            create_hline("atp_trall_sell_"+(string)index,trail_sell_price[index],STYLE_DOT,1,clrTomato);
           }

         if(NormalizeDouble(Ask - trail_sell_price[index],_Digits) >=0.0 && trail_sell_price[index]>0)
           {
            last_ticket = -1;
            for(i=OrdersTotal()-1; i>=0; i--)
              {
               if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                  continue;
               if(OrderSymbol()!=_Symbol)
                  continue;
               if(OrderMagicNumber()!=magic[index])
                  continue;

               if(last_ticket == OrderTicket())
                  continue;
               last_ticket = OrderTicket();

               if(OrderType()!=OP_SELL)
                  continue;

               CloseOrder(OrderTicket());
              }
            trail_sell_price[index] = 0.0;
            ObjectDelete(0,"atp_trall_sell_"+(string)index);
           }
        }
      else
        {
         trail_sell_price[index] = 0.0;
         ObjectDelete(0,"atp_trall_sell_"+(string)index);
        }
     }

  }

void apex_module()
  {
   if(CurrentCondition()!=1)
      return;

   if(Sum_lot>0)
      sum=1;         // Суммарный лот серии Buy больше , чем Sell
   else
      if(Sum_lot <0)
         sum=-1;  // Суммарный лот серии Sell больше, чем Buy
      else
         if(Sum_lot==0)
            sum= 0;  // Суммарный лот серии Sell равен Buy

   int ProfPersent=0;

   switch(Typeoverlap)
     {

      case 1:
        {

         if(totalord>=LeadingOrder)
           {

            if(total_plus_money>0 && total_minus_money<0 && Partoverlap)
              {

               if((loss_div_lot*minLot+total_plus_money)>cu*TV*minLot)
                 {

                  if(sum==-1)
                     overlap=2;  // перекрытие для селл
                  if(sum==1)
                     overlap=1;   // перекрытие для бай
                 }
              }

            if(total_plus_money>0 && cbs>0 && Cprofit[0]<0)
              {
               if(ArraySize(Lprofit)>1 && totalord>LeadingOrder)
                  ProfPersent=(int)(MultOver*ProfitPersent);

               if((total_plus_money+Cprofit[0])/total_plus_money*100>ProfPersent)
                 {
                  if(sum==-1)
                     overlap=6; // перекрытие для селл
                  if(sum==1)
                     overlap=5; // перекрытие для бай
                 }
              }
           }
        }
      break;

      case 2:
        {

         if((totalsell>=LeadingOrder || totalbuy>=LeadingOrder))
           {

            if(total_plus_money>0 && total_minus_money<0 && Partoverlap)
              {
               if((loss_div_lot*minLot+total_plus_money)>cu*TV*minLot)
                 {
                  if(totalsell>=LeadingOrder)
                     overlap=4;
                  if(totalbuy>=LeadingOrder)
                     overlap=3;
                 }
              }
            if(total_plus_money>0 && cbs>0 && Cprofit[0]<0)
              {
               if(ArraySize(Lprofit)>1 && (totalsell>LeadingOrder || totalbuy>LeadingOrder))
                  ProfPersent=(int)(MultOver*ProfitPersent);
               if((total_plus_money+Cprofit[0])/total_plus_money*100>ProfPersent)
                 {
                  if(totalsell>=LeadingOrder)
                     overlap=8;
                  else
                     if(totalbuy>=LeadingOrder)
                        overlap=7;
                 }
              }
           }
        }
      break;
      default:
         break;
     }
   if(overlap>0)
     {

      TralOverlap();
      return;
     }
  }

bool crushing_alg(double dd)
  {
   double to_open;
   double to_close;

   bool found_crashing = false;
   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderSymbol()!=_Symbol)
         continue;
      if(OrderMagicNumber()==crushing_magic)
        {
         found_crashing = true;
         break;
        }
     }

   if(!found_crashing && crushing_drow_down>0)
     {
      if(dd<crushing_drow_down)
         return(false);

      double open_buy_lot = 0;
      double open_sell_lot = 0;
      for(i=OrdersTotal()-1; i>=0; i--)
        {
         if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
            continue;
         if(OrderSymbol()!=_Symbol)
            continue;
         if(OrderMagicNumber() != magic[0] && OrderMagicNumber() != magic[1] && OrderMagicNumber() != magic[2])
            continue;
         if(OrderType()==0)
            open_buy_lot += OrderLots();
         if(OrderType()==1)
            open_sell_lot += OrderLots();
         if(OrderTakeProfit()>0 || OrderStopLoss()>0)
            ModifyOrder(OrderTicket(),-1,0,0,0,0);
        }

      if(open_buy_lot>open_sell_lot)
         SendOrder(last_ticket,OP_SELL,open_buy_lot-open_sell_lot,-1,0,0,0,0,"",crushing_magic);
      if(open_buy_lot<open_sell_lot)
         SendOrder(last_ticket,OP_BUY,open_sell_lot-open_buy_lot,-1,0,0,0,0,"",crushing_magic);

      crushing_start_time_buy = TimeCurrent()+1;
      GlobalVariableSet("atu"+_Symbol+"lockB",crushing_start_time_buy);
      crushing_start_time_sell = TimeCurrent()+1;
      GlobalVariableSet("atu"+_Symbol+"lockS",crushing_start_time_sell);
      return(true);
     }

   if(found_crashing)
     {
      double   main_buy_price_last  = 0;
      int      main_buy_ticket_last = 0;
      double   main_buy_profit_last = 0;
      double   main_buy_lot_last    = 0;
      double   main_buy_lots        = 0;

      double   main_sell_price_last  = 0;
      int      main_sell_ticket_last = 0;
      double   main_sell_profit_last = 0;
      double   main_sell_lot_last    = 0;
      double   main_sell_lots        = 0;

      int      buy_orders     = 0;
      double   buy_price_last = 0;
      double   buy_profit     = 0;
      double   buy_price_sum  = 0;
      double   buy_price_avg  = 0;
      double   buy_lot_sum    = 0;
      double   buy_lot_first  = 0;
      int      buy_ticket_first = 0;
      double   buy_snc        = 0;

      int      sell_orders     = 0;
      double   sell_price_last = 0;
      double   sell_profit     = 0;
      double   sell_price_sum  = 0;
      double   sell_price_avg  = 0;
      double   sell_lot_sum    = 0;
      double   sell_lot_first  = 0;
      int      sell_ticket_first = 0;
      double   sell_snc        = 0;

      last_ticket = -1;
      for(i=OrdersTotal()-1; i>=0; i--)
        {
         if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
            continue;
         if(OrderSymbol()!=_Symbol)
            continue;
         if(OrderMagicNumber() != magic[0] && OrderMagicNumber() != magic[1] && OrderMagicNumber() != magic[2] && OrderMagicNumber()!=crushing_magic)
            continue;
         if(OrderTicket()==last_ticket)
            continue;
         last_ticket = OrderTicket();

         if(OrderType()==OP_BUY && OrderOpenTime() < crushing_start_time_buy)
           {
            if(OrderOpenPrice() > main_buy_price_last)
              {
               main_buy_price_last  = OrderOpenPrice();
               main_buy_ticket_last = OrderTicket();
               main_buy_profit_last = OrderProfit() + OrderSwap();
               main_buy_lot_last    = OrderLots();
              }
            main_buy_lots += OrderLots();
            continue;
           }
         if(OrderType()==OP_SELL && OrderOpenTime() < crushing_start_time_sell)
           {
            if(OrderOpenPrice() < main_sell_price_last || main_sell_price_last==0)
              {
               main_sell_price_last  = OrderOpenPrice();
               main_sell_ticket_last = OrderTicket();
               main_sell_profit_last = OrderProfit() + OrderSwap();
               main_sell_lot_last    = OrderLots();
              }
            main_sell_lots += OrderLots();
            continue;
           }

         if(OrderType()==OP_BUY)
           {
            if(OrderOpenTime() < crushing_start_time_buy)
               continue;
            buy_orders ++;
            if(OrderOpenPrice() < buy_price_last || buy_price_last==0)
               buy_price_last = OrderOpenPrice();
            buy_profit += OrderProfit() + OrderSwap() + OrderCommission();
            buy_price_sum += OrderOpenPrice() * OrderLots();
            buy_lot_sum += OrderLots();
            buy_snc += OrderCommission() + OrderSwap();
            if(OrderTicket()< buy_ticket_first || buy_ticket_first==0)
              {
               buy_ticket_first = OrderTicket();
               buy_lot_first = OrderLots();
              }
           }
         if(OrderType()==OP_SELL)
           {
            if(OrderOpenTime() < crushing_start_time_sell)
               continue;
            sell_orders ++;
            if(OrderOpenPrice() > sell_price_last)
               sell_price_last = OrderOpenPrice();
            sell_profit += OrderProfit() + OrderSwap() + OrderCommission();
            sell_price_sum += OrderOpenPrice() * OrderLots();
            sell_lot_sum += OrderLots();
            sell_snc += OrderCommission() + OrderSwap();
            if(OrderTicket()< sell_ticket_first || sell_ticket_first==0)
              {
               sell_ticket_first = OrderTicket();
               sell_lot_first = OrderLots();
              }
           }
        }
      if(buy_orders>0)
         buy_price_avg = buy_price_sum / buy_lot_sum;
      if(sell_orders>0)
         sell_price_avg = sell_price_sum / sell_lot_sum;

      if(buy_orders >= crushing_orders_max && crushing_orders_max>0 && buy_price_last - crushing_stop_loss*Pp >= Ask)
        {
         Print("b1");
         if(SendOrder(last_ticket,OP_SELL,buy_lot_sum,-1,0,0,0,0,"",crushing_magic))
           {
            if(OrderSelect(last_ticket,SELECT_BY_TICKET))
               crushing_start_time_buy = OrderOpenTime()+1;
            GlobalVariableSet("atu"+_Symbol+"lockB",crushing_start_time_buy);
           }
        }

      if(buy_orders==0)
        {
         Print("b2");
         to_open = NormalizeDouble(main_buy_lots / crushing_lot_start_div,dg);
         if(to_open < min_lot)
            to_open = min_lot;
         if(SendOrder(last_ticket,OP_BUY,to_open,-1,0,0,0,0,"",crushing_magic))
           {
            if(OrderSelect(last_ticket,SELECT_BY_TICKET))
               crushing_start_time_buy = OrderOpenTime();
            GlobalVariableSet("atu"+_Symbol+"lockB",crushing_start_time_buy);
           }
        }

      if(buy_orders>0 && buy_orders<crushing_orders_max)
        {
         double buy_step = 0;
         if(crushing_step_type == STEP_TYPE_FIX)
            buy_step = crushing_step_fix*Pp;
         if(crushing_step_type == STEP_TYPE_ATR)
            buy_step = iATR(NULL,0,crushing_atr_period,1) * crushing_atr_coefficient;
         if(buy_price_last - Ask >= buy_step)
           {
            Print("b3 "+DoubleToString(buy_price_last,_Digits)+" "+DoubleToString(buy_step,_Digits));
            SendOrder(last_ticket,OP_BUY,NormalizeDouble(buy_lot_first * MathPow(crushing_lot_coefficient,buy_orders),dg),-1,0,0,0,0,"",crushing_magic);
           }
        }

      if(buy_orders>0)
        {

         to_close = NormalizeDouble(buy_lot_first * crushing_lot_over_factor,dg);
         if(to_close< min_lot)
            to_close = min_lot;

         buy_price_sum  += main_buy_price_last * to_close;
         buy_lot_sum    += to_close;
         buy_price_avg = buy_price_sum / buy_lot_sum;

         if(Bid - buy_price_avg >= crushing_tp_over*Pp)
           {
            Print("b4");

            CloseOrder(main_buy_ticket_last,to_close);

            for(i=OrdersTotal()-1; i>=0; i--)
              {
               if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                  continue;
               if(OrderSymbol()!=_Symbol)
                  continue;
               if(OrderType()!=OP_BUY)
                  continue;
               if(OrderMagicNumber() != crushing_magic)
                  continue;
               if(OrderOpenTime() < crushing_start_time_buy)
                  continue;
               CloseOrder(OrderTicket());
              }
           }
        }

      if(sell_orders >= crushing_orders_max && crushing_orders_max>0 && sell_price_last + crushing_stop_loss*Pp <= Bid)
        {
         Print("s1");
         if(SendOrder(last_ticket,OP_BUY,sell_lot_sum,-1,0,0,0,0,"",crushing_magic))
           {
            if(OrderSelect(last_ticket,SELECT_BY_TICKET))
               crushing_start_time_sell = OrderOpenTime()+1;
            GlobalVariableSet("atu"+_Symbol+"lockS",crushing_start_time_sell);
           }
        }

      if(sell_orders==0)
        {
         Print("s2");
         to_open = NormalizeDouble(main_sell_lots / crushing_lot_start_div,dg);
         if(to_open < min_lot)
            to_open = min_lot;
         if(SendOrder(last_ticket,OP_SELL,to_open,-1,0,0,0,0,"",crushing_magic))
           {
            if(OrderSelect(last_ticket,SELECT_BY_TICKET))
               crushing_start_time_sell = OrderOpenTime();
            GlobalVariableSet("atu"+_Symbol+"lockS",crushing_start_time_sell);
           }
        }

      if(sell_orders>0 && sell_orders<crushing_orders_max)
        {
         double sell_step = 0;
         if(crushing_step_type == STEP_TYPE_FIX)
            sell_step = crushing_step_fix*Pp;
         if(crushing_step_type == STEP_TYPE_ATR)
            sell_step = iATR(NULL,0,crushing_atr_period,1) * crushing_atr_coefficient;
         if(Bid - sell_price_last >= sell_step)
           {
            Print("s3 "+DoubleToString(sell_price_last,_Digits)+" "+DoubleToString(sell_step,_Digits));
            SendOrder(last_ticket,OP_SELL,NormalizeDouble(sell_lot_first * MathPow(crushing_lot_coefficient,sell_orders),dg),-1,0,0,0,0,"",crushing_magic);
           }
        }

      if(sell_orders>0)
        {

         to_close = NormalizeDouble(sell_lot_first * crushing_lot_over_factor,dg);
         if(to_close< min_lot)
            to_close = min_lot;

         sell_price_sum  += main_sell_price_last * to_close;
         sell_lot_sum    += to_close;
         sell_price_avg = sell_price_sum / sell_lot_sum;

         if(sell_price_avg - Ask >= crushing_tp_over*Pp)
           {
            Print("s4");

            CloseOrder(main_sell_ticket_last,to_close);

            for(i=OrdersTotal()-1; i>=0; i--)
              {
               if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                  continue;
               if(OrderSymbol()!=_Symbol)
                  continue;
               if(OrderType()!=OP_SELL)
                  continue;
               if(OrderMagicNumber() != crushing_magic)
                  continue;
               if(OrderOpenTime() < crushing_start_time_sell)
                  continue;
               CloseOrder(OrderTicket());
              }
           }
        }
      return(true);
     }

   return(false);
  }

int OnInit()
  {
      // код доступен только после оплаты
   }
   Comment("");
   Work=true;
   dig=Digits;
   Pp=Point();
   Pp2=Pp;
   Mnoj2=1/Pp;
   if(NormalizeDouble(Pp,dig)==NormalizeDouble(0.00001,dig) || NormalizeDouble(Pp,dig)==NormalizeDouble(0.001,dig))
      Pp*=10;
   Mnoj=1/Pp;
   Symb=Symbol();
   if(MarketInfo(Symb,MODE_LOTSTEP)<1.0)
      dg=1;
   if(MarketInfo(Symb,MODE_LOTSTEP)<0.1)
      dg=2;
   min_lot=NormalizeDouble(MarketInfo(Symb,MODE_MINLOT),dg);
   max_lot=NormalizeDouble(MarketInfo(Symb,MODE_MAXLOT),dg);
   if(IsTesting() && !IsVisualMode())
      Test=true;
   int k;
   if(!Test)
     {
      if(CommentSize>0)
         ArrayResize(CommentBox,CommentSize);
      for(k=0; k<CommentSize; k++)
         CommentBox[k]="";
     }

   if(account_number>0 && AccountNumber() != account_number)
     {
      Alert("Wrong license");
      return(INIT_FAILED);
     }
   if(account_date>0 && TimeCurrent() > account_date)
     {
      Alert("Wrong license");
      return(INIT_FAILED);
     }

   if(GlobalVariableCheck("atu"+_Symbol+"lockB"))
      crushing_start_time_buy = (datetime)GlobalVariableGet("atu"+_Symbol+"lockB");
   if(GlobalVariableCheck("atu"+_Symbol+"lockS"))
      crushing_start_time_sell = (datetime)GlobalVariableGet("atu"+_Symbol+"lockS");

   Typeoverlap = TypeOverlap;
   Partoverlap = PartOverlap;

   strategy[0] = strategy_1;
   magic[0] = magic_1;
   time_frame_level1[0] = time_frame_level1_1;
   order_level1[0] = order_level1_1;
   time_frame_level2[0] = time_frame_level2_1;
   order_level2[0] = order_level1_1 + order_level2_1;
   time_frame_level3[0] = time_frame_level3_1;
   order_level3[0] = order_level1_1 + order_level2_1 + order_level3_1;
   time_frame_level4[0] = time_frame_level4_1;
   signal_type[0] = signal_type_1;
   bars_time_frame[0] = bars_time_frame_1;
   cci_time_frame[0] = cci_time_frame_1;
   rsi_time_frame[0] = rsi_time_frame_1;
   macd_time_frame[0] = macd_time_frame_1;
   stochastic_time_frame[0] = stochastic_time_frame_1;
   wpr_time_frame[0] = wpr_time_frame_1;
   cci_level_up[0] = cci_level_up_1;
   cci_level_down[0] = cci_level_down_1;
   rsi_level_up[0] = rsi_level_up_1;
   rsi_level_down[0] = rsi_level_down_1;
   stoch_level_up[0] = stoch_level_up_1;
   stoch_level_down[0] = stoch_level_down_1;
   wpr_level_up[0] = wpr_level_up_1;
   wpr_level_down[0] = wpr_level_down_1;
   mm_type[0] = mm_type_1;
   lot_fix[0] = lot_fix_1;
   lot_risk[0] = lot_risk_1;
   lot_coefficient[0] = lot_coefficient_1;
   step_start[0] = step_start_1;
   step_coefficient[0] = step_coefficient_1;
   take_profit[0] = take_profit_1;
   slippage[0] = slippage_1;
   max_orders[0] = max_orders_1;
   trail_start[0] = trail_start_1;
   trail_stop[0] = trail_stop_1;

   strategy[1] = strategy_2;
   magic[1] = magic_2;
   time_frame_level1[1] = time_frame_level1_2;
   order_level1[1] = order_level1_2;
   time_frame_level2[1] = time_frame_level2_2;
   order_level2[1] = order_level1_2 + order_level2_2;
   time_frame_level3[1] = time_frame_level3_2;
   order_level3[1] = order_level1_2 + order_level2_1 + order_level3_2;
   time_frame_level4[1] = time_frame_level4_2;
   signal_type[1] = signal_type_2;
   bars_time_frame[1] = bars_time_frame_2;
   cci_time_frame[1] = cci_time_frame_2;
   rsi_time_frame[1] = rsi_time_frame_2;
   macd_time_frame[1] = macd_time_frame_2;
   stochastic_time_frame[1] = stochastic_time_frame_2;
   wpr_time_frame[1] = wpr_time_frame_2;
   cci_level_up[1] = cci_level_up_2;
   cci_level_down[1] = cci_level_down_2;
   rsi_level_up[1] = rsi_level_up_2;
   rsi_level_down[1] = rsi_level_down_2;
   stoch_level_up[1] = stoch_level_up_2;
   stoch_level_down[1] = stoch_level_down_2;
   wpr_level_up[1] = wpr_level_up_2;
   wpr_level_down[1] = wpr_level_down_2;
   mm_type[1] = mm_type_2;
   lot_fix[1] = lot_fix_2;
   lot_risk[1] = lot_risk_2;
   lot_coefficient[1] = lot_coefficient_2;
   step_start[1] = step_start_2;
   step_coefficient[1] = step_coefficient_2;
   take_profit[1] = take_profit_2;
   slippage[1] = slippage_2;
   max_orders[1] = max_orders_2;
   trail_start[1] = trail_start_2;
   trail_stop[1] = trail_stop_2;

   strategy[2] = strategy_3;
   magic[2] = magic_3;
   time_frame_level1[2] = time_frame_level1_3;
   order_level1[2] = order_level1_3;
   time_frame_level2[2] = time_frame_level2_3;
   order_level2[2] = order_level1_3 + order_level2_3;
   time_frame_level3[2] = time_frame_level3_3;
   order_level3[2] = order_level1_3 + order_level2_3 + order_level3_3;
   time_frame_level4[2] = time_frame_level4_3;
   signal_type[2] = signal_type_3;
   bars_time_frame[2] = bars_time_frame_3;
   cci_time_frame[2] = cci_time_frame_3;
   rsi_time_frame[2] = rsi_time_frame_3;
   macd_time_frame[2] = macd_time_frame_3;
   stochastic_time_frame[2] = stochastic_time_frame_3;
   w

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

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

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

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

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

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

Стоимость полного кода
8 085,50₽ ≈ $98.82