51 lines
1.5 KiB
MQL5
51 lines
1.5 KiB
MQL5
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| ClosedPositions.mqh – kolekce zavřených pozic |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
#property copyright "TestRefactor"
|
||
|
|
#property strict
|
||
|
|
|
||
|
|
#ifndef __CLOSED_POSITIONS_MQH__
|
||
|
|
#define __CLOSED_POSITIONS_MQH__
|
||
|
|
|
||
|
|
#include "ClosedPosition.mqh"
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| CClosedPositions – kolekce CClosedPosition (historie / dashboard)|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
class CClosedPositions {
|
||
|
|
private:
|
||
|
|
CClosedPosition m_items[];
|
||
|
|
int m_count;
|
||
|
|
int m_maxSize;
|
||
|
|
|
||
|
|
public:
|
||
|
|
CClosedPositions(int maxSize = 100) : m_count(0), m_maxSize(maxSize) {
|
||
|
|
ArrayResize(m_items, 0);
|
||
|
|
}
|
||
|
|
|
||
|
|
void Add(const CClosedPosition &item) {
|
||
|
|
if(m_count >= m_maxSize) {
|
||
|
|
for(int i = 0; i < m_count - 1; i++) m_items[i] = m_items[i + 1];
|
||
|
|
m_items[m_count - 1] = item;
|
||
|
|
} else {
|
||
|
|
ArrayResize(m_items, m_count + 1);
|
||
|
|
m_items[m_count] = item;
|
||
|
|
m_count++;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
int Count() const { return m_count; }
|
||
|
|
CClosedPosition* At(int index) {
|
||
|
|
if(index < 0 || index >= m_count) return NULL;
|
||
|
|
return GetPointer(m_items[index]);
|
||
|
|
}
|
||
|
|
|
||
|
|
double GetTotalProfit() const {
|
||
|
|
double sum = 0;
|
||
|
|
for(int i = 0; i < m_count; i++)
|
||
|
|
sum += m_items[i].GetNetProfit();
|
||
|
|
return sum;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
#endif
|