Парни, как более-менее рандом написать?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Artem Likhachev
515
Artem Likhachev  
Парни, как более-менее рандом написать? Чтобы в цикле из примерно 100000-1000000 проходов хоть явного псевдо не было. Этот  MathSrand(GetTickCount() или чего то свое);

      MathRand(); Выдает в цикле при таком количестве явно не случайные цифры, а явную последовательность. Не одноразовое число надо бы, а в цикле(т.е. на один раз сойдет при вычислениях каких либо, а в цикле скорость пересчета при GetTickCount() или TimeCurrent() слишком велика для этих массивов, да и вообще может есть идеи случайных чисел? Я пробовал такое (не надо материться - не культурно это) через 2 рандома, не вариант.

      MathSrand(TimeCurrent());

      int s=MathRand();

      MathSrand(s);

      int s2=MathRand();

 

Igor Makanu
9859
Igor Makanu  

на С++ видел исходники генерации rand, кажется даже сайт специальный был, в общем гугл в помощь - совсем не диковинка

UPD:

поиск рулит.... https://www.mql5.com/ru/code/11077

CHighQualityRand - генератор случайных чисел высокой степени точности.

Ihor Herasko
21732
Ihor Herasko  

Использовать random.org, там реально случайные последовательности, основанные на погоде. API к нему имеется.

Любые другие способы - псевдо.

Artem Likhachev
515
Artem Likhachev  
Igor Makanu:
на С++ видел исходники генерации rand, кажется даже сайт специальный был, в общем гугл в помощь - совсем не диковинка

Спасибо щас позырю

Artem Likhachev
515
Artem Likhachev  
Ihor Herasko:
Использовать random.org, там реально случайные последовательности, основанные на погоде. API к нему имеется.

Спасибо, щас гляну.

Igor Makanu
9859
Igor Makanu  
Artem Likhachev:

Спасибо щас позырю

выше пост обновил, используйте ALGLIB , он в поставке МТ

Vladimir Simakov
6127
Vladimir Simakov  
Попробуй  GetMicrosecondCount()+i вместо GetTickCount()
Это для начала.
Artem Likhachev
515
Artem Likhachev  
Vladimir Simakov:
Попробуй  GetMicrosecondCount()+i вместо GetTickCount()
Это для начала.

Это те же микросекунды, в цикле они не работают

Igor Makanu
9859
Igor Makanu  
#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#include <Math\Alglib\alglib.mqh>

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{  CHighQualityRandStateShell rnd_state;
   CAlglib::HQRndRandomize(rnd_state);
   for(int i = 0; i < 100; i++)
   {  int rnd = CAlglib::HQRndUniformI(rnd_state, INT_MAX-100); // 100 подобрал, лень доки гуглить, если INT_MAX - ошибка
      printf("i = %d , rnd = %d", i, rnd);
      Sleep(123);
   }
}
//+------------------------------------------------------------------+
Alexey Viktorov
27691
Alexey Viktorov  
Igor Makanu:
Вот это INT_MAX давало ошибку закрытия части позиции в mql5. Я писал об этом, но разработчики пропустили и вместо исправления написали отдельную функцию.
Maxim Romanov
7547
Maxim Romanov  
Artem Likhachev:
Парни, как более-менее рандом написать? Чтобы в цикле из примерно 100000-1000000 проходов хоть явного псевдо не было. Этот  MathSrand(GetTickCount() или чего то свое);

      MathRand(); Выдает в цикле при таком количестве явно не случайные цифры, а явную последовательность. Не одноразовое число надо бы, а в цикле(т.е. на один раз сойдет при вычислениях каких либо, а в цикле скорость пересчета при GetTickCount() или TimeCurrent() слишком велика для этих массивов, да и вообще может есть идеи случайных чисел? Я пробовал такое (не надо материться - не культурно это) через 2 рандома, не вариант.

      MathSrand(TimeCurrent());

      int s=MathRand();

      MathSrand(s);

      int s2=MathRand();

 

Можно попробовать при помощи функции MathRand. Генерировать число, отступать это число от нулевой свечи и если взятая свеча восходящая, то возвращать 1, если падающая, то 0. Так должен получиться вполне качественный рандом. При помощи второго MathRand можно выбирать тайм фрейм, с которого будет браться значение. Если делать на мт5, то можно еще добавить изменяющийся инструмент. 
Из минусов, частота генерации раз в минуту и значения только 0 и 1. Но думаю доработать можно, если качество приемлемое будет.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий