UTE/Strategy/TradeState.mqh
super.admin bd7e405a90 convert
2025-05-30 16:34:43 +02:00

103 lines
9.6 KiB
MQL5

//+------------------------------------------------------------------+
//| 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<ALL_DAYS_OF_WEEK; day++)
{
if(day!=day_of_week && day_of_week!=ALL_DAYS_OF_WEEK)
continue;
int i_day=day*60*24;
int i_begin=i_day+(btime.hour*60)+btime.min;
int i_end = i_day + (etime.hour*60) + etime.min;
for(int i = i_begin; i <= i_end; i++)
m_state[i]=state;
}
}
//+------------------------------------------------------------------+
//| Возвращает ранее заданное для текущего времени торговое состояние|
//+------------------------------------------------------------------+
ENUM_TRADE_STATE CTradeState::GetTradeState(void)
{
return GetTradeState(TimeCurrent());
}
//+------------------------------------------------------------------+
//| Возвращает ранее заданное торговое состояние для переданного |
//| времени. |
//+------------------------------------------------------------------+
ENUM_TRADE_STATE CTradeState::GetTradeState(datetime time_current)
{
MqlDateTime dt;
TimeToStruct(time_current,dt);
int i_day = dt.day_of_week*60*24;
int index = i_day + (dt.hour*60) + dt.min;
return m_state[index];
}
//+------------------------------------------------------------------+