Реально случайное число в диапазоне 0 - 4294967295.
Генерируется побитно на основе счетчика тактов процессора. Работает и на Intel и на AMD, в том числе на новых поколениях.
#pragma warning (disable:4700) // disable - warning C4700: local variable '' used without having been initialized
DWORD realrand()
{
DWORD dwRND, dwRDTSC, dwBitCount =32;
// serialization for new processors
__asm
{
xor eax, eax
cpuid
}
//................................while(dwBitCount--)
{
while(dwRDTSC & 0x1FFFF) // random delay
dwRDTSC--;
__asm
{
rdtsc // cpu counter as random generator
mov dwRDTSC, eax
}
dwRDTSC >>= 1; // 2-ой разряд рабочий
dwRND <<= 1;
dwRND |=(dwRDTSC & 1); // take least bit and add to random result
}
return(dwRND);
}
#pragma warning (default:4700) // restore default warning
Компилировать в Microsoft Visual Studio. Как уложить результат в заданный диапазон уже написали
Да, я когда мартышками занимался, тоже применял случайный вход. Потом сделал проще, заменил случайный на анализ предыдущей свечи, если растущая, то... покупать/продавать на свой вкус.
Но есть еще один вариант использования случайных чисел, в системах, где нужно генерировать случайные параметры. Например я делал робота (проводил эксперимент), в котором имитировал поведение трейдера. У робота было множество параметров и все генерировались случайно, в том числе он случайно выбирал время входа и выхода из позиции, валютную пару, направление, параметры трейлингов, в том числе на прибыль и на убыток, размеры стопов и профитов.
это типа, раз уж рынок рандом, то добавим еще и в код рандом, на выходе должна получиться стабильность )
это типа, раз уж рынок рандом, то добавим еще и в код рандом, на выходе должна получиться стабильность )
нет, это был эксперимент. Я хотел посмотреть какой график доходности будет, сравнить его с другими системами на основе каких-то индикаторов. Ну и для дальнейшего развития самообучающейся системы было нужно, но потом я этот проект отложил.
В общем для себя я нашел более простой и подходящий способ, тем более я пока сам не знаю свой диапазон и он будет меняться.
Скажем этот пример для двух параметров. Только вот со switch это не катит.
Чот толсто)) Начали с проблемы получения случайных чисел закончили тривиальными операторами ветвления.
Switch проверяет на строгое равенство аргумента целочисленного типа заданным константам (C++/MQL). Для проверки неравенств есть if, а если условия взаимоисключающие else if.
Rand =(Rand % 30000 + 1); // на выходе всегда будет число в диапазоне 1 - 30000if(Rand > 15000) // тут будут 15001 - 30000
{
}
else// тут будут 1 - 15000
{
}
// если диапазонов несколько используем else ifif(Rand > 22500) // 22501 - 30000
{
}
elseif(Rand > 15000) // 15001 - 22500
{
}
elseif(Rand > 7500) // 7501 - 15000
{
}
// ... и т.д.else// 1 - 7500
{
}
Чот толсто)) Начали с проблемы получения случайных чисел закончили тривиальными операторами ветвления.
У меня и получится случайное, просто пока не знаю диапазон, думаю разбег будет: 1-100 101-200 201-300 и т.д.
Тоже в своем роде генератор случайных чисел. Я изначально хотел к каждому числу присвоить значение, но решил брать диапазон, на мой взгляд проще для моей идеи =)
У меня и получится случайное, просто пока не знаю диапазон, думаю разбег будет: 1-100 101-200 201-300 и т.д.
Тоже в своем роде генератор случайных чисел. Я изначально хотел к каждому числу присвоить значение, но решил брать диапазон, на мой взгляд проще для моей идеи =)
int n = rand()%10*100;
int cnt = rand()%99+1+n;
Все довольно просто. Так-же рандомно выбирается диапазон.
Смотрю многие делают одну и ту же ошибку: используют оператор взятия остатка %. Такое допустимо лишь в том случае, когда исходный диапазон случайных чисел кратен делителю. Т.е. нашем случае такими делителями являются двойки в различных степенях: 2, 4, 8 и т.д. Так вот только для них можно писать такое: rand()%8.
Для любых других делителей вы получите перекос вероятности. Поэтому там нужно делать через вычисление вещественного остатка: floor(fmod(rand(), 100)) - получаем число от 0 до 99
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Реально случайное число в диапазоне 0 - 4294967295.
Генерируется побитно на основе счетчика тактов процессора. Работает и на Intel и на AMD, в том числе на новых поколениях.
Компилировать в Microsoft Visual Studio. Как уложить результат в заданный диапазон уже написали
Привет!
Вообще случайное число можно самим сделать. Без встроенных функций.
Да, я когда мартышками занимался, тоже применял случайный вход. Потом сделал проще, заменил случайный на анализ предыдущей свечи, если растущая, то... покупать/продавать на свой вкус.
Но есть еще один вариант использования случайных чисел, в системах, где нужно генерировать случайные параметры. Например я делал робота (проводил эксперимент), в котором имитировал поведение трейдера. У робота было множество параметров и все генерировались случайно, в том числе он случайно выбирал время входа и выхода из позиции, валютную пару, направление, параметры трейлингов, в том числе на прибыль и на убыток, размеры стопов и профитов.
это типа, раз уж рынок рандом, то добавим еще и в код рандом, на выходе должна получиться стабильность )
ГПСЧ на основе алгоритма Кнута. Сделан в виде класса. Из плюшек поддерживает случайной число в заданном диапазоне, например {0, 1} или {100..500}:
это типа, раз уж рынок рандом, то добавим еще и в код рандом, на выходе должна получиться стабильность )
нет, это был эксперимент. Я хотел посмотреть какой график доходности будет, сравнить его с другими системами на основе каких-то индикаторов. Ну и для дальнейшего развития самообучающейся системы было нужно, но потом я этот проект отложил.
В общем для себя я нашел более простой и подходящий способ, тем более я пока сам не знаю свой диапазон и он будет меняться.
Скажем этот пример для двух параметров. Только вот со switch это не катит.
В общем для себя я нашел более простой и подходящий способ, тем более я пока сам не знаю свой диапазон и он будет меняться.
Скажем этот пример для двух параметров. Только вот со switch это не катит.
Чот толсто)) Начали с проблемы получения случайных чисел закончили тривиальными операторами ветвления.
Switch проверяет на строгое равенство аргумента целочисленного типа заданным константам (C++/MQL). Для проверки неравенств есть if, а если условия взаимоисключающие else if.
Чот толсто)) Начали с проблемы получения случайных чисел закончили тривиальными операторами ветвления.
У меня и получится случайное, просто пока не знаю диапазон, думаю разбег будет: 1-100 101-200 201-300 и т.д.
Тоже в своем роде генератор случайных чисел. Я изначально хотел к каждому числу присвоить значение, но решил брать диапазон, на мой взгляд проще для моей идеи =)
У меня и получится случайное, просто пока не знаю диапазон, думаю разбег будет: 1-100 101-200 201-300 и т.д.
Тоже в своем роде генератор случайных чисел. Я изначально хотел к каждому числу присвоить значение, но решил брать диапазон, на мой взгляд проще для моей идеи =)