EA a problem rekwotowania

O jezykach programowania w platformach i nie tylko.
JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

EA a problem rekwotowania

Nieprzeczytany post autor: JAREK67 »

testuję EA na rach. demo. jak rozwiazać problem rekwotowania, które pojawia się w realu. chodzi mi o to zeby EA próbowało zająć lub zamknąć pozycję kiedy broker proponuje inną, swoją cenę transakcji. Nie chcę wykorzystywać do tego slippaga. chodzi mi o jakies rozwiązanie programowe.

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

Nieprzeczytany post autor: Tig3r »

Ja np robię tak:

Kod: Zaznacz cały


int ilePoz=IleOtwartychPozycji(0);

while(IleOtwartychPozycji(0)==ilePoz){ // otwieraj dopóki otworzysz
   RefreshRates();
   OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,0,0,eaName,magic);
   Sleep(100);
  }




//+------------------------------------------------------------------+
//| Kalkulacja otwartych pozycji                                     |
//+------------------------------------------------------------------+   
int IleOtwartychPozycji(int kierunek=0)
{
   int Sell, Buy, All;
   
   for (int i = 0; i < OrdersTotal(); i++)
   {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
         {
            All++;
            if (OrderType() == OP_BUY) Buy++;
            if (OrderType() == OP_SELL) Sell++;
         }
      }
   }
   
   switch(kierunek)
   {
   case -1: return(Sell);
   case 0: return(All);
   case 1: return(Buy);
   }
}
Luktom kiedyś pisał że wystarczy sprawdzić wynik funkcji i jak będzie jakiś tam to nie ma błędu (w powyższym kodzie wystarczyłoby porównać wynik funkjcji[zastąpić moją funkcję IleOtwartychPozycji]).

Green7 pisał że jest jakaś fajna biblioteka do takich rzeczy, zapomniałem jaka (coś z reliable..)..

Dodano po 42 minutach:

Niby można i tak (Pablo90)

Kod: Zaznacz cały


int ans = -1;
while(ans<0){
RefreshRates();
...
ans = OrderSend(.....;
...
} 
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

FF
Stały bywalec
Stały bywalec
Posty: 38
Rejestracja: 13 cze 2006, 15:19

Nieprzeczytany post autor: FF »

Gdyby chodzilo jedynie o rekwotowania sprawa byla prosta.

W praktyce pamietac trzeba o Error 128 - Timeout. W realu nalezy zawsze sprawdzac czy ten blad nie wystapil przy otwieraniu pozycji poniewaz po tym bledzie zlecenie moze ale nie musi pojwaic sie na rynku. Po error 128 zaleca sie odczekanie 1 minuty do tego czasu z reguly sytuacja sie wyjasnia. Jesli w tym czasie zostana wyslane dodatkowe zlecenia, moze sie zdarzyc ze zostanie otwarta wieksza ich liczba.

Co do nie uzywania slippage, to gdy jest taki czas, np. ze wzgledu na bliskosc danych albo gwaltowne ruchy albo jakies inne widzi_mi_sie, ze broker w zasadzie nie otwiera zlecen bez slippage to ze slippage=0 mozesz miec problemy z otworzeniem pozycji.

Pozdrawiam

drops
Stały bywalec
Stały bywalec
Posty: 38
Rejestracja: 03 kwie 2008, 18:38

Nieprzeczytany post autor: drops »

tu jest ta bliblioteka:
http://www.forexmt4.com/_MT4_Includes/O ... V0_2_4.mqh

opis jak używać na początku w komentarzach

Stork
Bywalec
Bywalec
Posty: 7
Rejestracja: 04 maja 2009, 16:25

Nieprzeczytany post autor: Stork »

Przy rekwotowaniu chyba i tak EA od początku musi sprawdzić czy nowa cena cały czas pozwala na otwarcie pozycji. Ja przy błędzie rekwotowania po prostu stosuję break żeby wyjść z pętli zawierającej OrderSend. I przy następnym ticku okazuje się czy tym razem uda się wejść.

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

Nieprzeczytany post autor: Tig3r »

Stork pisze:Przy rekwotowaniu chyba i tak EA od początku musi sprawdzić czy nowa cena cały czas pozwala na otwarcie pozycji. Ja przy błędzie rekwotowania po prostu stosuję break żeby wyjść z pętli zawierającej OrderSend. I przy następnym ticku okazuje się czy tym razem uda się wejść.
Nie potrzeba czekać na następną świecę. Po niepowodzeniu korzystamy z RefreshRates aby odświeżyć ceny i możemy ponawiać otwieranie. Mój kod to zawiera.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Nieprzeczytany post autor: JAREK67 »

Tig3r pisze:
Stork pisze:Przy rekwotowaniu chyba i tak EA od początku musi sprawdzić czy nowa cena cały czas pozwala na otwarcie pozycji. Ja przy błędzie rekwotowania po prostu stosuję break żeby wyjść z pętli zawierającej OrderSend. I przy następnym ticku okazuje się czy tym razem uda się wejść.
Nie potrzeba czekać na następną świecę. Po niepowodzeniu korzystamy z RefreshRates aby odświeżyć ceny i możemy ponawiać otwieranie. Mój kod to zawiera.
ale Stork nie pisze o nastepnej świecy tylko o nastepnym ticku . tak myslę

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

Nieprzeczytany post autor: Tig3r »

JAREK67 pisze: ale Stork nie pisze o nastepnej świecy tylko o nastepnym ticku . tak myslę
na jedno wychodzi, czasami warunki już mogą się nie zgadzać..
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Nieprzeczytany post autor: JAREK67 »

Tig3r pisze:
JAREK67 pisze: ale Stork nie pisze o nastepnej świecy tylko o nastepnym ticku . tak myslę
na jedno wychodzi, czasami warunki już mogą się nie zgadzać..
jasne, moje EA chodzi na H4, więc jest tu trochę czasu do wejścia na tej swiecy :lol:

Stork
Bywalec
Bywalec
Posty: 7
Rejestracja: 04 maja 2009, 16:25

Nieprzeczytany post autor: Stork »

Tig3r: Właśnie o to mi chodziło, dla mnie, jak warunki się już nie zgadzają to nie ma sensu otwierać pozycji. Skąd program ma wiedzieć że cena z rekwotowania spełnia warunki? OK, mogę sobie wyobrazić sytuację, że ticki idą rzadko np. co minutę. Wtedy lepiej by było otworzyć na rekwotowaniu niż czekać minutę, bo może warunki byłyby znacznie gorsze. Tylko jeśli zależałoby mi na takich wejściach, to musiałbym w tej pętli dołożyć sprawdzanie warunków otwarcia przy każdym rekwotowaniu.
Podsumowując nie zależy mi na takich przypadkach, więc nie komplikowałem sobie programu :)

P.S.
Chwilę zastanowiłem się i jak ticki idą tak rzadko, to znaczy że cena szybko się nie zmienia i raczej nie ma rekwotowań. Więc to chyba nie był dobry przykład.

ODPOWIEDZ