Не присваивается значение элементу массива - почему???

 

Приветствую. Ничего не понимаю, прошу избавить меня от ощущения тающей связи с реальностью :)

не могу присвоить значение эллементу массива, который сопоставлен с буфером индикатора.

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Olive

double sa[],so[];


int init()
  {
   SetIndexStyle(0,DRAW_LINE,STYLE_DOT,1);
   SetIndexBuffer(0,sa);
   SetIndexLabel(0,"Prison average line " + period);
   
   SetIndexStyle(1,DRAW_NONE);
   SetIndexBuffer(1,so);
  }

int start()
{
   so[1]=100;
   
   Print("so[1]: " + so[1]);

}

грубо говоря вот так. so - это буферный массив, результатом принта печатается нулевое значение. Принт, естественно, это просто отладочная строка, сразу за присвоением. И все равно печатает ноль. Ничего не понимаю! Подскажите, что не так???

 
exhumer:

Приветствую. Ничего не понимаю, прошу избавить меня от ощущения тающей связи с реальностью :)

не могу присвоить значение эллементу массива, который сопоставлен с буфером индикатора.

so[1]=100;

Print("so[1]: " + so[1]);

грубо говоря вот так. so - это буферный массив, результатом принта печатается нулевое значение. Принт, естественно, это просто отладочная строка, сразу за присвоением. И все равно печатает ноль. Ничего не понимаю! Подскажите, что не так???

сделайте инициализацию массива

double myarray[10];

ArrayInitialize(myarray,2.1);

 
sanyooooook:

сделайте инициализацию массива

double myarray[10];

ArrayInitialize
ArrayInitialize(myarray,2.1);


я тут немного подправил стартовый пост - у меня массивы сопоставлены с буферами индикатора. и они автоматически инициализируются в функции инициализации и распределения буфером. По стандарту mql4 не рекумендуется использовать ArrayInitialize для инициализации массивов буферов индикатора, по вышеуказанной причине....

так что они считай фактически инициализированы. что то тут другое...

 

Все нормально

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Olive

extern int period=5;

double sa[],so[];


int init()
  {
   SetIndexStyle(0,DRAW_LINE,STYLE_DOT,1);
   SetIndexBuffer(0,sa);
   SetIndexLabel(0,"Prison average line " + period);
   
   SetIndexStyle(1,DRAW_NONE);
   SetIndexBuffer(1,so);
  }

int start()
{
   so[1]=100;
   
   Alert("so[1]: " + so[1]);

}
 
у меня работает
 
exhumer:

Приветствую. Ничего не понимаю, прошу избавить меня от ощущения тающей связи с реальностью :)

не могу присвоить значение эллементу массива, который сопоставлен с буфером индикатора.

so[1]=100;

Print("so[1]: " + so[1]);

грубо говоря вот так. so - это буферный массив, результатом принта печатается нулевое значение. Принт, естественно, это просто отладочная строка, сразу за присвоением. И все равно печатает ноль. Ничего не понимаю! Подскажите, что не так???

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

  • если so[] - это индикаторный буфер, то, как вариант: нет инициализации (ошибка при инициализации) буфера so в init().
  • использование индикаторных буферов в скриптах и советниках. Пример такого скрипта:
//+------------------------------------------------------------------+
//|                                                            1.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"
double so[];

int init()
  {
//---- indicators
   IndicatorBuffers(4);
   SetIndexBuffer(0, so);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   so[1]=100;

Print("so[1]: " + so[1]);

//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Спасибо всем, что не бросили на произвол судьбы :)

Дело, как часто бывает, оказалось в чрезмерной кривизне рук. Все действительно работает корректно, вот только каменты на экране и принты обновились только после удаления/установки индикатора на график, а не после рекомпиляции, как я ожидал.

 

Анекдот вспомнился...

Автобус резко затормозил. Кто стоял - короче, черт знает что там было. Один пассажир после того, как все устаканилось, начал истерично выкликивать:

- Где мой зеленый шарик?! Где мой зеленый шарик?!

Все, ужаснувшись подачей, начали искать. Ищут, ищут...

Через нектр. время виновник торжества говорит (засовывая палец в нос):

- Ладно. Я себе еще скатаю...