Suma wartości bezwzględnych.

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
ralbet
Bywalec
Bywalec
Posty: 13
Rejestracja: 01 cze 2009, 20:05

Suma wartości bezwzględnych.

Nieprzeczytany post autor: ralbet »

Witam.

Pracuje nad wlasnym EA. Nie bardzo programuje a przerabiam cos co powstalo kiedys przy pomocy osoby, ktora sie na tym zna. Mam mala przeszkode do pokonania. EA opiera sie na korelacji par. Jest w nim wskaznik, ktory ustawiony jest do obserwowania kilku par. Chodzi mi o zsumowanie tych wskaznikow i podzielenie tego przez ilosc wskaznikow. w ten sposob otrzymam srednia. No i to ma byc suma wartosci bezwzlednych poniewaz wskaznik generuje wartosci tak ujemne jak i dodatnie. Ja chce okreslic tylko sile, za kierunek odpowiada inny wskaznik. Wg mnie to cos takiego:
Ws1= 2
Ws2=-1
Ws3=7
Ws4=-4

(wbWs1+wbWs2+wbWs3+wbWs4)/4=(2+1+7+4)/4= 3.5

Prosze o przetlumaczenie tego na MQL
Nikt nie planuje przegrywac, ale wielu przegrywa bo nie planuje.

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

Nieprzeczytany post autor: Tig3r »

ralbet pisze:Ws1= 2
Ws2=-1
Ws3=7
Ws4=-4

(wbWs1+wbWs2+wbWs3+wbWs4)/4=(2+1+7+4)/4= 3.5

Prosze o przetlumaczenie tego na MQL
Sam sobie przetłumaczyłeś

Kod: Zaznacz cały

double wynik=(MathAbs(Ws1)+MathAbs(Ws2)+MathAbs(Ws3)+MathAbs(Ws4))/4;

MathAbs(X) - zwraca wartość bezwzględną z X
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
ralbet
Bywalec
Bywalec
Posty: 13
Rejestracja: 01 cze 2009, 20:05

Nieprzeczytany post autor: ralbet »

Dzieki wielkie.

Czy moglbys podpowiedziec jeszcze gdzie wrzucic klamry?
Wpisalem to:

Kod: Zaznacz cały

