Ошибки, баги, вопросы - страница 548

 
ivandurak:

Доброго ночера . Только начал плотно изучать . Кажетсяэто явный баг . Код индикатора привожу ниже . там если одну строку ( она помечена ) коментировать . то вроде как работать начинает в чем проикол так и не понял . В документации по этому поводу ничего не нашел искал честно .

У вас не распределён массив Raznica. Он объявлен но ему не выделена память, при этом он не является индикаторным буфером (под буфера память распределяется автоматически).

Вот тут:

   SetIndexBuffer(0,BaseMaBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,MaForMaBuffer,INDICATOR_DATA);

вы говорите компилятору что массивы BaseMaBuffer и MaForMaBuffer являются индикаторными буферами. Остальные массивы нужно распределять через

ArrayResize()
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
ivandurak:

Доброго ночера . Только начал плотно изучать . Кажется это явный баг . Код индикатора привожу ниже . там если одну строку внизу ( она помечена ) коментировать . то вроде как работать начинает в чем проикол так и не понял . Ситуацию можно обойти , если массиву Raznica[] указывать явный размер . В документации по этому поводу ничего не нашел искал честно . 

 

 

Бага ни какого нет, для динамических массивов необходимо задавать размер с помощью функции

int  ArrayResize(
   void  array[],              // массив, переданный по ссылке
   int   new_size,             // новый размер массива
   int   reserve_size=0        // резервное значение размера (избыточное)
   );

Функция может быть применена только к динамическим массивам. При этом необходимо иметь ввиду, что нельзя изменять размер для динамических массивов, назначенных в качестве индикаторных буферов функцией SetIndexBuffer(). Для индикаторных буферов все операции по изменению размера производит исполняющая подсистема терминала.


 
Все понял спз за грамотный подзатыльник . Еще смэл вопрос , если массиву повторно увеличить размер то что произойдет с данными . И еще изменять направление индексации как в таймсерии можно только у динамического массива ?. 
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
ivandurak:
Все понял спз за грамотный подзатыльник . Еще смэл вопрос , если массиву повторно увеличить размер то что произойдет с данными . И еще изменять направление индексации как в таймсерии можно только у динамического массива ?. 

Данные останутся на месте, если уменьшить а потом востановить то неизвестно (результат неопределён).

Кстати направление индексации меняет только обращение к индесам массив распределяется в том же направлении.

То есть данные переразбивкой массива сдвинуть не получится.

 

Уже об этом сообщалось, но в тестере постоянно сбрасывается на 10000$ заданное пользователем начальное значение депозита.

Имеющийся набор начальных значений достаточно кривой. Добавили бы в него хотя бы 1000$.

build 523

Win XP 

 
Было так или что-то сломалось... Вобщем допускается свободный доступ к protected методу в непотомках
#include <Arrays/List.mqh>
//---------------------------------------
class CBasket;

class CFruit: public CObject {
private:
        double _weight;
protected:
        double GetWeight(){return _weight;}     
public:
        CFruit(double weight){_weight = weight;};
        ~CFruit(){};
};
//---------------------------------------
class CBasket {
private:
        CList _fruits;
protected:
public:
        CBasket(){};
        ~CBasket(){};
        double Weight() {
                double weight = 0;
                for(CFruit* f = _fruits.GetFirstNode(); f != NULL; f = _fruits.GetNextNode()) {
                        weight += f.GetWeight(); //свободный вызов protected метода другого класса
                }
                return weight;
        }
        
        void Attach(CFruit* f) {
                _fruits.Add(f);
        }
};
//---------------------------------------
int OnInit() {
        CBasket* b = new CBasket();
        
        CFruit* f1 = new CFruit(3.5);
        CFruit* f2 = new CFruit(6.5);
        b.Attach(f1);
        b.Attach(f2);
        Print(b.Weight());
      
   return(0);
}
//---------------------------------------
 

После оптимизации не открывается файл с результатами,

Билд 527 + Офис 2007 

В логе ошибок такие данные 


Ошибка XML в "Таблица"
Причина: Ошибочное значение
Файл: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Группа: Cell
Тег: Data
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Ошибка XML в "Таблица"
Причина: Ошибочное значение
Файл: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Группа: Cell
Тег: Data
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Ошибка XML в "Таблица"
Причина: Ошибочное значение
Файл: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Группа: Cell
Тег: Data
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Ошибка XML в "Таблица"
Причина: Ошибочное значение
Файл: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Группа: Cell
Тег: Data
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Ошибка XML в "Таблица"
Причина: Ошибочное значение
Файл: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Группа: Cell
Тег: Data
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000 

 

и т.д. 

 

Думаю что Вам выдает пустое значение.

Почитать можно

https://www.mql5.com/ru/docs/constants/namedconstants/otherconstants 

EMPTY_VALUE

Пустое значение в индикаторном буфере

DBL_MAX

 

 

DBL_MAX

Максимальное значение, которое может быть представлено типом double

1.7976931348623158e+308

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
Vigor:
Было так или что-то сломалось... Вобщем допускается свободный доступ к protected методу в непотомках

Спасибо за сообщение, ошибка исправлена, исправление войдёт в следующий билд.
 
Karlson:

Думаю что Вам выдает пустое значение.

Почитать можно

https://www.mql5.com/ru/docs/constants/namedconstants/otherconstants 

EMPTY_VALUE

Пустое значение в индикаторном буфере

DBL_MAX

 

 

DBL_MAX

Максимальное значение, которое может быть представлено типом double

1.7976931348623158e+308

 

А как могут попадать пустые значения в файл? В окне тестера там нормальные результаты оптимизации.
Причина обращения: