Приходит министр сельского хозяйства к М. С. Горбачеву. - Михаил Сергеевич, беда, в стране куры дохнут. - Ничего страшного, нарисуйте перед каждой курицей желтый круг. Пожал плечами министр, ушел. Через две недели приходит: - Михаил Сергеевич, все равно дохнут. - Впишите в желтый круг зеленый квадрат. Пожал плечами, ушел. Приходит через неделю: - Михаил Сергеевич, дохнут ведь, совсем мало осталось. - Впишите в зеленый квадрат красный треугольник Проходит месяц, встречает Горбачев Министра и воспрашает, а чтож вы не заходите не рассказываете как там куры? - Да понимаете Михаил Сергеевич, сдохли все. - Ах как жаль, у меня еще так много идей!
fxsaber #: Речь вел о том, чтобы не сводить обсуждение к гаданию. Попробуйте на своей машине. У меня ситуация ожидаемо не изменилась после замены.
Это очень странно и похоже на баг, т.к. GetTickCount() должен запрашивать значение у опереционки и, соответственно, при каждом запуске возвращать разное значение.
Sergey Gridnev #: Это очень странно и похоже на баг, т.к. GetTickCount() должен запрашивать значение у опереционки и, соответственно, при каждом запуске возвращать разное значение.
Разрешающая способность этой функции столь велика, что будут возвращаться одинаковые значения.
fxsaber #: Разрешающая способность этой функции столь велика, что будут возвращаться одинаковые значения.
Запускаю в мат. режиме. Один проход значительно короче мин. шага GetTickCount.
Ну, если это весь код тестируемого советника, то не удивительно.
В этом случае, лично я вижу выход в искусственном замедлении выполнения. Например, в OnInit() получить значение из GetTickCount(), сравнить его с аналогичным в OnTestet(), и если они равны, выполнить Sleep(1).
2026.05.1615:54:50.365 Ticks USDRUBrfd: received too many containers without changes [52]
uint getticks=2000;//количество тиков, которые необходимо получить while(attempts<10)
{
//--- замерим время старта перед получением тиковuint start=GetTickCount();
//--- запросим тиковую историю с момента Data_GetTick
received = CopyTicks(my_Sym_Name, arr_Tick, COPY_TICKS_ALL, dtStart, getticks);
Print(my_Sym_Name," - Попытка №",attempts," Результат получения тиков",received);
if(received!=-1)
{
//--- выведем информацию о количестве тиков и затраченном времени времениPrintFormat("%s: received %d ticks in %d ms",my_Sym_Name,received,GetTickCount()-start);
//--- если тиковая история синхронизирована, то код ошибки равен нулюif(GetLastError()==0)
{
success=true;
break;
}
elsePrintFormat("%s: Ticks are not synchronized yet, %d ticks received for %d ms. Error=%d",
my_Sym_Name,received,GetTickCount()-start,_LastError);
}
attempts++;//--- считаем попыткиSleep(1000*60*5);//--- пауза в 300 секунд (5 минут) в ожидании завершения синхронизации тиковой базы
}
В логе:
2026.05.1615:53:34.485 Tick_Sinhronizator_AF (USDJPYrfd,M15) USDRUBrfd - Попытка №0 Результат получения тиков-12026.05.1615:58:34.505 Tick_Sinhronizator_AF (USDJPYrfd,M15) USDRUBrfd - Попытка №1 Результат получения тиков20002026.05.1615:58:34.505 Tick_Sinhronizator_AF (USDJPYrfd,M15) USDRUBrfd: received 2000 ticks in15 ms
А если заменить на
- Михаил Сергеевич, беда, в стране куры дохнут.
- Ничего страшного, нарисуйте перед каждой курицей желтый круг.
Пожал плечами министр, ушел. Через две недели приходит:
- Михаил Сергеевич, все равно дохнут.
- Впишите в желтый круг зеленый квадрат.
Пожал плечами, ушел. Приходит через неделю:
- Михаил Сергеевич, дохнут ведь, совсем мало осталось.
- Впишите в зеленый квадрат красный треугольник Проходит месяц,
встречает Горбачев Министра и воспрашает, а чтож вы не заходите не
рассказываете как там куры?
- Да понимаете Михаил Сергеевич, сдохли все.
- Ах как жаль, у меня еще так много идей!
Подскажите, как на одном включенном Агенте получить разные Random-значения?
В среднем MathRand выдает ~центр своего диапазона. Наверное, это правильно.
Лучше конструктив.
Это и был конструктив, вроде бы.
мизерное исследование по самому Random.
В среднем MathRand выдает ~центр своего диапазона. Наверное, это правильно.
Нужно было убедиться в равномерности распределения.
Подтвердилась.
Речь вел о том, чтобы не сводить обсуждение к гаданию. Попробуйте на своей машине. У меня ситуация ожидаемо не изменилась после замены.
Это очень странно и похоже на баг, т.к. GetTickCount() должен запрашивать значение у опереционки и, соответственно, при каждом запуске возвращать разное значение.
Запускаю в мат. режиме. Один проход значительно короче мин. шага GetTickCount.
Разрешающая способность этой функции столь велика, что будут возвращаться одинаковые значения.
Запускаю в мат. режиме. Один проход значительно короче мин. шага GetTickCount.
Как это понимать?