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

 

Здравствуйте всем!

Помогите, пожалуйста, новичку разобраться с использованием массивов в классах. Вырезал ключевой код в маленький кусок для представления проблемы:

class base
{
protected:
int Stf_ZZ_Handle;
double Stf_ZZ_Val[];
public:
void InitArray()
  {
   Stf_ZZ_Handle=iCustom(_Symbol,_Period,"Examples\\ZigZag",12,0,0);
   ArraySetAsSeries(Stf_ZZ_Val,true);
   CopyBuffer(Stf_ZZ_Handle,0,0,200,Stf_ZZ_Val);
   Print("array[0]= ",Stf_ZZ_Val[0]);
  }
};
class second : public base
  {
    public:
    void Printer() {Print("array[0]= ",Stf_ZZ_Val[0]);}
  };
int OnInit()
  {
//---
base Cbase;
second Csecond;
Cbase.InitArray();
Csecond.Printer();
//---
   return(0);
  }

При выполнение получаю ошибку  Array out of range  в строке класса наследника, в родительском классе получаю ожидаемый 0.

2012.02.13 00:41:25    2011.01.01 00:00:00   array out of range in 'test1.mq5' (29,36)
2012.02.13 00:41:25    2011.01.01 00:00:00   array[0]= 0.0

   void Printer() {Print("array[0]= ",Stf_ZZ_Val[0]);}

Я так понимаю что неправильно передаю (или обращаюсь) массив в класс наследник, хотя с обычными переменными при таком обращении ошибок не возникает.

Что я делаю не так?

 

Очень часто в последнее время вижу такое сообщение при запуске файлов *.mq5:

 

В чём может быть проблема? 

 
Radix:

Здравствуйте всем!

base Cbase;
second Csecond;
Cbase.InitArray();
Csecond.Printer();

Что я делаю не так?

Смотрите, при объявлении во второй строчке "second Csecond;" у Вас метод InitArray() не вызывается, правильно? При этом сам по себе объект Csecond уже создан. Вот и получается, что когда в четвёртой строчке обращаетесь к методу "Csecond.Printer();", обращение идёт к неинициализированному и неотразмеренному массиву Stf_ZZ_Val[].

 
Скажите, пожалуйста, снято ли ограничение в 1000 баров доступной истории с даты старта (как в МТ4) при тестировании?
 
muallch:

Скажите, пожалуйста, снято ли ограничение в 1000 баров доступной истории с даты старта (как в МТ4) при тестировании?

Поясните, что Вы имеете в виду?

В пятёрке загружаются данные с предыдущего года от начала тестирования. То есть, если Вы тестируете с 2012.02.01 то данные будут подгружатьсяс 2011.01.01

Исключение составляет тестирование на днёвках, недельках и месяцовках - там расчёт начала данных ведётся из необходимости наличия 100 баров перед началом тестирования.

 
stringo:

Поясните, что Вы имеете в виду?

При запуске, напр. с 2011.01.01 по дневкам нужна история с, как минимум, 3000 баров. Т.е. приходится задавать заведомо больший период, чем нужно для тестирования, а "точку начала" отслеживать программно. В чем сложность предоставления всей (или по запросу) истории при тестировании?
 
Кроме того, встает вопрос о доступности истории не при тестировании, а в реальной автоторговле. Как быть в этом случае? Тестер-то можно перехитрить...
 
muallch:
При запуске, напр. с 2011.01.01 по дневкам нужна история с, как минимум, 3000 баров. Т.е. приходится задавать заведомо больший период, чем нужно для тестирования, а "точку начала" отслеживать программно. В чем сложность предоставления всей (или по запросу) истории при тестировании?

Сложности нет никакой. Мы не захотели вводить дополнительную галку в настройках тестирования, которая была бы непонятна большинству пользователей и в большом количестве случаев использовалась бы неверно.

Задавать заведомо больший период - это нормальное решение.

Есть ещё решение - заказать тестирование на месяцовке, а индикаторы и ценовые данные использовать дневные (то есть, вместо PERIOD_CURRENT явно выставлять PERIOD_D1)

 
muallch:

Кроме того, встает вопрос о доступности истории не при тестировании, а в реальной автоторговле. Как быть в этом случае? Тестер-то можно перехитрить...
Вы можете подкачать всю доступную историю. Посмотрите в документации организацию доступа к данным
 

Благодарю за разъяснения!

В догонку: тестирую с удаленными агентами через инет. Почему агенты получают полный объем минутной истории, если я тестирую по ценам открытия дневок? Время подготовки перед началом тестов просто неприличное - час, например. Хорошо тем, у кого труба в 10-100 мегабит, а тут сидишь на жалкой мегабитке...

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
Причина обращения: