EA a problem rekwotowania
EA a problem rekwotowania
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.
Ja np robię tak:
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 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);
}
}
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ć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
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
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
tu jest ta bliblioteka:
http://www.forexmt4.com/_MT4_Includes/O ... V0_2_4.mqh
opis jak używać na początku w komentarzach
http://www.forexmt4.com/_MT4_Includes/O ... V0_2_4.mqh
opis jak używać na początku w komentarzach
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.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 głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
ale Stork nie pisze o nastepnej świecy tylko o nastepnym ticku . tak myslęTig3r pisze: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.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ść.
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.
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.