Кто-нибудь подскажите, в чем ошибка (или не ошибка?)
Выдает результат (true && false = true):
Если же поместить предварительно условие в переменную и совершить ту же операцию,
То все происходит как и должно быть (true && false = false):
если скажете что должен выводить скрипт - то будет проще
Скрипты должны выводить идентичный результат, причем в первом случае результат неверный, т.к. он равнозначен true && false = true, что неверно. Либо я в чем-то ошибся.
Вывод скриптов как раз я привел в первом посте. Котировки MetaQuotes-Demo
Скрипты должны выводить идентичный результат, причем в первом случае результат неверный, т.к. он равнозначен true && false = true, что неверно. Либо я в чем-то ошибся.
Вывод скриптов как раз я привел в первом посте. Котировки MetaQuotes-Demo
Если в первом варианте убрать скобки для condition, то тогда результаты идентичны:
Print("Signal AND Condition = ",signal && rates[0].close<rates[0].open? rates[0].open<=rates[1].close+(rates[1].high-rates[1].low)*0.1: rates[0].open<rates[1].close && rates[0].close<=rates[1].close+(rates[1].high-rates[1].low)*0.1);
//---
А вот почему так, не знаю. ))
Если в первом варианте убрать скобки для condition, то тогда результаты идентичны:
//---
А вот почему так, не знаю. ))
А как вы догадались, что нужно убрать скобки? Я тоже догадался, что нужно вывести условие в отдельную переменную, тогда тоже все работает верно. Однако во втором скрипте условие в переменной задано также в скобках...
bool condition=(rates[0].close<rates[0].open?
rates[0].open<=rates[1].close+(rates[1].high-rates[1].low)*0.1:
rates[0].open<rates[1].close&&rates[0].close<=rates[1].close+(rates[1].high-rates[1].low)*0.1
);
Может быть так и требовалсь и какой-то здравый смысл в это вложен, но все же...
Запишите в несколько строк, для каждого элементарного выражения свою переменную, потом выражения с переменными и т.д. пока на конце не будет нужное выражение.
bool condition=(rates[0].close<rates[0].open?
rates[0].open<=rates[1].close+(rates[1].high-rates[1].low)*0.1:
rates[0].open<rates[1].close&&rates[0].close<=rates[1].close+(rates[1].high-rates[1].low)*0.1
);
Может быть так и требовалсь и какой-то здравый смысл в это вложен, но все же...
Запишите в несколько строк, для каждого элементарого выражения сою переменную, потом выражения с переменными и т.д. пока на конце не будет нужно выражение.
По моему, так все очевидно - последняя свеча открылась с гэпом к телу предыдущей, и её тело находится в пределах нижних 10% тела предыдущей свечи.
Я выводил по очереди все элементарные выражения, все считается верно, но когда все соединяется вместе, происходит непонятный мне глюк.
По моему, так все очевидно - последняя свеча открылась с гэпом к предыдущей, и её тело находится в пределах нижних 10% от предыдущей свечи.
Я выводил по очереди все элементарные выражения, все считается верно, но когда все соединяется вместе, происходит непонятный мне глюк.
Не заметил && в середине.
Потому-что так не надо писать выражения, их надо разбивать на несколько элементарных, ато замучаешься.
А как вы догадались, что нужно убрать скобки? Я тоже догадался, что нужно вывести условие в отдельную переменную, тогда тоже все работает верно. Однако во втором скрипте условие в переменной задано также в скобках...
Просто попробовал. Это что-то из той же серии похоже, что и:
if((var=Func())=="") { return; }
Если не заключить в скобки var=Func(), то тоже предупреждение выходит:
//---
Как это объяснить не знаю. ))
Все же хотелось бы, чтобы спецы MQL5 пояснили, почему в первом моем скрипте true && false = true
Все же хотелось бы, чтобы спецы MQL5 пояснили, почему в первом моем скрипте true && false = true

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Кто-нибудь подскажите, в чем ошибка (или не ошибка?)
Выдает результат (true && false = true):
Если же поместить предварительно условие в переменную и совершить ту же операцию,
То все происходит как и должно быть (true && false = false):