Ситуация такая на Hadge счёте:
Без использования класса CTrade заполняется структура MqlTradeRequest, открывается ордер Market и сразу-же SL & TP Modification. Но перед заполнением структуры
MqlTradeRequest для Modification не делается обнуление структуры.
В тестере и дебагере всё проходит, всё работает. А на реале получил ошибку 10013 "Неправильный запрос"
Естественно сразу-же поставил обнуление структуры перед заполнением, но всё-же вопрос: Возможна-ли ошибка из-за не обнулённой структуры или это ещё какая-то ошибка.
код заполнения структуры
Да, все Вы правильно расписали. Конечно же, возможно. Ведь отсутствие явной инициализации перед использованием значения переменной является одной из основных ошибок при разработке программ. На эту тему даже анекдот есть:
Решите задачу: Буратино дали 5 яблок, 2 яблока он отдал Мальвине, одно съел. Сколько яблок осталось у Буратино? Думаете, что 2? Неверно! Ведь неизвестно, сколько яблок было у Буратино до того, как ему дали 5 яблок. Мораль: проводите начальную инициализацию переменных.
Да, все Вы правильно расписали. Конечно же, возможно. Ведь отсутствие явной инициализации перед использованием значения переменной является одной из основных ошибок при разработке программ. На эту тему даже анекдот есть:
Решите задачу: Буратино дали 5 яблок, 2 яблока он отдал Мальвине, одно съел. Сколько яблок осталось у Буратино? Думаете, что 2? Неверно! Ведь неизвестно, сколько яблок было у Буратино до того, как ему дали 5 яблок. Мораль: проводите начальную инициализацию переменных.
Но, с другой стороны этот анекдот не совсем корректен в данном случае, так мне кажется.
Тут ведь не инициализация при объявлении. Переменная объявлена, структура обнулена заполнена для открытия ордера и только потом использована вторично без обнуления на том-же самом символе и даже применительно к той-же самой позиции.
Если как в том анекдоте про Чапаева и логическое мышление рассуждать, то получается что ничего страшного не должно произойти, ведь при модификации ордера используются только те поля структуры которые нужны. Или я не прав??? Используются все поля не зависимо от применения этой структуры?
Но, с другой стороны этот анекдот не совсем корректен в данном случае, так мне кажется.
Тут ведь не инициализация при объявлении. Переменная объявлена, структура обнулена заполнена для открытия ордера и только потом использована вторично без обнуления на том-же самом символе и даже применительно к той-же самой позиции.
Если как в том анекдоте про Чапаева и логическое мышление рассуждать, то получается что ничего страшного не должно произойти, ведь при модификации ордера используются только те поля структуры которые нужны. Или я не прав??? Используются все поля не зависимо от применения этой структуры?
Заметьте, что используемые поля структуры при открытии позиции и при модификации позиции пересекаются. А потому при модификации будут использованы некоторые данные, оставшиеся после открытия позиции.
Подходите к модификации как к совершенно новому событию. Вы не знаете, что именно в структуре есть на данный момент. Это сродни инициализации при объявлении.
Кстати, зачем передавать в функцию модификации как всю структуру, так и ее части? На мой взгляд, это избыточно. Если структура нужна только для осуществления торгового запроса, то не передавайте ее, а попросту объявите новую, но уже локальную, в функции модификации.
Заметьте, что используемые поля структуры при открытии позиции и при модификации позиции пересекаются. А потому при модификации будут использованы некоторые данные, оставшиеся после открытия позиции.
Подходите к модификации как к совершенно новому событию. Вы не знаете, что именно в структуре есть на данный момент. Это сродни инициализации при объявлении.
Кстати, зачем передавать в функцию модификации как всю структуру, так и ее части? На мой взгляд, это избыточно. Если структура нужна только для осуществления торгового запроса, то не передавайте ее, а попросту объявите новую, но уже локальную, в функции модификации.
Заметьте, что используемые поля структуры при открытии позиции и при модификации позиции пересекаются. А потому при модификации будут использованы некоторые данные, оставшиеся после открытия позиции.
Подходите к модификации как к совершенно новому событию. Вы не знаете, что именно в структуре есть на данный момент. Это сродни инициализации при объявлении.
Кстати, зачем передавать в функцию модификации как всю структуру, так и ее части? На мой взгляд, это избыточно.
Игорь, но ведь в данном примере для модификации заполняются все необходимые поля. И только "не используемые" остаются не обнулёнными.
Я не пытаюсь спорить, я пытаюсь только понять происходящее.
Что-то я совсем не понял вопрос
Кстати, зачем передавать в функцию модификации как всю структуру, так и ее части? На мой взгляд, это избыточно.
а как иначе? Ведь в функцию OrderSend передаётся 2 структуры. 1 типа MqlTradeRequest и 2 типа MqlTradeCheckResult
Владимир, у меня задача не написать грааль используя чужие коды, а понять происходящее. Не надо мне навязывать своё мнение.
ПРОСТО ХОЧУ РАЗОБРАТЬСЯ И ПОНЯТЬ. И ВСЁ.
Я думал Вы заглянули в библиотеку - там есть такая функция (перед отправкой ордера):
//+------------------------------------------------------------------+ //| Clear structures m_request,m_result and m_check_result | //+------------------------------------------------------------------+ void CTrade::ClearStructures(void) { ZeroMemory(m_request); ZeroMemory(m_result); ZeroMemory(m_check_result); }
то есть принудительное обнуление, потом заполнение, потом отправка.
Этим я хотел сказать, что обнулят нужно. Здесь без вариантов.
Я думал Вы заглянули в библиотеку - там есть такая функция (перед отправкой ордера):
то есть принудительное обнуление, потом заполнение, потом отправка.
Этим я хотел сказать, что обнулят нужно. Здесь без вариантов.
То что нужно обнулять я понимаю, я не понимаю и не вижу Вашего конкретного ответа на конкретный вопрос "При модификации используются только необходимые поля структуры или вся структура целиком?".
Хотя теперь я могу предугадать Ваш ответ... "А сколько Вам надо?". Только вот уверенности это не прибавит.
добавлено:
Что касается библиотеки, так там так всё запутано, что заяц так свои следы не путает.
То что нужно обнулять я понимаю, я не понимаю и не вижу Вашего конкретного ответа на конкретный вопрос "При модификации используются только необходимые поля структуры или вся структура целиком?".
Хотя теперь я могу предугадать Ваш ответ... "А сколько Вам надо?". Только вот уверенности это не прибавит.
добавлено:
Что касается библиотеки, так там так всё запутано, что заяц так свои следы не путает.
В справке написано, что только 7 полей достаточно для модификации,
Modify Pending Order
Торговый приказ на модификацию уровней цен отложенного ордера. Требуется указание 7 полей:
·action
·order
·price
·sl
·tp
·type_time
·expiration
но обнулять нужно всю структуру.
Но, скорее всего, Вы не правильно указываете поля type_time и expiration,
как при модификации, так и при установке ордера.
Приведите код как Вы заполняете структуру, при установке ордера.
В справке написано, что только 7 полей достаточно для модификации,
но обнулять нужно всю структуру.
Но, скорее всего, Вы не правильно указываете поля type_time и expiration,
как при модификации, так и при установке ордера.
Приведите код как Вы заполняете структуру, при установке ордера.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Ситуация такая на Hadge счёте:
Без использования класса CTrade заполняется структура MqlTradeRequest, открывается ордер Market и сразу-же SL & TP Modification. Но перед заполнением структуры
MqlTradeRequest для Modification не делается обнуление структуры.
В тестере и дебагере всё проходит, всё работает. А на реале получил ошибку 10013 "Неправильный запрос"
Естественно сразу-же поставил обнуление структуры перед заполнением, но всё-же вопрос: Возможна-ли ошибка из-за не обнулённой структуры или это ещё какая-то ошибка.
код заполнения структуры