Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 854

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- Форексный VPS бесплатно на 24 часа
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я тут вожусь с CTrade::PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX) и понимаю, что внутри оно организовано не совсем. Все дело в 2-х кодах возврата - bool и ResultRetcode(). RetCode не всегда зануляется внутри перед возвратом false, так что если PositionClose выдает false, то RetCode может вполне вернуть TRADE_RETCODE_DONE. Как-бы эти 2 возвращаемых значения разработчикам синхронизировать.
Код + пример + логи.
COrderInfo::OrderType() всегда возвращает 0.
Для проверки можно выставить вручную любой отложенный ордер (BuyStop, SellStop, ...),
затем вписать его ticket в скрипте.
Может что-то с таблицей виртуальных функций? В отладке я попадаю только в virtual int CObject::Type()
PS. Сам уже разобрался. У COrderInfo есть 2 похожих метода: Type() и OrderType().
Код + пример + логи.
Смотрите, какую ситуация я имею ввиду.
У CTrade я не вижу методов SetResultRetcode и SetResultComment, чтобы перед каждой новой операцией сбрасывать их.
Приходится наследовать свой класс, где добавляется один единственный метод
Смотрите, какую ситуация я имею ввиду.
У CTrade я не вижу методов SetResultRetcode и SetResultComment, чтобы перед каждой новой операцией сбрасывать их.
А зачем? Абсолютно не нужные функции.
Первое: Вы стреляете в воздух - отсылаете торговый приказ без первой проверки - без проверки что вернула операция. Смотрим справку: PositionClose имеет тип bool.
Второе: смотрим цепочку закрытия позиции: когда позиция не найдена (её невозможно выбрать по указанному тикету) возвращается "false".
При этом нигде структуры не очищаются - так как это бессмысленно - ведь перед этим не удалось выбрать позицию, следовательно в структурах нет никакой информации.
А зачем? Абсолютно не нужные функции.
Первое: Вы стреляете в воздух - отсылаете торговый приказ без первой проверки - без проверки что вернула операция. Смотрим справку: PositionClose имеет тип bool.
Второе: смотрим цепочку закрытия позиции: когда позиция не найдена (её невозможно выбрать по указанному тикету) возвращается "false".
При этом нигде структуры не очищаются - так как это бессмысленно - ведь перед этим не удалось выбрать позицию, следовательно в структурах нет никакой информации.
1) С таким-же успехом можно сказать, что ResetLastError() абсолютно ненужная функция.
2) Проверка возвращаемого результата есть. Представьте, по аналогии вы вызываете какую-то функцию WinAPI, она возвращает ошибку, а GetLastError() (аналог ResultRetcode) возвращает любой последний код.
Если я добавлю какую-то проверку перед вызовом PositionClose (а я ее добавлю), это не отменяет любых других проверок перед любыми другими вызовами, когда RetCode не изменится.
Мой эксперт пишет в лог информацию. Все, что мне нужно - это написать в лог вменяемые ResultRetcode и ResultComment, если какой-то вызов вернул false.
1) С таким-же успехом можно сказать, что ResetLastError() абсолютно ненужная функция.
2) Проверка возвращаемого результата есть. Представьте, по аналогии вы вызываете какую-то функцию WinAPI, она возвращает ошибку, а GetLastError() (аналог ResultRetcode) возвращает любой последний код.
Если я добавлю какую-то проверку перед вызовом PositionClose (а я ее добавлю), это не отменяет любых других проверок перед любыми другими вызовами, когда RetCode не изменится.
Мой эксперт пишет в лог информацию. Все, что мне нужно - это написать в лог вменяемые ResultRetcode и ResultComment, если какой-то вызов вернул false.
Прочтите в справке по торговым операциям класса CTrade когда нужно проверять результат выполнения торгового запроса (код возврата торгового сервера) вызовом метода ResultRetcode().
Прочтите в справке по торговым операциям класса CTrade когда нужно проверять результат выполнения торгового запроса (код возврата торгового сервера) вызовом метода ResultRetcode().
Вы можете утверждать, что
1) Если PositionClose возвращает false, то Retcode никогда не заполняется?
2) Если PositionClose возвращает true, то Retcode заполняется всегда?
Ордер -> сделка -> позиция. Берите с позиции цену открытия.
Можете показать картинку как это Ордер -> сделка -> позиция, это снизу где сделки пишет так оно там не даёт копировать
Можете показать картинку как это Ордер -> сделка -> позиция, это снизу где сделки пишет так оно там не даёт копировать
Пожалуйста или перепишите свой вопрос или расставьте знаки препинания, а ещё лучше добавьте на картинке что, где и кто. Иначе получается, что я вижу знакомые буквы, а понять смысл и Вашу мысль не могу.