Przeliczanie dużej ilości danych

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
borysewicz
Stały bywalec
Stały bywalec
Posty: 75
Rejestracja: 01 gru 2008, 21:17

Przeliczanie dużej ilości danych

Nieprzeczytany post autor: borysewicz »

Cześć

Mam sporo liczb do przeliczenia w Expercie np.:
1.2345; 1.1144; 1.3414 ;1.4255 ;1.1423…
Je trzeba albo dodać albo odjąć od siebie w zależności czy odejmowana/dodawana liczba jest większa czy mniejsza. (te liczby są już przypisane do zmiennych)
Jak bym miał to pisać ręcznie to by wyglądało to tak:

Kod: Zaznacz cały

double ifwun1;
if (1.2345 > 1.1144)
ifwun1 = 1.2345 + 1.1144;
else 
ifwun1 = 1.2345 - 1.1144;

double ifwun2;
if (1.1144> 1.3414)
ifwun2 = 1.1144 + 1.3414;
else 
ifwun2 = 1.1144 - 1.3414;

double ifwun3;
if (1.3414  > 1.4255)
ifwun3 = 1.3414  + 1.4255;
else 
ifwun3 = 1.3414 - 1.4255;

double ifwun4;
if (1.4255 > wynDzie4d1x)
ifwun4 = 1.4255 + 1.1423;
else 
ifwun4 = 1.4255- 1.1423;
//-------------------------------- a teraz uzyskane wyniki tak samo:
double ifwun1a;
if (ifwun1> ifwun2)
ifawun1 = ifwun1+ ifwun2;
else 
ifawun1 = ifwun1- ifwun2;

//I tak dalej aż z tych liczb będzie jedna.
Moje pytanie jest takie, czy da się to jakoś przeskoczyć i przeliczyć to beż rozpisywania?

Awatar użytkownika
gieroj
Stały bywalec
Stały bywalec
Posty: 33
Rejestracja: 25 lut 2010, 16:11

Nieprzeczytany post autor: gieroj »

Możesz użyć tablicy i pętli for:

Kod: Zaznacz cały

double ifwun[];
double liczby[] = {1.2345,1.1144,1.3414,1.4255,1.1423};
int  iloscelementow=ArraySize(liczby);
for(int i=0; i<iloscelementow; i++){
  if (liczby[i]>liczby[i+1])
    ifwun[i]=liczby[i]+liczby[i+1];
  else
    ifwun[i]=liczby[i]-liczby[i+1];
}
//-------------------------------- a teraz uzyskane wyniki tak samo: 
double ifwuna[]; 
int  iloscifwun=ArraySize(ifwun);
for( i=0; i<iloscifwun; i++){
  if (ifwun[i]> ifwun[i+1]) 
    ifawuna[i] = ifwun[i]+ ifwun[i+1];
  else
     ifawuna[i] = ifwun[i]- ifwun[i+1];
}
"Dzień dobry, mam na imię Paweł i jestem przegrywającym."

rrozak
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 19 mar 2010, 16:43

Nieprzeczytany post autor: rrozak »

i zamiast sprawdzać która większa liczyć wartość absolutną różnicy, jak leci :)

Edit:
chyba nie doczytałem ;)

Awatar użytkownika
borysewicz
Stały bywalec
Stały bywalec
Posty: 75
Rejestracja: 01 gru 2008, 21:17

Nieprzeczytany post autor: borysewicz »

Cześć dzięki za odzew
Chyba coś jest nie tak bo wynik zamieniłem na zmienną string i wyświetliłem na wykresie okazało się, że jest 0.00000000

Wynik pobrałem z ifwun

Kod: Zaznacz cały

double ifwun[]; 
double liczby[] = {1.2345,1.1144,1.3414,1.4255,1.1423}; 
int  iloscelementow=ArraySize(liczby); 
for(int i=0; i<iloscelementow; i++){ 
  if (liczby[i]>liczby[i+1]) 
    ifwun[i]=liczby[i]+liczby[i+1]; 
  else 
    ifwun[i]=liczby[i]-liczby[i+1]; 
}
Nie wiem czy ja prawidłowo wyświetlam zmienną z tablicy bo za bardzo na tablicach się nie znam

Awatar użytkownika
gieroj
Stały bywalec
Stały bywalec
Posty: 33
Rejestracja: 25 lut 2010, 16:11

