2026-06-26 12:44:41 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| X256.mqh |
|
|
|
|
|
//| Copyright 2026, Niquel Mendoza. |
|
|
|
|
|
//| https://www.mql5.com/ |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#property copyright "Copyright 2026, Niquel Mendoza."
|
|
|
|
|
#property link "https://www.mql5.com/"
|
|
|
|
|
#property strict
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef SIMPHASH_SRC_RANDOM_X256_MQH
|
|
|
|
|
#define SIMPHASH_SRC_RANDOM_X256_MQH
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#include "Def.mqh"
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
namespace TSN
|
|
|
|
|
{
|
|
|
|
|
class CRandomX256 : public IRandomGenerator
|
|
|
|
|
{
|
|
|
|
|
private:
|
|
|
|
|
Xoshiro256 m_random;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
CRandomX256(void) {}
|
|
|
|
|
~CRandomX256(void) {}
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
bool Init(CYmlNode& node) override final
|
|
|
|
|
{
|
2026-06-26 22:13:05 -05:00
|
|
|
//---
|
2026-06-26 12:44:41 -05:00
|
|
|
CYmlNode seed = node["seed"];
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
if(seed.IsObject())
|
|
|
|
|
{
|
|
|
|
|
if(seed.Size() < 4)
|
|
|
|
|
{
|
|
|
|
|
LogError("Seed debe tener minimo 4 key-value", FUNCION_ACTUAL);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
CYmlIteratorObj it = seed.BeginObj();
|
|
|
|
|
ulong data[4];
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
while(it.IsValid())
|
|
|
|
|
{
|
|
|
|
|
//---
|
|
|
|
|
const ulong v = ulong(it.Val().ToInt(0));
|
|
|
|
|
switch(it.Key()[0])
|
|
|
|
|
{
|
|
|
|
|
case 'a':
|
|
|
|
|
data[0] = v;
|
|
|
|
|
break;
|
|
|
|
|
case 'b':
|
|
|
|
|
data[1] = v;
|
|
|
|
|
break;
|
|
|
|
|
case 'c':
|
|
|
|
|
data[2] = v;
|
|
|
|
|
break;
|
|
|
|
|
case 'd':
|
|
|
|
|
data[3] = v;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
it.Next();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
m_random.Seed(data[0], data[1], data[2], data[3]);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_random.Seed(ulong(seed.ToInt(100)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
ulong Generate() override final
|
|
|
|
|
{
|
|
|
|
|
return m_random.RandomUlong();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-06-26 22:13:05 -05:00
|
|
|
#endif // SIMPHASH_SRC_RANDOM_X256_MQH
|