Подскажите, в чем может быть дело.
.......................
.......................
Вы не выделили память под массив. В индикаторе Вы связали указатель на массив (это то, что описано как double bbMacd[]; с одним из индикаторных буферов, память под которые выделена.
SetIndexBuffer(...);
В советнике буферов нет и просто некуда записывать данные.
Странно, что терминал не "падает" с крэшем - это наверное было бы полезнее.
Для того, чтобы память была выделена статически под N элементов нужно описывать double bbMacd[ N]; где N - заданное число, например. double bbMacd[ 100]; выделит память под 100 элементов типа double.
Для динамического размещения - функция ArrayResize :
int ArrayResize( object&array[], int new_size)
Устанавливает новый размер в первом измерении массива. При успешном выполнении функция возвращает количество всех элементов, содержащихся в массиве после изменения размера, в противном случае возвращает -1, и массив не меняет размеры.
Замечание: массив, объявленный на локальном уровне в какой-либо функции, у которого был изменен размер, останется неизменным после завершения работы функции. При повторном вызове функции такой массив будет иметь размер, отличный от объявленного.
Успехов.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В индикаторе этот код работает, а когда я запускаю этот же код в эксперте в тестере стратегий, то увы :((
Проблема, в том, что массив bbMacd получается нулевым, т.е. все элементы массива равны 0, хотя должен был рассчитаться MACD.
Ниже проблемный код:
int FastLen = 12; int SlowLen = 26; double bbMacd[]; int init() { IndicatorBuffers(1); SetIndexBuffer(0, bbMacd); return(0); } void BB_MACD_ind() { int limit; int counted_bars = IndicatorCounted(); //---- check for possible errors // if(counted_bars < 0) // return(false); //---- last counted bar will be recounted if(counted_bars > 0) counted_bars--; limit = Bars - counted_bars; //---- for(int i = 0; i < limit; i++) bbMacd[i] = iMA(NULL, 0, FastLen, 0, MODE_EMA, PRICE_CLOSE, i) - iMA(NULL, 0, SlowLen, 0, MODE_EMA, PRICE_CLOSE, i); }