Ошибки и их обработка

 
Возникла непонятка с обработкой ошибок при выполнении торговых операций. Какие из них являются фатальными и требуют прекращения работы робота, а какие говорят лишь о том, что операцию нужно повторить, быть может взяв новые цены ? Просто налетел сегодня на этом. У меня робот ошибки не обрабатывал. В результате, когда надо было закрыть два ордера одновременно, он закрыл лишь один, хотя до того работал великолепно. Наверняка нарвался на "брокер занят". Хорошо еще что это произошло на демоденьгах... Вобщем озаботило меня это. Кстати по-моему тема общеполезна. Я смотрю в codebase тут нет ни одного робота, который бы корректно обрабатывал ошибки. В лучшем случае пишут что-то типа
if(OrderSend(....)==-1)
{
Print("Error in OrderSend: ", GetLastError());
}
(как всегда поступал я).

Либо еще того хуже:
while(1)
{
if(OrderSend(....) != -1) break;
Sleep(500);
}
(что в случае фатальных ошибок приведет к заваливанию брокера ошибочными запросами и скорее всего вызовет блокировку счета или запрет автоматической торговли).

Так что бойцы не умеющие корректно обрабатывать ошибки, годны только для тестера, и не годятся даже на демку. Вобщем сейчас пишу бойца, умеющего работать с ошибками. Считаю не фатальными (связанными с ожиданиями, реквотами и т.п.) ошибки 4, 6, 128, 135, 136, 137, 138, 146. После этих ошибок делаю Sleep(500), MarketInfo(...) для получения новых цен, и повторяю операцию. Все прочие ошибки считаю фатальными. Т.е. связанными либо с невозможностью торговли, либо с ошибками в коде(настройках) робота. Прав ли я ? У кого какие мнения (опыт) по этому поводу ?