3 дня мучаюсь. Не могу получить цену открытия, тупо потому что функция не дает.
все остальные данные про ордер выводит правильно.
дает 0.
в терминале, в истории, у каждого ордера написано "market" вместо цен.
в чем проблема?
Получите по ORDER_POSITION_ID ордера и сделки и из сделок получите цену открытия позиции. Это будет и ценой ордера.
3 дня мучаюсь. Не могу получить цену открытия, тупо потому что функция не дает.
все остальные данные про ордер выводит правильно.
дает 0.
в терминале, в истории, у каждого ордера написано "market" вместо цен.
в чем проблема?
У ордера "по рынку" цены может и не быть указано. В документации (https://www.mql5.com/ru/docs/constants/structures/mqltraderequest):
Market Execution
Торговый ордер на открытие позиции в режиме Market Execution (режим исполнения торговых приказов по рынку). Требуется указание 5 полей:
action
symbol
volume
type
type_filling
Можно также задать значения полей magic и comment.
- www.mql5.com
3 дня мучаюсь. Не могу получить цену открытия, тупо потому что функция не дает.
все остальные данные про ордер выводит правильно.
дает 0.
в терминале, в истории, у каждого ордера написано "market" вместо цен.
в чем проблема?
Проблема, скорее всего, заключается в том, что вы пытаетесь получить цену открытия для ордера типа "market", который не имеет конкретной цены открытия. Ордер типа "market" открывается по текущей рыночной цене в момент его открытия, поэтому у него нет точной цены открытия.
Если вы хотите получить цену, по которой был исполнен ордер типа "market", то вы можете воспользоваться функцией HistoryDealGetDouble() вместо HistoryOrderGetDouble(). Функция HistoryDealGetDouble() возвращает цену, по которой был исполнен сделка, которая соответствует открытию вашего ордера. Вот пример кода:
int history = HistoryOrdersTotal();
for(int i = 0; i < history; i++)
{
ticket = HistoryOrderGetTicket(i);
ulong id = HistoryOrderGetInteger(ticket, ORDER_POSITION_ID);
double volume = HistoryOrderGetDouble(id, ORDER_VOLUME_INITIAL);
int type = HistoryOrderGetInteger(id, ORDER_TYPE);
ulong deal_id = HistoryOrderGetInteger(id, ORDER_DEAL);
double price_open = HistoryDealGetDouble(deal_id, DEAL_PRICE);
Print(ticket," ", price_open, " ", id, " ", volume, " ", type);
}
Этот код выводит информацию об открытых ордерах, включая цену открытия, которая получается через функцию HistoryDealGetDouble(). Обратите внимание, что для этого вы должны сохранить идентификатор сделки, который можно получить с помощью функции HistoryOrderGetInteger(id, ORDER_DEAL).
Проблема, скорее всего, заключается в том, что вы пытаетесь получить цену открытия для ордера типа "market", который не имеет конкретной цены открытия. Ордер типа "market" открывается по текущей рыночной цене в момент его открытия, поэтому у него нет точной цены открытия.
Если вы хотите получить цену, по которой был исполнен ордер типа "market", то вы можете воспользоваться функцией HistoryDealGetDouble() вместо HistoryOrderGetDouble(). Функция HistoryDealGetDouble() возвращает цену, по которой был исполнен сделка, которая соответствует открытию вашего ордера. Вот пример кода:
int history = HistoryOrdersTotal();
for(int i = 0; i < history; i++)
{
ticket = HistoryOrderGetTicket(i);
ulong id = HistoryOrderGetInteger(ticket, ORDER_POSITION_ID);
double volume = HistoryOrderGetDouble(id, ORDER_VOLUME_INITIAL);
int type = HistoryOrderGetInteger(id, ORDER_TYPE);
ulong deal_id = HistoryOrderGetInteger(id, ORDER_DEAL);
double price_open = HistoryDealGetDouble(deal_id, DEAL_PRICE);
Print(ticket," ", price_open, " ", id, " ", volume, " ", type);
}
Этот код выводит информацию об открытых ордерах, включая цену открытия, которая получается через функцию HistoryDealGetDouble(). Обратите внимание, что для этого вы должны сохранить идентификатор сделки, который можно получить с помощью функции HistoryOrderGetInteger(id, ORDER_DEAL).
А где вы нашли это ORDER_DEAL
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
3 дня мучаюсь. Не могу получить цену открытия, тупо потому что функция не дает.
все остальные данные про ордер выводит правильно.
дает 0.
в терминале, в истории, у каждого ордера написано "market" вместо цен.
в чем проблема?