Dostęp do danych handlowych:   SymbolInfoDouble()

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:

  • zwrócenie wartości,
  • zwrócenie true lub false w zależności od wykonanej operacji.

Zwrócenie wartości


Przykład 1

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().


Zwrócenie true lub false w zależności od wykonanej operacji


Przykład 2

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.