Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Проблема осталась. Я не совсем полно написал в первом посте, как именно проявляется закисленность. Конечно я проверил с помощью printf. Получается всегда оба условия true и в массив MassLockSellTrade постоянно в бесконечном цикле добавляются по 2 тикета (по условию цикл срабатывает, когда срабатывают 2 SellStop) таким образом 2,4,6,8 и так до бесконечности.
Наверно перед всем этим делом надо размер массива уменьшать до нуля.
Проблема осталась. Я не совсем полно написал в первом посте, как именно проявляется закисленность. Конечно я проверил с помощью printf. Получается всегда оба условия true и в массив MassLockSellTrade постоянно в бесконечном цикле добавляются по 2 тикета (по условию цикл срабатывает, когда срабатывают 2 SellStop) таким образом 2,4,6,8 и так до бесконечности.
с уважением.
Достаточно проанализировать результат выполнения этого скрипта
Результат (читать снизу-вверх)
чтобы понять, что использование нескольких if и continue даже теоретически не в состоянии дать преимущества в скорости перед единым if.
нашел этому подтверждение в приведенной вами статьи из документации.
цитата:
Короткая оценка логических операций
К логическим выражениям применяется схема так называемой "короткой оценки", то есть, вычисление выражения прекращается в тот момент, когда можно точно оценить результат выражения.
P.S. хотя уже сейчас есть компиляторы разных компаний, которые проверяют код на его оптимизацию на уровне машинного кода, для ускорения быстродействия.конец цитаты.
поэтому результаты в пределах погрешности.
по условиям написания оператор IF должен проверить все условия написанные в скобках и только потом их анализировать. оптимизация на уровне машинного кода, позволяет превратить вашу строку, с множеством операторов в одних скобках, в несколько строк как у меня. в результате вы получаете на уровне машины идентичный код, что и нивелирует разницу практически до погрешности. в Ассемблере такие фокусы не пройдут, как и в других языках, где программисту отдается большая часть власти как распоряжаться командами процессора.
с уважением.
по результатам ваших тестов, могу только сказать, что идет оптимизация на уровне компилятора.
Исполнения.
по результатам ваших тестов, могу только сказать, что идет оптимизация на уровне компилятора.
нашел этому подтверждение в приведенной вами статьи из документации.
цитата:
Короткая оценка логических операций
К логическим выражениям применяется схема так называемой "короткой оценки", то есть, вычисление выражения прекращается в тот момент, когда можно точно оценить результат выражения.
P.S. хотя уже сейчас есть компиляторы разных компаний, которые проверяют код на его оптимизацию на уровне машинного кода, для ускорения быстродействия.конец цитаты.
поэтому результаты в пределах погрешности.
по условиям написания оператор IF должен проверить все условия написанные в скобках и только потом их анализировать. оптимизация на уровне машинного кода, позволяет превратить вашу строку, с множеством операторов в одних скобках, в несколько строк как у меня. в результате вы получаете на уровне машины идентичный код, что и нивелирует разницу практически до погрешности. в Ассемблере такие фокусы не пройдут, как и в других языках, где программисту отдается большая часть власти как распоряжаться командами процессора.
с уважением.
Ошибочно.
Условие if начинает проверять условия поочерёдно, и если первое выполнилось, то идёт дальше, если второе не выполнилось - выход и третье уже не проверяет, что экономит время и системные ресурсы.
вы пробовали мой код в вашем советнике?
с уважением.
С вашим кодом советник проходит весь цикл и добавляет два тикета в массив, но потом тестер останавливается и выдаёт такую ошибку
С вашим кодом советник проходит весь цикл и добавляет два тикета в массив, но потом тестер останавливается и выдаёт такую ошибку
Деление на 0 в сроке 91, на символе 44.
С вашим кодом советник проходит весь цикл и добавляет два тикета в массив, но потом тестер останавливается и выдаёт такую ошибку
по логике стоп лосс нужно считать на все ордера, а у вас он считается только на те, которые были добавлены в данной функции.
с уважением.
P.S. ошибки я вам сказал, анализируйте код, рабочий код представил. остальное дело техники.
Спасибо всем за помощь! Особенно Andrey Kisselyov
Исполнения.
В этом мало целесообразности.программист ---> среда разработки ---> компилятор ---> исполняемый файл ---> процессор
в данном случае среда разработки это MQL, как язык программирования, и его оболочка "Редактор кода", в котором вы пишите код, в него встроен компилятор, который создает рабочий код советника или еще чего.
1 процессор точно выполняет то, что ему предписано в исполняемом файле, тут не может быть никаких отклонений от хода программы иначе получился бы хаос и компьютер перестанет быть компьютером, а будет уже аналитической машиной, "хочу делаю так, хочу делаю по другому, не важно что хочет программист".
2 исполняемый фал создает компилятор, на основе вашего кода и согласно тем правилам которые в него заложены создателями. если в нем есть оптимизация кода, то вы это можете обнаружить, как это было проделано ранее.
3 среда разработки позволяет вам оперировать набором команд которые понятны компилятору для преобразования их в исполняемый код.тут вы можете оперировать только теми командами которые вам дает данная среда разработки.
4 на основе данных вам команд вы можете на основе вашего опыта и фантазии реализовать все, что пожелаете нужным.
вот в принципе и вся последовательность. согласно нее мы видим, что только на уровне компилятора, код может быть оптимизирован без потери производительности для конечного процесса, при анализе кода самим процессором на это в любом случае уйдет машинное время.
с уважением
P.S. здесь не затрагивается вопрос о движке Терминала, на котором он работает, каким образом составляется исполняемый файл ех4/ех5 и как потом эти команды преобразуются в команды самого процессора.