OrderSelect nie rozumie

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
fxBobi
Gaduła
Gaduła
Posty: 244
Rejestracja: 20 sie 2008, 18:43

OrderSelect nie rozumie

Nieprzeczytany post autor: fxBobi »

Jak w temacie nie mogę do końca zrozumieć jak działa ta funkcja . Do chwili obecnej wiem ze moge dzięki ten fukcji zmieniać aktualna pozycje na której mogę dokonywać pewnych działań (zamykac , modyfikować ) .

Ale nie rozumie jak np. ustalić że chce aby pewna pozycja została zamknięta .
Zakładam że ta pozycja została otworzona po ten pozycji została otworzona kolejna a mnie interesuje ta pierwsza.

Awatar użytkownika
Ykee
Gaduła
Gaduła
Posty: 198
Rejestracja: 15 lip 2008, 22:12

Nieprzeczytany post autor: Ykee »

Najłatwiej jeśli tylko znasz ticket pozycji. Później można sprawdzać wg aktywnych - otwartych zleceń i wg kolejności ich złożenia. W zależności od kolejności, wywołujesz z tablicy otwartych lub oczekujących zleceń. (Np 4 zlecenie)
More practice, more luck!

Awatar użytkownika
CoVal
Gaduła
Gaduła
Posty: 320
Rejestracja: 06 paź 2005, 22:45

Re: OrderSelect nie rozumie

Nieprzeczytany post autor: CoVal »

fxBobi pisze:Jak w temacie nie mogę do końca zrozumieć jak działa ta funkcja . Do chwili obecnej wiem ze moge dzięki ten fukcji zmieniać aktualna pozycje na której mogę dokonywać pewnych działań (zamykac , modyfikować ) .

Ale nie rozumie jak np. ustalić że chce aby pewna pozycja została zamknięta .
Zakładam że ta pozycja została otworzona po ten pozycji została otworzona kolejna a mnie interesuje ta pierwsza.
Poniewaz nasza strategia (EA) moze otwierac dowolna ilosc pozycji na dowolnych instrumentach, to aby sprecyzowac do ktorej pozycji mamy sie wlasnie zamiar odniesc w danym momencie stosujemy funkcje OrderSelect().

Przy jej pomocy mozemy wybrac dowolna pozycje otwarta jak rowniez pozycje juz zamknieta (bo interesuje nas np. wielkosc lota wlasnie zamknietej pozycji).

W sumie dokladna skladnie tej funkcji kazdy moglby sobie sprawdzic sam - wiec juz bez wchodzenia w szczegoly - powiem, ze mozemy funkcje wybrac albo poprzez jej Ticket albo jej indeks.

Ticket - unikalny (liczba calkowita) numer jaki zostaje przypisany kazdej otwartej pozycji - uzyskujemy go jako wartosc zwracana przez funkcje OrderSend(), np.:

Kod: Zaznacz cały

int mojTicket = OrderSend(Symbol(),OP_BUY,1,Ask,3,SL,TP,"Long#2",11122,0,Green);
i tak wlasnie zmiennej mojTicket zostanie przypisana unikalny numer transakcji - i ten wlasnie numer wpisujemy gdzies dalej w kodzie w funkcje OrderSelect() aby wyselekcjonowac dokladnie ta pozycje:

Kod: Zaznacz cały

OrderSelect(mojTicket, SELECT_BY_TICKET);
jesli teraz np. napiszemy:

Kod: Zaznacz cały

double lotSize = OrderLots();
to zmiennej lotSize na pewno zostanie przypisana wielkosc lota wlasnie tej przez nas wybranej pozycji.

Druga z mozliwosci to wybor pozycji przez indeks:

Osobiscie stosuje ja najczesciej aby np. dokonac zmian we wszystkich otwartych pozycjach po kolei, np. kontrolujac pozycje SL:

Poniewaz pierwsza otwarta pozycja ma indeks o numerze 0, a ilosc otwartych pozcji uzyskamy funkcja OrdersTotal() (czy jakos tak - pisze z pamieci), to mozemy napisac:

Kod: Zaznacz cały

for (int i = 0;  i < OrdersTotal();  i++)
     {
       OrderSelect(i, SELECT_BY_POS);  // tu wybieramy po kolei wszystkie indeksy
       if( warunek) ModyfikujSL(i);
     }
Oczywiscie w EA ktore mialoby dzialac w realu powinno byc glupoto-odporne i musi zawierac roznego rodzaju zabezpieczenia, np. wypadaloby w powyzszym przykladzie napisac:

Kod: Zaznacz cały

if( OrderSelect(i, SELECT_BY_POS) == true &&
    PozostaleWarunki)
    ModyfikujSL(i);  
A jesli chcesz zamknac konkretna pozycje, to najlepiej zidentyfikowac ja po Ticket-cie, lub (wielu tak robi) przelatujac funkcja for przez wszystkie indeksy i wybierajac ta pozycje ktora ma odpowiedni numer Magic (oczywiscie musimy go zapodac w funkcji otwierajacej ta konkretnie interesujaca nas pozycje).

Reszte doczytajcie sobie na http://docs.mql4.com/trading/OrderSelect
lub w helpie.

Z gory dziekuje za poprawienie wszystkich bledow jakie udalo mi sie zrobic w powyzszym tekscie, albowiem powiadam wam, iz leniwy jestem i nawet nie chce mi sie przeczytac tego co tu napisalem....

pzdr,

CoVal

Awatar użytkownika
fxBobi
Gaduła
Gaduła
Posty: 244
Rejestracja: 20 sie 2008, 18:43

Nieprzeczytany post autor: fxBobi »

Dziękuje za bardzo dobre wyjaśnienie :D

Szkoda że nie mogę udzielić pochwały.

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

fxBobi pisze:Dziękuje za bardzo dobre wyjaśnienie :D

Szkoda że nie mogę udzielić pochwały.
Przenoszę do programowania więc już możesz.
Przyda się dla innych.

tig3r
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
batman
Gaduła
Gaduła
Posty: 159
Rejestracja: 19 kwie 2011, 07:55

Nieprzeczytany post autor: batman »

Chcialbym spytac, bo nie mam pewnosci - czy w trybie OrderSelect(i, SELECT_BY_POS) wszysktie zlecenia posortowane sa w kolejnosci otwarcia, czy np ostatnio modyfikowanych, czy wg lotow, czy jak?
Bede wdzieczny za wyjasnienie (bo w helpie nie jest to opisane).

Awatar użytkownika
xpep
Pasjonat
Pasjonat
Posty: 844
Rejestracja: 02 gru 2007, 11:50

Nieprzeczytany post autor: xpep »

batman pisze:Chcialbym spytac, bo nie mam pewnosci - czy w trybie OrderSelect(i, SELECT_BY_POS) wszysktie zlecenia posortowane sa w kolejnosci otwarcia, czy np ostatnio modyfikowanych, czy wg lotow, czy jak?
Bede wdzieczny za wyjasnienie (bo w helpie nie jest to opisane).
w kolejnosci jak sa otwierane z tym ze numerowane od zera czyli pozycja otworzona jako pierwsza ma 0 nastepna 1 itd

Awatar użytkownika
batman
Gaduła
Gaduła
Posty: 159
Rejestracja: 19 kwie 2011, 07:55

Nieprzeczytany post autor: batman »

Dzieki :)

crn
Gaduła
Gaduła
Posty: 117
Rejestracja: 17 mar 2009, 22:07

Nieprzeczytany post autor: crn »

xpep pisze:
batman pisze:Chcialbym spytac, bo nie mam pewnosci - czy w trybie OrderSelect(i, SELECT_BY_POS) wszysktie zlecenia posortowane sa w kolejnosci otwarcia, czy np ostatnio modyfikowanych, czy wg lotow, czy jak?
Bede wdzieczny za wyjasnienie (bo w helpie nie jest to opisane).
w kolejnosci jak sa otwierane z tym ze numerowane od zera czyli pozycja otworzona jako pierwsza ma 0 nastepna 1 itd
czyli moge binarnie przeszukiwac zlecenia, majac pewnosc, ze zawsze beda posortowane wg. OrderOpenTime()?

Awatar użytkownika
xpep
Pasjonat
Pasjonat
Posty: 844
Rejestracja: 02 gru 2007, 11:50

Nieprzeczytany post autor: xpep »

crn pisze:czyli moge binarnie przeszukiwac zlecenia, majac pewnosc, ze zawsze beda posortowane wg. OrderOpenTime()?
chyba nie mozesz miec do konca pewnosci, bo jesli masz kolejno otworzone pozycje 0 1 2 3 i zamkniesz np 2 a potem otworzysz kolejna to nie wiem co wtedy ale mozliwe ze ta pozycja nowa dostanie nr 2

ODPOWIEDZ