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

196 lines
18 KiB
MQL5

//+------------------------------------------------------------------+
//| Message.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"
#include <Object.mqh>
#include <Arrays\ArrayObj.mqh>
#define UNKNOW_SOURCE "unknown" // обозначение неопределенного источника сообщений
//+------------------------------------------------------------------+
//| Тип сообщения |
//+------------------------------------------------------------------+
enum ENUM_MESSAGE_TYPE
{
MESSAGE_INFO, // Информационное сообщение
MESSAGE_WARNING, // Предупреждающее сообщение
MESSAGE_ERROR // Возникновение ошибки
};
//+------------------------------------------------------------------+
//| Сообщение, передаваемое классу логирования |
//+------------------------------------------------------------------+
class CMessage : public CObject
{
private:
ENUM_MESSAGE_TYPE m_type; // Тип сообщения
string m_source; // Источник сообщения
string m_text; // Текст сообщения
int m_system_error_id; // Содержит идентификатор СИСТЕМНОЙ ошибки.
int m_retcode; // Содержит код возрата торгового сервера.
datetime m_server_time; // Время торгового сервера, в момент создания сообщения
datetime m_local_time; // Локальное время, в момент создания сообщения
void Init(ENUM_MESSAGE_TYPE type,string source,string text);
public:
CMessage(void);
CMessage(ENUM_MESSAGE_TYPE type);
CMessage(ENUM_MESSAGE_TYPE type,string source,string text);
void Type(ENUM_MESSAGE_TYPE type);
ENUM_MESSAGE_TYPE Type(void);
void Source(string source);
string Source(void);
void Text(string text);
string Text(void);
datetime TimeServer(void);
datetime TimeLocal();
void SystemErrorID(int error);
int SystemErrorID();
void Retcode(int retcode);
int Retcode(void);
string ToConsoleType(void);
string ToCSVType(void);
};
//+------------------------------------------------------------------+
//| По-умолчанию, время создания заполнять не нужно, оно |
//| автоматически заполняется во время создания объекта. |
//+------------------------------------------------------------------+
CMessage::CMessage(void)
{
Init(MESSAGE_INFO,UNKNOW_SOURCE,"");
}
//+------------------------------------------------------------------+
//| Создает сообщение с предустановленным типом, источником сообщения|
//| и текстом. |
//+------------------------------------------------------------------+
CMessage::CMessage(ENUM_MESSAGE_TYPE type,string source,string text)
{
Init(type,source,text);
}
//+------------------------------------------------------------------+
//| Создает сообщение с предустановленным типом. |
//+------------------------------------------------------------------+
CMessage::CMessage(ENUM_MESSAGE_TYPE type)
{
Init(type,UNKNOW_SOURCE,"");
}
//+------------------------------------------------------------------+
//| Выполняет роль базового конструктора. |
//+------------------------------------------------------------------+
void CMessage::Init(ENUM_MESSAGE_TYPE type,string source,string text)
{
m_server_time= TimeCurrent();
m_local_time = TimeLocal();
m_type=type;
m_source=source;
m_text=text;
m_system_error_id=GetLastError();
}
//+------------------------------------------------------------------+
//| Возвращает тип сообщения. |
//+------------------------------------------------------------------+
ENUM_MESSAGE_TYPE CMessage::Type(void)
{
return m_type;
}
//+------------------------------------------------------------------+
//| Устанавливает источник сообщения. |
//+------------------------------------------------------------------+
void CMessage::Source(string source)
{
m_source=source;
}
//+------------------------------------------------------------------+
//| Возвращает источник сообщения. |
//+------------------------------------------------------------------+
string CMessage::Source(void)
{
return m_source;
}
//+------------------------------------------------------------------+
//| Устанавливает содержимое сообщения. |
//+------------------------------------------------------------------+
void CMessage::Text(string text)
{
m_text=text;
}
//+------------------------------------------------------------------+
//| Возвращает содержимое сообщения. |
//+------------------------------------------------------------------+
string CMessage::Text(void)
{
return m_text;
}
//+------------------------------------------------------------------+
//| Возвращает время сервера в момент создания сообщения. |
//+------------------------------------------------------------------+
datetime CMessage::TimeServer(void)
{
return m_server_time;
}
//+------------------------------------------------------------------+
//| Возвращает локальное время в момент создания сообщения. |
//+------------------------------------------------------------------+
datetime CMessage::TimeLocal(void)
{
return m_local_time;
}
//+------------------------------------------------------------------+
//| Возвращает строку сообщения для вывода в окно терминала. |
//+------------------------------------------------------------------+
string CMessage::ToConsoleType(void)
{
string dt= ";";
string t = EnumToString(m_type);
t=StringSubstr(t,8);
string text=t+dt+m_source+dt+m_text+dt+
TimeToString(m_server_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS);
return text;
}
//+------------------------------------------------------------------+
//| Возвращает строку сообщения для вывода в файл логирования. |
//+------------------------------------------------------------------+
string CMessage::ToCSVType(void)
{
string d="\t"; //Разделитель колонок сообщения
string msg=TimeToString(m_server_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS)+d+EnumToString(m_type)+d+m_source+d+m_text;
return msg;
}
//+------------------------------------------------------------------+
//| Возвращает код сохраненной ошибки. |
//+------------------------------------------------------------------+
int CMessage::SystemErrorID(void)
{
return m_system_error_id;
}
//+------------------------------------------------------------------+
//| Устанавливает код ошибки, сопутствующий данному сообщению. Код |
//| ошибки может быть системным или пользовательским. |
//| ВНИМАНИЕ: Установка последней ошибки происходит автоматически, |
//| в момент создания сообщения. Поэтому вызывать данный метод |
//| требуется лишь в особых случаях. |
//+------------------------------------------------------------------+
void CMessage::SystemErrorID(int error)
{
m_system_error_id=error;
}
//+------------------------------------------------------------------+
//| Устанавливает код ответа торгового сервера. В отличии от |
//| SystemErrorID требует явной установки, т.к CMessage не имеет |
//| доступа к ответу торгового сервера. |
//+------------------------------------------------------------------+
void CMessage::Retcode(int retcode)
{
m_retcode=retcode;
}
//+------------------------------------------------------------------+
//| Возвращает установленный пользователем код ответа торгового |
//| сервера. Это поле следует анализировать только в том случае, |
//| если получаемое сообщение связано с торговыми действиями. |
//+------------------------------------------------------------------+
int CMessage::Retcode(void)
{
return m_retcode;
}
//+------------------------------------------------------------------+