EA-Setka-2/framework/common/timer.mqh

103 lines
2.9 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 14:50:44 +02:00
//+------------------------------------------------------------------+
//| ProjectName |
//| Copyright 2020, CompanyName |
//| http://www.companyname.net |
//+------------------------------------------------------------------+
#ifndef FRAMEWORK_TIMER_MQH
#define FRAMEWORK_TIMER_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class timer_t : public disposable_obj
{
private:
int _interval_in_sec;
datetime _start;
string _timer_name;
public:
timer_t()
{
reset();
}
void reset()
{
_start = layer::time_current();
}
void set_zero()
{
_start = _start - _interval_in_sec;
}
bool is_elapsed()
{
return get_distance() >= _interval_in_sec;
}
int get_distance()
{
return time_get_distance_in_sec(layer::time_current(), _start);
}
datetime ent_time()
{
return _start + _interval_in_sec;
}
static timer_t *create(int interval_in_sec, const string name="")
{
return timer_t::create(layer::time_current(), interval_in_sec, name);
}
static timer_t *create(datetime start, int interval_in_sec, const string name)
{
timer_t *result = new timer_t();
result._start = start;
result._interval_in_sec = interval_in_sec;
result._timer_name = name;
result.save_state();
return result;
}
static timer_t *restore(string name)
{
double val=0;
if(tool_global_var::get(name,val))
{
if((datetime)val<=layer::time_current())
{
tool_global_var::del(name);
return NULL;
}
}
else
return NULL;
int interval=time_get_distance_in_sec((long)val,layer::time_current());
return timer_t::create(interval, name);
}
bool save_state()
{
if(ent_time()>layer::time_current() && StringLen(_timer_name)>0)
{
return tool_global_var::set(_timer_name,ent_time());
}
return true;
}
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int time_get_distance_in_sec(datetime end, datetime start)
{
return (int)(end - start);
}
#endif
//+------------------------------------------------------------------+