True random generator Seed SLeep?

 

 MathSrand( GetTickCount() );Sleep (1000 * (MathRand()%120));

это не работает

одновремнно создаются ордера стартегий разных

как сделать настоящий рандом сид?

Файлы:
 
Не уповайте на рандом. Привяжитесь к реально уникальным данным: время (включая миллисекунды), идентификатор графика. К примеру, если запускается несколько экземпляров одного и того же советника, то на одном графике может быть только один советник. Значит, идентификатор графика будет уникальным для каждого экземпляра советника.
 
Eugene Andry:

 MathSrand( GetTickCount() );Sleep (1000 * (MathRand()%120));

это не работает

одновремнно создаются ордера стартегий разных

как сделать настоящий рандом сид?


На картинке не видно, что ордера создаются одновременно.
 
 MathSrand( GetTickCount()+MagicNumber );Sleep (1000 * (MathRand()%120));
 


//+--------------------This is the new Function----------------------------+
int Get_Delay()
{
long prev_chart = ChartFirst(); // here we get ID of 1st chart


int count = 0;


while (prev_chart != -1) // we check if charts has finished
{
if (prev_chart == ChartID()) break; // we check if the current chart is = ID of selected chart, break the loop


prev_chart = ChartNext(prev_chart); // update selected Chart ID
count++; // increase count
}


return (count * 1000); // return Time in Milliseconds


}




это ок?

 

а что будет когда пройдёт 2 000 секунд или 4 000 ?


когда интегер 4 миллирада закочатся?


ошибка overflow будет и краш?

как 64бит загнать в Sleep?


ulong micro=GetMicrosecondCount();

ulong rnd = MathAbs(micro+MagicNumber);

MathSrand( rnd );

int slp =  (MathRand()%120);

Verbose ("sqMMRiskFixedBalancePct, sleep="+IntegerToString(slp)+" seconds; rnd=" + IntegerToString(rnd)+"; GetMicrosecondCount()="+IntegerToString(micro) + ";GetTickCount()="+IntegerToString(GetTickCount())+"; magic="+IntegerToString(MagicNumber));

Sleep (1000*slp);

 
Eugene Andry #:

как 64бит загнать в Sleep?

Не очень понимаю, при чем тут Sleep? Я понимаю задачу так - различить позиции разных советников (например, разных экземпляров одного и того же советника).

 
Eugene Andry #:

а что будет когда пройдёт 2 000 секунд или 4 000 ?


когда интегер 4 миллирада закочатся?


ошибка overflow будет и краш?

как 64бит загнать в Sleep?


ulong micro=GetMicrosecondCount();

ulong rnd = MathAbs(micro+MagicNumber);

MathSrand( rnd );

int slp =  (MathRand()%120);

Verbose ("sqMMRiskFixedBalancePct, sleep="+IntegerToString(slp)+" seconds; rnd=" + IntegerToString(rnd)+"; GetMicrosecondCount()="+IntegerToString(micro) + ";GetTickCount()="+IntegerToString(GetTickCount())+"; magic="+IntegerToString(MagicNumber));

Sleep (1000*slp);

у вас недопонимание про результат операции "взятие по модулю" %

вот в данном случае будут получатся величины от 0 до 119

при этом вероятность того что многие совпадут и будут "плотные группы" весьма велика. Несмотря на случайность MathRand

будут одновременные отправки приказов (sleep вы ведь для разрядки пытаетесь сделать) или не-уникальные идентификаторы