Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пополняй счет удобным способом. Здесь их 4!
Automated-Trading
Админ
99380
Automated-Trading 2015.12.02 10:18 

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

Konstantin Gruzdev
14017
Konstantin Gruzdev 2015.12.02 12:51  

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

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

Vasiliy Sokolov
21751
Vasiliy Sokolov 2015.12.02 13:10  
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.
Alexander Puzanov
29607
Alexander Puzanov 2015.12.02 16:16  

+5

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

Vasiliy Sokolov
21751
Vasiliy Sokolov 2015.12.02 16:30  
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);
}
Т.е. каждый день недели с точностью до минуты конфигурируется индивидуально.
Alexander Puzanov
29607
Alexander Puzanov 2015.12.02 16:59  
Понял
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий