Przejdź do treści
MQL5 · MetaTrader 5 · po polsku
kod odczarowany

MQL5 / Błędy

bład wykonania 5051

5051 — ERR_SMALL_ASSERIES_ARRAY

Tablica odbiorcza jest szeregiem czasowym i ma za mały rozmiar. To jest różnica, o której łatwo zapomnieć: zwykła tablica dynamiczna

1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.

2026-08-03 14:10:38.220  Ekspert (EURUSD,H1)  ArrayCopy zwrocilo -1, blad 5051

Co ten kod znaczy

Tablica oznaczona przez ArraySetAsSeries jako szereg czasowy nie powiększa się automatycznie przy kopiowaniu. Jeśli jest za mała, operacja zawodzi.

Skąd się bierze

  • ArrayCopy do tablicy będącej szeregiem, bez wcześniejszego ArrayResize
  • tablica statyczna oznaczona jako szereg
  • rozmiar wyliczony z liczby elementów źródła, bez uwzględnienia przesunięcia

Co z tym zrobić

To jest różnica, o której łatwo zapomnieć: zwykła tablica dynamiczna powiększa się przy kopiowaniu sama, ale tablica oznaczona jako szereg czasowy już nie. Indeksowanie od końca wyklucza dopisywanie na końcu, więc rozmiar trzeba nadać wcześniej.

Najpierw rozmiar, potem kopiowanie
double zrodlo[];
double cel[];

ArraySetAsSeries(cel, true);

//--- bez tej linii ArrayCopy zwroci -1 z kodem 5051
ArrayResize(cel, ArraySize(zrodlo));

if(ArrayCopy(cel, zrodlo) < 0)
   PrintFormat("Kopiowanie nie powiodlo sie, blad %d", GetLastError());

Funkcje z rodziny CopyCopyBuffer, CopyRates, CopyTicks — zachowują się inaczej: same nadają rozmiar tablicy odbiorczej, także oznaczonej jako szereg. Ten kod dotyczy więc głównie ArrayCopy i ręcznego przepisywania danych.

Powiązane