Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
И так и так.
if(a==0){выражение} значит если а равно 0 то истино, значит исполняем {выражение}.
if(a=0){выражение} равносильно такой записи if(a){a=0;выражение} , те если а истино то { а присвоить 0, выражение}.
второе не верно правильнее написать так
if(a=x) { выражение } присвоить переменной а значение x, и если a после этого не 0, то выполнить выражение
при if(a=0) { } после оптимизации останется только a=0
второе не верно правильнее написать так
if(a=x) { выражение } присвоить переменной а значение x, и если a после этого не 0, то выполнить выражение
при if(a=0) { } после оптимизации останется только a=0
Сори, точно так, выражения то выполняются слево на право.
Поэтому сначало идёт присвоение а потом проверка на истинность.
Примерно так:
Этот код не только вычисляет максимальный объем, но и точно вписывает его в ограничения настроек символа.Вычислять-то - вычисляет, но, затем, вписывая, - забывает, для чего вычислял:
Значение lot к этому моменту рассчитано так, чтобы потребить всю доступную маржу с минимальным запасом.
Если это значение увеличить хотя бы на volume step, то денег на открытие позиции не хватит.
А ведь вторая строчка процитированного кода УВЕЛИЧИВАЕТ значение lot в случае выполнения условия под if, и может увеличить его на значительно большую величину, чем величина volume step, потому что реально встречаются volume min = 0.1, а volume step = 0.01.
А в этом коде, ниже, может случиться деление на ноль, от которого защиты нет:
Если SymbolInfoDouble() вернёт 0, то - всё. По делению на 0 программы MQL5 ведь завершаются на корню? Не может вернуть 0? Люди тут жалуются, что информационные функции достаточно часто возвращают 0. Закладываться на "не вернёт 0" нельзя, поскольку, во-первых, может вернуть, а, во-вторых, деление на 0 фатально.
Есть и менее значимые замечания по "точности вписывания", но они - действительно не слишком существенны, то есть, не имеют таких серьёзных последствий, можно не заострять.
Предваряя возможные аргументы по поводу того, что код - "примерный", замечу: а многие ли пользователи продукта в состоянии найти и грамотно исправить подобные "нехорошие места"?
Для них это - "код от разработчиков". Пример, на который надо равняться.
Почему при заполнении всех обязательных полей не активна кнопка "Далее"?
Почему при заполнении всех обязательных полей не активна кнопка "Далее"?
Вычислять-то - вычисляет, но, затем, вписывая, - забывает, для чего вычислял:
Предваряя возможные аргументы по поводу того, что код - "примерный", замечу: а многие ли пользователи продукта в состоянии найти и грамотно исправить подобные "нехорошие места"?Код был примерный (копипаст из двух кусков), но Ваши замечания верные.
Вот исправленный вариант:
И зачем session_index++; если при session_index=1 уже false:
Мы не можем знать заранее какое количество сессий по инструменту. Поэтому запрашиваем каждую сессию по номеру. ЕСли получили true
session_exist=SymbolInfoSessionQuote(symbol,day,session_index,start,finish);
то интересуемся временем ее начала и конца. Получили false - всё, сессии с таким номером не существует.
Мы не можем знать заранее какое количество сессий по инструменту. Поэтому запрашиваем каждую сессию по номеру. ЕСли получили true
то интересуемся временем ее начала и конца. Получили false - всё, сессии с таким номером не существует.
А...... а почему тогда в пятницу всему в 24:00 конец, а в реальности в 23:00?