SymbolInfoDouble

Retorna a propriedade correspondente de um ativo especificado. Existem 2 variantes da função.

1. Imediatamente retorna o valor da propriedade.

double  SymbolInfoDouble(
   string                   name,       // ativo
   ENUM_SYMBOL_INFO_DOUBLE  prop_id     // identificador da propriedade
   );

2. Retorna true ou false dependendo se a função for executada com sucesso. Em caso de sucesso, o valor da propriedade é colocado em uma variável recipiente, passada por referênce atráves do último parâmetro.

bool  SymbolInfoDouble(
   string                   name,       // ativo
   ENUM_SYMBOL_INFO_DOUBLE  prop_id,    // identificador da propriedade
   double&                  double_var  // aqui nós assumimos o valor da propriedade
   );

Parâmetros

name

[in] Nome do ativo.

prop_id

[in] Identificador de um propriedade de ativo. O valor pode ser um dos valores da enumeração ENUM_SYMBOL_INFO_DOUBLE.

double_var

[out] Variável de tipo double recebendo o valor da propriedade solicitada.

Valor do Retorno

Valor de tipo double. Em caso de falha de execução, a informação sobre o erro pode ser obtida usando a função GetLastError():

  • 5040 — parâmetro de string inválido para especificar um nome de ativo,
  • 4301 — ativo desconhecido (instrumento financeiro),
  • 4302 — ativo não está selecionado no "Observador de Mercado" (não encontrado na lista de ativos disponíveis),
  • 4303 — identificador inválido de uma propriedade de ativo.

Observação

É recomendável usar SymbolInfoTick() se a função for usada para obter informações sobre o último tick. É bom possível que nenhuma cotação tenha aparecido ainda desde que o terminal se conectou a uma conta de negociação. Em tal situação, o valor solicitado será indefinido

Na maioria dos casos, é suficiente usar a função SymbolInfoTick() permitindo a um usuário receber os valores dos preços Compra, Venda, Último, Volume e a hora da chegada do último tick através de uma única chamada.

Exemplo:

void OnTick()
  {
//--- obtém spread a partir das propriedade do ativo
   bool spreadfloat=SymbolInfoInteger(Symbol(),SYMBOL_SPREAD_FLOAT);
   string comm=StringFormat("Spread %s = %I64d pontos\r\n",
                            spreadfloat?"flutuante":"fixo",
                            SymbolInfoInteger(Symbol(),SYMBOL_SPREAD));
//--- agora vamos calcular nós mesmos o spread
   double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
   double bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   double spread=ask-bid;
   int spread_points=(int)MathRound(spread/SymbolInfoDouble(Symbol(),SYMBOL_POINT));
   comm=comm+"Spread calculada = "+(string)spread_points+" pontos";
   Comment(comm);
  }