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.
#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.