Jedna transakcja dla jednego numeru Magic.

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Jedna transakcja dla jednego numeru Magic.

Nieprzeczytany post autor: personov »

Mam EA, któe otwiera kilka transakcji z różnymi numerami Magic. Po jednym dla każdego numeru.
W jaki sposób moge zapytać w warunku, czy zlecenie z danym nr Magic nie zostało już otwarte ?

Kod: Zaznacz cały

if(...........){
   OrderSend(Symbol(),OP_BUY,lot,Ask,0,Ask-sl1,Ask+tp1,"s_s",111101,0,Blue);
   OrderSend(Symbol(),OP_SELL,lot,Bid,0,Bid+sl1,Bid-tp1,"s_s",111101,0,Red);}
   if(........){
   OrderSend(Symbol(),OP_BUY,lot,Ask,0,Ask-sl1,Ask+tp1,"s_s",111102,0,Blue);
   OrderSend(Symbol(),OP_SELL,lot,Bid,0,Bid+sl1,Bid-tp1,"s_s",111102,0,Red);}
Tzn. jeśli nie ma otwartego zlecennia z danym nr Magic to otwóż jedno BUY i jedno SELL z takim numerem.
Solą życia jest kasa.

Awatar użytkownika
grassmouse
Stały bywalec
Stały bywalec
Posty: 21
Rejestracja: 20 sty 2011, 21:39

Nieprzeczytany post autor: grassmouse »

MQL chyba nie ma wbudowanego mechanizmu, który by to umożliwiał. Proponuję napisać prostą funkcję, która przejedzie po otwartych zleceniach i zwróci, czy udało jej się znaleźć zlecenie o danym magic number:

Kod: Zaznacz cały

bool order_exists(int magic_number)
{
  bool found = false;
  int i;

  for (i = OrdersTotal() - 1; i >= 0; i--)
  {
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

    if ((OrderMagicNumber() == magic_number) && (OrderSymbol() == Symbol()))
    {
      found = true;
      break;
    }
  }

  return(found);
}

Albo coś w tym stylu. No i w warunku sprawdzasz, czy nie ma takiego zlecenia:

Kod: Zaznacz cały

if (! order_exists(magic_number)) ...


Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Może inaczej.
Kombinuję z Magic, ale tak naprawdę chodzi mi o cenę.
Czyli jesli nie ma otwartego BUY z taka ceną to otwórz BUY.
Solą życia jest kasa.

Awatar użytkownika
grassmouse
Stały bywalec
Stały bywalec
Posty: 21
Rejestracja: 20 sty 2011, 21:39

Nieprzeczytany post autor: grassmouse »

No to na tej samej zasadzie - trzeba przejechać po zleceniach i sprawdzić, czy istnieje już jakieś danego rodzaju, o określonej cenie otwarcia. Z tym, że przy realizacji zleceń mogą wystąpić poślizgi (a więc zlecenie wstawiłeś po 1.4000, ale po realizacji cena otwarcia wynosi np. 1.4001) - rozwiązaniem tego problemu może być właśnie magic number (inny dla każdego poziomu cenowego). Inną opcją może być np. zapisanie sobie preferowanego kursu otwarcia pozycji w komentarzu od zlecenia (czyli cena otwarcia wynosi 1.4001, ale z komentarza możemy wyczytać, że zlecenie było umieszczone na poziomie 1.4000). Mam nadzieję, że o to chodziło :)

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Czyli dobrze kombinowałem z numerem Magic, bo wiedzialem, że mogą być poślizgi cenowe. Dlatego Magic albo komentarz będzą bardziej skuteczne. Spróbuje Twojej funkcji.
Dzięki.

Dodano po 8 minutach:

Czy dla każdego numeru Magic musi być oddzielna taka funkcja ?
Bo przecież muszę wpisać w funkcji jakiego numeru szukam ?
Solą życia jest kasa.

Awatar użytkownika
grassmouse
Stały bywalec
Stały bywalec
Posty: 21
Rejestracja: 20 sty 2011, 21:39

Nieprzeczytany post autor: grassmouse »

Magic number, który Cię interesuje, podajesz jako argument funkcji.

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

Nieprzeczytany post autor: xpep »

personov pisze:Dlatego Magic albo komentarz będzą bardziej skuteczne.
magic to sie raczej uzywa zeby kilka EA na 1 koncie uruchomic i zeby rozróżniały ktore sa ich zlecenia, natomiast jak chcesz sobie jakos rozróżnić zlecenia to poprostu dawaj im komentarze

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

Nieprzeczytany post autor: CoVal »

jako Magic uzyj ceny po jakiej chcesz otworzyc pozycje pomnozonej razy 1000000.

czyli jesli interesuje cie poziom 1.45675, to twoj magic bedzie 1456750...

i w ten sposob unikniesz problemow z ew. poslizgiem ceny o pipsa czy dwa...

ODPOWIEDZ