Funkcje transakcji:   OrderMagicNumber()

Funkcja int OrderMagicNumber() zwraca unikalny identyfikator pozycji lub zlecenia. Jeśli identyfikator nie został nadany, funkcja zwróci 0. Więcej informacji można znaleźć w specyfikacji MQL4.


Przykład 1

#property strict
void OnStart()
  {
   int Ticket = 125064149; // unikalny numer (ticket) pozycji

//--- przeszukać listę otwartych pozycji/oczekujących zleceń
//--- oraz historię zamkniętych pozycji/usuniętych zleceń
//--- i wybrać do dalszego przetwarzania
   if(OrderSelect(Ticket, SELECT_BY_TICKET) == true)
     {
      //--- zmiennej CurrentMagic przypisać wartość identyfikatora (magic number)
      int CurrentMagic = OrderMagicNumber();
      //--- wyświetlić dane
      Print("Unikalny identyfikator pozycji ",Ticket," równa się ",CurrentMagic,".");
     }
   else
      Print("Nie udało się wybrać pozycję ",Ticket,". Błąd = ",GetLastError());
  }

Rys. 1. Przykład stosowania funkcji OrderMagicNumber().


Unikalny identyfikator (magic number) może być nadany za pomocą funkcji OrderSend() . Funkcja OrderModify() pozwala na modyfikację magic number. W ten sposób wielu pozycjom i zleceniom można nadać jednakowy unikalny identyfikator. Na przykład, jeśli na koncie uruchomiono kilka automatycznych strategii handlowych, to każda z nich swoim pozycjom może nadawać jednakowy identyfikator, za pomocą którego później każda ze strategii będzie mogła odróźnić swoje pozycje od pozostałych.


Przykład 2

Przykład skryptu, który wyświetli unikalne numery (ticket-y) wszystkich otwartych pozycji i oczekujących zleceń z określonym identyfikatorem (magic number).

#property strict
void OnStart()
  {
   int CurrentMagic = 555;      // unikalny identyfikator (magic number) pozycji

   for(int i = OrdersTotal()-1; i >= 0; i--)
      //--- wybrać pozycję/zlecenie z indeksem "i"
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
        {
         //--- wybrać otwartą pozycję lub oczekujące zlecenie z identyfikatorem (magic number) = 555
         if(OrderMagicNumber() == CurrentMagic)
            Print("Pozycja/zlecenie z ticketem ",OrderTicket()," ma magic number ",CurrentMagic);
         else
            Print("Nie udało się wybrać pozycję ",OrderTicket(),". Błąd = ",GetLastError());
        }
  }

Przykład 3

Przykład skryptu na zamknięcie wszystkich otwartych pozycji z unikalnym identyfikatorem (magic number) = 555.

#property strict
void OnStart()
  {
//--- dane do zamknięcia określonych pozycji/zleceń
   int MagicToClose = 555;  // unikalny identyfikator (magic number)

   for(int i = OrdersTotal()-1; i >= 0; i--)
      //--- wybrać pozycję/zlecenie z indeksem "i"
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
         //--- sprawdzić identyfikator (magic number)
         if(OrderMagicNumber() == MagicToClose)
           {
            //--- odświeżyć notowania
            RefreshRates();
            //--- zamknąć wybraną pozycję/zlecenie
            if(OrderClose(OrderTicket(), OrderLots(), Ask, 50) == false)
               Print("Nie udało się zamknąć pozycję ",OrderTicket(),". Błąd nr = ",GetLastError());
           }
  }