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

Apex Pro 1.4

apex pro 1.4.mq4

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

the gold reaper v4.1 mt5.mq4MQL4 / MetaTrader 4 · 1 общих теговquantum queen x 4.3 (1).mq5MQL5 / MetaTrader 5 · 1 общих теговlizard_1.85.mq4MQL4 / MetaTrader 4 · 1 общих теговoverlaychart.mq4MQL4 / MetaTrader 4 · 1 общих теговmarket crusher ea guidlines.txtMQL · 1 общих теговrobot_wti ea.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Apex Pro 1.4 — торговый советник для MetaTrader 4, ориентированный на сопровождение рыночных позиций и работу с сеточными стратегиями. В коде присутствуют обработчики рыночных событий, функции открытия, модификации, закрытия и удаления ордеров, а также вспомогательные утилиты для вывода сообщений и обработки ошибок. Советник поддерживает настройку сеток, стоп-лоссов, тейк-профитов, трейлинг-стопа, локирования и перекрытия убытков за счёт прибыли. Имеется встроенная инфопанель и отправка уведомлений через внешний модуль Telegram. Продукт распространяется с проверкой лицензии по номеру счёта и дате.

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

НастройкаОписание
inp_magic Уникальный идентификатор (магическое число) для ордеров, открываемых советником.
inp_magic_lock Магическое число для ордеров, используемых в операциях локирования.
inp_magic_list Список магических чисел других советников, ордера которых необходимо учитывать.
inp_close_order_write Включает запись информации о закрытых ордерах в файл.
inp_infopanel Включает или отключает отображение информационной панели на графике.
inp_dd_max_percent Максимально допустимый уровень просадки в процентах, при котором советник прекращает торговлю.
inp_mc1 Разделитель группы настроек основной сетки.
inpm_grid_lot_type Способ определения лота для ордеров основной сетки: фиксированный или риск в процентах от депозита.
inpm_grid_lot_fix Фиксированный лот для ордеров основной сетки.
inpm_grid_lot_bal_percent Процент от баланса, используемый для расчёта лота основной сетки.
inpm_grid_by_bar Открывать ордера сетки только при появлении новой свечи.
inpm_grid_time_frame Таймфрейм свечей, используемый для открытия сетки.
inpm_grid_order_up Номер ордера в сетке, начиная с которого увеличивается лот.
inpm_grid_lot_coef Коэффициент увеличения лота для ордеров основной сетки.
inpm_grid_step_type Способ определения шага сетки: фиксированный или по ATR.
inpm_grid_step_fix Фиксированный шаг сетки в пунктах.
inpm_grid_step_atr_time_frame Таймфрейм для расчёта ATR при определении шага сетки.
inpm_grid_step_atr_period Период индикатора ATR для расчёта шага сетки.
inpm_grid_step_atr_coef Коэффициент для расчёта шага сетки на основе ATR.
inpm_grid_step_coef Коэффициент умножения шага сетки при добавлении ордеров.
inp_mc2 Разделитель группы настроек сопровождения основных сеток.
inpm_grid_take_profit Уровень тейк-профита для ордеров основной сетки.
inpm_grid_trailing_stop Величина трейлинг-стопа в пунктах.
inpm_grid_trailing_start Уровень прибыли, при котором начинается трейлинг-стоп.
inpm_grid_trailing_real_shift Отступ от цены до реального стоп-лосса при трейлинге.
inp_mc3 Разделитель группы настроек страховочной сетки.
inpm_safe_grid_drow_down Уровень просадки в процентах, при котором активируется страховочная сетка.
inpm_safe_lot_type Способ определения лота для страховочной сетки: фиксированный, риск в процентах или коэффициент от основной сетки.
inpm_safe_lot_fix Фиксированный лот для ордеров страховочной сетки.
inpm_safe_lot_bal_percent Процент от баланса для расчёта лота страховочной сетки.
inpm_safe_lot_main_coef Коэффициент, применяемый к лоту основной сетки для страховочной сетки.
inpm_safe_lot_coef Коэффициент увеличения лота для ордеров страховочной сетки.
inpm_safe_step_fix Фиксированный шаг страховочной сетки в пунктах.
inpm_safe_step_coef Коэффициент умножения шага страховочной сетки.
inpm_safe_stop_loss_type Тип стоп-лосса для страховочной сетки: отключён, в пунктах или в процентах.
inpm_safe_stop_loss_point Уровень стоп-лосса в пунктах для страховочной сетки.
inpm_safe_stop_loss_percent Уровень стоп-лосса в процентах для страховочной сетки.
inp_mc4 Разделитель группы настроек сопровождения страховочной сетки.
inpm_safe_take_profit Уровень тейк-профита для ордеров страховочной сетки.
inpm_sage_profit_percent Целевой уровень прибыли в процентах от депозита для страховочной сетки.
inpm_safe_trailing_stop Величина трейлинг-стопа для страховочной сетки в пунктах.
inpm_safe_trailing_start Уровень прибыли, при котором начинается трейлинг-стоп страховочной сетки.
inpm_safe_trailing_real_shift Отступ от цены до реального стоп-лосса при трейлинге страховочной сетки.
inp_mc5 Разделитель группы настроек локирования.
inpm_lock_percent_start Уровень просадки в процентах, при котором начинается локирование.
inpm_lock_orders Количество ордеров, открываемых при локировании.
inpm_lock_percent_end Уровень просадки в процентах, при котором локирование завершается.
inpm_lock_percent_loss Уровень просадки в процентах, который считается допустимым при локировании.
inp_mc6 Разделитель группы настроек перекрытия за счёт прибыли.
inpm_overlap_profit_type Тип прибыли, используемой для перекрытия: текущей пары или всех пар.
inpm_overlap_profit_percent Процент прибыли, используемый для перекрытия убытков.
inpm_overlap_time_hour Час, в который выполняется перекрытие за счёт прибыли.
inp_mc7 Разделитель группы настроек Open Lock.
inpm_ol_lot Начальный лот для ордеров Open Lock.
inpm_ol_lot_coef Коэффициент увеличения лота для ордеров Open Lock.
inpm_ol_step Шаг между ордерами Open Lock в пунктах.
inpm_ol_step_coef Коэффициент умножения шага для ордеров Open Lock.
inpm_ol_lot_close Лот, используемый для закрытия ордеров Open Lock.
inpm_ol_profit_over Уровень прибыли для перекрытия убытков в Open Lock.
inpm_ol_trail Величина трейлинг-стопа для ордеров Open Lock.
inpm_ol_stop_loss Уровень стоп-лосса для ордеров Open Lock.
inp_mc8 Разделитель группы настроек сушки.
inp_drying Включает или отключает режим «сушки» — период, когда торговля приостанавливается.
inp_drying_take_profit Уровень тейк-профита для ордеров, открываемых в режиме сушки.
inp_drying_start_month Месяц, с которого начинается период сушки.
inp_drying_start_day День месяца, с которого начинается период сушки.
inp_drying_end_month Месяц, в котором торговля возобновляется после периода сушки.
inp_drying_end_day День месяца, в который торговля возобновляется после периода сушки.
inp_mc9 Разделитель группы настроек стратегии 1-2.
inp_s_time_frame_big Старший таймфрейм, используемый в стратегии 1-2.
inp_s_ma_fast_period Период быстрой скользящей средней.
inp_s_ma_fast_method Метод сглаживания для быстрой скользящей средней.
inp_s_ma_fast_price Цена, применяемая для расчёта быстрой скользящей средней.
inp_s_ma_slow_period Период медленной скользящей средней.
inp_s_ma_slow_method Метод сглаживания для медленной скользящей средней.
inp_s_ma_slow_price Цена, применяемая для расчёта медленной скользящей средней.
inp_s_time_frame_small Младший таймфрейм, используемый в стратегии 1-2.
inp_s_adx_period Период индикатора ADX, используемого в стратегии 1-2.
inp_s_adx_price Цена, применяемая для расчёта индикатора ADX.
inp_s_cci_period Период индикатора CCI, используемого в стратегии 1-2.
inp_s_cci_price Цена, применяемая для расчёта индикатора CCI.
inp_s_cci_level_buy_1 Первый уровень CCI для сигналов на покупку.
inp_s_cci_level_buy_2 Второй уровень CCI для сигналов на покупку.
inp_s_cci_level_sell_1 Первый уровень CCI для сигналов на продажу.
inp_s_cci_level_sell_2 Второй уровень CCI для сигналов на продажу.
Получить полный код

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

