Apex Pro 1.4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «apex pro 1.4.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.