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

 
Slawa:

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

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

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

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

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

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

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