Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это не имеет никакого значения, я думаю. Я мог бы также написать IF( StringHighStatus == "True" || SwingHighShift > SwingBarcount ) EndCycle = TRUE;
Дело в том, почему IF определяет условие выхода, а затем WHILE реагирует на переменную bool, в то время как если я помещу то же условие внутрь WHILE, он не завершится?
Это не имеет никакого значения, я думаю. Я мог бы также написать IF( StringHighStatus == "True" || SwingHighShift > SwingBarcount ) EndCycle = TRUE;
Дело в том, почему IF определяет условие выхода, а затем WHILE реагирует на переменную bool, в то время как если я помещу то же условие внутрь WHILE, он не завершится?
Мне кажется, что это работает
как
deVries, возможно, я ошибаюсь, но мне кажется, что последовательность IF превращает булево значение в TRUE, как это делает логическое OR.
Если первое условие выполняется, то EndCycle превращается в TRUE, если второе - нет, то остается TRUE.
И наоборот, если первое условие не выполняется, а второе выполняется, то оно становится TRUE.
В это время WHILE распознает условие выхода.
Таким образом, два последовательных IF ведут себя как логическое OR, и то же самое делает последовательность IF...ELSE IF.
И это должно быть ИЛИ, оно не может быть И, иначе WHILE может застрять (условие на строке может быть ложным бесконечно).
Почему WHILE управляет единственной булевой переменной, значение которой устанавливается внутри цикла, в то время как он не может определить результат той же логической операции ИЛИ внутри своего определения условия?
Этот советник использовался многими людьми в прошлом, до билда 600, а также до 500, и это последний релиз. Никто не жаловался.
Поэтому мой вопрос: есть ли кто-нибудь, кто испытывает проблемы с оператором WHILE после сборки 600?
deVries, возможно, я ошибаюсь, но мне кажется, что последовательность IF превращает булево значение в TRUE, как это делает логическое OR.
Если первое условие выполняется, то EndCycle превращается в TRUE, если второе - нет, то остается TRUE.
И наоборот, если первое условие не выполняется, а второе выполняется, то оно становится TRUE.
В это время WHILE распознает условие выхода.
Таким образом, два последовательных IF ведут себя как логическое OR, и то же самое делает последовательность IF...ELSE IF.
И это должно быть ИЛИ, оно не может быть И, иначе WHILE может застрять (условие на строке может быть ложным бесконечно).
Почему WHILE управляет единственной булевой переменной, значение которой устанавливается внутри цикла, в то время как он не может определить результат той же логической операции ИЛИ внутри своего определения условия?
Этот советник использовался многими людьми в прошлом, до билда 600, а также до 500, и это последний релиз. Никто не жаловался.
Поэтому мой вопрос: есть ли кто-нибудь, кто испытывает проблемы с оператором WHILE после сборки 600?
Я думаю, что вы имеете в виду следующее
Ваш код, если бы он был в точности таким, как вы написали, не выполнялся бы так, как вы ожидаете, ни с одним билдом, так что вы, должно быть, что-то изменили.
Вы когда-нибудь пробовали выполнить очень простые логические операции, просто чтобы убедиться, работает он как надо или нет, вместо того чтобы спрашивать?
Мой пост начался с примера WHILE, который, как мне показалось, возвращает необычное поведение, очень похожее на поведение советника, который мы сейчас обсуждаем, поэтому я сначала попробовал, а потом спросил.
Моя интерпретация этой очень простой отладки оказалась неверной, поэтому обсуждение перешло к самому советнику.
Спасибо GumRai за терпение.
Возможно, я ошибаюсь и не могу понять логику...
Если первый IF превращает, как вы предлагаете, строку в "true" при, скажем, SwinghHighShift=10, то счетчик не увеличивается в этом цикле; после этого управление возвращается в WHILE: цикл должен закончиться в этой точке, потому что WHILE содержит логическое ИЛИ и одно из его условий выполнено.
И наоборот, если переменная остается ложной, счетчик должен достичь своего максимального значения, и снова у вас есть условие выхода.
Я думаю, что ваше соображение было бы верным при использовании оператора AND.
Следуя вашей интерпретации, я могу пропустить OR внутри WHILE; я могу просто поставить первое условие IF на строке: если переменная станет "истинной", то прерывание завершит WHILE, в противном случае счетчик будет идти дальше до своего максимума.
Код будет выглядеть так:
Но это все еще обходной путь, и, к сожалению, он не объясняет (как мне кажется), почему WHILE не справляется с ИЛИ.
Если первый IF превращает, как вы предлагаете, строку в "true" при, скажем, SwinghHighShift=10, то отсчет не увеличивается в этом цикле; после этого управление возвращается к WHILE: цикл должен закончиться в этой точке, потому что WHILE содержит логическое ИЛИ и одно из его условий выполнено.