Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Control_Trade_Sessions - библиотека для MetaTrader 5

Просмотров:
702
Рейтинг:
(6)
Опубликован:
2024.01.31 15:31
Обновлен:
2024.02.01 12:08
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Библиотека для контроля торговой сессии. При запуске считает время торговых сессий за все 7 дней недели (в сб и вс может быть торговля по криптовалютам), до 10 сессий в день. Затем в OnTick() можно делать проверки, и если тик пришел вне торговой сессии, то можно выйти из дальнейшей его обработки.

Пример использования:

//+------------------------------------------------------------------+
//|                                   testControl_Trade_Sessions.mq5 |
//+------------------------------------------------------------------+
// #define LoadSessionFromInputs // Чтение сессий из input-ов
#include <Forester\Control_Trade_Sessions.mqh> // подключение кода для контроля торговой сессии

int OnInit()  {   return(INIT_SUCCEEDED);  }

void OnTick() {
  static TRADE_SESSIONS TradeSession(_Symbol);//получение времени откр/закр рынка и сохраниение в массивы по дням недели. Вызывается 1 раз при запуске эксперта (см. static)
  if(!TradeSession.isSessionTrade(TimeCurrent())){Print("Market closed. OnTick return"); return;}
  
  // ваши действия
  }

В результате получим такую распечатку:

2022.01.10 00:05:00   Day: 0 Trade sessions: 1: 00:00-00:00 - это воскресенье
2022.01.10 00:05:00   Day: 1 Trade sessions: 1: 00:15-23:55
2022.01.10 00:05:00   Day: 2 Trade sessions: 1: 00:15-23:55
2022.01.10 00:05:00   Day: 3 Trade sessions: 1: 00:15-23:55
2022.01.10 00:05:00   Day: 4 Trade sessions: 1: 00:15-23:55
2022.01.10 00:05:00   Day: 5 Trade sessions: 1: 00:15-23:55
2022.01.10 00:05:00   Day: 6 Trade sessions: 1: 00:00-00:00
2022.05.30 00:05:00   Market closed. OnTick return
2022.05.30 00:05:01   Market closed. OnTick return
...
2022.05.30 00:14:36   Market closed. OnTick return
2022.05.30 00:14:40   Market closed. OnTick return
2022.05.30 23:55:00   Market closed. OnTick return
2022.05.30 23:55:00   Market closed. OnTick return
...
2022.05.30 23:59:30   Market closed. OnTick return
2022.05.31 00:00:01   Market closed. OnTick return
...

Код был создан при работе над одним из проектов, решил выделить его в библиотеку, для подключения к любому другому проекту.
Использованы новые функции MQL5 для считывания торговой сессии за любой день, в том числе в выходные.
Работает максимально быстро, на каждом тике внутри торговой сессии делается всего 1 проверка:
if(time < this.NextTradeStop ) { return true; }
Где NextTradeStop время окончания текущей торговой сессии.

На каждом тике вне торговой сессии делается тоже 1 проверка:
if(time < this.NextTradeStart ) { return false; }
Лишь при переходе между сессиями происходит обращение к массивам для получения времени следующей сессии.

Например на моем ДЦ торговая сессия с 00:15 до 23:55. С первым тиком после 00:15 NextTradeStop будет установлен в 23:55 и затем весь день будет проверяться только это условие.

Добвлено:

Время торговых сессий можно указать и вручную. Для этого создана функция 
void LoadFromInputs(string &s[]){...}//s=["00:15-17:45,17:55-23:55","00:00-24:00",...] 

Для примера запрограммирован вариант с

#define LoadSessionFromInputs // Чтение сессий из input-ов

который создаст 7 sinput-ов для ввода торговых сессий по дням недели, и передаст их в LoadFromInputs(), она разберет строки и запишет время сессий в массив для контроля.

Ввод времени сессий без пробелов, строго через : - и ,

Выглядит так во вкладке параметров:



И так в журнале:
  TradeSessionsMonday=00:15-17:45,17:55-23:55
  TradeSessionsTuesday=00:15-23:55
  TradeSessionsWednesday=00:10-17:45,17:55-23:00,23:05-23:55
  TradeSessionsThursday=00:15-17:45,17:55-23:55
  TradeSessionsFriday=00:15-23:55
  TradeSessionsSaturday=00:15-23:55
  TradeSessionsSunday=
EURUSD : real ticks begin from 2022.05.10 00:00:00, every tick generation used
2022.01.10 00:05:00   Day: 1 Trade sessions: 1: 00:15-17:45, 2: 17:55-23:55
2022.01.10 00:05:00   Day: 2 Trade sessions: 1: 00:15-23:55
2022.01.10 00:05:00   Day: 3 Trade sessions: 1: 00:10-17:45, 2: 17:55-23:00, 3: 23:05-23:55
2022.01.10 00:05:00   Day: 4 Trade sessions: 1: 00:15-17:45, 2: 17:55-23:55
2022.01.10 00:05:00   Day: 5 Trade sessions: 1: 00:15-23:55
2022.01.10 00:05:00   Day: 6 Trade sessions: 1: 00:15-23:55
2022.01.10 00:05:00   Market closed. OnTick return
...

При доработке LoadFromInputs() можно вызвать и без Input-ов, а напрямую из кода с строковым массивом, как в примере.

Если эксперт мультивалютный и у разных инструментов  время торговых сессий разное, то можно для каждого инструмента сделать свой экземпляр TRADE_SESSIONS и свой вызов LoadFromInputs() с данными сессии и проверку isSessionTrade(). Для этого придется доработать код по аналогии с этим примером.

Simple_Price_EA Simple_Price_EA

Простейший советник, который анализирует движение цены на заданном количестве баров и открывает соответствующую позицию.

Simple_Pending_Orders_Time Simple_Pending_Orders_Time

Советник работает с отложенными ордерами Buy Stop и Sell Stop по времени, заданному в его входных параметрах.

Функция расчета размера лота от риска на депозит Функция расчета размера лота от риска на депозит

Функция рассчитывает размер лота открываемой позиции. В качестве параметров передаются цена открытия сделки, цена уровня стоп-лосса и риск на сделку в процентах от депозита

Clickable button excample (close all positions) Clickable button excample (close all positions)

An example of adding buttons for your advisors. In this example, a button has been implemented to close all active positions for all instruments. In addition to the button event processing functionality, methods for closing positions relative to the symbol name and counting the number of positions relative to the symbol name are also implemented.