#property strict
#resource "apex_logo.bmp"

string   ea_version  = "1.4";

int      license_login     = 5397037;
datetime license_time      = D'2026.01.01';

enum ENUM_LOT_TYPE{
   LOT_TYPE_FIX   = 0,  // фиксированный лот
   LOT_TYPE_RISK  = 1,  // риск в % от депозита
};

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

enum ENUM_SAFE_LOT_TYPE{
   SAFE_LOT_TYPE_FIX =0,   // фиксированный лот
   SAFE_LOT_TYPE_RISK=1,   // риск в % от деопзита
   SAFE_LOT_TYPE_MAIN=2,   // коэффициет от освноной сетки
};

enum ENUM_USE_PROFIT{
   USE_PROFIT_OFF    = 0,  // не использовать
   USE_PROFIT_CURRENT= 1,  // текущей пары
   USE_PROFIT_ALL    = 2,  // всех пар
};

enum ENUM_SAFE_SL_TYPE{
   SAFE_SL_TYPE_OFF     = 0,  // отключен
   SAFE_SL_TYPE_POINT   = 1,  // пункты
   SAFE_SL_TYPE_PERCENT = 2,  // процент
};

enum ENUM_MONTH{
   MONTH_1        = 1,  // Январь
   MONTH_2        = 2,  // Февраль
   MONTH_3        = 3,  // Март
   MONTH_4        = 4,  // Апрель
   MONTH_5        = 5,  // Май
   MONTH_6        = 6,  // Июнь
   MONTH_7        = 7,  // Июль
   MONTH_8        = 8,  // Август
   MONTH_9        = 9,  // Сентябрь
   MONTH_10       = 10,  // Октябрь
   MONTH_11       = 11,  // Ноябрь
   MONTH_12       = 12,  // Декабрь
};