Nieprzeczytany post autor: gieroj »

Mój bład wielkość array(tablicy) trzeba zadeklarować.

Kod: Zaznacz cały

double ifwun[4];
double liczby[5] = {1.2345,1.1144,1.3414,1.4255,1.1423}; 
int  iloscelementow=ArraySize(liczby);
for(int i=0; i<iloscelementow-1; i++){
  if (liczby[i]>liczby[i+1])
    ifwun[i]=liczby[i]+liczby[i+1];
  else
    ifwun[i]=liczby[i]-liczby[i+1];
}
A tu link do strony z objaśnieniem tablic dla mql
http://book.mql4.com/variables/arrays
"Dzień dobry, mam na imię Paweł i jestem przegrywającym."

Awatar użytkownika
borysewicz
Stały bywalec
Stały bywalec
Posty: 75
Rejestracja: 01 gru 2008, 21:17

Nieprzeczytany post autor: borysewicz »

Witam

Dzięki za linka trochę mi to rozjaśniło zagadnienie tablic. Wyniki sprawdzone działa dobrze. Pojawił się pewien problem na który nie znam odpowiedzi i nie widze odpowiedzi pod podanym linkiem. Zadeklarowane parametry tablicy zamieniłem na zmienne o tej samej wartości podczas kompilacji otrzymuję następujący błąd:
'}' - comma or semicolon expected
On dotyczy linii w kodzie : double liczby[5] = {a,b,c,d,e};

Dlaczego tak się dzieje przecież te zmienne mają te same wartości co wcześniej?

Kod: Zaznacz cały

  double a,b,c,d,e;

int start()
  {
 a = 1.2345;
 b = 1.1144;
 c = 1.3414;
 d = 1.4255;
 e = 1.1423;

double ifwun[4]; 
                             //double liczby[5] = {1.2345,1.1144,1.3414,1.4255,1.1423};
double liczby[5] = {a,b,c,d,e};
int  iloscelementow=ArraySize(liczby); 
for(int ifi=0; ifi<iloscelementow-1; ifi++){ 
  if (liczby[ifi]>liczby[ifi+1])   
    ifwun[ifi]=liczby[ifi]+liczby[ifi+1]; 
  else 
    ifwun[ifi]=liczby[ifi]-liczby[ifi+1]; 

   return(0);
}
docelowo wartości będą podawane w zmiennych z wskaźnika MA.

Awatar użytkownika
gieroj
Stały bywalec
Stały bywalec
Posty: 33
Rejestracja: 25 lut 2010, 16:11

Nieprzeczytany post autor: gieroj »

'}' - comma or semicolon expected ==
Brak '}' nawiasu
Nie pętli for dodaj na jej końcu nawias } i będzie dobrze.
"Dzień dobry, mam na imię Paweł i jestem przegrywającym."

Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Nieprzeczytany post autor: reptile »

Ile mogę mieć w tablicy danych typu DataTime + cena (pobierane z .csv)
Czy seria z 2000 rekordów to za dużo ? :roll:

Do ok 1500 wszystko działa ok. :roll:
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

green7
Maniak
Maniak
Posty: 2060
Rejestracja: 16 sty 2008, 18:44

Nieprzeczytany post autor: green7 »

reptile pisze:Ile mogę mieć w tablicy danych typu DataTime + cena (pobierane z .csv)
Czy seria z 2000 rekordów to za dużo ? :roll:

Do ok 1500 wszystko działa ok. :roll:
2000 rekordów to tyle co nic. No chyba że mql nie wyrabia - ale pamięciowo to cirke about 32 KB danych więc nie są to jakieś duże ilości.
Green
Obrazek
Obrazek

Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Nieprzeczytany post autor: reptile »

green7 pisze:2000 rekordów to tyle co nic
No tez mi się tak wydawało.
green7 pisze: No chyba że mql nie wyrabia - ale pamięciowo to cirke about 32 KB danych
32kB na 1 tablicę, czy jak ? Gdzie czytać o tych ograniczeniach ?
W 1 tablicy trzymam dane, później jeszcze sortuje kierunek datatime. :roll:
Jak nie okroje danych to wygląda, jakby mt4 miał problem z uzupełnianiem tablicy i dane się "przelewają" byle jak.

Tu też przy większej ilości robiła się masakra.
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

ODPOWIEDZ