bar/tests/UnitTestsBarArray.mq5

455 Zeilen
17 KiB
MQL5

2025-12-23 08:09:46 -03:00
//+------------------------------------------------------------------+
//| UnitTests.mq5 |
//| Douglas Rechia |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Douglas Rechia"
#property link "https://www.mql5.com"
#property version "2.00"
2026-02-02 13:42:14 -03:00
#include "../knitpkg/include/douglasrechia/bar/BarArray.mqh"
2025-12-23 08:09:46 -03:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool TestBarArray()
{
datetime timeArray[];
double openArray[];
double highArray[];
double lowArray[];
double closeArray[];
long volumeArray[];
long tickVolumeArray[];
if(CopyTime(_Symbol, PERIOD_CURRENT, 0, 5, timeArray) != 5)
{
Print("CopyTime error");
return false;
}
if(CopyOpen(_Symbol, PERIOD_CURRENT, 0, 5, openArray) != 5)
{
Print("CopyOpen error");
return false;
}
if(CopyHigh(_Symbol, PERIOD_CURRENT, 0, 5, highArray) != 5)
{
Print("CopyHigh error");
return false;
}
if(CopyLow(_Symbol, PERIOD_CURRENT, 0, 5, lowArray) != 5)
{
Print("CopyLow error");
return false;
}
if(CopyClose(_Symbol, PERIOD_CURRENT, 0, 5, closeArray) != 5)
{
Print("CopyClose error");
return false;
}
if(CopyRealVolume(_Symbol, PERIOD_CURRENT, 0, 5, volumeArray) != 5)
{
Print("CopyRealVolume error");
return false;
}
if(CopyTickVolume(_Symbol, PERIOD_CURRENT, 0, 5, tickVolumeArray) != 5)
{
Print("CopyTickVolume error");
return false;
}
2026-02-02 12:52:43 -03:00
douglasrechia::BarArray bar(timeArray, openArray, highArray, lowArray, closeArray, volumeArray, tickVolumeArray);
2025-12-23 08:09:46 -03:00
return
bar.TimeSeries().ValueAtShift(0) == timeArray[4] &&
bar.TimeSeries().ValueAtShift(1) == timeArray[3] &&
bar.TimeSeries().ValueAtShift(2) == timeArray[2] &&
bar.TimeSeries().ValueAtShift(3) == timeArray[1] &&
bar.TimeSeries().ValueAtShift(4) == timeArray[0] &&
bar.TimeSeries().ValueAtShift(0) == bar.Time(0) &&
bar.TimeSeries().ValueAtShift(1) == bar.Time(1) &&
bar.TimeSeries().ValueAtShift(2) == bar.Time(2) &&
bar.TimeSeries().ValueAtShift(3) == bar.Time(3) &&
bar.TimeSeries().ValueAtShift(4) == bar.Time(4) &&
bar.OpenSeries().ValueAtShift(0) == bar.Open(0) &&
bar.OpenSeries().ValueAtShift(1) == bar.Open(1) &&
bar.OpenSeries().ValueAtShift(2) == bar.Open(2) &&
bar.OpenSeries().ValueAtShift(3) == bar.Open(3) &&
bar.OpenSeries().ValueAtShift(4) == bar.Open(4) &&
bar.OpenSeries().ValueAtShift(0) == openArray[4] &&
bar.OpenSeries().ValueAtShift(1) == openArray[3] &&
bar.OpenSeries().ValueAtShift(2) == openArray[2] &&
bar.OpenSeries().ValueAtShift(3) == openArray[1] &&
bar.OpenSeries().ValueAtShift(4) == openArray[0] &&
bar.HighSeries().ValueAtShift(0) == bar.High(0) &&
bar.HighSeries().ValueAtShift(1) == bar.High(1) &&
bar.HighSeries().ValueAtShift(2) == bar.High(2) &&
bar.HighSeries().ValueAtShift(3) == bar.High(3) &&
bar.HighSeries().ValueAtShift(4) == bar.High(4) &&
bar.HighSeries().ValueAtShift(0) == highArray[4] &&
bar.HighSeries().ValueAtShift(1) == highArray[3] &&
bar.HighSeries().ValueAtShift(2) == highArray[2] &&
bar.HighSeries().ValueAtShift(3) == highArray[1] &&
bar.HighSeries().ValueAtShift(4) == highArray[0] &&
bar.LowSeries().ValueAtShift(0) == bar.Low(0) &&
bar.LowSeries().ValueAtShift(1) == bar.Low(1) &&
bar.LowSeries().ValueAtShift(2) == bar.Low(2) &&
bar.LowSeries().ValueAtShift(3) == bar.Low(3) &&
bar.LowSeries().ValueAtShift(4) == bar.Low(4) &&
bar.LowSeries().ValueAtShift(0) == lowArray[4] &&
bar.LowSeries().ValueAtShift(1) == lowArray[3] &&
bar.LowSeries().ValueAtShift(2) == lowArray[2] &&
bar.LowSeries().ValueAtShift(3) == lowArray[1] &&
bar.LowSeries().ValueAtShift(4) == lowArray[0] &&
bar.CloseSeries().ValueAtShift(0) == bar.Close(0) &&
bar.CloseSeries().ValueAtShift(1) == bar.Close(1) &&
bar.CloseSeries().ValueAtShift(2) == bar.Close(2) &&
bar.CloseSeries().ValueAtShift(3) == bar.Close(3) &&
bar.CloseSeries().ValueAtShift(4) == bar.Close(4) &&
bar.CloseSeries().ValueAtShift(0) == closeArray[4] &&
bar.CloseSeries().ValueAtShift(1) == closeArray[3] &&
bar.CloseSeries().ValueAtShift(2) == closeArray[2] &&
bar.CloseSeries().ValueAtShift(3) == closeArray[1] &&
bar.CloseSeries().ValueAtShift(4) == closeArray[0] &&
bar.VolumeSeries().ValueAtShift(0) == bar.Volume(0) &&
bar.VolumeSeries().ValueAtShift(1) == bar.Volume(1) &&
bar.VolumeSeries().ValueAtShift(2) == bar.Volume(2) &&
bar.VolumeSeries().ValueAtShift(3) == bar.Volume(3) &&
bar.VolumeSeries().ValueAtShift(4) == bar.Volume(4) &&
bar.VolumeSeries().ValueAtShift(0) == volumeArray[4] &&
bar.VolumeSeries().ValueAtShift(1) == volumeArray[3] &&
bar.VolumeSeries().ValueAtShift(2) == volumeArray[2] &&
bar.VolumeSeries().ValueAtShift(3) == volumeArray[1] &&
bar.VolumeSeries().ValueAtShift(4) == volumeArray[0] &&
bar.TickVolumeSeries().ValueAtShift(0) == bar.TickVolume(0) &&
bar.TickVolumeSeries().ValueAtShift(1) == bar.TickVolume(1) &&
bar.TickVolumeSeries().ValueAtShift(2) == bar.TickVolume(2) &&
bar.TickVolumeSeries().ValueAtShift(3) == bar.TickVolume(3) &&
bar.TickVolumeSeries().ValueAtShift(4) == bar.TickVolume(4) &&
bar.TickVolumeSeries().ValueAtShift(0) == tickVolumeArray[4] &&
bar.TickVolumeSeries().ValueAtShift(1) == tickVolumeArray[3] &&
bar.TickVolumeSeries().ValueAtShift(2) == tickVolumeArray[2] &&
bar.TickVolumeSeries().ValueAtShift(3) == tickVolumeArray[1] &&
bar.TickVolumeSeries().ValueAtShift(4) == tickVolumeArray[0] &&
2025-12-23 08:09:46 -03:00
bar.OpenSeries().Size() == bar.Size();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool TestBarArray2()
{
datetime timeArray[];
double openArray[];
double highArray[];
double lowArray[];
double closeArray[];
long volumeArray[];
long tickVolumeArray[];
if(CopyTime(_Symbol, PERIOD_CURRENT, 0, 5, timeArray) != 5)
{
Print("CopyTime error");
return false;
}
if(CopyOpen(_Symbol, PERIOD_CURRENT, 0, 5, openArray) != 5)
{
Print("CopyOpen error");
return false;
}
if(CopyHigh(_Symbol, PERIOD_CURRENT, 0, 5, highArray) != 5)
{
Print("CopyHigh error");
return false;
}
if(CopyLow(_Symbol, PERIOD_CURRENT, 0, 5, lowArray) != 5)
{
Print("CopyLow error");
return false;
}
if(CopyClose(_Symbol, PERIOD_CURRENT, 0, 5, closeArray) != 5)
{
Print("CopyClose error");
return false;
}
if(CopyRealVolume(_Symbol, PERIOD_CURRENT, 0, 5, volumeArray) != 5)
{
Print("CopyRealVolume error");
return false;
}
if(CopyTickVolume(_Symbol, PERIOD_CURRENT, 0, 5, tickVolumeArray) != 5)
{
Print("CopyTickVolume error");
return false;
}
2026-02-02 12:52:43 -03:00
douglasrechia::BarArray bar(timeArray, openArray, highArray, lowArray, closeArray, volumeArray, tickVolumeArray,-1,-1,false);
2025-12-23 08:09:46 -03:00
return
bar.TimeSeries().ValueAtShift(0) == timeArray[0] &&
bar.TimeSeries().ValueAtShift(1) == timeArray[1] &&
bar.TimeSeries().ValueAtShift(2) == timeArray[2] &&
bar.TimeSeries().ValueAtShift(3) == timeArray[3] &&
bar.TimeSeries().ValueAtShift(4) == timeArray[4] &&
bar.TimeSeries().ValueAtShift(0) == bar.Time(0) &&
bar.TimeSeries().ValueAtShift(1) == bar.Time(1) &&
bar.TimeSeries().ValueAtShift(2) == bar.Time(2) &&
bar.TimeSeries().ValueAtShift(3) == bar.Time(3) &&
bar.TimeSeries().ValueAtShift(4) == bar.Time(4) &&
bar.OpenSeries().ValueAtShift(0) == bar.Open(0) &&
bar.OpenSeries().ValueAtShift(1) == bar.Open(1) &&
bar.OpenSeries().ValueAtShift(2) == bar.Open(2) &&
bar.OpenSeries().ValueAtShift(3) == bar.Open(3) &&
bar.OpenSeries().ValueAtShift(4) == bar.Open(4) &&
bar.OpenSeries().ValueAtShift(0) == openArray[0] &&
bar.OpenSeries().ValueAtShift(1) == openArray[1] &&
bar.OpenSeries().ValueAtShift(2) == openArray[2] &&
bar.OpenSeries().ValueAtShift(3) == openArray[3] &&
bar.OpenSeries().ValueAtShift(4) == openArray[4] &&
bar.HighSeries().ValueAtShift(0) == bar.High(0) &&
bar.HighSeries().ValueAtShift(1) == bar.High(1) &&
bar.HighSeries().ValueAtShift(2) == bar.High(2) &&
bar.HighSeries().ValueAtShift(3) == bar.High(3) &&
bar.HighSeries().ValueAtShift(4) == bar.High(4) &&
bar.HighSeries().ValueAtShift(0) == highArray[0] &&
bar.HighSeries().ValueAtShift(1) == highArray[1] &&
bar.HighSeries().ValueAtShift(2) == highArray[2] &&
bar.HighSeries().ValueAtShift(3) == highArray[3] &&
bar.HighSeries().ValueAtShift(4) == highArray[4] &&
bar.LowSeries().ValueAtShift(0) == bar.Low(0) &&
bar.LowSeries().ValueAtShift(1) == bar.Low(1) &&
bar.LowSeries().ValueAtShift(2) == bar.Low(2) &&
bar.LowSeries().ValueAtShift(3) == bar.Low(3) &&
bar.LowSeries().ValueAtShift(4) == bar.Low(4) &&
bar.LowSeries().ValueAtShift(0) == lowArray[0] &&
bar.LowSeries().ValueAtShift(1) == lowArray[1] &&
bar.LowSeries().ValueAtShift(2) == lowArray[2] &&
bar.LowSeries().ValueAtShift(3) == lowArray[3] &&
bar.LowSeries().ValueAtShift(4) == lowArray[4] &&
bar.CloseSeries().ValueAtShift(0) == bar.Close(0) &&
bar.CloseSeries().ValueAtShift(1) == bar.Close(1) &&
bar.CloseSeries().ValueAtShift(2) == bar.Close(2) &&
bar.CloseSeries().ValueAtShift(3) == bar.Close(3) &&
bar.CloseSeries().ValueAtShift(4) == bar.Close(4) &&
bar.CloseSeries().ValueAtShift(0) == closeArray[0] &&
bar.CloseSeries().ValueAtShift(1) == closeArray[1] &&
bar.CloseSeries().ValueAtShift(2) == closeArray[2] &&
bar.CloseSeries().ValueAtShift(3) == closeArray[3] &&
bar.CloseSeries().ValueAtShift(4) == closeArray[4] &&
bar.VolumeSeries().ValueAtShift(0) == bar.Volume(0) &&
bar.VolumeSeries().ValueAtShift(1) == bar.Volume(1) &&
bar.VolumeSeries().ValueAtShift(2) == bar.Volume(2) &&
bar.VolumeSeries().ValueAtShift(3) == bar.Volume(3) &&
bar.VolumeSeries().ValueAtShift(4) == bar.Volume(4) &&
bar.VolumeSeries().ValueAtShift(0) == volumeArray[0] &&
bar.VolumeSeries().ValueAtShift(1) == volumeArray[1] &&
bar.VolumeSeries().ValueAtShift(2) == volumeArray[2] &&
bar.VolumeSeries().ValueAtShift(3) == volumeArray[3] &&
bar.VolumeSeries().ValueAtShift(4) == volumeArray[4] &&
bar.TickVolumeSeries().ValueAtShift(0) == bar.TickVolume(0) &&
bar.TickVolumeSeries().ValueAtShift(1) == bar.TickVolume(1) &&
bar.TickVolumeSeries().ValueAtShift(2) == bar.TickVolume(2) &&
bar.TickVolumeSeries().ValueAtShift(3) == bar.TickVolume(3) &&
bar.TickVolumeSeries().ValueAtShift(4) == bar.TickVolume(4) &&
bar.TickVolumeSeries().ValueAtShift(0) == tickVolumeArray[0] &&
bar.TickVolumeSeries().ValueAtShift(1) == tickVolumeArray[1] &&
bar.TickVolumeSeries().ValueAtShift(2) == tickVolumeArray[2] &&
bar.TickVolumeSeries().ValueAtShift(3) == tickVolumeArray[3] &&
bar.TickVolumeSeries().ValueAtShift(4) == tickVolumeArray[4] &&
2025-12-23 08:09:46 -03:00
bar.OpenSeries().Size() == bar.Size();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool TestBarArray3()
{
datetime timeArray[];
double openArray[];
double highArray[];
double lowArray[];
double closeArray[];
long volumeArray[];
long tickVolumeArray[];
if(CopyTime(_Symbol, PERIOD_CURRENT, 0, 5, timeArray) != 5)
{
Print("CopyTime error");
return false;
}
if(CopyOpen(_Symbol, PERIOD_CURRENT, 0, 5, openArray) != 5)
{
Print("CopyOpen error");
return false;
}
if(CopyHigh(_Symbol, PERIOD_CURRENT, 0, 5, highArray) != 5)
{
Print("CopyHigh error");
return false;
}
if(CopyLow(_Symbol, PERIOD_CURRENT, 0, 5, lowArray) != 5)
{
Print("CopyLow error");
return false;
}
if(CopyClose(_Symbol, PERIOD_CURRENT, 0, 5, closeArray) != 5)
{
Print("CopyClose error");
return false;
}
if(CopyRealVolume(_Symbol, PERIOD_CURRENT, 0, 5, volumeArray) != 5)
{
Print("CopyRealVolume error");
return false;
}
if(CopyTickVolume(_Symbol, PERIOD_CURRENT, 0, 5, tickVolumeArray) != 5)
{
Print("CopyTickVolume error");
return false;
}
2026-02-02 12:52:43 -03:00
douglasrechia::BarArray bar(timeArray, openArray, highArray, lowArray, closeArray, volumeArray, tickVolumeArray,1,3,false);
2025-12-23 08:09:46 -03:00
return
bar.TimeSeries().ValueAtShift(0) == timeArray[1] &&
bar.TimeSeries().ValueAtShift(1) == timeArray[2] &&
bar.TimeSeries().ValueAtShift(2) == timeArray[3] &&
2025-12-23 08:09:46 -03:00
bar.OpenSeries().ValueAtShift(0) == openArray[1] &&
bar.OpenSeries().ValueAtShift(1) == openArray[2] &&
bar.OpenSeries().ValueAtShift(2) == openArray[3] &&
2025-12-23 08:09:46 -03:00
bar.HighSeries().ValueAtShift(0) == highArray[1] &&
bar.HighSeries().ValueAtShift(1) == highArray[2] &&
bar.HighSeries().ValueAtShift(2) == highArray[3] &&
2025-12-23 08:09:46 -03:00
bar.LowSeries().ValueAtShift(0) == lowArray[1] &&
bar.LowSeries().ValueAtShift(1) == lowArray[2] &&
bar.LowSeries().ValueAtShift(2) == lowArray[3] &&
2025-12-23 08:09:46 -03:00
bar.CloseSeries().ValueAtShift(0) == closeArray[1] &&
bar.CloseSeries().ValueAtShift(1) == closeArray[2] &&
bar.CloseSeries().ValueAtShift(2) == closeArray[3] &&
2025-12-23 08:09:46 -03:00
bar.VolumeSeries().ValueAtShift(0) == volumeArray[1] &&
bar.VolumeSeries().ValueAtShift(1) == volumeArray[2] &&
bar.VolumeSeries().ValueAtShift(2) == volumeArray[3] &&
2025-12-23 08:09:46 -03:00
bar.TickVolumeSeries().ValueAtShift(0) == tickVolumeArray[1] &&
bar.TickVolumeSeries().ValueAtShift(1) == tickVolumeArray[2] &&
bar.TickVolumeSeries().ValueAtShift(2) == tickVolumeArray[3] &&
2025-12-23 08:09:46 -03:00
bar.OpenSeries().Size() == bar.Size() &&
bar.Size() == 3;
}
//+------------------------------------------------------------------+
//| DoTests |
//+------------------------------------------------------------------+
void DoTests(int &tests_performed,int &tests_passed)
{
string test_name="";
//--- TestBarArray
tests_performed++;
test_name="TestBarArray";
if(TestBarArray())
{
tests_passed++;
PrintFormat("%s pass",test_name);
}
else
PrintFormat("%s failed",test_name);
//--- TestBarArray2
tests_performed++;
test_name="TestBarArray2";
if(TestBarArray2())
{
tests_passed++;
PrintFormat("%s pass",test_name);
}
else
PrintFormat("%s failed",test_name);
//--- TestBarArray3
tests_performed++;
test_name="TestBar3";
if(TestBarArray3())
{
tests_passed++;
PrintFormat("%s pass",test_name);
}
else
PrintFormat("%s failed",test_name);
return;
}
//+------------------------------------------------------------------+
//| UnitTests() |
//+------------------------------------------------------------------+
void UnitTests(const string package_name)
{
PrintFormat("Unit tests for Package %s\n",package_name);
//--- initial values
int tests_performed=0;
int tests_passed=0;
//--- test distributions
DoTests(tests_performed,tests_passed);
//--- print statistics
PrintFormat("\n%d of %d passed",tests_passed,tests_performed);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
UnitTests("BarMqlRates");
}
//+------------------------------------------------------------------+