Всем привет! Впрос по MQL5. Как правильно закрыть ордер, не нашел нормального примера. Просто закрывать умею, классом CTrade пользуюсь, но есть ли нормальное готовое решение? Цель не просто отправить команду на закрытие, а иметь фукцию которая возвращает true только после того как получит от брокера ответ "ДА, ПОЗИЦИЯ ТОЧНО ЗАКРЫТА, расслабься))". Про trade.ResultRetcode() знаю и про TRADE_RETCODE_DONE тоже, но не хочется изобретать велосипед, есть у кого готовое решение?
OrderClose из MT4Orders вернет true c той же логикой, как и в MT4 - когда позиция будет закрыта.
OrderClose из MT4Orders вернет true c той же логикой, как и в MT4 - когда позиция будет закрыта.
думаю, как в прошлый раз появятся адепты МТ5 с критикой Вашей библиотеки, все бы ничего... но как пользоваться ордерной системой МТ5 мало кто знает ))))
думаю, как в прошлый раз появятся адепты МТ5 с критикой Вашей библиотеки, все бы ничего... но как пользоваться ордерной системой МТ5 мало кто знает ))))
Странно, что от разработчиков mql5 нет готового решения. А order, deal и position вообще мозг разрывают. Position это то, что открыто, а если уже закрыто, это что? HistoryOrdersTotal что возвращает если, по логике, один ордер открывает позицию, а другой закрывает, т.е. по два на позицию... при этом, тикет открывающего ордера (иногда, может быть, наверное) равет id позиции, а какой тогда тикет у закрывающего????
Evgeny Dyuka: Странно, что от разработчиков mql5 нет готового решения. А order, deal и position вообще мозг разрывают. Position это то, что открыто, а если уже закрыто, это что? HistoryOrdersTotal что возвращает если, по логике, один ордер открывает позицию, а другой закрывает, т.е. по два на позицию... при этом, тикет открывающего ордера (иногда, может быть, наверное) равет id позиции, а какой тогда тикет у закрывающего????
Ордер - это приказ, отданный вами на сервер на исполнение того, или иного действия. Он может быть исполнен, может быть исполнен частично (неполным объёмом), и может быть отклонён.
Сделка - это результат исполнения ордера (вашего приказа на исполнение того, или иного действия)
Позиция - результат исполнения сделки на вход в рынок.
Закрытая позиция (это когда нет позиции, и говорить о ней как о чём-то осязаемом - бесполезно - нет её) - результат исполнения сделки на выход из рынка.
Сделка на выход из рынка получается при исполнении ордера - вашего приказа на закрытие позиции.
Отправляете приказ на сервер открыть позицию на покупку - ордер с типом ORDER_TYPE_BUY
Если ордер принят сервером и полностью исполнен, то образуется сделка - сделка на вход в рынок с типом DEAL_ENTRY_IN
В результате вы имеете позицию с типом POSITION_TYPE_BUY
Отправляете приказ на сервер закрыть позицию на покупку - ордер с типом ORDER_TYPE_SELL с таким же объёмом, как у закрываемой позиции
Если ордер принят сервером и полностью исполнен, то образуется сделка - сделка на выход из рынка с типом DEAL_ENTRY_OUT
В результате вы не имеете позиции с типом POSITION_TYPE_BUY - она полностью закрыта, и её историю можно посмотреть в журнале терминала History - там есть все ордера и сделки этой и других позиций
Это если вкратце - для начального понимания. А дальше - сами - всё есть на форуме и в статьях. Было бы желание.
Ордер - это приказ, отданный вами на сервер на исполнение того, или иного действия. Он может быть исполнен, может быть исполнен частично (неполным объёмом), и может быть отклонён.
Сделка - это результат исполнения ордера (вашего приказа на исполнение того, или иного действия)
Позиция - результат исполнения сделки на вход в рынок.
Закрытая позиция (это когда нет позиции, и говорить о ней как о чём-то осязаемом - бесполезно - нет её) - результат исполнения сделки на выход из рынка.
Сделка на выход из рынка получается при исполнении ордера - вашего приказа на закрытие позиции.
Отправляете приказ на сервер открыть позицию на покупку - ордер с типом ORDER_TYPE_BUY
Если ордер принят сервером и полностью исполнен, то образуется сделка - сделка на вход в рынок с типом DEAL_ENTRY_IN
В результате вы имеете позицию с типом POSITION_TYPE_BUY
Отправляете приказ на сервер закрыть позицию на покупку - ордер с типом ORDER_TYPE_SELL с таким же объёмом, как у закрываемой позиции
Если ордер принят сервером и полностью исполнен, то образуется сделка - сделка на выход из рынка с типом DEAL_ENTRY_OUT
В результате вы не имеете позиции с типом POSITION_TYPE_BUY - она полностью закрыта, и её историю можно посмотреть в журнале терминала History - там есть все ордера и сделки этой и других позиций
Это если вкратце - для начального понимания. А дальше - сами - всё есть на форуме и в статьях. Было бы желание.
Ордер - это приказ, отданный вами на сервер на исполнение того, или иного действия. Он может быть исполнен, может быть исполнен частично (неполным объёмом), и может быть отклонён.
Сделка - это результат исполнения ордера (вашего приказа на исполнение того, или иного действия)
Позиция - результат исполнения сделки на вход в рынок.
Закрытая позиция (это когда нет позиции, и говорить о ней как о чём-то осязаемом - бесполезно - нет её) - результат исполнения сделки на выход из рынка.
Сделка на выход из рынка получается при исполнении ордера - вашего приказа на закрытие позиции.
Отправляете приказ на сервер открыть позицию на покупку - ордер с типом ORDER_TYPE_BUY
Если ордер принят сервером и полностью исполнен, то образуется сделка - сделка на вход в рынок с типом DEAL_ENTRY_IN
В результате вы имеете позицию с типом POSITION_TYPE_BUY
Отправляете приказ на сервер закрыть позицию на покупку - ордер с типом ORDER_TYPE_SELL с таким же объёмом, как у закрываемой позиции
Если ордер принят сервером и полностью исполнен, то образуется сделка - сделка на выход из рынка с типом DEAL_ENTRY_OUT
В результате вы не имеете позиции с типом POSITION_TYPE_BUY - она полностью закрыта, и её историю можно посмотреть в журнале терминала History - там есть все ордера и сделки этой и других позиций
Это если вкратце - для начального понимания. А дальше - сами - всё есть на форуме и в статьях. Было бы желание.
Вы пишите "Закрытая позиция (это когда нет позиции, и говорить о ней как о чём-то осязаемом - бесполезно - нет её) - результат исполнения сделки на выход из рынка". Получается что в истории нет такой единой сущности, а есть набор событий - ордер->сделка (открытие), ордер->сделка (закрытие) и у этого всего нет единого названия. Я просто не могу решить банальную задачу - надо обратиться к этой последней сущности (по тикиту наверно) и собрать о ней информацию - время открытия/закрытия, объем и т.д. Предположим, что это нечно открывалось одним ордером и закрывалось тоже одним. Получается надо из HistoryOrderTotal брать последние два и из них стороить какой то анализ? А вдруг у них тикеты разные... Как такое обращение к истории решено на практике?
Evgeny Dyuka: Вы пишите "Закрытая позиция (это когда нет позиции, и говорить о ней как о чём-то осязаемом - бесполезно - нет её) - результат исполнения сделки на выход из рынка". Получается что в истории нет такой единой сущности, а есть набор событий - ордер->сделка (открытие), ордер->сделка (закрытие) и у этого всего нет единого названия. Я просто не могу решить банальную задачу - надо обратиться к этой последней сущности (по тикиту наверно) и собрать о ней информацию - время открытия/закрытия, объем и т.д. Предположим, что это нечно открывалось одним ордером и закрывалось тоже одним. Получается надо из HistoryOrderTotal брать последние два и из них стороить какой то анализ? А вдруг у них тикеты разные... Как такое обращение к истории решено на практике?
Попробуйте разобраться со структурой MqlTradeTransaction. Получив из истории последний ордер или сделку можно собрать в массив все ордера и/или сделки которые участвовали в формировании позиции. Таким образом из этих сделок можно собрать всю информацию о позиции.
Например, при отсылке рыночного ордера на покупку он обрабатывается, для счета создается соответствующий ордер на покупку, происходит исполнение ордера, его удаление из списка открытых, добавление в историю ордеров, далее добавляется соответствующая сделка в историю и создается новая позиция. Все эти действия являются торговыми транзакциями...
Evgeny Dyuka: Вы пишите "Закрытая позиция (это когда нет позиции, и говорить о ней как о чём-то осязаемом - бесполезно - нет её) - результат исполнения сделки на выход из рынка". Получается что в истории нет такой единой сущности, а есть набор событий - ордер->сделка (открытие), ордер->сделка (закрытие) и у этого всего нет единого названия. Я просто не могу решить банальную задачу - надо обратиться к этой последней сущности (по тикиту наверно) и собрать о ней информацию - время открытия/закрытия, объем и т.д. Предположим, что это нечно открывалось одним ордером и закрывалось тоже одним. Получается надо из HistoryOrderTotal брать последние два и из них стороить какой то анализ? А вдруг у них тикеты разные... Как такое обращение к истории решено на практике?
Идентификатор позиции всегда равен тикету самого первого её ордера - приказа на открытие этой позиции, и за время её существования он (идентификатор) никогда не меняется (в отличии от тикетов). Поэтому, чтобы найти все ордера и сделки конкретной позиции, ищите их по идентификатору позиции - они все точно будут принадлежать искомой позиции.
У ордера это ORDER_POSITION_ID, у сделки это DEAL_POSITION_ID, ну и у позиции это POSITION_IDENTIFIER
Всем привет! Впрос по MQL5.
Как правильно закрыть ордер, не нашел нормального примера. Просто закрывать умею, классом CTrade пользуюсь, но есть ли нормальное готовое решение?
Цель не просто отправить команду на закрытие, а иметь фукцию которая возвращает true только после того как получит от брокера ответ "ДА, ПОЗИЦИЯ ТОЧНО ЗАКРЫТА, расслабься))".
Про trade.ResultRetcode() знаю и про TRADE_RETCODE_DONE тоже, но не хочется изобретать велосипед, есть у кого готовое решение?
OrderClose из MT4Orders вернет true c той же логикой, как и в MT4 - когда позиция будет закрыта.
OrderClose из MT4Orders вернет true c той же логикой, как и в MT4 - когда позиция будет закрыта.
думаю, как в прошлый раз появятся адепты МТ5 с критикой Вашей библиотеки, все бы ничего... но как пользоваться ордерной системой МТ5 мало кто знает ))))
OrderClose из MT4Orders вернет true c той же логикой, как и в MT4 - когда позиция будет закрыта.
думаю, как в прошлый раз появятся адепты МТ5 с критикой Вашей библиотеки, все бы ничего... но как пользоваться ордерной системой МТ5 мало кто знает ))))
Странно, что от разработчиков mql5 нет готового решения. А order, deal и position вообще мозг разрывают. Position это то, что открыто, а если уже закрыто, это что? HistoryOrdersTotal что возвращает если, по логике, один ордер открывает позицию, а другой закрывает, т.е. по два на позицию... при этом, тикет открывающего ордера (иногда, может быть, наверное) равет id позиции, а какой тогда тикет у закрывающего????
Странно, что от разработчиков mql5 нет готового решения.
Есть.
Я просто не могу решить банальную задачу - надо обратиться к этой последней сущности (по тикиту наверно) и собрать о ней информацию - время открытия/закрытия, объем и т.д. Предположим, что это нечно открывалось одним ордером и закрывалось тоже одним. Получается надо из HistoryOrderTotal брать последние два и из них стороить какой то анализ? А вдруг у них тикеты разные...
Как такое обращение к истории решено на практике?
Вы пишите "Закрытая позиция (это когда нет позиции, и говорить о ней как о чём-то осязаемом - бесполезно - нет её) - результат исполнения сделки на выход из рынка". Получается что в истории нет такой единой сущности, а есть набор событий - ордер->сделка (открытие), ордер->сделка (закрытие) и у этого всего нет единого названия.
Я просто не могу решить банальную задачу - надо обратиться к этой последней сущности (по тикиту наверно) и собрать о ней информацию - время открытия/закрытия, объем и т.д. Предположим, что это нечно открывалось одним ордером и закрывалось тоже одним. Получается надо из HistoryOrderTotal брать последние два и из них стороить какой то анализ? А вдруг у них тикеты разные...
Как такое обращение к истории решено на практике?
Попробуйте разобраться со структурой MqlTradeTransaction. Получив из истории последний ордер или сделку можно собрать в массив все ордера и/или сделки которые участвовали в формировании позиции. Таким образом из этих сделок можно собрать всю информацию о позиции.
Вы пишите "Закрытая позиция (это когда нет позиции, и говорить о ней как о чём-то осязаемом - бесполезно - нет её) - результат исполнения сделки на выход из рынка". Получается что в истории нет такой единой сущности, а есть набор событий - ордер->сделка (открытие), ордер->сделка (закрытие) и у этого всего нет единого названия.
Я просто не могу решить банальную задачу - надо обратиться к этой последней сущности (по тикиту наверно) и собрать о ней информацию - время открытия/закрытия, объем и т.д. Предположим, что это нечно открывалось одним ордером и закрывалось тоже одним. Получается надо из HistoryOrderTotal брать последние два и из них стороить какой то анализ? А вдруг у них тикеты разные...
Как такое обращение к истории решено на практике?
Идентификатор позиции всегда равен тикету самого первого её ордера - приказа на открытие этой позиции, и за время её существования он (идентификатор) никогда не меняется (в отличии от тикетов). Поэтому, чтобы найти все ордера и сделки конкретной позиции, ищите их по идентификатору позиции - они все точно будут принадлежать искомой позиции.
У ордера это ORDER_POSITION_ID, у сделки это DEAL_POSITION_ID, ну и у позиции это POSITION_IDENTIFIER