input string               inp_telegram_login         = "@Apex";      // логин телеграм
      string               server_ip                  = "45.12.212.65"; 
      string               server_port                = "11880";
input int                  inp_magic                  = 34533;          // Меджик
input int                  inp_magic_lock             = 34534;          // Меджик лок
input string               inp_magic_list             = "";             // список меджиков других советников
      int                  inp_magic_add[];
input bool                 inp_close_order_write      = true;           // запись закрытых ордеров в файл
      bool                 inp_debug                  = true;
input bool                 inp_infopanel              = true;           // инфопанель
input double               inp_dd_max_percent         = 60;             // максимальная просадка

input string               inp_mc1                    = "------------ Основная сетка ------------";   // ------------------------
input ENUM_LOT_TYPE        inpm_grid_lot_type          = LOT_TYPE_FIX;   // тип лота
input double               inpm_grid_lot_fix           = 0.1;            // фиксированный лот
input double               inpm_grid_lot_bal_percent   = 0.1;            // % от депозита
input bool                 inpm_grid_by_bar            = true;           // открытие сетки по свечам
input ENUM_TIMEFRAMES      inpm_grid_time_frame        = PERIOD_M15;     // тайм фрейм свечей
input int                  inpm_grid_order_up          = 4;              // номер ордера увеличения лота
input double               inpm_grid_lot_coef          = 1.5;            // коэффициент лота
input ENUM_STEP_TYPE       inpm_grid_step_type         = STEP_TYPE_FIX;  // тип шага
input int                  inpm_grid_step_fix          = 100;            // шаг сетки
input ENUM_TIMEFRAMES      inpm_grid_step_atr_time_frame = PERIOD_M15;     // тайм фрейм - АТР
input int                  inpm_grid_step_atr_period   = 14;             // период - АТР
input double               inpm_grid_step_atr_coef     = 2;              // коэффициент шага от АТР
input double               inpm_grid_step_coef         = 1.2;            // умножение шага

      ENUM_LOT_TYPE        inp_grid_lot_type          = LOT_TYPE_FIX;   // тип лота
      double               inp_grid_lot_fix           = 0.1;            // фиксированный лот
      double               inp_grid_lot_bal_percent   = 0.1;            // % от депозита
      bool                 inp_grid_by_bar            = true;           // открытие сетки по свечам
      ENUM_TIMEFRAMES      inp_grid_time_frame        = PERIOD_M15;     // тайм фрейм свечей
      int                  inp_grid_order_up          = 4;              // номер ордера увеличения лота
      double               inp_grid_lot_coef          = 1.5;            // коэффициент лота
      ENUM_STEP_TYPE       inp_grid_step_type         = STEP_TYPE_FIX;  // тип шага
      int                  inp_grid_step_fix          = 100;            // шаг сетки
      ENUM_TIMEFRAMES      inp_grid_step_atr_time_frame = PERIOD_M15;     // тайм фрейм - АТР
      int                  inp_grid_step_atr_period   = 14;             // период - АТР
      double               inp_grid_step_atr_coef     = 2;              // коэффициент шага от АТР
      double               inp_grid_step_coef         = 1.2;            // умножение шага

input string               inp_mc2                    = "------------ Сопровождение основных сеток ------------";   // ------------------------
input int                  inpm_grid_take_profit          = 0;           // тейк профит
input int                  inpm_grid_trailing_stop        = 50;          // трейлинг стоп 
input int                  inpm_grid_trailing_start       = 100;         // уровень старта трейлинг стопа 
input int                  inpm_grid_trailing_real_shift  = 20;          // отступ до реального стопа

      int                  inp_grid_take_profit          = 0;           // тейк профит
      int                  inp_grid_trailing_stop        = 50;          // трейлинг стоп 
      int                  inp_grid_trailing_start       = 100;         // уровень старта трейлинг стопа 
      int                  inp_grid_trailing_real_shift  = 20;          // отступ до реального стопа

input string               inp_mc3                    = "------------ Страховочная сетка ------------";   // ------------------------
input double               inpm_safe_grid_drow_down    = 4;                 // % просадки
input ENUM_SAFE_LOT_TYPE   inpm_safe_lot_type          = SAFE_LOT_TYPE_MAIN;// тип лота
input double               inpm_safe_lot_fix           = 0.1;               // фиксированный лот
input double               inpm_safe_lot_bal_percent   = 0.1;               // % от депозита
input double               inpm_safe_lot_main_coef     = 0.2;               // коэффициент от основной сетки
input double               inpm_safe_lot_coef          = 1.2;               // коэффициент лота сетки
input int                  inpm_safe_step_fix          = 100;               // шаг сетки
input double               inpm_safe_step_coef         = 1.2;               // умножение шага
input ENUM_SAFE_SL_TYPE    inpm_safe_stop_loss_type    = SAFE_SL_TYPE_PERCENT; // тип стоп лосса
input int                  inpm_safe_stop_loss_point   = 400;              // стоп лосс в пунктах
input double               inpm_safe_stop_loss_percent = 2;                // стоп лосс в процента

      double               inp_safe_grid_drow_down    = 4;                 // % просадки
      ENUM_SAFE_LOT_TYPE   inp_safe_lot_type          = SAFE_LOT_TYPE_MAIN;// тип лота
      double               inp_safe_lot_fix           = 0.1;               // фиксированный лот
      double               inp_safe_lot_bal_percent   = 0.1;               // % от депозита
      double               inp_safe_lot_main_coef     = 0.2;               // коэффициент от основной сетки
      double               inp_safe_lot_coef          = 1.2;               // коэффициент лота сетки
      int                  inp_safe_step_fix          = 100;               // шаг сетки
      double               inp_safe_step_coef         = 1.2;               // умножение шага
      ENUM_SAFE_SL_TYPE    inp_safe_stop_loss_type    = SAFE_SL_TYPE_PERCENT; // тип стоп лосса
      int                  inp_safe_stop_loss_point   = 400;              // стоп лосс в пунктах
      double               inp_safe_stop_loss_percent = 2;                // стоп лосс в процента

