OrderSend открывает позицию и возвращает -1?

 
Какую ошибку надо обрабатывать, чтобы избежать ситуации, описанной ниже?

Этот код открыл две позиции с абсолютно одинаковыми параметрами и временем открытия:
        for (int j = 10; j > 0 && !IsStopped(); j--)
        {
            ... // some minor processing, not relevant
            ticket = OrderSend(Symbol(), operation, lots, openPrice, 4, stopLoss, profit, "Crack", MagicNumber , 0, Green);
            ... // another minor processing, not relevant too
            
            if (ticket >= 0)
                break;
            
            Sleep(1000);
        }

        if (ticket == -1)
        {
            Alert("OrderSend(", Symbol(), Period(), ", ", lots, ", ", openPrice, ", 4, ", stopLoss, ", ", profit, ", ", MagicNumber, ") failed: ", GetLastError()));
            PrevBarTime = -1;
        }



То есть, в какой-то момент OrderSend возвратил -1 и валидный тикет в следующей итерации. При этом оба вызова открыли позиции с разными, соответственно, тикетами. Промежуточной ошибки я, к сожалению, не поймал, и алерт тоже не выскочил, естественно. Сейчас поставил трассировку в цикле, но не уверен, насколько ситуация воспроизводима.

Нужна подсказка и совет. :)
1. Какой там мог быть код ошибки?
2. Как ее обрабатывать? В смысле как заполучить конечный результат, т.е. валидный тикет?

 
... // another minor processing, not relevant too
тут случаем ticket не модифится?
попробуй убрать конструкцию с брейком и добавить в FOR ....&& ticket==-1
 
... // another minor processing, not relevant too
тут случаем ticket не модифится?

Не модифится. Там ничего не модифится, поэтому и написал нот релевант.
попробуй убрать конструкцию с брейком и добавить в FOR ....&& ticket==-1

Попробую, если объясните разницу. Думаете, кодогенератор неправильно компилирует брейк? Весьма маловероятно.
А таймаут на автоматическую переменную, размещенную в индивидуальном стеке эксперта, повлиять никак не должен.

Как я говорил, время открытия обоих ордеров идентичное, несмотря на таймаут в цикле.
То есть имеет место какая-то задержка выполнения ордера с определенным кодом в LastError, который надо специально обрабатывать (workaround).
 
После SendOrder Сохраняй значения ticket и GetLastError() в лог.....
интересно было бы посмотреть.....
У меня тоже была примерно такая же трабла то есть не у меня а у чела, котор я эксперт писал: при прогонке на тестере эксперт упорно тыкал кучу ордеров причем как то выборочно и ни какие чеки ему были ни почем.... Причем у себя на тачке я такого не наблюдал.....
Поисками особо не заморачивался, так как в рилТайме все было ОК....
Для себя решил что проблема в Тестере и в разных конфах компов....
 
После SendOrder Сохраняй значения ticket и GetLastError() в лог.....

См выше
Промежуточной ошибки я, к сожалению, не поймал, и алерт тоже не выскочил, естественно. Сейчас поставил трассировку в цикле, но не уверен, насколько ситуация воспроизводима.
 
Алерт выскочит лишь если ордера не будет ето понятно.....
лог все таки сделай с Ticket и GetLastError и запость....
про трассировку забудь
 
О! вопрос....
А что ты предпринимаешь, что бы на следующем тике опять не попасть в этот цикл? :)))
 
лог все таки сделай с Ticket и GetLastError и запость....
про трассировку забудь

??
Определитесь, пожалуйста. :)

Дельные мысли у кого-нибудь есть?
 
Ну так что со вторым попаданием в цикл?

ЗЫ
 
Просто ситуевина видится такой:
попали в цикл тикет получили естественно sleepА не было..... и опять п оновой на след тике.....
 
Про трассировку сам хохотался... сам уже запарился сижу читаю, блин, думаю где он там дебаггер увидел....
Причина обращения: