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.
#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 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 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()); } }