Проблема при выставлении ордеров

 
Вопрос такой: предположим при выполнении следующего кусочка кода:

ticket=OrderSend(......................);
     if(ticket<0)
       {
        Print("OrderSend failed with error #",GetLastError());
        return(0);
       }



мы получили результат ticket<0, т.е. при выполнении ордера возникла ошибка. Вопрос: значит ли это, что при возникновении ошибки ордер не выставился? Или же все таки несмотря на ошибку он мог выставиться?

У меня получается так что не смотря на возникновение ошибки иногда ордер выставляется, а иногда и нет - результат непредсказуем.
Привожу распечатки из эксперта работающего на реальном счету Alpari:
Journal:

2006.02.06 01:10:41 '13912': order is open : #2062543 buy stop 0.10 EURUSD at 1.2191 sl: 1.2079 tp: 1.2401
2006.02.06 01:10:40 '13912': request in process
2006.02.06 01:10:14 '13912': request was accepted by server
2006.02.06 01:10:13 '13912': pending order buy stop 0.10 EURUSD at 1.2191 sl: 1.2079 tp: 1.2401

2006.02.06 01:07:55 '13912': order buy stop 0.10 EURUSD opening at 1.2191 sl: 1.2079 tp: 1.2401 failed [Common error]
2006.02.06 01:07:55 TradeContext: 'process' notification without 'accept' notification
2006.02.06 01:06:20 '13912': request was accepted by server
2006.02.06 01:06:20 '13912': pending order buy stop 0.10 EURUSD at 1.2191 sl: 1.2079 tp: 1.2401

Experts:

2006.02.06 01:10:41 WR 2 W3 EUR v1 EURUSD,H4: open #2062543 buy stop 0.10 EURUSD at 1.2191 sl: 1.2079 tp: 1.2401 ok
2006.02.06 01:07:20 WR 2 W3 EUR v1 EURUSD,H4: W2_W3_EUR 1 OrderSend failed with error# =128

В результате были выставлены два ордера Buy Stop по цене 1.2191. Время 1:06 соответствует времени 0:06 по Метатрейдеру.
Такая проблема возникает практически каждый раз при выставлении ордеров в понедельник ночью в 0:00 по МТ - видимо сервер в это время бывает перегружен и не успевает обработать заявки. В середине недели при такой же постановке ордеров в 0 часов дублирование ордеров происходит редко.

Повторяю вопрос : как узнать при возникновении ошибки выставился ордер или нет?

 
Я тоже раньше думал как обойти эту проблему. И также что-то подобное обнаруживал и у себя - получение ошибки не всегда говорит о том, что ордер не был установлен! И поэтому давно не отслеживаю эти LastErrors при установке ордеров. А применяю следующие способы выставления ордеров, которые меня вполне устраивают при работе уже на реале.

1. Отложенные ордера. Перед каждым выставлением отложенного ордера сначала происходит подсчёт наличия открытых ордеров на основе MagicNumber или по комментариям. Выставляю новый ордер, если кол-во открытых ордеров равно 0. Далее во время работы эксперта не произвожу удаления установленного отложенного ордера а просто модифицирую (OrderModify) его таким образом, чтобы он не смог сработать (например двигаю цену открытия, sl и tp на 5000 Point в соответствующую сторону). В следующий раз когда мне нужен опять этот самый BUYSTOP я модифицирую его параметры в нужном мне направлении. При этом операцию модификации можно сделать и повторно - ничего страшного не произойдёт. Будет возможно лишняя операция модификации. Хотя я сначала проверяю параметры ордера на предмет необходимости повторной модификации. В случае если этот ордер сработал и вышел из игры я опять устанавливаю новый ордер по вышеописанному принципу. При этом у меня в эксперте осуществляется автоматический контроль за количеством открытых ордеров. И в случае возникновения двойных ордеров происходит автоматическое удаление одного из них. Но такое крайне редко встречается.
Также заодно отмечу, что в тестере описанные выше операции модификации ордера занимают меньше времени, чем сумма операций (удаление+установка ордера). А это позволяет существенно сократить время для тестировании стратегии в тестере, что экономит личное время.

2. Мнгновенное исполнение ордеров. SELL и BUY. Просто после строки с выставлением ордера ставлю паузу на 1 минуту. А далее через минуту происходит возобновление работы эксперта. Подсчитываются открытые ордера по MagicNumber или по Comments. И если кол-во равно 0, то опять посылаю запрос на ордер. Исходя из опыта работы 1 минута паузы совершенно на конечный результат не влияет. В течение ещё нескольких минут цена туда-сюда сходить может и будут точно те же условия, по которым нужно правильно войти. Правда для вашего брокера нужно попробовать посмотреть какова может быть максимальная пауза задержки открытия ордера при посылке запроса. Я например на InterbankFX экспериментально обнаруживал паузы до 40 секунд максимум. Поэтому решил, что 1 минуты должно хватать. Что уже было подтверждено на практике, на чём я и остановился в этом плане.

В общем железные принципы - очень давно пользуюсь и уже забыл что это такое двойные ордера!
Если кто-то может предложить что-то лучшее, то с удовольствием выслушаю, но менять свои методы установки ордеров вряд ли стану - нормально работают ведь.
 
Что-то странное - сразу ответить не смогу.
Будем у себя моделировать ситуацию и проверять.
Причина обращения: