//+------------------------------------------------------------------+ //| StrategiesList.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" #ifdef SHOW_BASE_SETTINGS input string StrategiesXMLFile="Strategies.xml"; // Загружать стратегии из файла input bool LoadOnlyCurrentSymbol=false; // Грузить только для тек. инст. #endif #include #include "Strategy.mqh" #include "StrategyParamsBase.mqh" #include ".\Panel\Panel.mqh" #include "Panel\Events\EventChartListChanged.mqh" //+------------------------------------------------------------------+ //| Класс-контенер для управления стратегиями типа CStrategy | //+------------------------------------------------------------------+ class CStrategyList { private: CLog* Log; // Логирование CArrayObj m_strategies; // Стратегии типа CStrategy void ParseStrategies(CXmlElement *xmlStrategies,bool load_curr_symbol); void ParseLimits(CXmlElement *xmlLimits); CStrBtn StrButton; public: CStrategyList(void); ~CStrategyList(void); void LoadStrategiesFromXML(string xml_name,bool load_curr_symbol); bool AddStrategy(CStrategy *strategy); int Total(); void Clear(); CStrategy *At(int index); void OnTick(); void OnTimer(); void OnBookEvent(string symbol); void OnDeinit(const int reason); void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam); }; //+------------------------------------------------------------------+ //| Конструктор по умолчанию. | //+------------------------------------------------------------------+ CStrategyList::CStrategyList(void) : StrButton(GetPointer(this)) { Log=CLog::GetLog(); StrButton.Show(); m_strategies.Sort(0); } //+------------------------------------------------------------------+ //| Внимание, это единственное место, где удаляется CLog. В других | //| местах удалять его не нужно. | //+------------------------------------------------------------------+ CStrategyList::~CStrategyList(void) { CLog::DeleteLog(); } //+------------------------------------------------------------------+ //| Очищяем список стратегий | //+------------------------------------------------------------------+ void CStrategyList::Clear(void) { m_strategies.Clear(); } //+------------------------------------------------------------------+ //| Посылает всем стратегиям списка событие OnTick | //+------------------------------------------------------------------+ void CStrategyList::OnTick(void) { for(int i=0; i