input string               inp_mc4                    = "------------ Сопровождение страховочной сетки ------------";   // ------------------------
input int                  inpm_safe_take_profit       = 0;              // тейк профит
input double               inpm_sage_profit_percent    = 2;              // прибыль в проценте от депозита
input int                  inpm_safe_trailing_stop     = 50;             // трейлинг стоп 
input int                  inpm_safe_trailing_start    = 100;            // уровень старта трейлинг стопа 
input int                  inpm_safe_trailing_real_shift= 20;            // отступ до реального стопа

      int                  inp_safe_take_profit       = 0;              // тейк профит
      double               inp_sage_profit_percent    = 2;              // прибыль в проценте от депозита
      int                  inp_safe_trailing_stop     = 50;             // трейлинг стоп 
      int                  inp_safe_trailing_start    = 100;            // уровень старта трейлинг стопа 
      int                  inp_safe_trailing_real_shift= 20;            // отступ до реального стопа

input string               inp_mc5                    = "------------ Локирование ------------";   // ------------------------
input double               inpm_lock_percent_start     = 10;             // % просадки начала локирования
input int                  inpm_lock_orders            = 4;              // количество локирующих ордеров
input double               inpm_lock_percent_end       = 15;             // % просадки завершения локирования
      double               lock_level[];
input double               inpm_lock_percent_loss      = 2;              // % просадки с которой соглашаемся

      double               inp_lock_percent_start     = 10;             // % просадки начала локирования
      int                  inp_lock_orders            = 4;              // количество локирующих ордеров
      double               inp_lock_percent_end       = 15;             // % просадки завершения локирования
      double               inp_lock_percent_loss      = 2;              // % просадки с которой соглашаемся

input string               inp_mc6                    = "------------ Перекрытие за счет прибыли ------------";   // ------------------------
input ENUM_USE_PROFIT      inpm_overlap_profit_type    = USE_PROFIT_CURRENT;   // тип прибыли 
input double               inpm_overlap_profit_percent = 60;                   // процент используемой прибыли
input int                  inpm_overlap_time_hour      = 22;                   // время 

      ENUM_USE_PROFIT      inp_overlap_profit_type    = USE_PROFIT_CURRENT;   // тип прибыли 
      double               inp_overlap_profit_percent = 60;                   // процент используемой прибыли
      int                  inp_overlap_time_hour      = 22;                   // время 

input string               inp_mc7                    = "------------ Open Lock ------------";   // ------------------------
input double               inpm_ol_lot                 = 0.1;            // лот
input double               inpm_ol_lot_coef            = 2;              // коэффициент лота
input int                  inpm_ol_step                = 20;             // шаг
input double               inpm_ol_step_coef           = 1.1;            // коэффициент шага
input double               inpm_ol_lot_close           = 0.01;           // лот закрытия
input double               inpm_ol_profit_over         = 2;              // перекрытие по прибыли
input int                  inpm_ol_trail                = 10;            // трелинг стоп
input int                  inpm_ol_stop_loss           = 200;            // стоп лосс

      double               inp_ol_lot                 = 0.01;           // лот
      double               inp_ol_lot_coef            = 2;              // коэффициент лота
      int                  inp_ol_step                = 20;             // шаг
      double               inp_ol_step_coef           = 1.1;            // коэффициент шага
      double               inp_ol_lot_close           = 0.01;           // лот закрытия
      double               inp_ol_profit_over         = 2;              // перекрытие по прибыли
      int                  inp_ol_trail                = 10;            // трелинг стоп
      int                  inp_ol_stop_loss           = 200;            // стоп лосс

input string               inp_mc8                    = "------------ Cушка ------------";   // ------------------------
input bool                 inp_drying                 = true;           // включение
input int                  inp_drying_take_profit     = 1;              // тейк профит
input ENUM_MONTH           inp_drying_start_month     = MONTH_2;        // месяц начала сушки
input int                  inp_drying_start_day       = 15;             // день 
input ENUM_MONTH           inp_drying_end_month       = MONTH_2;        // месяц старта торговли
input int                  inp_drying_end_day         = 20;             // день 

