Как проверить, выбран ли ордер - страница 13

 
Ant_TL:

На самом деле я столкнулся с ситуацией, когда ошибку выдала одна из функций общего назначения, которая могла использоваться как внутри циклов обработки ордеров, так и вне этих циклов, т.е. до того, как ордер был выбран, что и привело к ошибке. Чтобы создавать универсальные сервисные функции, работающие с ордерами, которые могут использоваться как после того, как какой-либо ордер был выбран, так и до этого, как тогда, когда открытые ордера вообще есть, так и когда их нет, нужно использовать механизм вроде выложенного мной на прошлой странице, чтобы застраховать себя от этой ошибки.

Про то что выбор ордера не передается в модули библиотек и обратно я уже писал ранее в этой теме.


Антон, Вас тоже с праздником!
 
grell:

Приучите себя к тому, что на каждую торговую операцию свой ордер селект, И проблем не будет. И, да, вам правильно написали, выбрать можно только один ордер. Все остальное решается массивами.

 Я не говорил о ситуации, когда функция B() пытается перехватить выбор ордера из фукнции А() чтобы работать с ним. Минуя ордерселект. Дело в другом. Хотя и это бывает полезно

 
tara:

Антон, Вас тоже с праздником!

 И Вас с праздником!

 
FAQ:

  Вы все время забываете о том, что в один и тот же момент времени может быть выбран только один ордер. Выход = храните список ордеров в сберегательной кассе (своем массиве). одной глобальной переменной lastorder недостаточно. лучше будет вариант типа lastords[ticket][function].

Хранение всех ордеров в массиве уместно для сложных сеточных советников, но не для всех подряд экспертов. Применительно к моей ситуации это как палить из пушки по воробьям. Я не забываю, что может быть выбран только один ордер. Я просто обратил внимание на то, что узнать, был ли он выбран (не какой либо конкретный ордер, а вообще был ли на этом тике выбран любой произвольный ордер, т.е. был ли успешный вызов ордерселект) без ошибки не получится. Однако одной переменной типа lastorder для этой цели оказывается вполне достаточно.

 
Ant_TL:

 Я не говорил о ситуации, когда функция B() пытается перехватить выбор ордера из фукнции А() чтобы работать с ним. Минуя ордерселект. Дело в другом. Хотя и это бывает полезно


Ну приведите пример ситуации, чтобы я понял необходимость работы с более чем одним ордером. Кстати, с праздником!
 
grell:

Ну приведите пример ситуации, чтобы я понял необходимость работы с более чем одним ордером. Кстати, с праздником!

И Вас тоже с праздником! -))

Я приведу, как только в голову придет что-то интересное. Ситуация, где без этого механизма сложно обойтись. А то ведь сразу насоветуют программировать "правильно". ))

 
Ant_TL:

Хранение всех ордеров в массиве уместно для сложных сеточных советников, но не для всех подряд экспертов. Применительно к моей ситуации это как палить из пушки по воробьям.


  Это ваш выбор. если вам нравится под каждого воробья выстругивать рогатку, теряя время на ее подгонку. Я предпочитаю сделать один раз пушку под любой снаряд и быть уверенным, что когда нужно будет стрельнуть по воробьям - то зарядим картечью и положим всех сразу :)
 
Ant_TL:

И Вас тоже с праздником! -))

Я приведу, как только в голову придет что-то интересное. Ситуация, где без этого механизма сложно обойтись. А то ведь сразу насоветуют программировать "правильно". ))


Да что тут искать, если вы пытаетесь доказать, что это повседневная штатная ситуация. Можно работать с кучей ордеров и при этом выбирать их поочереди, не боясь потерять ордер из виду. А если это один ордер, то выбрать его ПОВТОРНО в другой функции вообще пустяк, по сравнению с поиском черной кошки в темной комнате.
 
grell:

Да что тут искать, если вы пытаетесь доказать, что это повседневная штатная ситуация. Можно работать с кучей ордеров и при этом выбирать их поочереди, не боясь потерять ордер из виду. А если это один ордер, то выбрать его в другой функции вообще пустяк, по сравнению с поиском черной кошки в темной комнате.

 Ну я столкнулся с этой ситуацией, вызывая в одном из советников свою шаблонную функцию MyTotal() для получения кол-ва всех ордеров, открытых для данного символа-мэджика. Очевидно, в каком-то из прошлых экспертов я её использовал в цикле, и поэтому добавил в неё сохранение и восстановление текущего выбора ордера. А потом использовал без цикла, до ордерселект и поэтому получил ошибку. Я хочу, чтобы мои шаблонные функции были универсальными и могли использоваться как в циклах так и вне циклов, поэтому я буду использовать этот шаблон с оберткой MySelect/TickSelect, т.к. все равно использую MySelect во всех циклах вместо OrderSelect для уменьшения объема кода.

Думаю понятно, почему в этой конкретной ситуации необходима работа с более чем 1 ордером одновременно? Мы работаем с некоторым ордером в главном цикле, потом вызываем MyTotal, которая должна перебрать все ордера для определения кол-ва нужных.

 
Исправьте ошибку и ложитесь спать, завтра у вас тяжелый день:)
Причина обращения: