
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
И отложенные ордера :(((
Лог 1:
Trying to buy, attempt 0 failed, error 6
Trying to buy, attempt 1 failed, error 129
Trying to buy, attempt 2 failed, error 129
Trying to buy, attempt 3 failed, error 129
Trying to buy, attempt 4 failed, error 129
Zigzag buy error: 4050
2.28000000, 0.02700000, 0.00000000
Trying to buy, attempt 0 failed, error 6
Trying to buy, attempt 1 successfull
Ордер открыт с 7-й попытки. По ходу дела поймано несколько сообщений об ошибках, не имеющих с реальностью ничего общего.
Лог 2.
7.9.2005 11:0:15, Signal: sell7.9.2005 11:0:15 Trying to sell, attempt 0
Ask: 1.24820000, StopLoss: 0.00600000, TakeProfit: 0.00000000
failed, error 6
7.9.2005 11:0:15 Trying to sell, attempt 1
Ask: 1.24820000, StopLoss: 0.00600000, TakeProfit: 0.00000000
successfull
Со второй попытки. Ошибка номер шесть, ей была посвящена целая ветка, больше ста постов. Следуя советам разработчиков, Роша и Компостера, частота ошибки была уменьшена с "через раз" до "примерно раз из пяти". Но она осталась.
Лог 3.
Attempting to close long position, ticket: 1784257
6.9.2005 12:0:13 Order with this ticket still present, trying again
6.9.2005 12:0:13 Order with this ticket still present, trying again
6.9.2005 12:0:13 Order with this ticket still present, trying again
6.9.2005 12:0:13 Order with this ticket still present, trying again
6.9.2005 12:0:13 Order with this ticket still present, trying again
Пять неудач, кода ошибки НЕ БЫЛО. Программа считала, что позиция закрыта. Я ловил тикет в цикле, если бы не ловил, проблема бы не была обнаружена.
Ну и так далее.
void CloseBuy(string strExpertName)
{
int nTicket = OrderTicket();
SaveComment("\r\n\tAttempting to close long position, ticket: " + nTicket);
int nResult = OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua);
Sleep(10000);
if(nResult == -1)
{
int nError = GetLastError();
Alert(strExpertName + ", error: " + nError);
}
}
Пришлось использовать цитирование, чтобы выделить жирным текст.
Смысл Sleep - только в том, чтобы дождаться, пока не исчезнет условие, вызывающее сбой (ну там пинги начнут проходить). Потому, что - учитывая, что торговые операции "забирают" контроль, и не отпускают его, пока не вернутся, то если ошибка есть, она должна проявиться сразу. Если же нет - это баг.
Единственное возможное исключение - это мой цикл, проверяющий наличие тикета только что закрытой позиции. Но даже тут можно поспорить, как должна бы в идеале вести себя система.
Повторюсь, проблема не только в том, что ошибки ВОЗНИКАЮТ, но и в том, что коды ошибок берутся с потолка, а иногда и вовсе нет кодов - возвращается код успеха операции.
Если я чего-то не понял, пожалуйста, поясни.
1. Высылается СМС о намерении снять такой ордер.
2. Делается попытка снять ордер
3. Анализируется результат функции OrderDelete() и если он отрицательный (ордер не снялся) , то
4. Высылается СМС о провале.
Вчера пришли 2 СМС-ки, все согласно регламенту, НО - ордер был снят в ту же секунду, согласно логам.
Значит, советник пытался получить результат операции отмены ордера на какую-то долю секунды раньше, чем получил результат. Как в анекдоте про китайцев, которые картошку сажали, и выкапывали на следующий день. На вопрос "Что, так быстро поспевает", они отвечали - "Нет, но оцень кусать хоцется" :)
1. Я всю эту бучу поднял по поводу реальных ордеров. И если они себя так ведут, это надо фиксить.
2. Идея в том, чтобы МТ советники могли торговать БЕЗ цикла с задержками. Это - то, как оно, по идее, должно быть.
Задержку я поставлю, но, как говорится, "совершенно без удовольствия" :)
Сам не верю, может разработчики объяснят, насколько я ошибаюсь?
Несколько смущает тот факт, что на 37 постов этой ветки приходится только один от разработчиков...
зачем вмешиваться в и без того продуктивное обсуждение
а вот и продукты =)
Провёл тестирование. Работает один советник, который открывает и закрывает позицию (поочерёдно - бай и селл). Минимальная пауза между всеми торговыми операциями - 10 сек.
Попыток OrderSend: 996
Удачных*: 888
Ошибок**: 108
* - под "удачной" попыткой я понимаю следующее: ордерсенд вернул № тикета, GetLastError вернул 0, открытая позиция успешно выбрана ордерселект.
** - Все ошибки №148 "trade context is busy" - то, о чём спрашивал Слава в соседней ветке - "что, если отключить проверку isTradeAllowed?". Ошибки начались в 07:16:46 и продолжают сыпаться до сих пор)
-----------------------------------------------------------------------------------------------------------------------
Попыток OrderClose: 890
Удачных*: 736
Ошибок**: 154
* - под "удачной" попыткой закрытия я понимаю следующее: ордерклоус вернул true, GetLastError вернул 0, закрытая позиция позиция успешно выбрана ордерселект в моде_хистори.
** - 152 ошибки №1 "нет ошибки", одна №6 и одна №138(реквот)
Ситуации, которую отлавливали, не случилось... Т.е. все закрытые позиции были действительно закрыты.