//+------------------------------------------------------------------+ //| TradeState.mqh | //| Copyright 2016, Vasiliy Sokolov, St-Petersburg, Russia | //| https://www.mql5.com/ru/users/c-4 | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, Vasiliy Sokolov." #property link "https://www.mql5.com/ru/users/c-4" #define ALL_DAYS_OF_WEEK 7 //+------------------------------------------------------------------+ //| Определяет торговое состояние эксперта. | //+------------------------------------------------------------------+ enum ENUM_TRADE_STATE { TRADE_BUY_AND_SELL, // Buy And Sell TRADE_BUY_ONLY, // Buy Only TRADE_SELL_ONLY, // Sell Only TRADE_STOP, // Stop TRADE_WAIT, // Wait TRADE_NO_NEW_ENTRY // No New Entry }; //+------------------------------------------------------------------+ //| Модуль торговых состояний TradeState | //+------------------------------------------------------------------+ class CTradeState { private: ENUM_TRADE_STATE m_state[60*24*7]; // Маска торговых состояний public: CTradeState(void); CTradeState(ENUM_TRADE_STATE default_state); ENUM_TRADE_STATE GetTradeState(void); ENUM_TRADE_STATE GetTradeState(datetime time_current); void SetTradeState(datetime time_begin,datetime time_end,int day_of_week,ENUM_TRADE_STATE state); }; //+------------------------------------------------------------------+ //| Режим по-умолчанию TRADE_BUY_AND_SELL | //+------------------------------------------------------------------+ CTradeState::CTradeState(void) { ArrayInitialize(m_state,TRADE_BUY_AND_SELL); } //+------------------------------------------------------------------+ //| Режим по-умолчанию задается значением default_state | //+------------------------------------------------------------------+ CTradeState::CTradeState(ENUM_TRADE_STATE default_state) { ArrayInitialize(m_state,default_state); } //+------------------------------------------------------------------+ //| Устанавливает торговое состояние 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) { if(time_begin>time_end) { string sb = TimeToString(time_begin, TIME_MINUTES); string se = TimeToString(time_end, TIME_MINUTES); printf("Time "+sb+" must be more time "+se); return; } MqlDateTime btime,etime; TimeToStruct(time_begin,btime); TimeToStruct(time_end,etime); for(int day=0; day