Обсуждение статьи "Пошаговое руководство по написанию советников в MQL5 для начинающих" - страница 6

 

Доброго времени суток!

Я сейчас разбираюсь с написанием советников на примере данной статьи и столкнулся со следущей проблемой - при попытке отправить запрос на совершение сделки мне возвращается ошибка 10014 - неправильный объем. Я проверил максимальный допустимый обем для сделки SYMBOL_VOLUME_MAX - мне возвращается 0. Но при этом в ручную сделки нормально открываются. 

Подскажите, что я делаю не так или где надо посмотреть. Использую код советника, который приатачен в статье.

Спасибо. 

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
спасибо за статью.
 

Привет,

Код выглядит отлично, но когда я пробую его, я получаю эту ошибку

2011.11.13 23:39:58 2011.11.01 14:20:00 Alert: The Sell order request could not be completed -error:4756
2011.11.13 23:39:58 2011.11.01 14:20:00 failed instant sell 1.00 EURUSD at 1.36833 sl: 1.37133 tp: 1.35833 [Invalid request]

Ни одна сделка не выполнена.

Кто-нибудь может помочь с исправлением?

Спасибо

F

 
Financialabs:

Привет,

Код выглядит отлично, но когда я пробую его, я получаю эту ошибку

2011.11.13 23:39:58 2011.11.01 14:20:00 Alert: The Sell order request could not be completed -error:4756
2011.11.13 23:39:58 2011.11.01 14:20:00 failed instant sell 1.00 EURUSD at 1.36833 sl: 1.37133 tp: 1.35833 [Invalid request]

Сделки не совершаются.

Кто-нибудь может помочь с исправлением?

Спасибо

F

Я задавал тот же вопрос, но никто не ответил.

Я нашел его.

Это ошибка. Вам нужно добавить строку кода

ZeroMemory(mrequest);

эта строка должна находиться перед строками mrequest.action=... mrequest.price=... и т. д.

 

Здравствуйте.

Спасибо большое за подробное и понятное руководство.

 У меня возникла проблема.  Программа компилируется, но при первой же попытке создать запрос появляется следующая ошибка: "Запрос на установку ордера Sell не выполнен - код ошибки:4756"

 В документации ничего не смог найти. Может подскажете что с этим можно делать или где найти информацию?

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 
Alfff:

 У меня возникла проблема.  Программа компилируется, но при первой же попытке создать запрос появляется следующая ошибка: "Запрос на установку ордера Sell не выполнен - код ошибки:4756"

 В документации ничего не смог найти. Может подскажете что с этим можно делать или где найти информацию?

Исправлено, скачайте обновленную версию советника.

Проблема была в структуре mrequest, предварительно ее нужно обнулять при помощи функции ZeroMemory. Перед строками с "mrequest.action=TRADE_ACTION_DEAL;" (стр. 199 и 245) нужно добавить "ZeroMemory(mrequest);"

 
senerzen:

Я задал тот же вопрос, но никто не ответил.

Я нашел его.

Это ошибка. Вам нужно добавить строку кода

ZeroMemory(mrequest);

эта строка должна быть перед строками mrequest.action=... mrequest.price=... и т. д.

Спасибо, ошибка исправлена.
Get in touch with developers using Service Desk!
  • www.mql5.com
We therefore attach great importance to all user reports about issues in our programs and try to answer each one of them.
 
papaklass:
Это нужно всегда делать, т.е. обнулять структуру запроса перед запросом?
Перед отправкой запроса все поля структуры должны быть инициализированы (в данном случае это производится при помощи функции ZeroMemory, хотя можно сделать это поэлементно), инициализацию надо проводить после объявления структуры.
 
Automated-Trading:
Перед отправкой запроса все поля структуры должны быть инициализированы (в данном случае это производится при помощи функции ZeroMemory, хотя можно сделать это поэлементно), инициализацию надо проводить после объявления структуры.

В Справочнике об этом сказано? (Сейчас нет возможности проверить)

Получается, что достаточно один раз объявить переменную типа структуры на глобальном уровне программы, проинициализировать её один раз и больше к вопросу использования функции  ZeroMemory не возвращаться?

 
Yedelkin:

В Справочнике об этом сказано? (Сейчас нет возможности проверить)

Любая переменная при ее объявлении принудительно не зануляется. Именно программисту нужно самостоятельно чистить/присваивать все переменные перед использованием.

Использование неинициализированных (или неполностью) переменных (особенно структур) - это очень частая ошибка в программировании.

Получается, что достаточно один раз объявить переменную типа структуры на глобальном уровне программы, проинициализировать её один раз и больше к вопросу использования функции  ZeroMemory не возвращаться?

Лучше правильно инициализировать переменные, а не бороться (бесполезно и более опасно) с инициализацией путем выноса на глобальный уровень.

Это же так просто задать себе вопрос "почему я считаю, что за меня кто-то будет инициализировать переменные, а в особенности сложные структуры"?

Очень удобно занулять структуры без неудобного ZeroMemory при объявлении так:

   MqlTick my={0};