Возвращает ошибку 4108 иногда - неправильный тикет для OrderClose. Может ли быть так что OrderTicket() не совпадает с тикетом в OrderSelect ? Переменная ticket может быть равной нулю.
Возвращает ошибку 4108 иногда - неправильный тикет для OrderClose. Может ли быть так что OrderTicket() не совпадает с тикетом в OrderSelect ? Переменная ticket может быть равной нулю.
Мне долго воспроизводить ошибку, проще спросить.
Вы выбираете ордер по тикету. А уверены, что выбранный ордер уже не закрыт? Но при этом пытаетесь его опять закрыть... Время закрытия проверьте после успешного выбора по тикету.
Вы выбираете ордер по тикету. А уверены, что выбранный ордер уже не закрыт? Но при этом пытаетесь его опять закрыть... Время закрытия проверьте после успешного выбора по тикету.
Я проверю, когда воспроизведу ошибку. У меня все тикеты в глобальных переменных хранятся. При закрытии ордера они удаляются. Перед OrderSelect() ticket берется из глобальных переменных. Если тикета нет в переменных - эта переменная будет 0, а значит ордер не должен выбраться и OrderSelect() вернет false. Но вообще да, стоит проверить. Спасибо.
Я проверю, когда воспроизведу ошибку. У меня все тикеты в глобальных переменных хранятся. При закрытии ордера они удаляются. Перед OrderSelect() ticket берется из глобальных переменных. Если тикета нет в переменных - эта переменная будет 0, а значит ордер не должен выбраться и OrderSelect() вернет false. Но вообще да, стоит проверить. Спасибо.
Это стандартно - проверить цену закрытия при выборе ордера по тикету. Другим способом вы нормально не узнаете закрыт ли ордер, и выбран из списка закрытых, или ещё открыт, и выбран из списка рыночных.
Самое недальновидное - хранить тикеты в глобальных переменных. Их нужно брать из торгового окружения - там актуальная на текущий момент информация.
Это стандартно - проверить цену закрытия при выборе ордера по тикету. Другим способом вы нормально не узнаете закрыт ли ордер, и выбран из списка закрытых, или ещё открыт, и выбран из списка рыночных.
Самое недальновидное - хранить тикеты в глобальных переменных. Их нужно брать из торгового окружения - там актуальная на текущий момент информация.
Если я буду выбирать вот так: OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES), по идее это частично решит проблему? Тикеты в глобальных переменных храню по другим причинам, ну и заодно воспользовался в этом случае.
Если я буду выбирать вот так: OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES), по идее это частично решит проблему? Тикеты в глобальных переменных храню по другим причинам, ну и заодно воспользовался в этом случае.
Нет, не решит - pool (MODE_TRADES) при выборе по тикету игнорируется.
Возвращает ошибку 4108 иногда - неправильный тикет для OrderClose. Может ли быть так что OrderTicket() не совпадает с тикетом в OrderSelect ? Переменная ticket может быть равной нулю.
Мне долго воспроизводить ошибку, проще спросить.
обычно достаточно проверить для рыночных ордеров:
OrderCloseTime() == 0 //ордер открыт
OrderCloseTime() > 0 //ордер закрыт
для лимитных ордеров нужно еще смотреть цену закрытия, если она равна 0 - то лимитник был Canceled
Поделитесь, кто может, кодом с употреблением метода PositionClosePartial .
Теоретически понимаю, как работает, но мне бы на рабочий код посмотреть.
Или посоветуйте, где посмотреть.
Заранее благодарен.
Практически это одна строка кода. Но для неё надо получить тикет позиции. Вот советник из OnInit открывающий позицию лотом 0.2 и в OnTick закрывающий половину позиции.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Возвращает ошибку 4108 иногда - неправильный тикет для OrderClose. Может ли быть так что OrderTicket() не совпадает с тикетом в OrderSelect ? Переменная ticket может быть равной нулю.
Мне долго воспроизводить ошибку, проще спросить.Возвращает ошибку 4108 иногда - неправильный тикет для OrderClose. Может ли быть так что OrderTicket() не совпадает с тикетом в OrderSelect ? Переменная ticket может быть равной нулю.
Мне долго воспроизводить ошибку, проще спросить.Вы выбираете ордер по тикету. А уверены, что выбранный ордер уже не закрыт? Но при этом пытаетесь его опять закрыть... Время закрытия проверьте после успешного выбора по тикету.
Вы выбираете ордер по тикету. А уверены, что выбранный ордер уже не закрыт? Но при этом пытаетесь его опять закрыть... Время закрытия проверьте после успешного выбора по тикету.
Я проверю, когда воспроизведу ошибку. У меня все тикеты в глобальных переменных хранятся. При закрытии ордера они удаляются. Перед OrderSelect() ticket берется из глобальных переменных. Если тикета нет в переменных - эта переменная будет 0, а значит ордер не должен выбраться и OrderSelect() вернет false. Но вообще да, стоит проверить. Спасибо.
Я проверю, когда воспроизведу ошибку. У меня все тикеты в глобальных переменных хранятся. При закрытии ордера они удаляются. Перед OrderSelect() ticket берется из глобальных переменных. Если тикета нет в переменных - эта переменная будет 0, а значит ордер не должен выбраться и OrderSelect() вернет false. Но вообще да, стоит проверить. Спасибо.
Это стандартно - проверить цену закрытия при выборе ордера по тикету. Другим способом вы нормально не узнаете закрыт ли ордер, и выбран из списка закрытых, или ещё открыт, и выбран из списка рыночных.
Самое недальновидное - хранить тикеты в глобальных переменных. Их нужно брать из торгового окружения - там актуальная на текущий момент информация.
Это стандартно - проверить цену закрытия при выборе ордера по тикету. Другим способом вы нормально не узнаете закрыт ли ордер, и выбран из списка закрытых, или ещё открыт, и выбран из списка рыночных.
Самое недальновидное - хранить тикеты в глобальных переменных. Их нужно брать из торгового окружения - там актуальная на текущий момент информация.
Если я буду выбирать вот так: OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES), по идее это частично решит проблему? Тикеты в глобальных переменных храню по другим причинам, ну и заодно воспользовался в этом случае.
Если я буду выбирать вот так: OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES), по идее это частично решит проблему? Тикеты в глобальных переменных храню по другим причинам, ну и заодно воспользовался в этом случае.
Нет, не решит - pool (MODE_TRADES) при выборе по тикету игнорируется.
Возвращает ошибку 4108 иногда - неправильный тикет для OrderClose. Может ли быть так что OrderTicket() не совпадает с тикетом в OrderSelect ? Переменная ticket может быть равной нулю.
Мне долго воспроизводить ошибку, проще спросить.обычно достаточно проверить для рыночных ордеров:
OrderCloseTime() == 0 //ордер открыт
OrderCloseTime() > 0 //ордер закрыт
для лимитных ордеров нужно еще смотреть цену закрытия, если она равна 0 - то лимитник был Canceled
Здравствуйте!
Поделитесь, кто может, кодом с употреблением метода PositionClosePartial .
Теоретически понимаю, как работает, но мне бы на рабочий код посмотреть.
Или посоветуйте, где посмотреть.
Заранее благодарен.
Здравствуйте!
Поделитесь, кто может, кодом с употреблением метода PositionClosePartial .
Теоретически понимаю, как работает, но мне бы на рабочий код посмотреть.
Или посоветуйте, где посмотреть.
Заранее благодарен.
Практически это одна строка кода. Но для неё надо получить тикет позиции. Вот советник из OnInit открывающий позицию лотом 0.2 и в OnTick закрывающий половину позиции.
Или вот полный код из класса CTrade