forked from nique_372/MQLArticles
		
	
		
			
				
	
	
		
			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 
 |