1. Зачем на каждом тике создавать хендл индикатора? Это нужно сделать один раз - в OnInit().
2. Там же (в OnInit()) нужно проверить - создался ли хендл?
3. Явного выхода за пределы нет. Кстати, когда выскакивает ошибка, то указывается строка и номер символа в строке.
1. Зачем на каждом тике создавать хендл индикатора? Это нужно сделать один раз - в OnInit().
2. Там же (в OnInit()) нужно проверить - создался ли хендл?
3. Явного выхода за пределы нет. Кстати, когда выскакивает ошибка, то указывается строка и номер символа в строке.
Да, прошу прощения. Вот строка array out of range (1398,49). Вот строка кода if(copied2>0 && index_low<copied2) low=Close2[index_low];
Здесь нет хендла индикатора.
double LowLevelCl(string symbol) { double Close[]; int index_high=0; double Close2[]; double low=0; int index_low=0; ArraySetAsSeries(Close,true); ArraySetAsSeries(Close2,true); int copied=CopyClose(Symbol(),PERIOD_H8,0,Distance,Close); if(copied == -1) { Print("Ошибка во время копирования данных №",GetLastError()); } index_high=ArrayMaximum(Close,0,WHOLE_ARRAY); int copied2=CopyClose(Symbol(),PERIOD_H8,index_high,Distance,Close2); if(copied2==-1) { Print("Ошибка во время копирования данных №",GetLastError()); } index_low=ArrayMinimum(Close2,index_high,WHOLE_ARRAY); if(copied2>0 && index_low<copied2) low=Close2[index_low]; СТРОКА КОДА из ошибки return(low); }
"copied" - в случае ошибки Вы продолжаете работать дальше (а нужно выходить). Что в итоге получается:
"copied"==-1, это ошибка, а значит копирования не произошло и РАЗМЕРНОСТЬ принимающего массива "Close2[]" равно нулю.
тра та та тра та та
в конце Вы пытаетесь что-то атм получить из массива "Close2[]": "low=Close2[index_low]" - но так как РАЗМЕРНОСТЬ принимающего массива "Close2[]" равно нулю, то Вы получаете ошибку выхода за пределы массива.
"copied" - в случае ошибки Вы продолжаете работать дальше (а нужно выходить). Что в итоге получается:
"copied"==-1, это ошибка, а значит копирования не произошло и РАЗМЕРНОСТЬ принимающего массива "Close2[]" равно нулю.
тра та та тра та та
в конце Вы пытаетесь что-то атм получить из массива "Close2[]": "low=Close2[index_low]" - но так как РАЗМЕРНОСТЬ принимающего массива "Close2[]" равно нулю, то Вы получаете ошибку выхода за пределы массива.
Спасибо! Попробую подумать, как быть.
А вообще какая цель данной функции? Может нужно переписать эту функцию будет.
При index_high >= ArraySize(Close2) будет Ваша ошибка.
2017.03.28 20:31:43.881 Core 1 2016.05.30 12:00:00 Ошибка5052
Спасибо! Ошибка 5052
Что за ошибка не знаю.
2017.03.28 20:31:43.881 Core 1 2016.05.30 12:00:00 Ошибка5052
Спасибо! Ошибка 5052
Что за ошибка не знаю.
ERR_SMALL_ARRAY | 5052 | Too small array, the starting position is outside the array |
2017.03.28 20:31:43.881 Core 1 2016.05.30 12:00:00 Ошибка5052
Спасибо! Ошибка 5052
Что за ошибка не знаю.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Vladimir Karputov, 2017.03.28 19:31
А вообще какая цель данной функции? Может нужно переписать эту функцию будет.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Ни как не могу разобраться. В тетере прекращается тестирование с ошибкой array out of range .
Грешу на этот код, без него все работает. Может, кто поможет?