Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Automated-Trading
Админ
110940
Automated-Trading  

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
17012
Konstantin Gruzdev  

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

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

Vasiliy Sokolov
30893
Vasiliy Sokolov  
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
35645
Alexander Puzanov  

+5

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

Vasiliy Sokolov
30893
Vasiliy Sokolov  
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
35645
Alexander Puzanov  
Понял
Evgenii Naumov
181
Evgenii Naumov  
Не видит его мастер mql5 по чему ?
Dmitiry Ananiev
9307
Dmitiry Ananiev  
Думаю, надо ввести поле типичного спреда. Например в Роловер и первый час после него спред может увеличиваться раза в 2-3. Ночные скальперы могли обрабатывать подобное расширение и торговать более точно. 
У себя в советниках это реализовываю, правда не в классе. 
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий