В разделе 1.4 статьи приводятся особенности класса COrderInfo, который, судя по описанию, предназначен для работы с действующими отложенными ордерами. При этом предлагается сделать следующее: "Для использования этого класса с целью получения свойств отложенных ордеров, сначала запросим общее количество ордеров и выберем их по тикету ордера"
//Выбрать все исторические ордера за указанный временной периодif (HistorySelect(0,TimeCurrent())) // все ордера
{
// получаем общее количество ордеровint o_total = OrdersTotal();
}
Но если функция HistorySelect() предназначена для запроса "историю сделок и ордеров", т.е. для запроса исторических ордеров, зачем использовать эту функцию при запросе общего количества действующих отложенных ордеров?
Может кто объяснит? Вот есть такой кусочек кода из класса CDealInfo:
//+------------------------------------------------------------------+//| DealInfo.mqh |//+------------------------------------------------------------------+#include <Object.mqh>#include "SymbolInfo.mqh"//+------------------------------------------------------------------+//| Class CDealInfo. |//| Appointment: Class for access to history deal info. |//| Derives from class CObject. |//+------------------------------------------------------------------+class CDealInfo : public CObject
{
...
public:
...
//--- fast access methods to the string position propertyesstringSymbol() const;
...
};
...
//+------------------------------------------------------------------+//| Get the property value "DEAL_SYMBOL". |//| INPUT: no. |//| OUTPUT: the property value "DEAL_SYMBOL". |//| REMARK: no. |//+------------------------------------------------------------------+string CDealInfo::Symbol() const
{
return(HistoryDealGetString(m_ticket,DEAL_SYMBOL)); //тупо return
}
...
//+------------------------------------------------------------------+//| Converts the deal parameters to text. |//| INPUT: str - receiving string, |//| deal - pointer at the class instance. |//| OUTPUT: formatted string. |//| REMARK: no. |//+------------------------------------------------------------------+string CDealInfo::FormatDeal(string& str) const
{
string type,volume,price,date;
CSymbolInfo symbol;
//--- set up
symbol.Name(Symbol());
int digits=symbol.Digits();
//--- form the description of the dealswitch(Type())
{
...
}
//--- return the resultreturn(str);
}
...
//+------------------------------------------------------------------+
Здесь функция CDealInfo::FormatDeal(string& str) содержит вот такую строчку:
symbol.Name(Symbol());
В свою очередь, функция Symbol() определена как в самом классе CDealInfo, так и среди стандартных функций клиентского терминала. Какая именно функция передаётся в качестве аргумента в функцию symbol.Name()? По какому правилу?
Может кто объяснит? Вот есть такой кусочек кода из класса CDealInfo:
Здесь функция CDealInfo::FormatDeal(string& str) содержит вот такую строчку:
В свою очередь, функция Symbol() определена как в самом классе CDealInfo, так и среди стандартных функций клиентского терминала. Какая именно функция передаётся в качестве аргумента в функцию symbol.Name()? По какому правилу?
Тут работает тоже правило что и с областью видимости переменных. Если под одним именем объявлена переменная на глобальном и локальном уровне, то внутри локальной области имя будет указывать на локальную переменную, а во вне на глобальную.
Получается если внутри класса перегружена стандартная функция, то в самом классе будет вызываться тело перегрузки а на глобальном уровне тело стандартной функции. Тело же перегруженной функции, на глобальном уровне можно вызвать через указатель класса.
Тут работает тоже правило что и с областью видимости переменных. Если под одним именем объявлена переменная на глобальном и локальном уровне, то внутри локальной области имя будет указывать на локальную переменную, а во вне на глобальную.
Получается если внутри класса перегружена стандартная функция, то в самом классе будет вызываться тело перегрузки а на глобальном уровне тело стандартной функции. Тело же перегруженной функции, на глобальном уровне можно вызвать через указатель класса.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
В классе COrderInfo также имеются строчки
return(FormatType(str,Type())); ... FormatType(type,Type()) ... if(m_type==Type() && m_state==State() &&Но функция Type() в классе отсутствует.
В разделе 1.4 статьи приводятся особенности класса COrderInfo, который, судя по описанию, предназначен для работы с действующими отложенными ордерами. При этом предлагается сделать следующее: "Для использования этого класса с целью получения свойств отложенных ордеров, сначала запросим общее количество ордеров и выберем их по тикету ордера"
Но если функция HistorySelect() предназначена для запроса "историю сделок и ордеров", т.е. для запроса исторических ордеров, зачем использовать эту функцию при запросе общего количества действующих отложенных ордеров?В классе COrderInfo ...
Но функция Type() в классе отсутствует.
Может кто объяснит? Вот есть такой кусочек кода из класса CDealInfo:
Здесь функция CDealInfo::FormatDeal(string& str) содержит вот такую строчку:
symbol.Name(Symbol());В свою очередь, функция Symbol() определена как в самом классе CDealInfo, так и среди стандартных функций клиентского терминала. Какая именно функция передаётся в качестве аргумента в функцию symbol.Name()? По какому правилу?Может кто объяснит? Вот есть такой кусочек кода из класса CDealInfo:
Здесь функция CDealInfo::FormatDeal(string& str) содержит вот такую строчку:
В свою очередь, функция Symbol() определена как в самом классе CDealInfo, так и среди стандартных функций клиентского терминала. Какая именно функция передаётся в качестве аргумента в функцию symbol.Name()? По какому правилу?Тут работает тоже правило что и с областью видимости переменных. Если под одним именем объявлена переменная на глобальном и локальном уровне, то внутри локальной области имя будет указывать на локальную переменную, а во вне на глобальную.
Получается если внутри класса перегружена стандартная функция, то в самом классе будет вызываться тело перегрузки а на глобальном уровне тело стандартной функции. Тело же перегруженной функции, на глобальном уровне можно вызвать через указатель класса.
Тут работает тоже правило что и с областью видимости переменных. Если под одним именем объявлена переменная на глобальном и локальном уровне, то внутри локальной области имя будет указывать на локальную переменную, а во вне на глобальную.
Получается если внутри класса перегружена стандартная функция, то в самом классе будет вызываться тело перегрузки а на глобальном уровне тело стандартной функции. Тело же перегруженной функции, на глобальном уровне можно вызвать через указатель класса.