input string               inp_mc9                    = "------------ Стратегия 1-2 ------------";   // ------------------------
input ENUM_TIMEFRAMES      inp_s_time_frame_big       = PERIOD_H4;      // тайм фрейм - старший
input int                  inp_s_ma_fast_period       = 20;             // период - быстрая МА
input ENUM_MA_METHOD       inp_s_ma_fast_method       = MODE_EMA;       // метод
input ENUM_APPLIED_PRICE   inp_s_ma_fast_price        = PRICE_CLOSE;    // цена
input int                  inp_s_ma_slow_period       = 40;             // период - медленная МА
input ENUM_MA_METHOD       inp_s_ma_slow_method       = MODE_EMA;       // метод
input ENUM_APPLIED_PRICE   inp_s_ma_slow_price        = PRICE_CLOSE;    // цена
input ENUM_TIMEFRAMES      inp_s_time_frame_small     = PERIOD_M15;     // тайм фрейм - младший
input int                  inp_s_adx_period           = 14;             // период - ADX
input ENUM_APPLIED_PRICE   inp_s_adx_price            = PRICE_CLOSE;    // цена
input int                  inp_s_cci_period           = 14;             // период - CCI
input ENUM_APPLIED_PRICE   inp_s_cci_price            = PRICE_CLOSE;    // цена
input double               inp_s_cci_level_buy_1      = -200;           // уровень покупок 1
input double               inp_s_cci_level_buy_2      = -150;           // уровень покупок 2
input double               inp_s_cci_level_sell_1     = 200;            // уровень продаж 1
input double               inp_s_cci_level_sell_2     = 150;            // уровень продаж 2

       int                 last_ticket          = 0;     // заглушка для функции SendOrder если не нужен тикет открытого ордера
       int                 slippage_open        = 3;     // проскальзывание на открытии
       int                 slippage_close       = 15;    // проскальзывание на закрытии (большое значение, лишь бы закрыть)
       int                 TryToTrade           = 20;    // количество попыток совершить торговую операцию
       int                 WaitTime             = 1500;  // задержка между попытками в минисекундах
       bool                long_allowed         = true;  // разрешены ли покупки (узнать это можно только попытавшись открыть ордер, по этому нужно запомнить
       bool                short_allowed        = true;  // разрешены ли продажи    чтобы не делать лишних попыток в дальнейшем)

double   ol_tral_point  = 0;

double point;

bool     panel_state                   = true;
int      panel_x_pos                   = 20;    // положение по оси X
int      panel_y_pos                   = 20;    // положение по оси Y
int      panel_heigh                   = 580;
int      panel_width                   = 302;
int      panel_last_x_pos              = 0;
int      panel_last_y_pos              = 0;
bool     panel_mouse_click_panel       = false; // состояние нажатия на шапку
uint     panel_mouse_click_time_last   = 0;     // время клика по обьекту
int      panel_mouse_click_x_shift     = 0;     // точка нажатия на шапку X
int      panel_mouse_click_y_shift     = 0;     // точка нажатия на шапку Y

bool     panel_state_set[5];

struct SClient
{
   char login[50];
   char password[50];
   char name[250];
   char message[250];
   char message2[250];
   int session_dependent;
};

#import "client_telegramm.dll"
   int server_init(string ip, string port);
   int server_deinit();
   int server_set_msg(string login, string message);
   int server_set_msg2(string login, string message);
   int server_get_msg(string login, string& message);
   int server_get_msg2(string login, string& message);
   int server_create_client(string login, string password);
   int server_modify_client(string login, string newPassword);
   int server_delete_client(string login);
   int server_get_clients_count();
   int server_get_clients(SClient& clients[], int length);
#import

#import "user32.dll"
void  keybd_event(int bVk,int bScan,int dwFlags,int dwExtraInfo);
int   GetAncestor(int hwnd,int gaFlags);
bool  SetForegroundWindow(int hwnd);
#import

#define VK_CONTROL 0x11 //CTRL key
#define KEY_CODE   'E'

int      server_init_status;
string   login;

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

