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

 
Figar0:

А вообще развел демагогию.

bool OrderSelect( int index, int select, int pool=MODE_TRADES)
Функция выбирает ордер для дальнейшей работы с ним. Возвращает TRUE при успешном завершении функции. Возвращает FALSE при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Все что нужно для того что знать выбран ордер или нет. 

Я же объяснил все в начале темы, неужели так непонятно?

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

  // Поразумевает ордер выбраный посредством OrderSelect  (ну или ошибку)

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

  // Так зачем его еще раз выбирать??? 

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

 
FAQ:

  Нет он реально в танке.
А есть у него на это разрешение? Это Вам не пистолетик! ;)
 
Ant_TL:

Я же объяснил все в начале темы, неужели так непонятно?

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

1. Передать в функцию номер ордера, выбранного до ее вызова. 

2. По завершении работы функции повторно выбрать тот же ордер.

ЗЫ Откуда я знаю, что Вы хотите получить? Внятнее как нибудь нужно бы :(

 
tara:

1. Передать в функцию номер ордера, выбранного до ее вызова. 

2. По завершении работы функции повторно выбрать тот же ордер.

ЗЫ Откуда я знаю, что Вы хотите получить? Внятнее как нибудь нужно бы :(

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

Не всегда тривиально передать выбранный ордер в вызывающей функции, представьте что вложенность вызовов >1, в каждую функцию что ли передавать тикет ради того, чтобы какая-то мелкая информационная функция могла им воспользоваться?

Логичнее как раз сделать обертку на OrderSelect и OrderTicket, которые сохраняют и получают информацию о текущем выбранном ордере из отдельной переменной, но тут получается дублирование информации (терминал и так знает, выбран ли ордер, но не может сообщить эту информацию без потенциальной ошибки). Т.е. у нас получается либо дублирование информации, либо чрезмерное усложнение функций (передавать в каждую параметром ещё и выбранный ордер с самого верха), либо вынужденная генерация ошибок выполнения программы.

 
Ant_TL:

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

 

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

Вроде, все просто.

 
Ant_TL:

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

Не всегда тривиально передать выбранный ордер в вызывающей функции, представьте что вложенность вызовов >1, в каждую функцию что ли передавать тикет ради того, чтобы какая-то мелкая информационная функция могла им воспользоваться?

Посмотрите библиотеку функций у Кима и увидите, что в каждой функции производится перебор, выбор и проверка тикета, а потом уже то, что нужно узнать. Ваша "логика" не позволяет Вам усваивать азбучные правила программирования.
 
borilunad:
Посмотрите библиотеку функций у Кима и увидите, что в каждой функции производится перебор, выбор и проверка тикет, а потом уже то, что нужно узнать. Ваша "логика" не позволяет Вам усваивать азбучные правила программирования.

 В огороде бузина, а в Киеве дядька.

 
borilunad:
Посмотрите библиотеку функций у Кима и увилите, что в каждой функции производится перебор, выбор и проверка тикет, а потом уже то, что нужно узнать. Ваша "логика" не позволяет Вам усваивать азбучные правила программирования.
Борис, это не обязательно. Я об азбучных правилах.
 
Ant_TL:

 В огороде бузина, а в Киеве дядька.

Точно! Это о Вас и ещё есть: "у попа была собака..."
 
tara:
Борис, это не обязательно. Я об азбучных правилах.
Ну, конечно, если он всё уже знает, так почему же ошибки вылезают? От должен идти дальше и создать свой язык без ошибок, тогда всем будет хорошо! И где он раньше был?!