Funkcja double / bool SymbolInfoDouble() zwraca odpowiednią właściwość wybranego instrumentu finansowego. Identyfikator właściwości może być jednym z wartości ENUM_SYMBOL_INFO_DOUBLE . Więcej informacji można znaleźć w specyfikacji MQL4.
Istnieje 2 warianty funkcji:
Skrypt do wyświetlenia bieżącej ceny rynkowej kupna SYMBOL_ASK, bieżącej ceny rynkowej sprzedaży SYMBOL_BID oraz wartości kroku wolumenu transakcji SYMBOL_VOLUME_STEP dla EURUSD.
#property strict
void OnStart()
{
//--- znaleźć wartości
double currentAsk_EURUSD = SymbolInfoDouble("EURUSD", SYMBOL_ASK);
double currentBid_EURUSD = SymbolInfoDouble("EURUSD", SYMBOL_BID);
double volumeStep_EURUSD = SymbolInfoDouble("EURUSD", SYMBOL_VOLUME_STEP);
//--- wyświetlić wyniki
Print("EURUSD: bieżąca cena Ask = ",currentAsk_EURUSD);
Print("EURUSD: bieżąca cena Bid = ",currentBid_EURUSD);
Print("EURUSD: krok wolumenu = ", volumeStep_EURUSD);
}
Rys. 1. Przykład stosowania funkcji SymbolInfoDouble().
W odróżnieniu od powyższego przykładu, znalezioną wartość funkcja przypisuje trzeciemu argumentowi i zwraca true jeśli operacja się powiodła lub false jeśli nie. Poniższy skrypt wyświetli bieżące ceny Ask dla wybranych instrumentów finansowych.
#property strict
void OnStart()
{
//---
double currentAsk_EURUSD;
double currentAsk_GOLD;
double currentAsk_NoSymbol;
//---
if(SymbolInfoDouble("EURUSD", SYMBOL_ASK, currentAsk_EURUSD) == true)
Print("EURUSD: bieżąca cena Ask = ",currentAsk_EURUSD);
else
Print("Nie udało się znaleźć Ask dla EURUSD. Błąd = ",GetLastError());
//---
if(SymbolInfoDouble("GOLD", SYMBOL_ASK, currentAsk_GOLD) == true)
Print("GOLD: bieżąca cena Ask = ",currentAsk_GOLD);
else
Print("Nie udało się znaleźć Ask dla GOLD. Błąd = ",GetLastError());
//---
if(SymbolInfoDouble("NoSymbol", SYMBOL_ASK, currentAsk_NoSymbol) == true)
Print("NoSymbol: bieżąca cena Ask = ",currentAsk_NoSymbol);
else
Print("Nie udało się znaleźć Ask dla NoSymbol. Błąd = ",GetLastError());
}
Rys. 2. Przykład stosowania funkcji SymbolInfoDouble().
Jeśli trzeba uzyskać dane ostatniego tick-u, to lepiej używać funkcję SymbolInfoTick() , ponieważ podczas jednego wywołania tej funkcji od razu można uzyskać wartości Ask, Bid, Last, Volume i Time ostatniego tick-u.