Объясните мне зачем и почему (про OrderSelect())

 
1. ЗАЧЕМ проверять успешость выполнения функции OrderSelect()?
2. ПОЧЕМУ она может быть выполнена неуспешно?

Обычно все пишут:

if(OrderSelect(......){ } else{ return(0); }


Вот это последнее return(0) меня тоже смущает. Дальше разве не надо пытаться проверять ордера?
 
Все дело в асинхронности процессов, происходящих в терминале.

Пока эксперт занимается своими делами, считая, что открыто определенное количество позиций, кто-то (сам трейдер вручную, другой эксперт, сервер или дилер) может закрыть или модифицировать ордер. Необходимо обязательно проверять результат OrderSelect чтобы быть 100% уверенным в том, что ордер существовал на момент проверки и все последующие функции доступа к данным (OrderType, OrderOpenPrice и тд) этого выбранного ордера вернут корректные значения.

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

RefreshRates() не помогает.



У меня такая проблема в цикле удаляются отложенные ордера один за другим. В какой то момент OrderSelect() перестает выбирать следующий ордер.


как это вылечить?


прочитать сначала все ордера и сохранить их тикеты в массив?

 
santacruz:

У меня такая проблема в цикле удаляются отложенные ордера один за другим. В какой то момент OrderSelect() перестает выбирать следующий ордер.
как это вылечить?

Перевернуть цикл.

 
santacruz:

RefreshRates() не помогает.



У меня такая проблема в цикле удаляются отложенные ордера один за другим. В какой то момент OrderSelect() перестает выбирать следующий ордер.


как это вылечить?


прочитать сначала все ордера и сохранить их тикеты в массив?

Я после каждого удаления, возвращаю счетчик цикла на шаг назад, а затем обновляю данные...

i--;
RefreshRates();
 

Может быть в тему выясним зачем нужен МАГИК?
В описании якобы бывают случаи когда ордер невозможно найти без магика.
Однако, я на своей практике ни разу не встречал необходимость заполнения поля магик.
И от других не слышал.
Как выглядит, как происходит, от чего случается такая ситуация с поиском ордера,
когда якобы OrderSelelect() выбрало ордер по то ли по тикету, то ли по номеру позиции,
но мы его не узнаем и нам нужен магик?
Нужен ли Магик серверу?

Непонятно где реализован контроль магика - на сервере или в только в терминале?

Если Магик исключительно дл янашего удобства, значит ли это что можно сочинять любые варианты использования&

 
Korey:

Может быть в тему выясним зачем нужен МАГИК?
В описании якобы бывают случаи когда ордер невозможно найти без магика.
Однако, я на своей практике ни разу не встречал необходимость заполнения поля магик.
И от других не слышал.

У меня по магику определяется по какому из алгоритмов (их несколько в советнике) был открыт ордер и соответственно какой алгоритм и параметры применять к его сопровождению далее. А по анализу закрытых ордеров отпределяю тактику в выборе лота для каждого алгоритма торговли.

 

to Cronex

Ага, т.е. ордер имеет два поля для нас - текстовую строку и номер магик.
И серверу он не нужен. И можно торговать даже с разных МТ разными советнками одним счетом с различеним их по магику.
Но хотелось бы быть в это вопросе более уверенным т.е. иметь Pуководящий Tехнический Mатериал.

 
Korey:

Может быть в тему выясним зачем нужен МАГИК?
В описании якобы бывают случаи когда ордер невозможно найти без магика.
Однако, я на своей практике ни разу не встречал необходимость заполнения поля магик.
И от других не слышал.
Как выглядит, как происходит, от чего случается такая ситуация с поиском ордера,
когда якобы OrderSelelect() выбрало ордер по то ли по тикету, то ли по номеру позиции,
но мы его не узнаем и нам нужен магик?
Нужен ли Магик серверу?

Непонятно где реализован контроль магика - на сервере или в только в терминале?

Если Магик исключительно дл янашего удобства, значит ли это что можно сочинять любые варианты использования&

Дополнительная идентификация ордера. на сервере не видна и изменена может быть только экспертом, скориптом пользователя. Коммент к ордеру может быть изменен со стороны сервера. Одно из применений - работа по одному инструменту нескольких стратегий (экспертов).

2 santacruz

Правильный способ опроса ордеров :


for(int i= OrdersTotal()-1;i>=0;i--)
{

}


При опросе в сторону возрастания при удалении ордера сменится нумерация и один ордер будет пропущен.

Успехов.


ЗЫ Пока писал - уже ответили :).

 
Думаю, источник проблемы кроется в этом:
kharko:

Я после каждого удаления, возвращаю счетчик цикла на шаг назад, а затем обновляю данные...

i--;
RefreshRates();


Зачем связывать события удаления ордера и декремента переменной?

 
Спасибо Cronex! Спасибо VlаdislavVG!
Вопрос стал понятен. Ранее сомневался в правильности моего понимания разделения прав сервер/юзер.
(Осторожничаю потому что работа то с деньгами)))
Причина обращения: