mql4-bar/knitpkg/include/douglasrechia/bar/BarTimeSeries.mqh
2026-02-03 10:27:54 -03:00

101 行
4.6 KiB
MQL5

//+------------------------------------------------------------------+
//| BarSeries.mqh |
//| |
//| KnitPkg for MetaTrader |
//| |
//| MIT License |
//| Copyright (c) 2025 Douglas Rechia |
//| |
//| Typed series implementations for individual bar components. |
//| Each class wraps a specific OHLCV field via the ITimeSeries<T> |
//| interface. |
//| |
//+------------------------------------------------------------------+
#include "Bar.mqh"
//+------------------------------------------------------------------+
//| BaseBarTimeSeries — generic template base for bar series
//+------------------------------------------------------------------+
template<typename T>
class BaseBarTimeSeries : public ITimeSeries<T>
{
protected:
IBar* m_bar;
public:
BaseBarTimeSeries(IBar *bar) { m_bar = bar; }
virtual T ValueAtShift(int shift = 0) = 0;
int Size() { return m_bar.Size(); }
};
//+------------------------------------------------------------------+
//| BarTimeSeries — datetime series accessor
//+------------------------------------------------------------------+
class BarTimeSeries : public BaseBarTimeSeries<datetime>
{
public:
BarTimeSeries(IBar *bar) : BaseBarTimeSeries(bar) {}
virtual datetime ValueAtShift(int shift = 0) { return m_bar.Time(shift); };
};
//+------------------------------------------------------------------+
//| BarOpenTimeSeries — open price series accessor
//+------------------------------------------------------------------+
class BarOpenTimeSeries : public BaseBarTimeSeries<double>
{
public:
BarOpenTimeSeries(IBar *bar) : BaseBarTimeSeries(bar) {}
virtual double ValueAtShift(int shift = 0) { return m_bar.Open(shift); };
};
//+------------------------------------------------------------------+
//| BarHighTimeSeries — high price series accessor
//+------------------------------------------------------------------+
class BarHighTimeSeries : public BaseBarTimeSeries<double>
{
public:
BarHighTimeSeries(IBar *bar) : BaseBarTimeSeries(bar) {}
virtual double ValueAtShift(int shift = 0) { return m_bar.High(shift); };
};
//+------------------------------------------------------------------+
//| BarLowTimeSeries — low price series accessor
//+------------------------------------------------------------------+
class BarLowTimeSeries : public BaseBarTimeSeries<double>
{
public:
BarLowTimeSeries(IBar *bar) : BaseBarTimeSeries(bar) {}
virtual double ValueAtShift(int shift = 0) { return m_bar.Low(shift); };
};
//+------------------------------------------------------------------+
//| BarCloseTimeSeries — close price series accessor
//+------------------------------------------------------------------+
class BarCloseTimeSeries : public BaseBarTimeSeries<double>
{
public:
BarCloseTimeSeries(IBar *bar) : BaseBarTimeSeries(bar) {}
virtual double ValueAtShift(int shift = 0) { return m_bar.Close(shift); };
};
//+------------------------------------------------------------------+
//| BarVolumeTimeSeries — real volume series accessor
//+------------------------------------------------------------------+
class BarVolumeTimeSeries : public BaseBarTimeSeries<long>
{
public:
BarVolumeTimeSeries(IBar *bar) : BaseBarTimeSeries(bar) {}
virtual long ValueAtShift(int shift = 0) { return m_bar.Volume(shift); };
};
//+------------------------------------------------------------------+
//| BarTickVolumeTimeSeries — tick volume series accessor
//+------------------------------------------------------------------+
class BarTickVolumeTimeSeries : public BaseBarTimeSeries<long>
{
public:
BarTickVolumeTimeSeries(IBar *bar) : BaseBarTimeSeries(bar) {}
virtual long ValueAtShift(int shift = 0) { return m_bar.TickVolume(shift); };
};
//+------------------------------------------------------------------+