Поставил в один терминал MT4 второго советника, на другой паре. Теперь пару раз в день в журнале error 146 trade context busy, и одна из сделок открывается на 5-10 секунд позже или не открывается вовсе, если советник не повторяет. По одиночке оба работают без этой ошибки. Это лечится или разносить по разным терминалам?
Лечится. В MT4 один торговый поток на всех советников терминала: пока один ждёт ответа сервера, второй получает 146, особенно на открытии часа, когда оба хотят войти. Надёжнее всего семафор на глобальной переменной терминала через GlobalVariableSetOnCondition, чтобы захват был атомарным. Пиши в переменную время захвата, а не единицу: у меня терминал однажды упал посреди сделки, флаг остался, и второй советник простоял весь день. После ожидания обязательно RefreshRates.