У меня аналогичный вопрос ко всем и , в первую очередь, к fxsaber. На первый взгляд, вопрос примитивный, но никак не могу найти на него ответ. Вот здесь https://www.mql5.com/ru/forum/6343/page939 мне сказали "Попробуй поискать, fxsaber когда-то бился над этой проблемой. Что получилось я не знаю, не интересовался." поэтому решил спросить Вас.
Вопрос такой. Открываю позицию и хочу вывести на печать содержание MqlTradeResult вот так:
retcode, order и volume выводятся, а deal и price всегда нули. Подскажите, пожалуйста, что делаю не так и как получить доступ (для начала хотя бы вывести через Print) к содержимому структуры result?
Может так?
//+------------------------------------------------------------------+MqlTradeRequest request={0};
MqlTradeResult result={0};
//---
request.action = TRADE_ACTION_DEAL; // type of trade operation
request.symbol = Pair1; // symbol
request.volume = lots; // volume of lot
request.type = oper; // order type
request.price = priceOpen; // price for opening
request.deviation= Slippage; // allowed deviation from the price
request.magic = magic;
//---if(OrderSend(request,result))
{
Print ("retcode = " +IntegerToString (result.retcode) + "; ");
Print ("deal = " +IntegerToString (result.deal) + "; ");
Print ("order = " +IntegerToString (result.order) + "; ");
Print ("volume = " +DoubleToString (result.volume) + "; ");
Print ("price = " +DoubleToString (result.price) + "; ");
}
else
{
// Здесь действия при ошибке открытия
}
//+------------------------------------------------------------------+
Открываю позицию и хочу вывести на печать содержание MqlTradeResult вот так:
retcode, order и volume выводятся, а deal и price всегда нули. Подскажите, пожалуйста, что делаю не так и как получить доступ (для начала хотя бы вывести через Print) к содержимому структуры result?
Ну тогда совсем непонятно - я думал делаю что-то не так, а если там нули, то в чем смысл result? Я вижу открытый ордер, получаю result.retcode 10009, а result.price = 0 ? Объясните, пожалуйста, в чем смысл result, если он не содержит результат?
Это особенность MT5, когда результат - только ордер (тикет и без цены), но не сделка. У Вас есть несколько путей
Разобраться самостоятельно, как все устроено.
Использовать уже готовые более высокоуровневые (низкий уровень скрыт) наработки, где почти все подводные камни обойдены.
Спасибо.
В MQL4 не было структуры result и мы, получив ticket, выбирали соответствующий ордер и запрашивали необходимые данные. В MQL5 есть структура result, в которой присутствуют многие необходимые данные, и было бы нелогично этим не воспользоваться.
1. Прежде чем задавать вопрос на форуме, я пытался "Разобраться самостоятельно, как все устроено." и что я вижу - в структуре result:
structMqlTradeResult
{
uint retcode; // Operation return codeulong deal; // Deal ticket, if it is performedulong order; // Order ticket, if it is placeddouble volume; // Deal volume, confirmed by brokerdouble price; // Deal price, confirmed by brokerdouble bid; // Current Bid pricedouble ask; // Current Ask pricestring comment; // Broker comment to operation (by default it is filled by description of trade server return code)uint request_id; // Request ID set by the terminal during the dispatchuint retcode_external; // Return code of an external trading system
};
присутствует double price; // Deal price, confirmed by broker.
В примере кода от разработчика
//--- send the requestif(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // if unable to send the request, output the error code//--- information about the operationPrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
выводится result.deal, т.е. предполагается, что это имеет смысл и он не всегда представлен нулём в структуре result. Можно привести и другие примеры, которые указывают на то, что result.price, как и result.deal можно получить из MqlTradeResul, что я и пытался сделать.
Нигде не видел информации, что "Это особенность MT5, когда результат - только ордер (тикет и без цены), но не сделка". Будьте добры, скажите, на основании какой информации Вы пришли к такому выводу.
2. Если Вам известны какие-то "уже готовые более высокоуровневые (низкий уровень скрыт) наработки,", которые позволяют получить параметры позиции сразу после её открытия (появления кода 10009), без предварительного выбора по ticket, пожалуйста, приведите пример или дайте на него ссылку.
В MQL4 не было структуры result и мы, получив ticket, выбирали соответствующий ордер и запрашивали необходимые данные. В MQL5 есть структура result, в которой присутствуют многие необходимые данные, и было бы нелогично этим не воспользоваться.
1. Прежде чем задавать вопрос на форуме, я пытался "Разобраться самостоятельно, как все устроено." и что я вижу - в структуре result:
присутствует double price; // Deal price, confirmed by broker.
В примере кода от разработчика
выводится result.deal, т.е. предполагается, что это имеет смысл и он не свегда представлен нулём в структуре result. Можно привести и другие примеры, которые указывают на то, что result.price, как и result.deal можно получить из MqlTradeResul, что я и пытался сделать.
Нигде не видел информации, что "Это особенность MT5, когда результат - только ордер (тикет и без цены), но не сделка". Будьте добры, скажите, на основании какой информации Вы пришли к такому выводу.
2. Если Вам известны какие-то "уже готовые более высокоуровневые (низкий уровень скрыт) наработки,", которые позволяют получить параметры позиции сразу после её открытия (появления кода 10009), без предварительного выбора по ticket, пожалуйта, приведите пример или дайте на него ссылку.
В результате торгового запроса имеется либо отказ, либо маркет-оредр. Это не сделка, и не позиция, порождённая сделкой.
Отсылается на сервер торговый приказ на открытие позиции (приказ = ордер)
Если ордер принят, возвращается результат принятия ордера и постановки его в очередь.
Если ордер был исполнен, появляется сделка - результат исполнения ордера.
Результатом сделки будет либо новая позиция, либо увеличение/уменьшение объёма существующей позиции, либо закрытие позиции, либо переворот. Либо новая позиция (при хеджинг-счёте)
В результате торгового запроса имеется либо отказ, либо маркет-оредр. Это не сделка, и не позиция, порождённая сделкой.
Отсылается на сервер торговый приказ на открытие позиции (приказ = ордер)
Если ордер принят, возвращается результат принятия ордера и постановки его в очередь.
Если ордер был исполнен, появляется сделка - результат исполнения ордера.
Результатом сделки будет либо новая позиция, либо увеличение/уменьшение объёма существующей позиции, либо закрытие позиции, либо переворот. Либо новая позиция (при хеджинг-счёте)
Спасибо - скажите, пожалуйста: - как Вы думаете, после какого шага, из перечисленных Вами, появляется Структура результата торгового запроса (MqlTradeResult)?
- Согласно описанию MQL5: "Структура результата торгового запроса (MqlTradeResult) В ответ на торговый запрос постановки ордера в торговую систему, торговый сервер возвращает данные, содержащие информацию о результате обработки торгового запроса в виде специальной предопределенной структуры MqlTradeResult." , а "10009 TRADE_RETCODE_DONE Заявка выполнена"
Т.о. код возврата торгового сервера 10009 означает, что запрос OrderSend был успешно выполнен т.е., если я запрашиваю данные из MqlTradeResult, после получения кода 10009, то как объяснить, что result.price = 0 ?
Algotrader18: Спасибо - скажите, пожалуйста: - после какого шага, из перечисленных Вами, появляется Структура результата торгового запроса (MqlTradeResult)?
- Согласно описанию MQL5: "Структура результата торгового запроса (MqlTradeResult) В ответ на торговый запрос постановки ордера в торговую систему, торговый сервер возвращает данные, содержащие информацию о результате обработки торгового запроса в виде специальной предопределенной структуры MqlTradeResult." , а "10009 TRADE_RETCODE_DONE Заявка выполнена"
Т.о. код возврата торгового сервера 10009 означает, что запрос OrderSend был успешно выполнен т.е., если я запрашиваю данные из MqlTradeResult, после получения кода 10009, то как объяснить, что result.price = 0 ?
10009 TRADE_RETCODE_DONE - вы же сами и описали - заявка выполнена. Это просто факт успешной постановки ордера на сервер в очередь на исполнение.
Далее, если данная заявка будет исполнена (ведь она может быть и отклонена сервером), то появляется сделка - вот в результате сделки появится позиция с ценой открытия.
При обрабокте транзакций типа TRADE_TRANSACTION_REQUEST для получения дополнительной информации необходимо анализировать второй и третий параметры функции OnTradeTransaction() – Отправка торгового запроса на покупку приводит к цепи торговых транзакций, которые совершаются на торговом счете: 1) запрос принимается на обработку, 2) далее для...
Нигде не видел информации, что "Это особенность MT5, когда результат - только ордер (тикет и без цены), но не сделка". Будьте добры, скажите, на основании какой информации Вы пришли к такому выводу.
Собственный опыт.
2. Если Вам известны какие-то "уже готовые более высокоуровневые (низкий уровень скрыт) наработки,", которые позволяют получить параметры позиции сразу после её открытия (появления кода 10009), без предварительного выбора по ticket, пожалуйста, приведите пример или дайте на него ссылку.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Добрый день!
У меня аналогичный вопрос ко всем и , в первую очередь, к fxsaber.
На первый взгляд, вопрос примитивный, но никак не могу найти на него ответ.
Вот здесь https://www.mql5.com/ru/forum/6343/page939 мне сказали "Попробуй поискать, fxsaber когда-то бился над этой проблемой. Что получилось я не знаю, не интересовался." поэтому решил спросить Вас.
Вопрос такой. Открываю позицию и хочу вывести на печать содержание MqlTradeResult вот так:
retcode, order и volume выводятся, а deal и price всегда нули.
Подскажите, пожалуйста, что делаю не так и как получить доступ (для начала хотя бы вывести через Print) к содержимому структуры result?
Может так?
Открываю позицию и хочу вывести на печать содержание MqlTradeResult вот так:
retcode, order и volume выводятся, а deal и price всегда нули.
Подскажите, пожалуйста, что делаю не так и как получить доступ (для начала хотя бы вывести через Print) к содержимому структуры result?
Нули и прописаны в result.
Может так?
Нули и прописаны в result.
Я вижу открытый ордер, получаю result.retcode 10009, а result.price = 0 ?
Объясните, пожалуйста, в чем смысл result, если он не содержит результат?
Объясните, пожалуйста, в чем смысл result, если он не содержит результат?
Это особенность MT5, когда результат - только ордер (тикет и без цены), но не сделка. У Вас есть несколько путей
Это особенность MT5, когда результат - только ордер (тикет и без цены), но не сделка. У Вас есть несколько путей
В MQL4 не было структуры result и мы, получив ticket, выбирали соответствующий ордер и запрашивали необходимые данные. В MQL5 есть структура result, в которой присутствуют многие необходимые данные, и было бы нелогично этим не воспользоваться.
1. Прежде чем задавать вопрос на форуме, я пытался "Разобраться самостоятельно, как все устроено." и что я вижу - в структуре result:
выводится result.deal, т.е. предполагается, что это имеет смысл и он не всегда представлен нулём в структуре result. Можно привести и другие примеры, которые указывают на то, что result.price, как и result.deal можно получить из MqlTradeResul, что я и пытался сделать.присутствует double price; // Deal price, confirmed by broker.
В примере кода от разработчика
Нигде не видел информации, что "Это особенность MT5, когда результат - только ордер (тикет и без цены), но не сделка". Будьте добры, скажите, на основании какой информации Вы пришли к такому выводу.
2. Если Вам известны какие-то "уже готовые более высокоуровневые (низкий уровень скрыт) наработки,", которые позволяют получить параметры позиции сразу после её открытия (появления кода 10009), без предварительного выбора по ticket, пожалуйста, приведите пример или дайте на него ссылку.
Спасибо.
В MQL4 не было структуры result и мы, получив ticket, выбирали соответствующий ордер и запрашивали необходимые данные. В MQL5 есть структура result, в которой присутствуют многие необходимые данные, и было бы нелогично этим не воспользоваться.
1. Прежде чем задавать вопрос на форуме, я пытался "Разобраться самостоятельно, как все устроено." и что я вижу - в структуре result:
выводится result.deal, т.е. предполагается, что это имеет смысл и он не свегда представлен нулём в структуре result. Можно привести и другие примеры, которые указывают на то, что result.price, как и result.deal можно получить из MqlTradeResul, что я и пытался сделать.присутствует double price; // Deal price, confirmed by broker.
В примере кода от разработчика
Нигде не видел информации, что "Это особенность MT5, когда результат - только ордер (тикет и без цены), но не сделка". Будьте добры, скажите, на основании какой информации Вы пришли к такому выводу.
2. Если Вам известны какие-то "уже готовые более высокоуровневые (низкий уровень скрыт) наработки,", которые позволяют получить параметры позиции сразу после её открытия (появления кода 10009), без предварительного выбора по ticket, пожалуйта, приведите пример или дайте на него ссылку.
В результате торгового запроса имеется либо отказ, либо маркет-оредр. Это не сделка, и не позиция, порождённая сделкой.
В результате торгового запроса имеется либо отказ, либо маркет-оредр. Это не сделка, и не позиция, порождённая сделкой.
- как Вы думаете, после какого шага, из перечисленных Вами, появляется Структура результата торгового запроса (MqlTradeResult)?
- Согласно описанию MQL5:
"Структура результата торгового запроса (MqlTradeResult)
В ответ на торговый запрос постановки ордера в торговую систему, торговый сервер возвращает данные, содержащие информацию о результате обработки торгового запроса в виде специальной предопределенной структуры MqlTradeResult." , а "10009 TRADE_RETCODE_DONE Заявка выполнена"
Т.о. код возврата торгового сервера 10009 означает, что запрос OrderSend был успешно выполнен т.е., если я запрашиваю данные из MqlTradeResult, после получения кода 10009, то как объяснить, что result.price = 0 ?
Спасибо - скажите, пожалуйста:
- после какого шага, из перечисленных Вами, появляется Структура результата торгового запроса (MqlTradeResult)?
- Согласно описанию MQL5:
"Структура результата торгового запроса (MqlTradeResult)
В ответ на торговый запрос постановки ордера в торговую систему, торговый сервер возвращает данные, содержащие информацию о результате обработки торгового запроса в виде специальной предопределенной структуры MqlTradeResult." , а "10009 TRADE_RETCODE_DONE Заявка выполнена"
Т.о. код возврата торгового сервера 10009 означает, что запрос OrderSend был успешно выполнен т.е., если я запрашиваю данные из MqlTradeResult, после получения кода 10009, то как объяснить, что result.price = 0 ?
10009 TRADE_RETCODE_DONE - вы же сами и описали - заявка выполнена. Это просто факт успешной постановки ордера на сервер в очередь на исполнение.
Далее, если данная заявка будет исполнена (ведь она может быть и отклонена сервером), то появляется сделка - вот в результате сделки появится позиция с ценой открытия.
Почитайте об
OnTradeTransaction
Вызывается в экспертах при наступлении события TradeTransaction. Функция предназначена для обработки результатов выполнения торгового запроса.
void OnTradeTransaction()
const MqlTradeTransaction& trans, // структура торговой транзакции
const MqlTradeRequest& request, // структура запроса
const MqlTradeResult& result // структура ответа
);
Нигде не видел информации, что "Это особенность MT5, когда результат - только ордер (тикет и без цены), но не сделка". Будьте добры, скажите, на основании какой информации Вы пришли к такому выводу.
Собственный опыт.
2. Если Вам известны какие-то "уже готовые более высокоуровневые (низкий уровень скрыт) наработки,", которые позволяют получить параметры позиции сразу после её открытия (появления кода 10009), без предварительного выбора по ticket, пожалуйста, приведите пример или дайте на него ссылку.
Есть и другой вариант, но он "продвинутый".