Что-то типа такого:
double GetLastProfit(int eMagic, string eSymbol) { datetime eTime=0; double eProfit=0; for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber()==eMagic && OrderSymbol()==eSymbol && (OrderType()==OP_BUY || OrderType()==OP_SELL)) { if(eTime<OrderCloseTime()) { eTime=OrderCloseTime(); eProfit=OrderProfit()+OrderSwap()+OrderCommission(); } } } return(eProfit); }
Чтобы было меньше непонятных ошибок изолируйте переменные каждой функции от глобальных переменных. Введите допустим префикс и используйте его для переменных только внутри функций.
Внешние переменные, в том числе и глобальные передавайте через аргументы функции. Будет проще писать.
А мне вот интересно стало. Который раз уже вижу нечто подобное, когда в переменную вносится результат вычисления выражения, содержащего операторы сравнения. Вот Ваш код.
Красным прямоугольником я обвёл 2 непонятные мне строки. У меня не получается постичь их логику. Наверно я что-то не знаю.
Переменной profit1 присвоить значение выражения: тип ордера в сравнении с константой Бай...
Судя по логике, скорее всего переменная profit1 - булевая. В таком случае я не понимаю зачем в этих строках знак вопроса и двоеточие? Как вообще словами прочитать первые две строки красного прямоугольника?
По поводу Вашего вопроса. Я для себя уже давно ввёл в в свою библиотеку подобные функции, разделив между ними подзадачи. Например, одна функция у меня отыскивает ордер, открытый в истории последним. Если есть такой ордер, она возвращает его тикет. Зная тикет, я могу передать его на вход другой функции, которая возвращает мне нужный параметр ордера из списка тех параметров, которые в терминале доступны.
И вот ещё что, Ваш код не видит ордера на следующий день скорее всего потому, что на вкладке истории торгов у Вас стоит функция, отсортировывающая (отсекающая) вчерашние и более ранние ордера от сегодняшних. Посмотрите, что у Вас тут стоит?
Ну или вот тут:
А мне вот интересно стало. Который раз уже вижу нечто подобное, когда в переменную вносится результат вычисления выражения, содержащего операторы сравнения. Вот Ваш код.
Красным прямоугольником я обвёл 2 непонятные мне строки. У меня не получается постичь их логику. Наверно я что-то не знаю.
Переменной profit1 присвоить значение выражения: тип ордера в сравнении с константой Бай...
Судя по логике, скорее всего переменная profit1 - булевая. В таком случае я не понимаю зачем в этих строках знак вопроса и двоеточие? Как вообще словами прочитать первые две строки красного прямоугольника?
тернарный оператор
"profit1 = Если тип ордера BUY, то профит есть когда цена закрытия выше открытия,иначе (подразумевается что SELL) профит бывает когда закрытие ниже открытия"
и так далее. :-)
а вообще - на скрине плохой код. Очень
А мне вот интересно стало. Который раз уже вижу нечто подобное, когда в переменную вносится результат вычисления выражения, содержащего операторы сравнения. Вот Ваш код.
Красным прямоугольником я обвёл 2 непонятные мне строки. У меня не получается постичь их логику. Наверно я что-то не знаю.
Переменной profit1 присвоить значение выражения: тип ордера в сравнении с константой Бай...
Судя по логике, скорее всего переменная profit1 - булевая. В таком случае я не понимаю зачем в этих строках знак вопроса и двоеточие? Как вообще словами прочитать первые две строки красного прямоугольника?
Ну так в документации всё написано. По этим строкам на снимке трудно объяснить, Максим правильно сказал какой это код. А я ещё добавил-бы, что там и логика никакая…
А если на пальца́х, то получается так
int res = а == 7 ? 3 : 9;
Этот код равнозначен такому
if(a == 7) res = 3; else res = 9;
И в некоторых случаях такой оператор сокращает код. А в неумелых руках только вредит.

- www.mql5.com
А я привык к такой записи:
int res = а == 7 ? 3 : 9;
В одной строчке объявил переменную, и присвоил значение по условию. Мало кода и наглядно. Красота!
Всё, нашёл: Справочник MQL4 / Основы языка / Операторы / Условный оператор ?:
Ну и закопали. Я туда и не смотрю, думал, что всё знаю. Тернарный оператор. Обалдеть. Он круто неудобен - читабельность кода от него падает. Попробую освоиться. Возможно надо навык наработать.
Всё, нашёл: Справочник MQL4 / Основы языка / Операторы / Условный оператор ?:
Ну и закопали. Я туда и не смотрю, думал, что всё знаю. Тренарный оператор. Обалдеть. Он круто неудобен - читабельность кода от него падает. Попробую освоиться. Возможно надо навык наработать.
Иногда он очень удобен, позволяет более компактно записать вспомогательный код, чтобы повысить читабельность основного.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте.
Вопрос как я вижу из поиска обсуждался множество раз.
Однако как бы я не делала все равно работает либо не верно, либо не так как нужно.
Гляньте пожалуйста одним глазком, в чем ошибка то.
Даже копировала код с готового советника и то не так...
Задача советника проверить был ли последний ордер плюсовым или минусовым (не важно в бай или сел) и выдать число, которое я далее использую.
Комментарии:
1. Код работает отлично, НО проблема в том, что при переходе на следующие сутки, не видит результат последнего ордера.
2. Код скопирован из советника, работает через раз. Т.е. один раз сработает правильно, второй нет....
Может быть есть еще более простое решение? Так как проверять каким был ордер (бай или селл) нет необходимости.