Funkcje transakcji:   OrderSelect()

Funkcja bool OrderSelect() wybiera pozycję lub zlecenie do dalszego przetwarzania. Zwraca true jeśli operacja się powiodła lub false jeśli nie. Więcej informacji można znaleźć w specyfikacji MQL4.

OrderSelect(index, select, pool);
int index - indeks lub unikalny numer (ticket) pozycji/zlecenia w zależności od argumentu select.
int select - sposób wyboru. Może być jednym z następujących stałych:
SELECT_BY_POS        - do argumentu należy przekazać numer porządkowy pozycji/zlecenia z listy.
SELECT_BY_TICKET - do argumentu należy przekazać unikalny numer (ticket) pozycji/zlecenia.
int pool - źródło danych dla wyboru pozycji/zlecenia. Domyślna wartość = MODE_TRADES. Stosuje się kiedy argument select = SELECT_BY_POS. Może być jednym z następujących stałych:
MODE_TRADES              - wybrać otwartą pozycję lub oczekujące zlecenie.
SELECT_BY_TICKET - wybrać zamkniętą pozycję lub usunięte oczekujące zlecenie z historii rachunku.

int index - indeks lub unikalny numer (ticket) pozycji/zlecenia w zależności od argumentu select.

int select - sposób wyboru. Może być jednym z następujących stałych:

SELECT_BY_POS - do argumentu należy przekazać numer porządkowy pozycji/zlecenia z listy.

SELECT_BY_TICKET - do argumentu należy przekazać unikalny numer (ticket) pozycji/zlecenia.

int pool - źródło danych dla wyboru pozycji/zlecenia. Domyślna wartość = MODE_TRADES. Stosuje się kiedy argument select = SELECT_BY_POS. Może być jednym z następujących stałych:

MODE_TRADES - wybrać otwartą pozycję lub oczekujące zlecenie.

SELECT_BY_TICKET - wybrać zamkniętą pozycję lub usunięte oczekujące zlecenie z historii rachunku.


Przykład 1

#property strict
void OnStart()
  {
//---
   Print("Dane dla otwartych pozycji oraz oczekujących zleceń:");
   for(int i = OrdersTotal()-1; i >= 0; i--)
     {
      //--- wybrać otwartą pozycję oraz oczekujące zlecenie z indeksem "i"
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
         //--- wyświetlić dane
         OrderPrint();
      else
         Print("Nie udało się wybrać pozycję/zlecenie ",OrderTicket(),". Błąd = ",GetLastError());
     }

//---
   Print("Dane dla zamkniętych pozycji oraz usuniętych oczekujących zleceń:");
   for(int i = OrdersHistoryTotal()-1; i >= 0; i--)
     {
      //--- wybrać zamkniętą pozycję oraz usunięte oczekujące zlecenie z indeksem "i"
      //--- z historii rachunku
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == true)
         //--- wyświetlić dane
         OrderPrint();
      else
         Print("Nie udało się wybrać pozycję/zlecenie ",OrderTicket(),". Błąd = ",GetLastError());
     }
  }

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


W przypadku wyboru za pomocą unikalnego numeru SELECT_BY_TICKET, argument pool jest ignorowany i funkcja OrderSelect() będzie szukać żądanej pozycji/zlecenia zarówno wśród otwartych pozycji/oczekujących zleceń jak i w historii rachunku.

Aby określić z jakiej listy pochodzi pozycja/zlecenie, należy przeanalizować jej/jego czas zamknięcia za pomocą funkcji OrderCloseTime() . Jeśli czas zamknięcia jest równy 0, to znaczy że jest to albo otwarta pozycja albo oczekujące zlecenie. Aby odróżnić jedno od drugiego, należy przeanalizować typ za pomocą funkcji OrderType() .

Jeśli czas zamknięcia nie jest równy 0, to znaczy że jest to albo już zamknięta pozycja albo usunięte oczekujące zlecenie znajdujące się w historii zleceń. Odróżnić jedno od drugiego można także po analizie ich typów.