Библиотеки: TradeState - переключатель торгового режима эксперта в зависимости от времени

 

TradeState - переключатель торгового режима эксперта в зависимости от времени:

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

//+------------------------------------------------------------------+
//| Устанавливает торговое состояние TradeState                      |
//| INPUT:                                                           |
//| time_begin  - Время, начиная с которого  действует торговое      |
//|               состояние.                                         |
//| time_end    - Время, до которого действует торговое состояние    |
//| day_of_week - День недели, на который распространяется установка |
//|               торгового состояния. Соответствует модификаторам   |
//|               ENUM_DAY_OF_WEEK или модификатору ALL_DAYS_OF_WEEK |
//| state       - Торговое состояние.                                |
//| Внимание, компонента даты в time_begin и time_end игнорируется.  |
//+------------------------------------------------------------------+
void CTradeState::SetTradeState(datetime time_begin,datetime time_end, int day_of_week, ENUM_TRADE_STATE state);

Автор: Vasiliy Sokolov

 

Стырил. Теперь можно делать расписание на неделю.

Например, ситуация. Долго пыхтел, составил расписание на неделю. Все работает. Неожиданно здрасте Новый год. Праздники. Нужно расписание с учетом праздников. Ломать недельное жаль. Решение: создаю дополнительный экземпляр недельного расписания с запретом торговли в праздники. Вопрос: может расширить m_state до размера века года?. Или как решаете этот вопрос за пределами одной недели?

 
Konstantin Gruzdev:

Стырил. Теперь можно делать расписание на неделю.

Например, ситуация. Долго пыхтел, составил расписание на неделю. Все работает. Неожиданно здрасте Новый год. Праздники. Нужно расписание с учетом праздников. Ломать недельное жаль. Решение: создаю дополнительный экземпляр недельного расписания с запретом торговли в праздники. Вопрос: может расширить m_state до размера века года?. Или как решаете этот вопрос за пределами одной недели?

Да, есть такая задача. Пока обдумываю как это сделать. Пока к красивому решению не пришел. Но есть понимание того, как это должно выглядеть.

  1. Интерфейс SetTradeState(...) - сам подсказывает, что если в переменных time_begin и time_end задать дату в формате D'hh:mm' - то данный режим будет действовать постоянно, для всех дней удовлетворяющим условию day_of_week. Если же дату задать конкретно, с указанием года, месяца и дня в фоhмате D'YYYY.MM.DD hh:mm', то устанавливаемый режим должен будет действовать конкретно на этот диапазон времени. 
  2. По всей видимости, второй вариант времени, потребуется размещать в другом типе данных (это может быть массив каких-то структур или что-то иное). Тогда придется двумя разными способами искать торговый режим в двух разных коллекциях и сопоставлять режимы, решая какой именно режим должен действовать. При этом интерфейс GetTradeState должен остаться неизменным.

Из красивостей можно реализовать загрузку торговых состояний из XML. Забиваешь все праздники в XML один раз, за год вперед, а потом они автоматически будут грузиться во всех экспертов. Зделать это достаточно просто, т.к. уже есть отличная библиотека на MQL5 для работы с XML.
 

+5

day_of_week - чаще это бывает группа дней: ПН..ПТ или "кроме пятницы" или "кроме понедельника и пятницы"

 
Alexander Puzanov:

+5

day_of_week - чаще это бывает группа дней: ПН..ПТ или "кроме пятницы" или "кроме понедельника и пятницы"

Группа дней формируется следующим образом: допустим мы хотим торговать по понедельникам, вторникам и пятницам. Тогда в среду и четверг запрещаем торговлю: 

//+------------------------------------------------------------------+
//|                                               TestTradeState.mq5 |
//|                                 Copyright 2015, Vasiliy Sokolov. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Vasiliy Sokolov."
#property link      "http://www.mql5.com"
#property version   "1.00"
#include <Strategy\TradeState.mqh>

CTradeState TradeState(TRADE_BUY_AND_SELL);  // Устанавливаем режим по умолчанию Buy And Sell
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   TradeState.SetTradeState(D'00:00', D'23:59', WEDNESDAY, TRADE_STOP);
   TradeState.SetTradeState(D'00:00', D'23:59', THURSDAY, TRADE_STOP);
}
Т.е. каждый день недели с точностью до минуты конфигурируется индивидуально.
 
Понял
 
Не видит его мастер mql5 по чему ?
 
Думаю, надо ввести поле типичного спреда. Например в Роловер и первый час после него спред может увеличиваться раза в 2-3. Ночные скальперы могли обрабатывать подобное расширение и торговать более точно. 
У себя в советниках это реализовываю, правда не в классе. 
 

как заменить D'00:00'на обычные цифры 00:00 ??? ато datetime бесит(((

в TradeState.SetTradeState(D'00:00', D'23:59', WEDNESDAY, TRADE_STOP);

 
ponochka:

как заменить D'00:00'на обычные цифры 00:00 ??? ато datetime бесит(((

в TradeState.SetTradeState(D'00:00', D'23:59', WEDNESDAY, TRADE_STOP);

Пожалуйста:

TradeState.SetTradeState(0, 86399, WEDNESDAY, TRADE_STOP);
 
#include <Strategy\TradeState.mqh>
CTradeState TradeState(TRADE_BUY_AND_SELL);

void OnTick()
  {
     ......здесь работаем с закрытием (тралом и прочим)....
TradeState.SetTradeState(ontime, offtime, ALL_DAYS_OF_WEEK, TRADE_NO_NEW_ENTRY);
     ......остальной код, в частности для открытия....
  }

правильное расположение кода?

заранее извиняюсь за тупые вопросы!!! просто новичок)))