122 lines
2.8 KiB
MQL5
122 lines
2.8 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| MaxMin.mq5 |
|
|
//| Copyright 2026, Niquel Mendoza. |
|
|
//| https://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2026, Niquel Mendoza."
|
|
#property link "https://www.mql5.com"
|
|
#property version "1.00"
|
|
#property strict
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
bool Fast(const vector& X, vector& out)
|
|
{
|
|
//---
|
|
const ulong fs = X.Size();
|
|
double max = -DBL_MAX, min = DBL_MAX;
|
|
out.Resize(fs);
|
|
for(ulong i = 0; i < fs; i++)
|
|
{
|
|
const double v = X[i];
|
|
out[i] = v;
|
|
|
|
//---
|
|
if(v < min)
|
|
min = v;
|
|
if(v > max)
|
|
max = v;
|
|
}
|
|
|
|
//--- check std
|
|
double diff = max - min;
|
|
if(diff < DBL_EPSILON)
|
|
return false;
|
|
|
|
//--- inv
|
|
diff = 1.0 / diff; // inversa
|
|
|
|
//--- final
|
|
out -= min;
|
|
out *= diff;
|
|
return true;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
bool Normal(const vector &X, vector &out)
|
|
{
|
|
const ulong n = X.Size();
|
|
if(n == 0)
|
|
return false;
|
|
|
|
//---
|
|
const double max = X.Max();
|
|
const double min = X.Min();
|
|
|
|
//--- check std
|
|
double diff = max - min;
|
|
if(diff < DBL_EPSILON)
|
|
return false;
|
|
|
|
//--- inv
|
|
diff = 1.0 / diff; // inversa
|
|
|
|
//--- final
|
|
out = X - min;
|
|
out *= diff;
|
|
return true;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
vector Ran()
|
|
{
|
|
vector v(1000);
|
|
for(int i = 0; i < 1000; i++)
|
|
{
|
|
v[i] = (double)MathRand();
|
|
}
|
|
return v;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Script program start function |
|
|
//+------------------------------------------------------------------+
|
|
void OnStart()
|
|
{
|
|
//---
|
|
MathSrand(10);
|
|
double vs = 0.0;
|
|
|
|
ulong a = GetMicrosecondCount();
|
|
for(int i = 1; i < 100000; i++)
|
|
{
|
|
vector v = Ran();
|
|
Normal(v, v);
|
|
vs += v[0];
|
|
}
|
|
ulong b = GetMicrosecondCount();
|
|
|
|
Print("native: ", (b - a), " vs : ", vs);
|
|
|
|
vs = 0.0;
|
|
MathSrand(10);
|
|
|
|
a = GetMicrosecondCount();
|
|
for(int i = 1; i < 100000; i++)
|
|
{
|
|
vector v = Ran();
|
|
Fast(v, v);
|
|
vs += v[0];
|
|
}
|
|
b = GetMicrosecondCount();
|
|
|
|
Print("fast: ", (b - a), " vs : ", vs);
|
|
|
|
}
|
|
//+------------------------------------------------------------------+
|