Ошибки, баги, вопросы - страница 2878
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
не значительная разница, высока вероятность, что если поменять тесты местами, то результаты будут наоборот
высока вероятность что компилятор сгенерировал для обоих случаев одинаковый код. в этом случае просто выбрать то что субъективно больше нравится
проверил:
2020.10.15 21:48:01.401 SpeedTst (EURUSD,H1) tst 1 : : loops=10000000000 ms=10864370
2020.10.15 21:48:12.264 SpeedTst (EURUSD,H1) tst 2 : : loops=10000000000 ms=10862287
не значительная разница, высока вероятность, что если поменять тесты местами, то результаты будут наоборот
в общем не критично
Тут вроде скрипт который демонстрирует что время создание случайных чисел может быть неравномерным, и много чего зависит от обьема создаваемых переменных)))
А нужный нам код в таком количестве повторений у меня занимает 0 ms
ответа так и нету
либо оптимизатор кода че-то лишнего вырезаетТут вроде скрипт который демонстрирует что время создание случайных чисел может быть неравномерным
нет rand() это обычная функция, она всегда одинаково работает
а вот если при тестировании скорости работы инициализировать константами, то тесты будут "разгоняться" при выполнении - оптимизация кода в MQL во время выполнения не плохо работает
в общем это проверенно не однократно
и много чего зависит от обьема создаваемых переменных)))
конечно, выделение памяти это затратно по времени выполнения, я это уже проверял, тестировал динамически созданные обьекты ( указатель new ) и и просто обьекты в локальной области видимости, при тесте 100500 раз набегает время на new + delete
вопрос в целом был, по причине того, что в тестере в глобальной видимости для переменных память выделяется один раз, а не каждый проход - но мне нужны массивы uint , поэтому тестировал таким скриптом, а не как написал в первый раз
А нужный нам код в таком количестве повторений у меня занимает 0 ms
ответа так и нету
либо оптимизатор кода че-то лишнего вырезаетмоим скриптом тестировали? - или не дождались конца теста и прервали , или переполнили ulong - первый параметр макроса это 10^ count
высока вероятность что компилятор сгенерировал для обоих случаев одинаковый код. в этом случае просто выбрать то что субъективно больше нравится
да, может и так
тут в общем в чем вопрос то был - читал неоднократно, что современные процессоры за счет оптимизации конвейера команд могут за один такт выполнять больше одной элементарной операции .... много обла-бла-бла... и суть, что арифметические команды процессор выполняет за непредсказуемое количество тактов
а вот операции ветвления и выделения памяти очень плохо оптимизируются процессором, поэтому не ищите оптимизации в упрощении арифметики, старайтесь писать максимально линейный код с минимум ветвлений, да и переменные лучше объявлять и присваивать им значения непосредственно перед расчетами, что позволяет конвейеру команд и предсказание выборки кэша оптимизировать этот код
т.е. скорее всего выборка значений элементов в массиве (адресация) тоже не критична будет по скорости - тут думал будет выигрыш сдвига против union, оказалось вообще нет разницы
Я его немного переработал
(так то так лучше не пользоваться макросом ;)
Я его немного переработал
(так то так лучше не пользоваться макросом ;)
при тесте максимально запутываю код, чтобы оптимизатор не выбросил пустые циклы
у Вас
// for(int i = 0; i < 5; i++) sum += u.param[i];оптимизация выполнения MQL может вообще досрочно прекратить первый цикл, т.к. рассчитанные значения не используются , поэтому нужно, что то делать после SpeedTest() с результатами - этот цикл
проверил с закомментированным циклом, не выбросил, а в дргом тесте можно обломаться
маккросы дело вкуса, проверял это макрос неоднократно, работает, не вижу смысла писать тоже самое руками
UPD: вот нашел где читал, как современные компиляторы сейчас работают, довольно познавательно
https://habr.com/ru/post/431688/
https://habr.com/ru/post/47878/
код выдаёт значение iRSI хендлов и тп всегда только 10, но цены и график меняется же.
iRSI(_Symbol,PERIOD_H1,14,PRICE_CLOSE)
билд 2652
код выдаёт значение iRSI хендлов и тп всегда только 10, но цены и график меняется же.
iRSI(_Symbol,PERIOD_H1,14,PRICE_CLOSE)
билд 2652
Это вы получили хендл индикатора, он и есть 10
Далее нужно получить значения на нужном баре
Почитайте справку, или поищите ответы на форуме - их много
Это вы получили хендл индикатора, он и есть 10
Далее нужно получить значения на нужном баре
Почитайте справку, или поищите ответы на форуме - их много
Понял. Буду изучать про буфферы. Странно было ощущение что и так всё работает, может с mql4 спутал.
Странно что через гугл так и не смог найти по запросу- получение данных с индикатора в mql5
Ага по вашему примеру как я понял значение индикатора RSI находится в итоге в переменной вида
проверил:
2020.10.15 21:48:01.401 SpeedTst (EURUSD,H1) tst 1 : : loops=10000000000 ms=10864370
2020.10.15 21:48:12.264 SpeedTst (EURUSD,H1) tst 2 : : loops=10000000000 ms=10862287
не значительная разница, высока вероятность, что если поменять тесты местами, то результаты будут наоборот
в общем не критично
вряд ли правильно включать rand() в тест, т.к. эта функция на порядок больше съедает ресурсов, чем остальные команды.
Думаю так будет правильнее тест:
Результат:
К счастью я все же не на ту лошадку поставил. Юнионы чуть быстрее. С ними удобнее работать, да и код более читабельный.
вряд ли правильно включать rand() в тест, т.к. эта функция на порядок больше съедает ресурсов, чем остальные команды.
вообще некритично
время выполнения rand() постоянное, скорее всего это обычная С++ функция , гуглится "rand c++ source code"
инициализировать обязательно нужно, но если инициализировать константами, можно нарваться на оптимизацию
в общем не понятна нелюбовь к rand()
как вариант инициализироваться чем-нибудь таким:
будет быстро
запустил Ваш скрипт, имхо не правильно
основное время это загрузка кода в кэш и затем в процессор
ну и добавим дискретность системного таймера
получим... почти случайное число
долго тестировать нужно, примерно 100500 раз, имхо