Скачать MetaTrader 5

Почему класс COrderInfo не позволяет выбирать ордер?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Скачай MetaTrader 5 для iPad и торгуй в любом месте!
Vasiliy Sokolov
21766
Vasiliy Sokolov 2010.07.30 18:00 

Класс COrderInfo является по сути простой обложкой для вызова функций работающих с ордерами.

Например читаем документацию для функции

OrderGetInteger

Возвращает запрошенное свойство ордера, предварительно выбранного при помощи функции OrderGetTicket или OrderSelect. Свойство ордера должно быть типа datetime, int. Существует 2 варианта функции.

1. Непосредственно возвращает значение свойства.

 

long  OrderGetInteger(
   ENUM_ORDER_PROPERTY  property_id        // идентификатор свойства
   );

2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром.

bool  OrderGetInteger(
   ENUM_ORDER_PROPERTY  property_id,      // идентификатор свойства
   long&                long_var          // сюда примем значение свойства
   );
...  

Это самая функция встроена в класс COrderInfo, вот ее реализация:

bool COrderInfo::InfoInteger(ENUM_ORDER_PROPERTY_INTEGER prop_id,long& var) const
  {
   return(OrderGetInteger(prop_id,var));
  }
Т.е. это простой интерфейс вызова штатной функции OrderGetInteger(). Спрашивается почему в классе COrderInfo нет метода Ticket(), устанавливающего и получающего нужный ордер с помощью OrderGetTicket() или OrderSelect? Хотя переменная хранящая тикет в классе имеется (m_ticket), но что в двойне странно, она инициализируется нулем и никогда не принимает другого значения. Зачем она тогда вообще нужна? В документации нет ни слова о том, что перед работой с классом COrderInfo, необходимо выбрать нужный ордер с помощью функции OrderSelect или OrderGetTicket. Не понимаю...
Vladimir Batrudinov
4926
Vladimir Batrudinov 2010.07.30 18:21  
C-4:

Класс COrderInfo является по сути простой обложкой для вызова функций работающих с ордерами.

Например читаем документацию для функции

Это самая функция встроена в класс COrderInfo, вот ее реализация:

Т.е. это простой интерфейс вызова штатной функции OrderGetInteger(). Спрашивается почему в классе COrderInfo нет метода Ticket(), устанавливающего и получающего нужный ордер с помощью OrderGetTicket() или OrderSelect? Хотя переменная хранящая тикет в классе имеется (m_ticket), но что в двойне странно, она инициализируется нулем и никогда не принимает другого значения. Зачем она тогда вообще нужна? В документации нет ни слова о том, что перед работой с классом COrderInfo, необходимо выбрать нужный ордер с помощью функции OrderSelect или OrderGetTicket. Не понимаю...

 

Тут есть два варианта (какой вам лучше нравится):

1. Базовый класс так сказать "не дописан" и в него будут вноситься изменения;

2. Подразумевается то, что все необходимое (но недостающее тут) будет добавлено программистами самостоятельно в потомках COrderInfo.

Vasiliy Sokolov
21766
Vasiliy Sokolov 2010.07.30 19:19  
Interesting:

Тут есть два варианта (какой вам лучше нравится):

1. Базовый класс так сказать "не дописан" и в него будут вноситься изменения;

2. Подразумевается то, что все необходимое (но недостающее тут) будет добавлено программистами самостоятельно в потомках COrderInfo.

Но в том же OrderHystoryInfo метод Ticket() определен. Совсем запутывает ситуацию то, что в документации к классу COrderInfo нет ни слова о том, что предварительно ордер должен выбираться с помощью OrderSelect() и OrderGetTicket(). Хотелось бы услышать комментарии разработчиков на эту тему.

З.Ы. Хотя сейчас уже пятница. Думаю официальные комментарии будут не ранее понедельника. 

Vladimir Batrudinov
4926
Vladimir Batrudinov 2010.07.30 19:22  

C-4:

З.Ы. Хотя сейчас уже пятница. Думаю официальные комментарии будут не ранее понедельника. 

По выходным сюда тоже заглядывают разработчики...
Валерий
1433
Валерий 2010.07.31 00:01  
C-4:

Класс COrderInfo является по сути простой обложкой для вызова функций работающих с ордерами.

Например читаем документацию для функции

Это самая функция встроена в класс COrderInfo, вот ее реализация:

Т.е. это простой интерфейс вызова штатной функции OrderGetInteger(). Спрашивается почему в классе COrderInfo нет метода Ticket(), устанавливающего и получающего нужный ордер с помощью OrderGetTicket() или OrderSelect? Хотя переменная хранящая тикет в классе имеется (m_ticket), но что в двойне странно, она инициализируется нулем и никогда не принимает другого значения. Зачем она тогда вообще нужна? В документации нет ни слова о том, что перед работой с классом COrderInfo, необходимо выбрать нужный ордер с помощью функции OrderSelect или OrderGetTicket. Не понимаю...

 

 

Для использования методов класса COrderInfo Вы должны сначала установить тиккет ордера, с которым собираетесь работать, с помощью метода void  Ticket(ulong ticket). После этого все методы класса работают именно с этим ордером, его не надо выбирать с помощью OrderSelect.
Простак
315
Простак 2010.07.31 00:54  
Valmars:
Для использования методов класса COrderInfo Вы должны сначала установить тиккет ордера, с которым собираетесь работать, с помощью метода void  Ticket(ulong ticket). После этого все методы класса работают именно с этим ордером, его не надо выбирать с помощью OrderSelect.

Не может быть!

По крайней мере для:

//+------------------------------------------------------------------+
//|                                                    OrderInfo.mqh |
//|                      Copyright © 2010, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//|                                              Revision 2010.05.14 |
//+------------------------------------------------------------------+

Там не метода Ticket(). По Ctrl-F не удаётся найти почему-то. Подозреваю, что именно потому и не удаётся, что метода нет на самом деле.

И первый же метод:

//+------------------------------------------------------------------+
//| Get the property value "ORDER_TIME_SETUP".                       |
//| INPUT:  no.                                                      |
//| OUTPUT: the property value "ORDER_TIME_SETUP".                   |
//| REMARK: no.                                                      |
//+------------------------------------------------------------------+
datetime COrderInfo::TimeSetup() const
  {
   return((datetime)OrderGetInteger(ORDER_TIME_SETUP));
  }

Является простой обёрткой для вызова функции OrderGetInteger(), про которую в справке сказано:

OrderGetInteger

Возвращает запрошенное свойство ордера, предварительно выбранного при помощи функции OrderGetTicket или OrderSelect.

Вот поэтому я и говорю, что то, что Вы написали, - не может быть.

Валерий
1433
Валерий 2010.07.31 01:07  
simpleton:

Не может быть!

По крайней мере для:

Там не метода Ticket(). По Ctrl-F не удаётся найти почему-то. Подозреваю, что именно потому и не удаётся, что метода нет на самом деле.

И первый же метод:

Является простой обёрткой для вызова функции OrderGetInteger(), про которую в справке сказано:

OrderGetInteger

Возвращает запрошенное свойство ордера, предварительно выбранного при помощи функции OrderGetTicket или OrderSelect.

Вот поэтому я и говорю, что то, что Вы написали, - не может быть.

Чёрт ! Действительно. Я вместо  OrderInfo.mqh открыл и смотрел HistoryOrderInfo.mqh, а там он есть.

Значит, надо ввести.

Валерий
1433
Валерий 2010.07.31 01:18  

В скрипте OrderInfoSample.mq5 применяется конструкция

long ticket;
OrderSelect(ticket=OrderGetTicket(m_curr_ord));
где m_curr_ord позиция ордера в списке ордеров
o_o
Модератор
23693
o_o 2010.07.31 01:24  

Вероятно разработчики подразумевают, что перед вызовом свойств объекта COrderInfo необходимо перед этим выбрать сам ордер.

"предварительно выбранного при помощи функции OrderGetTicket или OrderSelect. "

Валерий
1433
Валерий 2010.07.31 01:25  
sergeev:
никуда ничего вводить не надо. вы для начала ENUM_ORDER_PROPERTY полистайте.
Ну, там описываются свойства ордеров. А какое отношение это имеет к обсуждаемой проблеме ?
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
Валерий
1433
Валерий 2010.07.31 01:33  
sergeev:

Вероятно разработчики подразумевают, что перед вызовом свойств объекта COrderInfo необходимо перед этим выбрать сам ордер.

"предварительно выбранного при помощи функции OrderGetTicket или OrderSelect. "


Видимо, так. Думаю, это связано с тем, что список и свойства ордеров постоянно изменяется и чтобы иметь актуальную информацию, надо выбирать ордер непосредственно перед работой с ним.
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий