Как перевернуть массивы при использовании ArrayCopyRates() и DLL?

 
Пишу на VC dll, цепляю, передаю туда OHLC данные, принимаю обработанный массив. Все работает. Проблема в следующем: в VC ценовые массивы приходят в обратной (или это прямая?) последовательности, т. е. Close[0] - самый левый бар. Соответственно, нужно работать с искусственным обращенным массивом, либо менять всю логику работы MQL-индикатора. IMHO, логичнее было бы поправить ArrayCopyRates()? Или я что-то не так понял? Вот кусок кода:
#import "MT4_Dll.dll"
int AMA(double Rates[][6], int, double &AMA_Buffer[], double Params[], int);
…
int start()
{
   double Rates[][6];
   double Params[4] = {9.0, 2.0, 30.0, 1.7};

   ArrayCopyRates(Rates);
   AMA(Rates, Bars, AMA_Buffer, Params, NULL);
	
   return(0);
}


да, билд .151

 
Вы как-то не очень внятно сформулировали.
последовательность данных в ценовом массиве TOLHCV - прямая, то есть, старые данные(с более ранним временем) в начале массива, свежие данные(с наиболее поздним временем) в конце массива.
посмотрите, как реализована функция GetRatesItemValue в нашем примере ExpertSample.dll
 
Slawa
последовательность данных в ценовом массиве TOLHCV - прямая, то есть, старые данные(с более ранним временем) в начале массива, свежие данные(с наиболее поздним временем) в конце массива.


правильно, и я про это же. Получается, что в MQL Close[0] - Close от самого свежего бара, а в VC - от самого старого. Не очень удобно каждый раз писать
int nitem=rates_total-1-shift;

и каждый раз об этом думать, когда можно один раз поправить функцию ArrayCopyRates()? Тем более, что такая «прямая» последовательность даже если и используется, то намного реже..

 
не надо её поправлять. функция просто передаёт локальную копию части исторических данных. именно передаёт, без физического копирования. скопируйте в своей dll этот массив задом наперёд и не задумывайтесь
 
Slawa
именно передаёт, без физического копирования.

ну в таком случае вопросов конечно нет, спасибо за ваше время
Причина обращения: