Serwis Forex-nawigator.biz korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.
Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce. [Zamknij tą informację]

Dzisiaj jest 21 wrz 2018, 16:46     Inwestuj z zaufanym, globalnym brokerem XM!



błąd w tablicach

O jezykach programowania w platformach i nie tylko.
  • Autor
  • Wiadomość
Offline
Awatar użytkownika

personov

Maniak

Maniak

  • Posty: 2117
  • Rejestracja: 09 sie 2009, 21:27
  • Lokalizacja: Głogów
  • Pochwały: 39

błąd w tablicach

Nieprzeczytany post22 sie 2018, 19:06

Proszę o pomoc.
Przykładowy wskaźnik, który prowadzi pewne obliczenia i wykorzystuje tablice wywala błąd jeśli dodana jest linijka
Kod: Zaznacz cały
#property strict


Jeśli tej linijki nie ma to wszystko jest OK.
Jeśli natomiast kompilacja jest przez strict to wywala błąd "array out of range".

Oto przykładowy kod :

Kod: Zaznacz cały
#property strict
#property indicator_chart_window
#property indicator_buffers 1
double aaa[];     
double value[10];     
double sum=0;
///
void init(){
 aaa[0]=Close[0];
 IndicatorBuffers(1);
 SetIndexBuffer(0,aaa);
 SetIndexStyle(0,DRAW_NONE,STYLE_SOLID,1,Red);
 ArrayResize(value,25);}
///
void deinit(){}
//
void start(){
   sum=0;
   for(int i=25;i>=0;i--){ value[i+1]=Close[1]; value[i]=Close[0]; }
   for(int k=0;k<25;k++){sum=sum+value[k];}
   aaa[0]=sum/25;
   }


Proszę o pomoc. Z góry dziękuję.
Solą życia jest kasa.
Offline
Awatar użytkownika

por. Borewicz

Gaduła

Gaduła

  • Posty: 94
  • Rejestracja: 25 cze 2014, 11:58

Re: błąd w tablicach

Nieprzeczytany post22 sie 2018, 19:19

Nie jestem specjalistą od MT4, ale wygląda na to, że odwołujesz się do elementu value[26] w pierwszej iteracji pętli w funkcji start, a więc wykraczasz poza zakres tablicy value. Spróbuj zwiększyć wielkość tablicy do 27 i zobacz czy to pomoże.
Offline
Awatar użytkownika

personov

Maniak

Maniak

  • Posty: 2117
  • Rejestracja: 09 sie 2009, 21:27
  • Lokalizacja: Głogów
  • Pochwały: 39

Re: błąd w tablicach

Nieprzeczytany post22 sie 2018, 19:28

Niestety to nie to. Tym bardziej, że podczas kompilacji nie ma żadnych błędów.
Błędy są w zakładce strategie przy ładowaniu wskaźnika na wykres.
Wskazywana jest linijka błędu pierwszą linijkę w init(), czyli na
Kod: Zaznacz cały
 aaa[0]=Close[0];

W załączniku dodaję plik mq4.

-- Dodano: śr 22-08-2018, 18:51 --

A może to jednak to ??
W takim razie pytanie by brzmiało jak przepisać wartości value na nowym ticku ( wartość starsza zastępowana jest nową ).
np. w momencie nadejścia nowego ticku value[25]=value[24]; value[24]=value[23] itd. a value[0]=Bid;
Pomijam już warunek nadejścia nowego ticku, chodzi o to jaką pętlę zastosować, żeby wartość 25 była zastąpiona wartością 24 itd.
Zaloguj się (lub zarejestruj), aby zobaczyć pliki załączone do tego postu.
Solą życia jest kasa.
Offline

LowcaG

Maniak

Maniak

  • Posty: 2686
  • Rejestracja: 05 paź 2007, 15:39
  • Lokalizacja: Południe
  • Pochwały: 68

Re: błąd w tablicach

Nieprzeczytany post22 sie 2018, 20:37

tak na szybko patrząc to

robisz resieze na 25 czyli max index masz 24 (bo numerujemy od zera)
a "i" zaczynasz od 25 czyli przekroczenie zakresu
Offline
Awatar użytkownika

personov

Maniak

Maniak

  • Posty: 2117
  • Rejestracja: 09 sie 2009, 21:27
  • Lokalizacja: Głogów
  • Pochwały: 39

Re: błąd w tablicach

Nieprzeczytany post22 sie 2018, 20:37

Dobra - sprawa załatwiona.
Wystarczyło w pętli for dać zamiast 25 dać 23.
Kod: Zaznacz cały
for(int i=23;i>=0;i--){ value[i+1]=Close[1]; value[i]=Close[0]; }

Dziękuję za podpowiedź.
Solą życia jest kasa.
Offline

LowcaG

Maniak

Maniak

  • Posty: 2686
  • Rejestracja: 05 paź 2007, 15:39
  • Lokalizacja: Południe
  • Pochwały: 68

Re: błąd w tablicach

Nieprzeczytany post22 sie 2018, 20:40

a co do kopiowania takich wartośći to może ArrayCopy by wystarczyło, no i szybsze wykonanie kodu.

Wróć do Programowanie

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości