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);
}
Função muito interessante.. obrigado por comparatilhar.
Excelente post…
Informação muito útil! Obrigado.
Ótimo post, muito educativo.
Post a ler com atenção, interessante função.
Importante atentar para esse dado