Кто знает - когда это все заканчивается?

 

Исходная ситуация (немножко абстрактная, но тем не менее): только что (пере)установленный терминал, полных исторических данных нет, счет очень старый с огромной кучей ордеров по самым разным символам в истории, и конечно же эксперт, который чтото делает в ините - некоторые начальные настройки, зависящие от параметров счета и рабочего символа.

Трабла: init вызывается сразу же после конекта, кода в нем - всего ничего и он быстро отрабатывает и... выходит по return. вся беда в том что к моменту завершения init-а еще не все данные считаны. График все еще дергается перерисовывая закачивющуюся историю, список кучи ордеров тоже еще не весь приехал, котировки уже идут и передергивают пересчет эксперта, который проиничен неправильно :(((

Вопрос: есть ли какой то надежный признак того, что терминал получил от сервера все что ему нужно полностью готов к работе? т.е. вся история закачана, все ордера (закрытые и открытые) уже в терминале, информация для MARKETINFO уже есть для всех пар в окне навигатора.

 
можно попытаться использовать Sleep() и RefrashRates() и проверять на отсутствие нулевых значений по интересующим выборкам, если еще не закачались, то снова Sleep()
 
Techno >>:
можно попытаться использовать Sleep()

про sleep в ините забыл - спасибо! так его действительно можно затормозить.

но остается вопрос как отпределить когда снимать "торомоз"? RefrashRates() - это только котировки, остается история ордеров и ... малоли чего там еще "под капотом" :(

 

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

 
вроде никто не запрещает реинит делать..
 
DDFedor >>:

также и по ордерам... определить временнОй промежуток, в течение которого изменяются данные(количество ордеров за единицу времени), если этот промежуток превышен, а данные не изменились - тогда.

хм... а как определить буря прекратилась потому что все прочитано, или потому что сервер "завис" и перестал отдавать (возможно временно) данные ?

 
ForexTools писал(а) >>

хм... а как определить буря прекратилась потому что все прочитано, или потому что сервер "завис" и перестал отдавать (возможно временно) данные ?

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

 

наверно никак. 

как говорится - всё что не смогли исправить - называют особенностью программы :)

------------------

хорошо что в пятерке придумали это сделать а тут наверно только одна надежда на  RefreshRates.

 

вероятно только реинит и поможет.

 

тут еще интересный вопрос, на который могут ответить только разработчики: закачка истории, списка закрытых и открытых ордеров, и параметров символов - они идут паралельно несколькими потоакми или есть жесткая очередность? если все качает один поток, тогда они должны знать (и хотелось бы что бы нам сказали) что у них читается самым последним?

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

господа разработчики - можете прокомментировать это?

 
ForexTools писал(а) >>

про sleep в ините забыл - спасибо! так его действительно можно затормозить.

Я решаю эту проблему путем создания переменной глобального уровня "Initialized", тип bool.

В ините устанавливая её значения в false, в старте соответственно:

if ( !Initialized ) {
   initialize();
   Initialized = true;
}
Причина обращения: