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

184 lines
14 KiB
MQL5

//+------------------------------------------------------------------+
//| StrategyParamsBase.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 "Logs.mqh"
#include "XML\XMLBase.mqh"
//+------------------------------------------------------------------+
//| Класс содержит базовые параметры любой стратегии CStrategy. |
//| Параметры загружаются из переданного XML-аттрибута <Stragey> |
//+------------------------------------------------------------------+
class CParamsBase
{
private:
bool m_is_valid; // Флаг, указывающий, все ли обязательные параметры стратегии указаны верно.
uint m_magic; // Магический номер стратегии
string m_name; // Имя стратегии
string m_symbol; // Символ стратегии
ENUM_TIMEFRAMES m_timeframe; // Таймфрейм стратегии
CLog* Log; // Логирование
ENUM_TIMEFRAMES StringToTimeframe(string stf);
public:
CParamsBase(CXmlElement *xmlStrategy);
bool IsValid(void);
bool CheckParams(void);
uint Magic(void);
string Name(void);
string Symbol(void);
ENUM_TIMEFRAMES Timeframe(void);
};
//+------------------------------------------------------------------+
//| Создает класс базовых параметров стратегии из специального |
//| XML-элемента. |
//+------------------------------------------------------------------+
CParamsBase::CParamsBase(CXmlElement *xmlStrategy) : m_is_valid(false),
m_magic(0),
m_name(""),
m_symbol(""),
m_timeframe(PERIOD_CURRENT)
{
Log=CLog::GetLog();
for(int i=0; i<xmlStrategy.GetAttributeCount(); i++)
{
CXmlAttribute *attr=xmlStrategy.GetAttribute(i);
string name=attr.GetName();
if(name=="Name")
m_name=attr.GetValue();
else if(name== "Symbol")
m_symbol = attr.GetValue();
else if(name== "Magic")
m_magic=(uint)attr.GetValue();
else if(name=="Timeframe")
m_timeframe=StringToTimeframe(attr.GetValue());
}
CheckParams();
}
//+------------------------------------------------------------------+
//| Возвращает истину, если все параметры загружены правильно. |
//| Возвращает ложь в противном случае. |
//+------------------------------------------------------------------+
bool CParamsBase::IsValid(void)
{
return m_is_valid;
}
//+------------------------------------------------------------------+
//| Возвращает магический номер эксперта. |
//+------------------------------------------------------------------+
uint CParamsBase::Magic(void)
{
return m_magic;
}
//+------------------------------------------------------------------+
//| Возвращает имя эксперта. |
//+------------------------------------------------------------------+
string CParamsBase::Name(void)
{
return m_name;
}
//+------------------------------------------------------------------+
//| Возвращает рабочий символ эксперта. |
//+------------------------------------------------------------------+
string CParamsBase::Symbol(void)
{
return m_symbol;
}
//+------------------------------------------------------------------+
//| Возвращает рабочий таймфрейм эксперта. |
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES CParamsBase::Timeframe(void)
{
return m_timeframe;
}
//+------------------------------------------------------------------+
//| Возвращает истину, если все параметры выставлены верно. |
//| Возвращает ложь в противном случае, а также выдает |
//| предупреждающее сообщение о том, какие параметры |
//| установлены не верно. |
//+------------------------------------------------------------------+
bool CParamsBase::CheckParams(void)
{
m_is_valid= true;
if(m_name == "")
{
string text="Missing required XML attribute: 'Name'. Check XML strategy file";
CMessage *msg=new CMessage(MESSAGE_ERROR,__FUNCTION__,text);
Log.AddMessage(msg);
m_is_valid=false;
}
if(m_magic==0)
{
string text="Missing required XML attribute: 'Magic'. Check XML strategy"+m_name+" file";
CMessage *msg=new CMessage(MESSAGE_ERROR,__FUNCTION__,text);
Log.AddMessage(msg);
m_is_valid=false;
}
if(m_symbol=="")
{
string text="Missing required XML attribute: 'Symbol'. Check XML strategy"+m_name+" file";
CMessage *msg=new CMessage(MESSAGE_ERROR,__FUNCTION__,text);
Log.AddMessage(msg);
m_is_valid=false;
}
if(m_timeframe==PERIOD_CURRENT)
{
string text="Missing required XML attribute: 'Timeframe'. Check XML strategy"+m_name+" file";
CMessage *msg=new CMessage(MESSAGE_ERROR,__FUNCTION__,text);
Log.AddMessage(msg);
m_is_valid=false;
}
return m_is_valid;
}
//+------------------------------------------------------------------+
//| Конвертирует строку в таймфрем типа ENUM_TIMEFRAMES. |
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES CParamsBase::StringToTimeframe(string stf)
{
if(stf=="PERIOD_M1")
return PERIOD_M1;
else if(stf=="PERIOD_M2")
return PERIOD_M2;
else if(stf=="PERIOD_M3")
return PERIOD_M3;
else if(stf=="PERIOD_M4")
return PERIOD_M4;
else if(stf=="PERIOD_M5")
return PERIOD_M5;
else if(stf=="PERIOD_M6")
return PERIOD_M6;
else if(stf=="PERIOD_M10")
return PERIOD_M10;
else if(stf=="PERIOD_M12")
return PERIOD_M12;
else if(stf=="PERIOD_M15")
return PERIOD_M15;
else if(stf=="PERIOD_M20")
return PERIOD_M20;
else if(stf=="PERIOD_M30")
return PERIOD_M30;
else if(stf=="PERIOD_H1")
return PERIOD_H1;
else if(stf=="PERIOD_H2")
return PERIOD_H2;
else if(stf=="PERIOD_H3")
return PERIOD_H3;
else if(stf=="PERIOD_H4")
return PERIOD_H4;
else if(stf=="PERIOD_H6")
return PERIOD_H6;
else if(stf=="PERIOD_H8")
return PERIOD_H8;
else if(stf=="PERIOD_H12")
return PERIOD_H12;
else if(stf=="PERIOD_D1")
return PERIOD_D1;
else if(stf=="PERIOD_W1")
return PERIOD_W1;
else if(stf=="PERIOD_MN1")
return PERIOD_MN1;
return PERIOD_CURRENT;
}
//+------------------------------------------------------------------+