101 行
4.6 KiB
MQL5
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); };
|
|
};
|
|
|
|
//+------------------------------------------------------------------+
|