CopyBuffer
Kopiuje wartości z bufora wskaźnika do tablicy. Trzy argumenty liczbowe, które łatwo pomylić, i jeden brak, który daje ciche złe wyniki.
int CopyBuffer(int uchwyt, int numer_bufora, int pozycja_startowa, int ile, double &tablica[]);
2 fragmenty kodu z tej strony przeszły przez kompilator MetaEditor build 6090, 2026-08-05.
Co zwraca
Liczbę faktycznie skopiowanych elementów albo -1 przy błędzie. Wartość mniejsza od żądanej nie jest awarią — znaczy, że wskaźnik ma policzone mniej słupków, niż poprosiłeś. Zawsze sprawdzaj wynik.
Argumenty po kolei
numer_bufora — który bufor wskaźnika. Średnia krocząca ma jeden (0). MACD ma dwa: linia główna 0, sygnalna 1. Wstęgi Bollingera trzy: środkowa 0, górna 1, dolna 2. Numeracja odpowiada kolejności wywołań SetIndexBuffer w kodzie wskaźnika.
pozycja_startowa — od której świecy zacząć, licząc wstecz od bieżącej. Zero to świeca w budowie. Jedynka to ostatnia domknięta.
ile — ile wartości pobrać.
Kierunek indeksowania wyniku
To jest jedyna rzecz, przy której ta funkcja naprawdę boli. Wynik trafia do tablicy uporządkowanej od najstarszej do najnowszej, chyba że wcześniej wywołasz ArraySetAsSeries(tablica, true).
double bufor[];
//--- wariant A: jak na wykresie, [0] to świeca bieżąca
ArraySetAsSeries(bufor, true);
CopyBuffer(uchwyt, 0, 0, 3, bufor);
double ostatniaDomknieta = bufor[1];
//--- wariant B: bez ustawienia serii, [0] to najstarsza z trzech
CopyBuffer(uchwyt, 0, 0, 3, bufor);
double ostatniaDomknieta2 = bufor[1]; // to jest inna świeca niż wyżejOba warianty się kompilują i wykonują. Różnica objawia się wyłącznie jako sygnały wchodzące w złych momentach. Jeśli chcesz zobaczyć te indeksy w ruchu, mamy wizualizator.
Minimalny poprawny wzorzec
bool PobierzWartosci(const int uchwyt, double &wynik[], const int ile)
{
ArraySetAsSeries(wynik, true);
int skopiowane = CopyBuffer(uchwyt, 0, 0, ile, wynik);
if(skopiowane < ile)
{
PrintFormat("CopyBuffer: skopiowano %d z %d, błąd %d",
skopiowane, ile, GetLastError());
ResetLastError();
return false;
}
return true;
}Typowe błędy
| Objaw | Przyczyna |
|---|---|
zwraca -1, błąd 4806 | wskaźnik jeszcze nie policzony |
zwraca -1, błąd 4807 | zły uchwyt, zwykle INVALID_HANDLE |
| zwraca 0 przy pracy na obcym symbolu | historia symbolu nie została jeszcze wczytana |
| sygnały spóźnione o kilkanaście świec | brak ArraySetAsSeries |