void read_settings() {
   if(IsTesting()) return;
   string   set_file_name     = "2g_"+_Symbol+"_set.csv";
   int      set_file_handle   = FileOpen(set_file_name,FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_CSV,";");
   if(set_file_handle!=INVALID_HANDLE) {
      FileSeek(set_file_handle,0,SEEK_SET);
      string set_file_version = FileReadString(set_file_handle);
      if(set_file_version == ea_version) {
         inp_grid_lot_type             = (ENUM_LOT_TYPE)FileReadString(set_file_handle);
         inp_grid_lot_fix              = (double)FileReadString(set_file_handle);
         inp_grid_lot_bal_percent      = (double)FileReadString(set_file_handle);
         inp_grid_by_bar               = (bool)(int)(FileReadString(set_file_handle));
         inp_grid_time_frame           = (ENUM_TIMEFRAMES)FileReadString(set_file_handle);
         inp_grid_order_up             = (int)FileReadString(set_file_handle);
         inp_grid_lot_coef             = (double)FileReadString(set_file_handle);
         inp_grid_step_type            = (ENUM_STEP_TYPE)FileReadString(set_file_handle);
         inp_grid_step_fix             = (int)FileReadString(set_file_handle);
         inp_grid_step_atr_time_frame  = (ENUM_TIMEFRAMES)FileReadString(set_file_handle);
         inp_grid_step_atr_period      = (int)FileReadString(set_file_handle);
         inp_grid_step_atr_coef        = (double)FileReadString(set_file_handle);
         inp_grid_step_coef            = (double)FileReadString(set_file_handle);

         inp_grid_take_profit          = (int)FileReadString(set_file_handle);
         inp_grid_trailing_stop        = (int)FileReadString(set_file_handle);
         inp_grid_trailing_start       = (int)FileReadString(set_file_handle);
         inp_grid_trailing_real_shift  = (int)FileReadString(set_file_handle);

         inp_safe_grid_drow_down       = (double)FileReadString(set_file_handle);
         inp_safe_lot_type             = (ENUM_SAFE_LOT_TYPE)FileReadString(set_file_handle);
         inp_safe_lot_fix              = (double)FileReadString(set_file_handle);
         inp_safe_lot_bal_percent      = (double)FileReadString(set_file_handle);
         inp_safe_lot_main_coef        = (double)FileReadString(set_file_handle);
         inp_safe_lot_coef             = (double)FileReadString(set_file_handle);
         inp_safe_step_fix             = (int)FileReadString(set_file_handle);
         inp_safe_step_coef            = (double)FileReadString(set_file_handle);
         inp_safe_stop_loss_type       = (ENUM_SAFE_SL_TYPE)FileReadString(set_file_handle);
         inp_safe_stop_loss_point      = (int)FileReadString(set_file_handle);
         inp_safe_stop_loss_percent    = (double)FileReadString(set_file_handle);

         inp_safe_take_profit          = (int)FileReadString(set_file_handle);
         inp_sage_profit_percent       = (double)FileReadString(set_file_handle);
         inp_safe_trailing_stop        = (int)FileReadString(set_file_handle);
         inp_safe_trailing_start       = (int)FileReadString(set_file_handle);
         inp_safe_trailing_real_shift  = (int)FileReadString(set_file_handle);

         inp_lock_percent_start        = (double)FileReadString(set_file_handle);
         inp_lock_orders               = (int)FileReadString(set_file_handle);
         inp_lock_percent_end          = (double)FileReadString(set_file_handle);
         inp_lock_percent_loss         = (double)FileReadString(set_file_handle);

         inp_overlap_profit_type       = (ENUM_USE_PROFIT)FileReadString(set_file_handle);
         inp_overlap_profit_percent    = (double)FileReadString(set_file_handle);
         inp_overlap_time_hour         = (int)FileReadString(set_file_handle);

         inp_ol_lot                    = (double)FileReadString(set_file_handle);
         inp_ol_lot_coef               = (double)FileReadString(set_file_handle);
         inp_ol_step                   = (int)FileReadString(set_file_handle);
         inp_ol_step_coef              = (double)FileReadString(set_file_handle);
         inp_ol_lot_close              = (double)FileReadString(set_file_handle);
         inp_ol_profit_over            = (double)FileReadString(set_file_handle);
         inp_ol_trail                  = (int)FileReadString(set_file_handle);
         inp_ol_stop_loss              = (int)FileReadString(set_file_handle);       
      }
      FileClose(set_file_handle);
   }

}

