forked from airat77786/MQL5Book
104 lines
3.7 KiB
MQL5
104 lines
3.7 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| ArrayAsSeries.mq5 |
| |||
//| Copyright 2021, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
| |||
#define PRTS(A) Print(#A, "=", (string)(A) + " / status:" + (string)GetLastError())
| |||
#define LIMIT 10
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Helper function to fill array with incremented indices |
| |||
//+------------------------------------------------------------------+
| |||
template<typename T>
| |||
void indexArray(T &array[])
| |||
{
| |||
for(int i = 0; i < ArraySize(array); ++i)
| |||
{
| |||
array[i] = (T)(i + 1);
| |||
}
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Example class for array of objects |
| |||
//+------------------------------------------------------------------+
| |||
class Dummy
| |||
{
| |||
int data[];
| |||
};
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Script program start function |
| |||
//+------------------------------------------------------------------+
| |||
void OnStart()
| |||
{
| |||
double array2D[][2];
| |||
double fixed[LIMIT];
| |||
double dynamic[];
| |||
MqlRates rates[];
| |||
Dummy dummies[];
| |||
| |||
// allocate memory
| |||
ArrayResize(dynamic, LIMIT);
| |||
| |||
// fill arrays with test data: 1, 2, 3,...
| |||
indexArray(fixed);
| |||
indexArray(dynamic);
| |||
| |||
// since all arrays are declared in the program,
| |||
// they are NOT real series and will produce false
| |||
PRTS(ArrayIsSeries(array2D)); // false
| |||
PRTS(ArrayIsSeries(fixed)); // false
| |||
PRTS(ArrayIsSeries(dynamic)); // false
| |||
PRTS(ArrayIsSeries(rates)); // false
| |||
// we'll see ArrayIsSeries=true in indicators (Part V)
| |||
| |||
PRTS(ArrayGetAsSeries(array2D)); // false, can not be true
| |||
| |||
// all the next are false by default,
| |||
// because they are declared in this MQL-program
| |||
PRTS(ArrayGetAsSeries(fixed)); // false
| |||
PRTS(ArrayGetAsSeries(dynamic)); // false
| |||
PRTS(ArrayGetAsSeries(rates)); // false
| |||
PRTS(ArrayGetAsSeries(dummies)); // false
| |||
| |||
// show elements in current order
| |||
ArrayPrint(fixed, 1);
| |||
ArrayPrint(dynamic, 1);
| |||
/*
| |||
1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
| |||
1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
| |||
*/
| |||
| |||
// error: parameter conversion not allowed
| |||
// PRTS(ArraySetAsSeries(array2D, true));
| |||
| |||
// warning: cannot be used for static allocated array
| |||
PRTS(ArraySetAsSeries(fixed, true)); // false
| |||
| |||
// next 3 are ok
| |||
PRTS(ArraySetAsSeries(dynamic, true)); // true
| |||
PRTS(ArraySetAsSeries(rates, true)); // true
| |||
PRTS(ArraySetAsSeries(dummies, true)); // true
| |||
| |||
// now check what's changed: first "real" series attribute
| |||
PRTS(ArrayIsSeries(fixed)); // false
| |||
PRTS(ArrayIsSeries(dynamic)); // false
| |||
PRTS(ArrayIsSeries(rates)); // false
| |||
PRTS(ArrayIsSeries(dummies)); // false
| |||
| |||
// second, check "as series" index order
| |||
PRTS(ArrayGetAsSeries(fixed)); // false
| |||
PRTS(ArrayGetAsSeries(dynamic)); // true
| |||
PRTS(ArrayGetAsSeries(rates)); // true
| |||
PRTS(ArrayGetAsSeries(dummies)); // true
| |||
| |||
// check how new order is applied for elements
| |||
ArrayPrint(fixed, 1); // remains the same
| |||
ArrayPrint(dynamic, 1); // altered order is in effect
| |||
/*
| |||
1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
| |||
10.0 9.0 8.0 7.0 6.0 5.0 4.0 3.0 2.0 1.0
| |||
*/
| |||
}
| |||
//+------------------------------------------------------------------+
|