Gdzie jest bład w EA Stochastic?
Gdzie jest bład w EA Stochastic?
Po raz kolejny muszę prosić o pomoc przy moim pierwszym EA:)
Gdyby ktoś zechciałby mi pomóc, byłbym wdzięczny.
Moja strategia:
Opiera się na założeniu że gdy linia (DPeriod/ D%) przecina od dołu linie (KPeriod/K%) z Oscylatora Stochastycznego to program dokonuje sprzedaży z SL i TP równym 20pkt.
Sytuacja odwrotna gdy linia (DPeriod/D%) pzrecina od góry linie (KPeriod/K%) to program dokonuje zakupu.
W moim EA nie ma błędów, ale podczas testowania na TF H1 w MT4 nie ma kompletnie ani jednej otwartej pozycji, testowałem go na okresie 41lat i nic. Domyślam się że coś z założeniami musiałem przekabacić, ale już kompletnie nie umiem się w tym połapać. Wydaje mi się że wszystko jest dobrze, ale najwidoczniej nie jest.
Proszę o pomoc, pod spodem do pobrania moje EA.
Gdyby ktoś zechciałby mi pomóc, byłbym wdzięczny.
Moja strategia:
Opiera się na założeniu że gdy linia (DPeriod/ D%) przecina od dołu linie (KPeriod/K%) z Oscylatora Stochastycznego to program dokonuje sprzedaży z SL i TP równym 20pkt.
Sytuacja odwrotna gdy linia (DPeriod/D%) pzrecina od góry linie (KPeriod/K%) to program dokonuje zakupu.
W moim EA nie ma błędów, ale podczas testowania na TF H1 w MT4 nie ma kompletnie ani jednej otwartej pozycji, testowałem go na okresie 41lat i nic. Domyślam się że coś z założeniami musiałem przekabacić, ale już kompletnie nie umiem się w tym połapać. Wydaje mi się że wszystko jest dobrze, ale najwidoczniej nie jest.
Proszę o pomoc, pod spodem do pobrania moje EA.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"Nie narzekaj że masz pod górę skoro zmierzasz na szczyt."
Skoro tak piszesz to założyć można że warunki do otwarcia transakcji nie występują.Kuba1111 pisze:W moim EA nie ma błędów, ale podczas testowania na TF H1 w MT4 nie ma kompletnie ani jednej otwartej pozycji, testowałem go na okresie 41lat i nic
======================================================
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ć..
OrderSend (Symbol(),OP_SELL,Lot,Bid,3,Ask+SL,Ask-TP);
Ask+SL ? czyli np ma ustawic StopLoss na 1.4455 + 20 czyli jakies 21.4455 ?
wydaje mi sie wiec ze problem lezy w zlym SL i TP - powinienes miec w logach Order Send #130.
Przemnóż wartość SL i TP, przed dodaniem/odjeciem od ceny, przez zmienna Point i ewentualnie przez 10 - w zaleznosci do ktorego miejsca po przecinku operuje Twoj broker.
Ask+SL ? czyli np ma ustawic StopLoss na 1.4455 + 20 czyli jakies 21.4455 ?
wydaje mi sie wiec ze problem lezy w zlym SL i TP - powinienes miec w logach Order Send #130.
Przemnóż wartość SL i TP, przed dodaniem/odjeciem od ceny, przez zmienna Point i ewentualnie przez 10 - w zaleznosci do ktorego miejsca po przecinku operuje Twoj broker.
Kod: Zaznacz cały
int deinit() //Wyjscie (deinit)
{
TP = OrderTakeProfit();
SL = OrderStopLoss();
Lot = OrderLots();
//----
return(0); //Wyjście (deinit)
}
Kod: Zaznacz cały
int X = iStochastic(Symbol(),PERIOD_H1,5,3,3,MODE_SMA,0,[...]
int Y = iStochastic(Symbol(),PERIOD_H1,5,3,3,MODE_SMA,0,MODE_SIG[...]
czyli
Kod: Zaznacz cały
double Y;
double X;
Kod: Zaznacz cały
if (Y < X) //sell
Pomyśl jaki będzie dobry
Kod: Zaznacz cały
OrderSend (Symbol(),OP_SELL,Lot,Bid,3,Ask+SL,Ask-TP);
No i to co napisał ahanook
Ask+SL*Point
Kod: Zaznacz cały
//----
return(0);
//----
W tym momencie kończysz fynkcje Start() i reszta kody niejest sprawdzana .
Usuń return(0);
I daj mu szanse na sprawdzenie warynku na Sell.
Kod: Zaznacz cały
OrderSend (Symbol(),OP_BUY,Lot,Ask,3,Bid-SL,Bid+TP);
Mam nadzieje że pomogłem.
Dziękuję Panowie za tak szybką i konkretną odpowiedź, tego potrzebowałem i jestem wam bardzo wdzięczny. Niestety to jeszcze nie koniec problemów, ale o tym za chwile.
Oczywiście pozostało mi tylko zmienić te warunki, bo chodzi o otwarcie jednej pozycji w momencie gdy jedna linia przecina drugą, zastanawiam się jak to zapisać i jedyny rozsądny zapis mógłby wyglądać może tak: X=Y, albo coś w tym stylu bo drugiej zależności już nie zrobię w ten sposób bo Y=X jest błędnym założeniem.Cały czas sie nad tym zastanawiam...
fxBobi, jeśli masz jakiś pomysł, proszę o przedstawienie
Niżej do pobrania aktualny i poprawiony (oczywiście bez tych warunków o których mowa) mój EA oparty o Stochastic.
Chciałbym zauważyć że jak już psiałem Ea otwiera pozycje Sell jak i Buy w czasie rzeczywistym na koncie demo, ale już testując go ponownie na przestrzeni 41lat w platformie mt4 (na danych historycznych) nie otworzył ani jednej pozycji, czy ktoś wie w czym leży problem, jeśli otwiera w realu a na historycznych nie?
Tig3r fakt, mam z tym problem, ale to mi nie pomaga, tym bardziej ze jestem nowicjuszem i mimo że się uczę programowania w mql4 to i tak większość tych rzeczy to dla mnie czarna magia.Tig3r pisze: Skoro tak piszesz to założyć można że warunki do otwarcia transakcji nie występują.
Dzięki wielkie, faktycznie jednym z problemów był źle wyznaczony SL i TP, po pomnożeniu ich przez Punkty (*Point) problem zniknął, mam jedynie pytanie, czemu miałbym to mnożyć przez te 10 czy 20 w zależności od ilości miejsc po przecinku?ahanook pisze:wydaje mi sie wiec ze problem lezy w zlym SL i TP - powinienes miec w logach Order Send #130.
Oczywiście ze pomogłeś, dziękuje Ci bardzo, ale....fxBobi pisze: Mam nadzieje że pomogłem.
Co do złego warunku to masz racje, po poprawieniu tych wszystkich błędów w moim EA, owszem otwierało pozycje sell i buy ale nie tak jak bym chciał, podczas dzisiejszego testu otworzył 6 pozycji na jednej parze walutowej, warunki jakie określiłem są złe ponieważ gdy tylko jedna z linii jest wyżej nad drugą program otwiera pozycje gdy tylko pojawi się nowy tik spełniający te warunki, to się równa wielu otwartym pozycjom, innymi słowy źle:)fxBobi pisze: To jest niepoprawny warunek na przecięcie.
Pomyśl jaki będzie dobry
Oczywiście pozostało mi tylko zmienić te warunki, bo chodzi o otwarcie jednej pozycji w momencie gdy jedna linia przecina drugą, zastanawiam się jak to zapisać i jedyny rozsądny zapis mógłby wyglądać może tak: X=Y, albo coś w tym stylu bo drugiej zależności już nie zrobię w ten sposób bo Y=X jest błędnym założeniem.Cały czas sie nad tym zastanawiam...
fxBobi, jeśli masz jakiś pomysł, proszę o przedstawienie
Niżej do pobrania aktualny i poprawiony (oczywiście bez tych warunków o których mowa) mój EA oparty o Stochastic.
Chciałbym zauważyć że jak już psiałem Ea otwiera pozycje Sell jak i Buy w czasie rzeczywistym na koncie demo, ale już testując go ponownie na przestrzeni 41lat w platformie mt4 (na danych historycznych) nie otworzył ani jednej pozycji, czy ktoś wie w czym leży problem, jeśli otwiera w realu a na historycznych nie?
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"Nie narzekaj że masz pod górę skoro zmierzasz na szczyt."
W moim przypadku tak robie, poniewaz mam np kwotowanie do 5 miejsc po przecinku na eurusd, czyli np. Point = 0.00001. a 1 pips to 0.0001 , tak wiec jesli chce ustawic SL na 20 pips to chodzi mi o wartosc 0.002 - co jest rowne 200* Point. (SL *10 * Point).ahanook napisał:
wydaje mi sie wiec ze problem lezy w zlym SL i TP - powinienes miec w logach Order Send #130.
Dzięki wielkie, faktycznie jednym z problemów był źle wyznaczony SL i TP, po pomnożeniu ich przez Punkty (*Point) problem zniknął, mam jedynie pytanie, czemu miałbym to mnożyć przez te 10 czy 20 w zależności od ilości miejsc po przecinku?
jesli chodzi o przeciecie to sprawdzasz wartosc na wczesniejszej swieczce i porownujesz z obecna ( lub dwie swieczki wczesniej z 1 wcesniej) i szukasz takiej sytuacji w ktorej wczesniej bylo np X> Y a teraz jest X < Y.
Sprawdz w opisie funkcji co musisz zrobic by uzyskac wartosc dla wczesniejszej swieczki.
aha. jeszcze przydalby sie warunek by nie otwieralo Ci w nieskonczonosc tych pozycji gdy sa zgodne warunki, wiec jakis
Kod: Zaznacz cały
if (OrdersTotal() > 0 ) return(0)
Ahanook Dzięki stokrotne po raz kolejny !! hehhe
Gdzie zdefiniowane linie "X" i "Y" to KPeriod i DPeriod z aktualnej świeczki (mówi nam o tym ostatnia cyferka w kodzie czyli "0") te dwie linie miałem zdefiniowane wcześniej.
Dodatkowo Zdefiniowałem "A" i "B" które są niczym innym jak tymi samymi liniami tyle ze o świeczkę wcześniej, mówi nam o tym ta sama liczba na końcu w kodzie która wynosi tym razem "1". W przypadku TF H1 jedna świeczka do tyłu powinna w zupełności wystarczyć.
Do tego zmieniłem warunek:
i ....
Ahanook, chyba to miałeś na myśli, dwa warunki, w każdym zależność DPeriod od Kperiod świeczkę wcześniej i teraz, jeśli zależność jest spełniona dochodzi do zakupu lub sprzedaży
Ograniczenie do maksymalnie 3 otwartych pozycji, myślałem o tym dużo, dobrze że pokazałeś mi jak to zrobić, teraz tylko drogą prób i błędów dojdę do najlepszego dla mnie rozwiązania.
W tym momencie Moje EA jest bez błędów, przystępuje do testów, mam nadzieje że już wszystko będzie ok
PS.
Dalej nie ma ani jednej otwartej pozycji na danych historycznych w mt4, może nie umiem z niego korzystać
Zobaczymy czy działa na demie w realu
Jeśli coś z tego co napisałem jest źle prosze o poprawienie mnie
Dodano po 3 godzinach 35 minutach:
Oj Chyba OrderTotal nei działa poprawnie, cos jest źle...
Teraz już rozumiem, pozostaje mi wypytać mojego brokera, choć w sumie to metodą wcześnejszych testów doszedłem już do tego, ja nie muszę mnożyć "Point;ów", ale mimo to dobrze to wiedziećahanook pisze: W moim przypadku tak robię, poniewaz mam np kwotowanie do 5 miejsc po przecinku na eurusd, czyli np. Point = 0.00001. a 1 pips to 0.0001 , tak wiec jesli chce ustawic SL na 20 pips to chodzi mi o wartosc 0.002 - co jest rowne 200* Point. (SL *10 * Point).
W sumie to nigdzie tego nie mogłem wyszukać, ale wykombinowałem coś takiego:ahanook pisze: jesli chodzi o przeciecie to sprawdzasz wartosc na wczesniejszej swieczce i porownujesz z obecna ( lub dwie swieczki wczesniej z 1 wcesniej) i szukasz takiej sytuacji w ktorej wczesniej bylo np X> Y a teraz jest X < Y.
Sprawdz w opisie funkcji co musisz zrobic by uzyskac wartosc dla wczesniejszej swieczki.
Kod: Zaznacz cały
double A = iStochastic(Symbol(),PERIOD_H1,5,3,3,MODE_SMA,0,MODE_MAIN, 1); //KPeriod
double B = iStochastic(Symbol(),PERIOD_H1,5,3,3,MODE_SMA,0,MODE_SIGNAL,1); //DPeriod
//----
double X = iStochastic(Symbol(),PERIOD_H1,5,3,3,MODE_SMA,0,MODE_MAIN, 0); //KPeriod
double Y = iStochastic(Symbol(),PERIOD_H1,5,3,3,MODE_SMA,0,MODE_SIGNAL,0); //DPeriod
Dodatkowo Zdefiniowałem "A" i "B" które są niczym innym jak tymi samymi liniami tyle ze o świeczkę wcześniej, mówi nam o tym ta sama liczba na końcu w kodzie która wynosi tym razem "1". W przypadku TF H1 jedna świeczka do tyłu powinna w zupełności wystarczyć.
Do tego zmieniłem warunek:
Kod: Zaznacz cały
if (B < A && Y > X) //sell
Kod: Zaznacz cały
if (B > A && Y < X) //buy
Zrobiłem tak:anahook pisze:jeszcze przydałby się warunek by nie otwierało Ci w nieskończoność tych pozycji gdy są zgodne warunki, wiec jakiś Kod:
if (OrdersTotal() > 0 ) return(0)
Kod: Zaznacz cały
if (OrdersTotal() > 3 ) return(1); // Ograniczenie do 3 otwartych pozycji jednoczesnie
W tym momencie Moje EA jest bez błędów, przystępuje do testów, mam nadzieje że już wszystko będzie ok
PS.
Dalej nie ma ani jednej otwartej pozycji na danych historycznych w mt4, może nie umiem z niego korzystać
Zobaczymy czy działa na demie w realu
Jeśli coś z tego co napisałem jest źle prosze o poprawienie mnie
Dodano po 3 godzinach 35 minutach:
Oj Chyba OrderTotal nei działa poprawnie, cos jest źle...
"Nie narzekaj że masz pod górę skoro zmierzasz na szczyt."
z OrderTotal() zrob tak:
Powinno pomoc
Kod: Zaznacz cały
if(OrdersTotal()<3){
if (B < A && Y > X) //sell
{
OrderSend (Symbol(),OP_SELL,Lot,Bid,3,Ask+SL*Point,Ask-TP*Point);
}
RefreshRates(); //Odświeżenie danych
if (B > A && Y < X) //buy
{
OrderSend (Symbol(),OP_BUY,Lot,Ask,3,Bid-SL*Point,Bid+TP*Point);
}
}
tak. chodzilo wlasnie o takie sprawdzenie warunkow.
co do OrderTotal to akurat wydaje mi się ze zaproponowana przez crn logicznie nic nie zmienia, ale zawsze warto sprobowac
proponuje zdebugowac sobie dzialanie EA. W tym celu z uwagi na ulomnosc mql4, najlepiej powstawiaj sobie w roznych miejscach programu wyrazenie logujace np
zamiast Print możesz dać Alert. Print wyrzuci Ci log do pliku w katalogu experts/logs lub tester/logs, a Alert pokaze Ci komunikat w okienku alarmowym.
Najlepiej do tego ustaw tester na konkretne miejsce w przeszlosci w ktorym widzisz, ze powinno podjac decyzje kupna/sprzedazy. Jesli EA tego nie zrobi - powinienis moc latwo naprawic ten blad, jesli sprytnie poustawiasz logi.
(jesli puscisz EA na caly okres to mozesz utonac w logach
co do OrderTotal to akurat wydaje mi się ze zaproponowana przez crn logicznie nic nie zmienia, ale zawsze warto sprobowac
proponuje zdebugowac sobie dzialanie EA. W tym celu z uwagi na ulomnosc mql4, najlepiej powstawiaj sobie w roznych miejscach programu wyrazenie logujace np
Kod: Zaznacz cały
Print("Tu wsszedlem. OrderTotal: " + OrderTotal() + " i zamierzam kupic po cenie: " + Bid)
Najlepiej do tego ustaw tester na konkretne miejsce w przeszlosci w ktorym widzisz, ze powinno podjac decyzje kupna/sprzedazy. Jesli EA tego nie zrobi - powinienis moc latwo naprawic ten blad, jesli sprytnie poustawiasz logi.
(jesli puscisz EA na caly okres to mozesz utonac w logach
Pięknie:)
OrdersTotal ogranicza mi zlecenia, a jak zrobić, aby np. program mógł otworzyć maksymalnie jedną pozycje na każdej parze walutowej, oczywiście jeśli warunek zostanie spełniony?.
Bo generalnie jak do tej pory może otworzyć mniej niż 3 zlecenia, ale może być tak że otworzy 3 zlecenia na Eur/usd
Czyli gdy nie mam tych Print;ów albo Alertów to automatycznie mi nie wykrywa otwartych pozycji na danych historycznych w mt4?
OrdersTotal ogranicza mi zlecenia, a jak zrobić, aby np. program mógł otworzyć maksymalnie jedną pozycje na każdej parze walutowej, oczywiście jeśli warunek zostanie spełniony?.
Bo generalnie jak do tej pory może otworzyć mniej niż 3 zlecenia, ale może być tak że otworzy 3 zlecenia na Eur/usd
Czyli gdy nie mam tych Print;ów albo Alertów to automatycznie mi nie wykrywa otwartych pozycji na danych historycznych w mt4?
"Nie narzekaj że masz pod górę skoro zmierzasz na szczyt."