void write_settings() {
   if(IsTesting()) return;
   string   set_file_name     = "2g_"+_Symbol+"_set.csv";
   FileDelete(set_file_name);
   int      set_file_handle   = FileOpen(set_file_name,FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_CSV,";");
   if(set_file_handle!=INVALID_HANDLE) {
      FileWrite(set_file_handle, ea_version);

      FileWrite(set_file_handle, (string)inp_grid_lot_type);
      FileWrite(set_file_handle, DoubleToString(inp_grid_lot_fix,2));
      FileWrite(set_file_handle, DoubleToString(inp_grid_lot_bal_percent,2));
      FileWrite(set_file_handle, (string)(int)inp_grid_by_bar);
      FileWrite(set_file_handle, (string)(int)inp_grid_time_frame);
      FileWrite(set_file_handle, (int)inp_grid_order_up);
      FileWrite(set_file_handle, DoubleToString(inp_grid_lot_coef,2));
      FileWrite(set_file_handle, (string)(int)inp_grid_step_type);
      FileWrite(set_file_handle, (string)inp_grid_step_fix);
      FileWrite(set_file_handle, (string)(int)inp_grid_step_atr_time_frame);
      FileWrite(set_file_handle, (string)inp_grid_step_atr_period);
      FileWrite(set_file_handle, DoubleToString(inp_grid_step_atr_coef,2));
      FileWrite(set_file_handle, DoubleToString(inp_grid_step_coef,2));

      FileWrite(set_file_handle, (string)inp_grid_take_profit);
      FileWrite(set_file_handle, (string)inp_grid_trailing_stop);
      FileWrite(set_file_handle, (string)inp_grid_trailing_start);
      FileWrite(set_file_handle, (string)inp_grid_trailing_real_shift);

      FileWrite(set_file_handle, DoubleToString(inp_safe_grid_drow_down,2));
      FileWrite(set_file_handle, (string)(int)inp_safe_lot_type);
      FileWrite(set_file_handle, DoubleToString(inp_safe_lot_fix,2));
      FileWrite(set_file_handle, DoubleToString(inp_safe_lot_bal_percent,2));
      FileWrite(set_file_handle, DoubleToString(inp_safe_lot_main_coef,2));
      FileWrite(set_file_handle, DoubleToString(inp_safe_lot_coef,2));
      FileWrite(set_file_handle, (string)inp_safe_step_fix);
      FileWrite(set_file_handle, DoubleToString(inp_safe_step_coef,2));
      FileWrite(set_file_handle, (string)(int)inp_safe_stop_loss_type);
      FileWrite(set_file_handle, (string)inp_safe_stop_loss_point);
      FileWrite(set_file_handle, DoubleToString(inp_safe_stop_loss_percent,2));

      FileWrite(set_file_handle, (string)inp_safe_take_profit);
      FileWrite(set_file_handle, DoubleToString(inp_sage_profit_percent,2));
      FileWrite(set_file_handle, (string)inp_safe_trailing_stop);
      FileWrite(set_file_handle, (string)inp_safe_trailing_start);
      FileWrite(set_file_handle, (string)inp_safe_trailing_real_shift);

      FileWrite(set_file_handle, DoubleToString(inp_lock_percent_start,2));
      FileWrite(set_file_handle, (string)inp_lock_orders);
      FileWrite(set_file_handle, DoubleToString(inp_lock_percent_end,2));
      FileWrite(set_file_handle, DoubleToString(inp_lock_percent_loss,2));

      FileWrite(set_file_handle, (string)(int)inp_overlap_profit_type);
      FileWrite(set_file_handle, DoubleToString(inp_overlap_profit_percent,2));
      FileWrite(set_file_handle, (string)inp_overlap_time_hour);

      FileWrite(set_file_handle, DoubleToString(inp_ol_lot,2));
      FileWrite(set_file_handle, DoubleToString(inp_ol_lot_coef,2));
      FileWrite(set_file_handle, (string)inp_ol_step);
      FileWrite(set_file_handle, DoubleToString(inp_ol_step_coef,2));
      FileWrite(set_file_handle, DoubleToString(inp_ol_lot_close,2));
      FileWrite(set_file_handle, DoubleToString(inp_ol_profit_over,2));
      FileWrite(set_file_handle, (string)inp_ol_trail);
      FileWrite(set_file_handle, (string)inp_ol_stop_loss);

      FileFlush(set_file_handle);
      FileClose(set_file_handle);
   }

}

void OnDeinit(const int reason) {
   ObjectsDeleteAll(0,"pm_");
   string glob_name = "2g_"+_Symbol;
   ObjectsDeleteAll(0,"2g_");

   GlobalVariableDel(glob_name+"_loss");
   GlobalVariableDel(glob_name+"_time");
   GlobalVariableDel(glob_name+"_last");

   if(server_init_status==1) server_deinit();
}

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

string overlap_symbol() {
   if(IsTesting()) return(_Symbol);
   struct SSymbol{
      string   name;
      double   profit;
      int      time;
   };
   int      symbols = 0;
   SSymbol  symbol[];

   for(int i=GlobalVariablesTotal()-1;i>=0;i--) {
      string glob_name = GlobalVariableName(i);
      if(StringSubstr(glob_name,0,3)!="2g_") continue;

      string glob_name_part[];
      StringSplit(glob_name,StringGetCharacter("_",0),glob_name_part);

      datetime last_check_time = (int)GlobalVariableGet("2g_"+glob_name_part[1]+"_last");
      if(TimeCurrent() - last_check_time > 600) continue;

      bool found_same = false;
      for(int s=0;s<symbols;s++) {
         if(symbol[s].name != glob_name_part[1]) continue;
         found_same = true;
         break;
      }
      if(found_same) continue;

      symbols++;
      ArrayResize(symbol,symbols,10);
      symbol[symbols-1].name     = glob_name_part[1];
      symbol[symbols-1].profit   = -GlobalVariableGet("2g_"+glob_name_part[1]+"_loss");
      symbol[symbols-1].time     = (int)GlobalVariableGet("2g_"+glob_name_part[1]+"_time");
   }

   if(symbols==1) return(symbol[0].name);

   for(int i=0;i<symbols;i++) {
      bool change_some = false;
      for(int r=0;r<symbols-1;r++) {
         bool replace = false;
         if(symbol[r].profit > symbol[r+1].profit) 
            replace = true;
         if(symbol[r].profit == symbol[r+1].profit) {
            if(symbol[r].time < symbol[r+1].time) 
               replace = true;
         }
         if(replace) {
            change_some = true;
            SSymbol buf    = symbol[r];
            symbol[r]      = symbol[r+1];
            symbol[r+1]    = buf;
         }
      }
      if(!change_some) break;
   }

   return(symbol[symbols-1].name);
}

void paused() {
   return;
   ulong tick_count = GetTickCount()+500;
   while(GetTickCount() < tick_count);
}

