89 lines
4.1 KiB
MQL5
89 lines
4.1 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| NewBarDetecter.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>
|
|
//+------------------------------------------------------------------+
|
|
//| Класс, обнаруживающий появление нового бара на указанном |
|
|
//| инструменте и периоде. |
|
|
//+------------------------------------------------------------------+
|
|
class CBarDetector : public CObject
|
|
{
|
|
private:
|
|
ENUM_TIMEFRAMES m_timeframe; // Таймфрейм, по которому требуется отслеживать новый бар
|
|
string m_symbol; // Символ, по которому требуется отслеживать новый бар
|
|
datetime m_last_time; // время последнего известного бара
|
|
public:
|
|
CBarDetector(void);
|
|
CBarDetector(string symbol,ENUM_TIMEFRAMES timeframe);
|
|
void Timeframe(ENUM_TIMEFRAMES tf);
|
|
ENUM_TIMEFRAMES Timeframe(void);
|
|
void Symbol(string symbol);
|
|
string Symbol(void);
|
|
|
|
bool IsNewBar(void);
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| Конструктор по-умолчанию устанавливает текущий таймфрейм |
|
|
//| и инструмент. |
|
|
//+------------------------------------------------------------------+
|
|
CBarDetector::CBarDetector(void)
|
|
{
|
|
m_symbol=_Symbol;
|
|
m_timeframe=Period();
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Создает объект с предустановленным символом и таймфремом. |
|
|
//+------------------------------------------------------------------+
|
|
CBarDetector::CBarDetector(string symbol,ENUM_TIMEFRAMES tf)
|
|
{
|
|
m_symbol=symbol;
|
|
m_timeframe=tf;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Устанавливает таймфрейм, образование нового бара на котором надо |
|
|
//| отслеживать. |
|
|
//+------------------------------------------------------------------+
|
|
void CBarDetector::Timeframe(ENUM_TIMEFRAMES tf)
|
|
{
|
|
m_timeframe=tf;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Возвращает таймфрейм, образование нового бара на котором |
|
|
//| отслеживается. |
|
|
//+------------------------------------------------------------------+
|
|
ENUM_TIMEFRAMES CBarDetector::Timeframe(void)
|
|
{
|
|
return m_timeframe;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Устанавливает название инструмента, образование нового бара |
|
|
//| на котором надо отслеживать. |
|
|
//+------------------------------------------------------------------+
|
|
void CBarDetector::Symbol(string symbol)
|
|
{
|
|
m_symbol=symbol;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Возвращает название инструмента, образование нового бара |
|
|
//| на котором отслеживается. |
|
|
//+------------------------------------------------------------------+
|
|
string CBarDetector::Symbol(void)
|
|
{
|
|
return m_symbol;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Возвращает истину, если на заданном инструменте и таймфрейме |
|
|
//| появился новый бар. |
|
|
//+------------------------------------------------------------------+
|
|
bool CBarDetector::IsNewBar(void)
|
|
{
|
|
datetime time[];
|
|
if(CopyTime(m_symbol, m_timeframe, 0, 1, time) < 1)return false;
|
|
if(time[0] == m_last_time)return false;
|
|
return m_last_time = time[0];
|
|
}
|
|
//+------------------------------------------------------------------+
|