{
double wynik=(MathAbs(mahistogram())+(MathAbs(mahistograma())+(MathAbs(mahistogramb())+(MathAbs(mahistogramc())+
               (MathAbs(mahistogramd())+(MathAbs(mahistograme())+(MathAbs(mahistogramf())+(MathAbs(mahistogramg())+
               (MathAbs(mahistogramh())+(MathAbs(mahistogrami())+(MathAbs(mahistogramj())+(MathAbs(mahistogramk())+
               (MathAbs(mahistogramm())+)/13;
}
po kompilacji wyskoczyl warning:
exspression on global scope not allowed
Nikt nie planuje przegrywac, ale wielu przegrywa bo nie planuje.

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

Nieprzeczytany post autor: Tig3r »

ostatni plus na końcu za dużo
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
ralbet
Bywalec
Bywalec
Posty: 13
Rejestracja: 01 cze 2009, 20:05

Nieprzeczytany post autor: ralbet »

Plus usunalem a ostrzezenie jest w dalszym ciagu.
`{` - exspression on global scope not allowed
Nikt nie planuje przegrywac, ale wielu przegrywa bo nie planuje.

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

Nieprzeczytany post autor: Tig3r »

no to sobie policz nawiasy i posprawdzaj
niepotrzebnie robisz tak

Kod: Zaznacz cały

 +(MathAbs(mahistogramm())
jak można czytelniej tak:

Kod: Zaznacz cały

 +MathAbs(mahistogramm())
błąd masz przed każdym oprucz pierwszego MathAbs "(" za dużo
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
ralbet
Bywalec
Bywalec
Posty: 13
Rejestracja: 01 cze 2009, 20:05

Nieprzeczytany post autor: ralbet »

Usunalem bledy, teraz to wyglada tak:

Kod: Zaznacz cały

{
 double wynik= (MathAbs(mahistogram())+MathAbs(mahistograma())+MathAbs(mahistogramb())+MathAbs(mahistogramc())+
               MathAbs(mahistogramd())+MathAbs(mahistograme())+MathAbs(mahistogramf())+MathAbs(mahistogramg())+
               MathAbs(mahistogramh())+MathAbs(mahistogrami())+MathAbs(mahistogramj())+MathAbs(mahistogramk())+
               MathAbs(mahistogramm()))/13;
}
Niestety warning jest w dalszym ciagu. Nie wiem co robie zle, moze przed klamra cos powinienem dopisac?
Nikt nie planuje przegrywac, ale wielu przegrywa bo nie planuje.

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

Nieprzeczytany post autor: Tig3r »

Kod jest poprawny - błąd musisz mieć gdzieś indziej - usuń go i sprawdz czy się kompiluje.

Kod: Zaznacz cały

 double wynik= (MathAbs(mahistogram())+MathAbs(mahistograma())+MathAbs(mahistogramb())+MathAbs(mahistogramc())+
               MathAbs(mahistogramd())+MathAbs(mahistograme())+MathAbs(mahistogramf())+MathAbs(mahistogramg())+
               MathAbs(mahistogramh())+MathAbs(mahistogrami())+MathAbs(mahistogramj())+MathAbs(mahistogramk())+
               MathAbs(mahistogramm()))/13;
będzie działać o ile to są funkcje

Kod: Zaznacz cały

mahistogram()..
a nie zmienne
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

wega_x
Uczestnik
Uczestnik
Posty: 3
Rejestracja: 16 sty 2011, 21:57

Nieprzeczytany post autor: wega_x »

ralbet pisze:Usunalem bledy, teraz to wyglada tak:

Kod: Zaznacz cały

{
 double wynik= (MathAbs(mahistogram())+MathAbs(mahistograma())+MathAbs(mahistogramb())+MathAbs(mahistogramc())+
               MathAbs(mahistogramd())+MathAbs(mahistograme())+MathAbs(mahistogramf())+MathAbs(mahistogramg())+
               MathAbs(mahistogramh())+MathAbs(mahistogrami())+MathAbs(mahistogramj())+MathAbs(mahistogramk())+
               MathAbs(mahistogramm()))/13;
}
Niestety warning jest w dalszym ciagu. Nie wiem co robie zle, moze przed klamra cos powinienem dopisac?
Czy kod ten umieściłeś w jakiejś metodzie?
Jeżeli zadeklarujesz nazwę zmiennej w obrębie bloku klamrowego to ona jest dostępna tylko i wyłącznie w tym bloku.

Wega_x

Awatar użytkownika
ralbet
Bywalec
Bywalec
Posty: 13
Rejestracja: 01 cze 2009, 20:05

Nieprzeczytany post autor: ralbet »

No tak. Tu sie klaniaja oczywiste braki podstaw programowania u mnie. Z tego co napisal wega wynika ze powinienem zadeklarowac nazwe wynik poza klamrami:

Kod: Zaznacz cały

double wynik()
{
 double wynik= (MathAbs(mahistogram())+MathAbs(mahistograma())+MathAbs(mahistogramb())+MathAbs(mahistogramc())+
               MathAbs(mahistogramd())+MathAbs(mahistograme())+MathAbs(mahistogramf())+MathAbs(mahistogramg())+
               MathAbs(mahistogramh())+MathAbs(mahistogrami())+MathAbs(mahistogramj())+MathAbs(mahistogramk())+
               MathAbs(mahistogramm()))/13;
}
no i jest ok, tyle ze wynik wychodzi 0,000000
moze powinienem dopisac cos na dole jeszcze?
Skadniki wyniku (mahistogram, mahistograma, itd) dzialaja prawidlowo wiec blad jest jeszcze w powyzszym fragmencie kodu.
Ostatnio zmieniony 19 sty 2011, 19:58 przez ralbet, łącznie zmieniany 1 raz.
Nikt nie planuje przegrywac, ale wielu przegrywa bo nie planuje.

ODPOWIEDZ