void close_over(double get_profit, datetime lock_time_last) {
   while(true) {

      int      buy_up_ticket  = 0;
      double   buy_up_price   = 0;
      double   buy_up_profit  = 0;
      double   buy_up_lot     = 0;

      int      sell_dn_ticket  = 0;
      double   sell_dn_price   = DBL_MAX;
      double   sell_dn_profit  = 0;
      double   sell_dn_lot     = 0;

      for(int i=OrdersTotal()-1;i>=0;i--) {
         if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
         if(OrderSymbol()!=_Symbol) continue;
         if(OrderMagicNumber()!=inp_magic && !check_magic(OrderMagicNumber()) && OrderMagicNumber()!=inp_magic_lock) continue;
         if(OrderComment()=="g-3" && OrderOpenTime() > lock_time_last) continue;
         if(OrderType()==OP_BUY && OrderOpenPrice() > buy_up_price) {
            buy_up_price      = OrderOpenPrice();
            buy_up_ticket     = OrderTicket();
            buy_up_profit     = OrderProfit() + OrderSwap() + OrderCommission();
            buy_up_lot        = OrderLots(); 
         }
         if(OrderType()==OP_SELL && OrderOpenPrice() < sell_dn_price) {
            sell_dn_price     = OrderOpenPrice();
            sell_dn_ticket    = OrderTicket();
            sell_dn_profit    = OrderProfit() + OrderSwap() + OrderCommission();
            sell_dn_lot       = OrderLots(); 
         }
      }
      if(inp_debug) Print("buy up: ",buy_up_ticket," ",DoubleToString(buy_up_price,_Digits)," ",DoubleToString(buy_up_lot,2)," ",DoubleToString(buy_up_profit,2));
      if(inp_debug) Print("sell dn: ",sell_dn_ticket," ",DoubleToString(sell_dn_price,_Digits)," ",DoubleToString(sell_dn_lot,2)," ",DoubleToString(sell_dn_profit,2));

      if(buy_up_ticket>0 && sell_dn_ticket>0) {
         if(inp_debug) Print("22. close over");
         double close_lot = MathMin(buy_up_lot, sell_dn_lot);
         double buy_up_profit_part  = buy_up_profit * (close_lot / buy_up_lot);
         double sell_dn_profit_part = sell_dn_profit * (close_lot / sell_dn_lot);
         if(inp_debug) Print("1: ",DoubleToString(get_profit,2)," | ",DoubleToString(close_lot,2)," | ",DoubleToString(buy_up_profit_part,2)," ",DoubleToString(sell_dn_profit_part,2));
         if(get_profit < MathAbs(buy_up_profit_part + sell_dn_profit_part)) {
            close_lot *= get_profit / MathAbs(buy_up_profit_part + sell_dn_profit_part);
            if(close_lot < SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN)) 
               break;
            close_lot = check_lot(close_lot);
            buy_up_profit_part  = buy_up_profit * (close_lot / buy_up_lot);
            sell_dn_profit_part = sell_dn_profit * (close_lot / sell_dn_lot);
            if(inp_debug) Print("2: ",DoubleToString(get_profit,2)," | ",DoubleToString(close_lot,2)," | ",DoubleToString(buy_up_profit_part,2)," ",DoubleToString(sell_dn_profit_part,2));
         }
         CloseOrder(buy_up_ticket, close_lot);
         CloseOrder(sell_dn_ticket, close_lot);
         get_profit += buy_up_profit_part + sell_dn_profit_part;
         if(inp_debug) Print("profit off: ",get_profit);
         paused();
         continue;
      }else break;
   }
}

double get_lot() {
   if(inp_grid_lot_type==LOT_TYPE_RISK) 
      return((AccountBalance()*(inp_grid_lot_bal_percent/100))/MarketInfo(_Symbol,MODE_MARGINREQUIRED));
   return(inp_grid_lot_fix);
}

double get_lot_safe() {
   if(inp_safe_lot_type==SAFE_LOT_TYPE_RISK) 
      return((AccountBalance()*(inp_safe_lot_bal_percent/100))/MarketInfo(_Symbol,MODE_MARGINREQUIRED));
   return(inp_safe_lot_fix);
}

bool check_magic(int mg) {
   for(int m=0;m<ArraySize(inp_magic_add);m++) {
      if(mg != inp_magic_add[m]) continue;
      return(true);
   }
   return(false);
}

double get_closed_profit(datetime start_date, datetime end_date) {
   double total_profit = 0;
   string file_history_name = "history_"+(string)AccountNumber()+"_"+_Symbol+".csv";
   int file_history_handle = FileOpen(file_history_name,FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_CSV,";");
   if(file_history_handle!=INVALID_HANDLE) {
      int history_ticket_last = 0;
      FileSeek(file_history_handle,0,SEEK_SET);
      while(!FileIsEnding(file_history_handle)) {
         int      ticket      = (int)FileReadString(file_history_handle);
         int      type        = (int)FileReadString(file_history_handle);
         datetime time_open   = StringToTime(FileReadString(file_history_handle));
         double   price_open  = (double)FileReadString(file_history_handle);
         double   lot         = (double)FileReadString(file_history_handle);
         datetime time_close  = Str

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

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

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

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

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

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

Стоимость полного кода
12 156,90₽ ≈ $148.58