OrderSelect nie rozumie
OrderSelect nie rozumie
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.
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.
Re: OrderSelect nie rozumie
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().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.
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);
Kod: Zaznacz cały
OrderSelect(mojTicket, SELECT_BY_TICKET);
Kod: Zaznacz cały
double lotSize = OrderLots();
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);
}
Kod: Zaznacz cały
if( OrderSelect(i, SELECT_BY_POS) == true &&
PozostaleWarunki)
ModyfikujSL(i);
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
w kolejnosci jak sa otwierane z tym ze numerowane od zera czyli pozycja otworzona jako pierwsza ma 0 nastepna 1 itdbatman 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).
czyli moge binarnie przeszukiwac zlecenia, majac pewnosc, ze zawsze beda posortowane wg. OrderOpenTime()?xpep pisze:w kolejnosci jak sa otwierane z tym ze numerowane od zera czyli pozycja otworzona jako pierwsza ma 0 nastepna 1 itdbatman 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).
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 2crn pisze:czyli moge binarnie przeszukiwac zlecenia, majac pewnosc, ze zawsze beda posortowane wg. OrderOpenTime()?