Что за ошибка в индикаторе появилась и не как не избавится? DLL не использует.
Есть какое-то ограничение размеру массива?
При увеличении размера массива он может быть перенесен в памяти в больший кусок, когда прежнего выделенного места в памяти не хватает. При этом старый указатель на массив становится невалидным. Если используете передачу ссылок на массив, то после добавления в него данных не нужно продолжать обращаться к этому массиву по старой ссылке. То есть после добавления элемента в массив нужно вернуться в то место, где формируется ссылка на массив, и создать новую ссылку на него.
Спасибо! Пока не понятно что такое "указатель на массив", в документаций не нашёл, ищу по форумам.
Если не трудно, какой-то пример вставьте.
Ещё такой вопрос, я сделал массив как double что-бы не заморачиватся структурой и переделал время в double:
double MaxMinPrice[][3]; ... MaxMinPrice[MaxMinCount][0]=(double)iTime(Symbol(),PERIOD_H1,cnt1); MaxMinPrice[MaxMinCount][1]=iHigh(Symbol(),PERIOD_H1,cnt1); ...
Если было-бы это сделано структурой, то память было-бы меньше использовано?
Спасибо! Пока не понятно что такое "указатель на массив", в документаций не нашёл, ищу по форумам.
Если не трудно, какой-то пример вставьте.
Это когда массив передается в какую-либо функцию. По синтаксису выглядит как ссылка, но по сути (внутри) может быть и указателем:
double arrfArray[20]; ArrayInitialize(arrfArray, 0.0) ProcessArray(arrfArray); void ProcessArray(double &arrfArray[]) { for (int i = ArraySize(arrfArray) - 1; i >= 0; --i) arrfArray[i] = i * 2.4; }
Ещё такой вопрос, я сделал массив как double что-бы не заморачиватся структурой и переделал время в double:
Если было-бы это сделано структурой, то память было-бы меньше использовано?
Нет, не меньше (double и datetime имеют одинаковый размер), но со структурами намного удобнее и понятнее. Ведь тяжело постоянно держать в голове, какой индекс элемента массива за что отвечает. С многомерными массивами проблема усугубляется.
В Вашем случае это выглядело бы так:
struct Dot { datetime dtTime; double fPrice; void Set(const datetime _dtTime, const double _fPrice) { dtTime = _dtTime; fPrice = _fPrice; } }; Dot arrstDots[10]; arrstDots[0].Set(iTime(Symbol(),PERIOD_H1,cnt1), iHigh(Symbol(),PERIOD_H1,cnt1));
- www.mql5.com
Спасибо! Буду разбираться.
Ещё такой вопрос, я сделал массив как double что-бы не заморачиватся структурой и переделал время в double:
Если было-бы это сделано структурой, то память было-бы меньше использовано?
(double)iTime(Symbol(),PERIOD_H1,cnt1);
странно...
может быть так?
(int)iTime(Symbol(),PERIOD_H1,cnt1);
странно...
может быть так?
int в два раза меньше, чем datetime.
int в два раза меньше, чем datetime.
И экстент (кусков) в DOS до 16.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования