ArrayResize до нужного размера сначала, а потом с ним работать...
Странно, но теперь динамические массивы требуют обязательной инициализации. Вот такой код рабочий:
//+------------------------------------------------------------------+
//| test002.mq5 |
//| Copyright Copyright 2010, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| test001.mq5 |
//+------------------------------------------------------------------+
double test[];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
int gf=ArrayResize(test,10,5);
ArraySetAsSeries(test,1);
return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=0;i<10;i++)
{
test[i]=0.5;
}
Print(test[1]);
}
//+------------------------------------------------------------------+
Массив не отразмерен.
ArrayResize до нужного размера сначала, а потом с ним работать...
Странно. Когда создавал индикатор, то использовал динамические массивы, но при этом их не "отразмеривал". И всё прекрасно работает.
Но как только стал создавать эксперт для той же торговой стратегии, возникла вышеуказанная проблема.
Правильно ли я понимаю, что при создании экспертов необходимо всегда применять ArrayResize к динамическим массивам, даже когда нужный размер массива заранее неизвестен? В справочнике никаких указаний на эту тему обнаружить на удалось.
..Да и если бы нужный размер массива был известен, я бы использовал не динамический, а статический массив. В общем, интересует теоретическая (идеологическая) подоплёка вопроса.
Странно. Когда создавал индикатор, то использовал динамические массивы, но при этом их не "отразмеривал". И всё прекрасно работает.
Но как только стал создавать эксперт для той же торговой стратегии, возникла вышеуказанная проблема.
Правильно ли я понимаю, что при создании экспертов необходимо всегда применять ArrayResize к динамическим массивам, даже когда нужный размер массива заранее неизвестен? В справочнике никаких указаний на эту тему обнаружить на удалось.
..Да и если бы нужный размер массива был известен, я бы использовал не динамический, а статический массив. В общем, интересует теоретическая (идеологическая) подоплёка вопроса.
Странно. Когда создавал индикатор, то использовал динамические массивы, но при этом их не "отразмеривал". И всё прекрасно работает.
Динамический массив, привязанный к индикатору, управляется самой подсистемой индикатора автоматически. То есть, расчетные буферы индикатора автоматически ресайзятся вслед за ростом количества рабочих баров.
Если же динамический массив используется в обычной работе, то его нужно ресайзить вручную.
Ясно, если стоит код типа
SetIndexBuffer(1,OutBuffer,INDICATOR_DATA);то всё должно работать и без ресайза.
Динамический массив, привязанный к индикатору, управляется самой подсистемой индикатора автоматически. То есть, расчетные буферы индикатора автоматически ресайзятся вслед за ростом количества рабочих баров.
Если же динамический массив используется в обычной работе, то его нужно ресайзить вручную.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Объясните, пожалуйста.
При запуске на отладку простой программы (см. ниже) выдается сообщение об ошибке: "test001 (EURUSD,H1) Array out of range in 'test001.mq5' (25,7)" с указанием на строку " test_array[i]=0.0;".
Подскажите, в чём проблема?
========================================
//+------------------------------------------------------------------+
//| test001.mq5 |
//+------------------------------------------------------------------+
double test_array[];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
ArraySetAsSeries(test_array,true);
return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=0;i<10;i++)
test_array[i]=0.0;
}
//+------------------------------------------------------------------+