UTE/Strategy/StrategyParamsBase.mqh

185 lines
14 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:34:43 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| 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"
//+------------------------------------------------------------------+
//| ;0AA A>45@68B 107>2K5 ?0@0<5B@K ;N1>9 AB@0B5388 CStrategy. |
//| 0@0<5B@K 703@C60NBAO 87 ?5@540==>3> XML-0BB@81CB0 <Stragey> |
//+------------------------------------------------------------------+
class CParamsBase
{
private:
bool m_is_valid; // $;03, C:07K20NI89, 2A5 ;8 >1O70B5;L=K5 ?0@0<5B@K AB@0B5388 C:070=K 25@=>.
uint m_magic; // 038G5A:89 =><5@ AB@0B5388
string m_name; // <O AB@0B5388
string m_symbol; // !8<2>; AB@0B5388
ENUM_TIMEFRAMES m_timeframe; // "09<D@59< AB@0B5388
CLog* Log; // >38@>20=85
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);
};
//+------------------------------------------------------------------+
//| !>7405B :;0AA 107>2KE ?0@0<5B@>2 AB@0B5388 87 A?5F80;L=>3> |
//| XML-M;5<5=B0. |
//+------------------------------------------------------------------+
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();
}
//+------------------------------------------------------------------+
//| >72@0I05B 8AB8=C, 5A;8 2A5 ?0@0<5B@K 703@C65=K ?@028;L=>. |
//| >72@0I05B ;>6L 2 ?@>B82=>< A;CG05. |
//+------------------------------------------------------------------+
bool CParamsBase::IsValid(void)
{
return m_is_valid;
}
//+------------------------------------------------------------------+
//| >72@0I05B <038G5A:89 =><5@ M:A?5@B0. |
//+------------------------------------------------------------------+
uint CParamsBase::Magic(void)
{
return m_magic;
}
//+------------------------------------------------------------------+
//| >72@0I05B 8<O M:A?5@B0. |
//+------------------------------------------------------------------+
string CParamsBase::Name(void)
{
return m_name;
}
//+------------------------------------------------------------------+
//| >72@0I05B @01>G89 A8<2>; M:A?5@B0. |
//+------------------------------------------------------------------+
string CParamsBase::Symbol(void)
{
return m_symbol;
}
//+------------------------------------------------------------------+
//| >72@0I05B @01>G89 B09<D@59< M:A?5@B0. |
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES CParamsBase::Timeframe(void)
{
return m_timeframe;
}
//+------------------------------------------------------------------+
//| >72@0I05B 8AB8=C, 5A;8 2A5 ?0@0<5B@K 2KAB02;5=K 25@=>. |
//| >72@0I05B ;>6L 2 ?@>B82=>< A;CG05, 0 B0:65 2K405B |
//| ?@54C?@5640NI55 A>>1I5=85 > B><, :0:85 ?0@0<5B@K |
//| CAB0=>2;5=K =5 25@=>. |
//+------------------------------------------------------------------+
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;
}
//+------------------------------------------------------------------+
//| >=25@B8@C5B AB@>:C 2 B09<D@5< B8?0 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;
}
//+------------------------------------------------------------------+