artmedia70: Чё-то я не вижу проблемы. А сыр-бор разведён... Вам нужно в одной главной функции А() выбирать ордер, а в другой функции В(), вызываемой из главной функции А(), обрабатывать выбранный в ф-ции А() ордер. И в функции В() нужно точно знать - выбран ли всё ещё ордер... Ну так передавайте в функцию В() тикет ордера, выбранного в функции А(). В функции В() можно проверить из какого списка выбран ордер и уже дальше решать куда ехать и что возвращать обратно в функцию А()...
Вы меня не правильно поняли. Как и половина народа почему-то. Мне не нужно в функции B() обрабатывать тот ордер, который выбран в функции A(). Функция B() работает с другими ордерами, не важно с какими, это никак не связано с функцией A(), у функции B() своя логика. Она может считать кол-во ордеров, их суммарную прибыль, смотреть их комменты маджики, ТП СЛ и т.п. Задача в том, чтобы по возврату из функции B() обратно в функцию A(), не зависимо от того, что функция B() делала с ордерами, логика работы функции A() в точке вызова из неё функции B() не нарушалась из-за того, что ордер, выбранный функцией A() до вызова функции B(), более не является выбранным, а выбранным является другой случайный произвольный ордер, с которым работала функция B(), скорее всего тоже перебирающая ордера в цикле.
artmedia70: Давайте теперь представим что произойдёт с переменной last_select после перезапуска терминала (свет противные дядьки вырубили)
После перезапуска переменная last_select будет инициализирована в 0, как и требуется.
Затеяли бла-бла-бла на 10 страниц. Вот код, который предусматривает работу функции с другим (не выделенным) ордером:
это просто для примера. Понимающий суть уловит.
Не в этом дело. Есть переменные, локальные или глобальные, в советнике и есть переменные терминала. С точки зрения программы, эти переменные интерактивны, поскольку их значение может совершенно необъяснимым для советника образом измениться в любой момент. Признак выбора ордера - именно такая переменная. Если бы Метаквоты разрешили доступ к признаку "выбора" графического объекта, то и с ним была бы такая же байда. Отсюда - неизбежное следствие: надо выбирать ордер всякий раз, когда необходимо узнать номер выбранного ордера, либо надо запоминать выбранный ордер тогда и только тогда, когда этого требует логика советника. Как-то так...
tara: Не в этом дело. Есть переменные, локальные или глобальные, в советнике и есть переменные терминала. С точки зрения программы, эти переменные интерактивны, поскольку их значение может совершенно необъяснимым для советника образом измениться в любой момент. Признак выбора ордера - именно такая переменная. Если бы Метаквоты разрешили доступ к признаку "выбора" графического объекта, то и с ним была бы такая же байда. Отсюда - неизбежное следствие: надо выбирать ордер всякий раз, когда необходимо узнать номер выбранного ордера, либо надо запоминать выбранный ордер тогда и только тогда, когда этого требует логика советника. Как-то так...
Я с Вами полностью согласен:
во-превых, нужно исходить из того. что имеем (возможности MQL4);
во-вторых, я сам использую структуру обработки ВСЕХ торговых приказов с открытыми ордерами в одном месте: делаю перебор списка ордеров и произвожу с каждым ордером все необходимые действия (по-порядку).
P.S. А упомянутую проверку в коде произвожу "на всякий случай"... :)
Затеяли бла-бла-бла на 10 страниц. Вот код, который предусматривает работу функции с другим (не выделенным) ордером:
это просто для примера. Понимающий суть уловит.
Ага. Вот на этом месте:
int li_LastTicket = OrderTicket();
Ваш код сгенерирует ошибку выполнения 4105, если до совершения его вызова не было ни одного вызова OrderSelect. Просто поставьте проверку GetLastError на окончании каждого тика и обнаружите эту ошибку.
Чё-то я не вижу проблемы. А сыр-бор разведён... Вам нужно в одной главной функции А() выбирать ордер, а в другой функции В(), вызываемой из главной функции А(), обрабатывать выбранный в ф-ции А() ордер. И в функции В() нужно точно знать - выбран ли всё ещё ордер... Ну так передавайте в функцию В() тикет ордера, выбранного в функции А(). В функции В() можно проверить из какого списка выбран ордер и уже дальше решать куда ехать и что возвращать обратно в функцию А()...
Вы меня не правильно поняли. Как и половина народа почему-то. Мне не нужно в функции B() обрабатывать тот ордер, который выбран в функции A(). Функция B() работает с другими ордерами, не важно с какими, это никак не связано с функцией A(), у функции B() своя логика. Она может считать кол-во ордеров, их суммарную прибыль, смотреть их комменты маджики, ТП СЛ и т.п. Задача в том, чтобы по возврату из функции B() обратно в функцию A(), не зависимо от того, что функция B() делала с ордерами, логика работы функции A() в точке вызова из неё функции B() не нарушалась из-за того, что ордер, выбранный функцией A() до вызова функции B(), более не является выбранным, а выбранным является другой случайный произвольный ордер, с которым работала функция B(), скорее всего тоже перебирающая ордера в цикле.
Давайте теперь представим что произойдёт с переменной last_select после перезапуска терминала (свет противные дядьки вырубили)
После перезапуска переменная last_select будет инициализирована в 0, как и требуется.
Затеяли бла-бла-бла на 10 страниц. Вот код, который предусматривает работу функции с другим (не выделенным) ордером:
это просто для примера. Понимающий суть уловит.Затеяли бла-бла-бла на 10 страниц. Вот код, который предусматривает работу функции с другим (не выделенным) ордером:
это просто для примера. Понимающий суть уловит.Не в этом дело. Есть переменные, локальные или глобальные, в советнике и есть переменные терминала. С точки зрения программы, эти переменные интерактивны, поскольку их значение может совершенно необъяснимым для советника образом измениться в любой момент. Признак выбора ордера - именно такая переменная. Если бы Метаквоты разрешили доступ к признаку "выбора" графического объекта, то и с ним была бы такая же байда. Отсюда - неизбежное следствие: надо выбирать ордер всякий раз, когда необходимо узнать номер выбранного ордера, либо надо запоминать выбранный ордер тогда и только тогда, когда этого требует логика советника. Как-то так...
Не в этом дело. Есть переменные, локальные или глобальные, в советнике и есть переменные терминала. С точки зрения программы, эти переменные интерактивны, поскольку их значение может совершенно необъяснимым для советника образом измениться в любой момент. Признак выбора ордера - именно такая переменная. Если бы Метаквоты разрешили доступ к признаку "выбора" графического объекта, то и с ним была бы такая же байда. Отсюда - неизбежное следствие: надо выбирать ордер всякий раз, когда необходимо узнать номер выбранного ордера, либо надо запоминать выбранный ордер тогда и только тогда, когда этого требует логика советника. Как-то так...
Я с Вами полностью согласен:
P.S. А упомянутую проверку в коде произвожу "на всякий случай"... :)
:)
С Праздником! Для меня - 20 лет, не худших в жизни.
Затеяли бла-бла-бла на 10 страниц. Вот код, который предусматривает работу функции с другим (не выделенным) ордером:
это просто для примера. Понимающий суть уловит.Ага. Вот на этом месте:
int li_LastTicket = OrderTicket();
Ваш код сгенерирует ошибку выполнения 4105, если до совершения его вызова не было ни одного вызова OrderSelect. Просто поставьте проверку GetLastError на окончании каждого тика и обнаружите эту ошибку.
:)
С Праздником! Для меня - 20 лет, не худших в жизни.
Поздравляю! А что, 20 лет служили "Верой и Правдой"?
Ею, родимою.
Значит, сверхсрочником, как в мою бытность называли, а может и сейчас, куском!? :)