min/max wskaźnika

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1522
Rejestracja: 09 sie 2009, 21:27

min/max wskaźnika

Nieprzeczytany post autor: personov »

Czy ktoś mi podpowie jak wyciągnąć najwyższą i najniższą wartość wskaźnika liniowego ( CCI ) z danego przedziału ?
W tej chwili korzystam z ArrayMinimum i ArrayMaximum, ale pojawia się problem z wyciągnięciem max jeśli w danym przedziale wskaźnik CCI przyjmuje wartości tylko ujemne i z wyciągnięciem min jeśli w danym przedziale wskaźnik CCI przyjmuje tyko wartości powyżej 0.
Solą życia jest kasa.

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: min/max wskaźnika

Nieprzeczytany post autor: Pierz Andrzej »

Witam

Moim zdaniem nie powinno być problemów gdy tablica ma wartości ujemne i wyciągnięcie z niej Max

Kod: Zaznacz cały

double tab[4] = {-7,-1,-2,-55};
   Alert(ArrayMaximum(tab))
sprawdziłem takim małym kodem i wskazuje że najwyższa wartość ma index = 1 czyli -1

ale jeżeli faktycznie nie działa jak powinno możesz sam napisać takie funkcje ewentualnie posortować tablice np ASCEND wtedy pierwsza pozycja tablicy bedzie najmniejsza a ostatnia najwieksza ;-)
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1522
Rejestracja: 09 sie 2009, 21:27

Re: min/max wskaźnika

Nieprzeczytany post autor: personov »

Ja kombinuję w ten sposób :

Kod: Zaznacz cały

for(int k=20;k<=28;k++){   /// zakres od świecy 20 do 28
     double cci1[k]=iCCI(Symbol(),Period(),14,0,k);
     int shmax_w1=ArrayMaximum(cci1,WHOLE_ARRAY,0);
     int shmin_w1=ArrayMinimum(cci1,WHOLE_ARRAY,0);
     double max_w1=cci1[shmax_w1];
     double min_w1=cci1[shmin_w1];
   }
I nie działa.

-- Dodano: sob 14-01-2017, 0:14 --

Co robię źle ?
A może jest jakiś całkiem inny sposób, aby wyszukać świecę z danego przedziału, na której wskaźnik osiąga maximum i minimum w tym przedziale ?
Solą życia jest kasa.

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: min/max wskaźnika

Nieprzeczytany post autor: Pierz Andrzej »

najpierw przypisz wartości do tablicy a potem sprawdzaj max / min
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1522
Rejestracja: 09 sie 2009, 21:27

Re: min/max wskaźnika

Nieprzeczytany post autor: personov »

Ale przecież tablica o nazwie cci1 ma już przypisane wartości. Są to wartości wskaźnika w pętli.

Kod: Zaznacz cały

for(int k=20;k<=28;k++){   /// zakres od świecy 20 do 28
     double cci1[k]=iCCI(Symbol(),Period(),14,0,k);///////////////tutaj są przypisane wartości
     int shmax_w1=ArrayMaximum(cci1,WHOLE_ARRAY,0);/////która świeca to maximum
     int shmin_w1=ArrayMinimum(cci1,WHOLE_ARRAY,0);/////która świeca to minimum
     double max_w1=cci1[shmax_w1];///////jaka max wartość wskaźnika 
     double min_w1=cci1[shmin_w1];////////jak min. wartość wskaźnika
   }
Solą życia jest kasa.

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: min/max wskaźnika

Nieprzeczytany post autor: Pierz Andrzej »

prawidłowo powinno być tak , niewielka różnica a jednak ;-)

Kod: Zaznacz cały

//najpierw przypisujesz wartości wskaźnika cci 
for(int k=20;k<=28;k++){   /// zakres od świecy 20 do 28
     double cci1[k]=iCCI(Symbol(),Period(),14,0,k);///////////////tutaj są przypisane wartości
   }
// później sprawdzasz przypisane wartości 
     int shmax_w1=ArrayMaximum(cci1,WHOLE_ARRAY,0);/////która świeca to maximum
     int shmin_w1=ArrayMinimum(cci1,WHOLE_ARRAY,0);/////która świeca to minimum
     double max_w1=cci1[shmax_w1];///////jaka max wartość wskaźnika 
     double min_w1=cci1[shmin_w1];////////jak min. wartość wskaźnika
kolejny problem to elementy tablicy które znajdują się od 0 do 19 , mają wartość 0
ostatni parametr funkcji Maximum i Minimum nie powinien wynosić 0 a 20

-- Dodano: sob 14-01-2017, 20:32 --

przeanalizuj sobie taki kod pisałem w przeglądarce ale powinien być ok ;-)

Kod: Zaznacz cały

   int begin = 20;
   int end   = 28;
   if (end - begin > 0)
   {
      double cci;
      int size = end - begin + 1;
      ArrayResize(cci,size );
      for (int i = 0;i < size ;i++) cci[i] = iCCI(Symbol(),Period(),14,PRICE_CLOSE,i + begin);
      int shiftmax = ArrayMaximum(cci);
      int shiftmin = ArrayMinimum(cci);
      double maxvalue = cci[shiftmax + begin];
      double minvalue = cci[shiftmin + begin];
   }
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1522
Rejestracja: 09 sie 2009, 21:27

Re: min/max wskaźnika

Nieprzeczytany post autor: personov »

Dałem tak i jest dobrze. Nie przeszukujemy całego zakresu tablicy tylko elementy od 20 do 28.
Poza tym nawias o którym napisałeś.

Kod: Zaznacz cały

for(int k=20;k<=28;k++){   /// zakres od świecy 20 do 28
     double cci1[k]=iCCI(Symbol(),Period(),14,0,k);}///////////////tutaj są przypisane wartości
     int shmax_w1=ArrayMaximum(cci1,9,20);/////która świeca to maximum
     int shmin_w1=ArrayMinimum(cci1,9,20);/////która świeca to minimum
     double max_w1=cci1[shmax_w1];///////jaka max wartość wskaźnika
     double min_w1=cci1[shmin_w1];////////jak min. wartość wskaźnika
Solą życia jest kasa.

ODPOWIEDZ