A seção 1.4 do artigo fornece os recursos da classe COrderInfo, que, a julgar pela descrição, foi projetada para trabalhar com pedidos pendentes ativos. Sugere-se fazer o seguinte:"Para usar essa classe para obter as propriedades das ordens pendentes, primeiro solicitamos o número total de ordens e as selecionamos por tíquete de ordem"
/Selecionar todos os pedidos históricos para o período de tempo especificadoif (HistorySelect(0,TimeCurrent())) // todos os pedidos
{
// obter o número total de pedidosint o_total = OrdersTotal();
}
Mas se a função HistorySelect() foi criada para consultaro "histórico de transações e ordens", ou seja, para consultar o histórico de ordens, por que usar essa função ao consultar o número total de ordens pendentes ativas?
Alguém pode me explicar? Aqui está um trecho de código da classe CDealInfo:
//+------------------------------------------------------------------+//|DealInfo.mqh//+------------------------------------------------------------------+#include <Object.mqh>#include "SymbolInfo.mqh"//+------------------------------------------------------------------+//| Classe CDealInfo.|//| Nomeação: Classe para acesso às informações do histórico do negócio.//| Deriva da classe CObject.|//+------------------------------------------------------------------+class CDealInfo : public CObject
{
...
public:
...
//--- métodos de acesso rápido às propriedades de posição da stringstringSymbol() const;
...
};
...
//+------------------------------------------------------------------+//| Obtenha o valor da propriedade "DEAL_SYMBOL."//| INPUT: não.|//| OUTPUT: o valor da propriedade "DEAL_SYMBOL". ||//|| OBSERVAÇÃO: não.|//+------------------------------------------------------------------+string CDealInfo::Symbol() const
{
return(HistoryDealGetString(m_ticket,DEAL_SYMBOL)); //retorno estúpido
}
...
//+------------------------------------------------------------------+//| Converte os parâmetros do negócio em texto.//| INPUT:str - string de recepção,|//| deal - ponteiro na instância da classe. ||//| OUTPUT: string formatada.|//|| OBSERVAÇÃO: não.|//+------------------------------------------------------------------+string CDealInfo::FormatDeal(string& str) const
{
string type,volume,price,date;
CSymbolInfo symbol;
//--- configuração
symbol.Name(Symbol());
int digits=symbol.Digits();
//--- formar a descrição da transaçãoswitch(Type())
{
...
}
//--- retornar o resultadoreturn(str);
}
...
//+------------------------------------------------------------------+
Aqui, a função CDealInfo::FormatDeal(string& str) contém essa linha:
symbol.Name(Symbol());
Por sua vez, a função Symbol() é definida na própria classe CDealInfo e entre as funções padrão do terminal do cliente. Qual função é passada como argumento para a função symbol.Name()? Por qual regra?
Alguém pode me explicar? Aqui está um trecho de código da classe CDealInfo:
Aqui, a função CDealInfo::FormatDeal(string& str) contém essa linha:
Por sua vez, a função Symbol() é definida na própria classe CDealInfo e entre as funções padrão do terminal do cliente. Qual função é passada como argumento para a função symbol.Name()? Por qual regra?
A mesma regra do escopo das variáveis funciona aqui. Se uma variável for declarada com um nome nos níveis global e local, dentro do escopo local o nome apontará para a variável local e, fora dele, para a global.
Acontece que, se uma função padrão for sobrecarregada dentro de uma classe, o corpo da sobrecarga será chamado na própria classe e o corpo da função padrão será chamado no nível global. O corpo da função sobrecarregada pode ser chamado em nível global por meio do ponteiro da classe.
A mesma regra funciona aqui como no escopo das variáveis. Se uma variável for declarada com o mesmo nome nos níveis global e local, então, dentro do escopo local, o nome apontará para a variável local e, fora dele, para a global.
Acontece que, se uma função padrão for sobrecarregada dentro de uma classe, o corpo da sobrecarga será chamado na própria classe e o corpo da função padrão será chamado no nível global. O corpo da função sobrecarregada pode ser chamado em nível global por meio do ponteiro da classe.
Também há linhas na classe COrderInfo
return(FormatType(str,Type())); ... FormatType(type,Type()) ... if(m_type==Type() && m_state==State() &&Mas a função Type() não está presente na classe.
A seção 1.4 do artigo fornece os recursos da classe COrderInfo, que, a julgar pela descrição, foi projetada para trabalhar com pedidos pendentes ativos. Sugere-se fazer o seguinte:"Para usar essa classe para obter as propriedades das ordens pendentes, primeiro solicitamos o número total de ordens e as selecionamos por tíquete de ordem"
Mas se a função HistorySelect() foi criada para consultaro "histórico de transações e ordens", ou seja, para consultar o histórico de ordens, por que usar essa função ao consultar o número total de ordens pendentes ativas?Na classe COrderInfo ...
Mas a função Type() está ausente na classe.
Alguém pode me explicar? Aqui está um trecho de código da classe CDealInfo:
Aqui, a função CDealInfo::FormatDeal(string& str) contém essa linha:
symbol.Name(Symbol());Por sua vez, a função Symbol() é definida na própria classe CDealInfo e entre as funções padrão do terminal do cliente. Qual função é passada como argumento para a função symbol.Name()? Por qual regra?Alguém pode me explicar? Aqui está um trecho de código da classe CDealInfo:
Aqui, a função CDealInfo::FormatDeal(string& str) contém essa linha:
Por sua vez, a função Symbol() é definida na própria classe CDealInfo e entre as funções padrão do terminal do cliente. Qual função é passada como argumento para a função symbol.Name()? Por qual regra?A mesma regra do escopo das variáveis funciona aqui. Se uma variável for declarada com um nome nos níveis global e local, dentro do escopo local o nome apontará para a variável local e, fora dele, para a global.
Acontece que, se uma função padrão for sobrecarregada dentro de uma classe, o corpo da sobrecarga será chamado na própria classe e o corpo da função padrão será chamado no nível global. O corpo da função sobrecarregada pode ser chamado em nível global por meio do ponteiro da classe.
A mesma regra funciona aqui como no escopo das variáveis. Se uma variável for declarada com o mesmo nome nos níveis global e local, então, dentro do escopo local, o nome apontará para a variável local e, fora dele, para a global.
Acontece que, se uma função padrão for sobrecarregada dentro de uma classe, o corpo da sobrecarga será chamado na própria classe e o corpo da função padrão será chamado no nível global. O corpo da função sobrecarregada pode ser chamado em nível global por meio do ponteiro da classe.