90 lines
3.3 KiB
MQL5
90 lines
3.3 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| BarControler.mqh |
|
|
//| Copyright 2025, Niquel Mendoza. |
|
|
//| https://www.mql5.com/es/users/nique_372/news |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2025, Niquel Mendoza."
|
|
#property link "https://www.mql5.com/es/users/nique_372/news"
|
|
#property strict
|
|
|
|
#ifndef UTILS_FA_BAR_CONTROLER_MQH
|
|
#define UTILS_FA_BAR_CONTROLER_MQH
|
|
|
|
#include "FuncionesBases.mqh"
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Class to control the opening of a candle |
|
|
//+------------------------------------------------------------------+
|
|
class CBarControler
|
|
{
|
|
private:
|
|
string symbol;
|
|
datetime next_time;
|
|
datetime prev_time;
|
|
ENUM_TIMEFRAMES bar_timeframe;
|
|
int period_in_seconds;
|
|
|
|
public:
|
|
CBarControler(ENUM_TIMEFRAMES _timeframe, string _symbol);
|
|
inline int PeriodsInSeconds()const { return period_in_seconds; }
|
|
inline ENUM_TIMEFRAMES Timeframe() const { return bar_timeframe; }
|
|
inline bool IsNewBar(datetime curr_time);
|
|
inline datetime GetNextPrevBarTime() const { return prev_time; }
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
CBarControler::CBarControler(ENUM_TIMEFRAMES _timeframe, string _symbol)
|
|
: next_time(wrong_datetime), prev_time(wrong_datetime), period_in_seconds(PeriodSeconds(_timeframe))
|
|
{
|
|
this.bar_timeframe = _timeframe;
|
|
this.symbol = _symbol;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
inline bool CBarControler::IsNewBar(datetime curr_time)
|
|
{
|
|
if(curr_time >= next_time)
|
|
{
|
|
prev_time = next_time;
|
|
this.next_time = iTime(symbol, bar_timeframe, 0) + (this.bar_timeframe == PERIOD_MN1 ? SecondsInMonth(curr_time) : period_in_seconds);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Class to control the opening of a candle ("fast") |
|
|
//+------------------------------------------------------------------+
|
|
class CBarControlerFast
|
|
{
|
|
private:
|
|
string symbol;
|
|
datetime next_time;
|
|
ENUM_TIMEFRAMES bar_timeframe;
|
|
int period_in_seconds;
|
|
bool is_mn1;
|
|
|
|
public:
|
|
CBarControlerFast(ENUM_TIMEFRAMES _timeframe, string _symbol);
|
|
inline ENUM_TIMEFRAMES Timeframe() const { return bar_timeframe; }
|
|
inline bool IsNewBar(datetime curr_time);
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
CBarControlerFast::CBarControlerFast(ENUM_TIMEFRAMES _timeframe, string _symbol)
|
|
: next_time(wrong_datetime), period_in_seconds(PeriodSeconds(_timeframe))
|
|
{
|
|
bar_timeframe = _timeframe;
|
|
symbol = _symbol;
|
|
is_mn1 = _timeframe == PERIOD_MN1;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
bool CBarControlerFast::IsNewBar(datetime curr_time)
|
|
{
|
|
if(curr_time >= next_time)
|
|
{
|
|
next_time = iTime(symbol, bar_timeframe, 0) + (!is_mn1 ? period_in_seconds : SecondsInMonth(curr_time));
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
#endif
|