184 lines
14 KiB
MQL5
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;
|
|
}
|
|
//+------------------------------------------------------------------+
|