IsTradeAllowed versus IsTradeContextBusy - страница 2

Vladimir Erofeev  
Slawa:

В своё время специально для таких случаев мы добавили функцию GlobalVariableSetOnCondition

Захватываете переменную в монопольное использование. Проводите торговую операцию. Отпускаете переменную

Тогда вообще операции будут совершаться последовательно. А в стандартном режиме, как я понял, может совершаться несколько (до какого-то кол-ва) торговых операций одновременно?

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

Влияет ли на получение этой ошибки скорость исполнения ордеров брокером и скорость связи с сервером? Т.е. предполагаю, что при маленьком пинге и хорошем исполнении ответ от сервера получаем быстрее и поток освобождается быстрее. Хотя, не очень понимаю, что значит занятый поток. Если торговый приказ отправлен на сервер, то до момента прихода ответа от сервера поток занят или нет?

Vladimir Erofeev  
Ihor Herasko:
Понятно, в чем дело. Один и тот же советник, представленный несколькими копиями, работает на одном и том же символе. В итоге все копии начинают обрабатывать событие Tick одновременно. Логично, что перед совершением торговой операции все они получают информацию о свободности торгового потока. Затем первые 8 (в МТ4 вроде бы расширили количество торговых потоков до 8) из них успешно модифицируют свои ордера, а остальные получают отказ.

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