статический массив ? - страница 4

 
Для i=Bars во втором цикле выводит все элементы массива, но не значения, а all = 0

Я запутался

убрал окончание i-- в первом цикле упс. но это не повлияло.

 

С одним небольшим изменением ваш код, кажется, делает что-то...

2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[0]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[1]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[2]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[3]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[4]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[5]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[6]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[7]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[8]= 0

Когда вы читали книгу о массивах, видели ли вы, где говорится об этом?

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

 
RaptorUK:

С одним небольшим изменением ваш код, кажется, делает что-то...

2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[0]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[1]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[2]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[3]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[4]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[5]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[6]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[7]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[8]= 0

Когда вы читали книгу о массивах, видели ли вы, где говорится об этом?

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

Да.

Как я понял, double v1[] определяет тип данных глобально и перед start().
Затем [i] инициализирует массив, сообщая ему, сколько элементов в массиве, в данном случае 1 измерение с элементами = Bars, однако число меняется при деинкрементации i--.
верно?

Итак, если число элементов деинкрементируется, то как буфер сохраняет и публикует индикатор, если число элементов больше не существует?
Или, наверное, я должен сказать, что происходит с элементами при деинкрементации [i]?
Они просто исчезают? Они все еще хранятся в v1[i], чтобы на них можно было ссылаться, или они исчезают?

Если я смогу выяснить это, возможно, я смогу понять, как ссылаться на них или, если они исчезли, я смогу понять, как сохранить их для использования.
Я не могу понять, что оператор else, похоже, может ссылаться на v1[i]=v1[i+1] Так как же он может ссылаться на v1[i], если в этот момент v1[i] = 0, когда я печатаю в этой точке.

Это вроде как имеет смысл для = 0 в некотором смысле, потому что если массив пуст, то он будет печатать пустой массив как 0, так как в массиве нет элементов.

Я не уверен, что действительно понимаю это, но я продолжаю думать об этом и читать документ снова и снова.

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

Я думал, что это просто подсчет одного числа, как в Bar=количество баров на графике.
Когда я печатаю Bars, это дает мне 1002 на 5-минутном графике, и я думаю, что это одно измерение.


Буду продолжать работать над этим.

 

Если вы хотите сделать массив больше (или меньше), вам нужно использовать ArrayResize... Массив - это такая же переменная, как и любая другая ... просто их может быть много, и вы можете легко получить к ним доступ ....

Скопируйте этот код и запустите его как скрипт, как вы думаете, что получится на выходе?

//+------------------------------------------------------------------+
//|                                                  TestArray.mq4   |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      ""


// #property indicator_chart_window



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   {
   double test[];
   
   test[39] = 45.6;
   Print("test[39]= ",test[39] );
   

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

     
 
2011.09.21 07:54:26 none EURUSD,M5: removed
2011.09.21 07:54:26 none EURUSD,M5: uninit reason 0
2011.09.21 07:54:26 none EURUSD,M5: deinitialized
2011.09.21 07:54:26 none EURUSD,M5: test[39]= 0
2011.09.21 07:54:26 none EURUSD,M5: initialized


Вот что выдает скрипт Я скопировал его в точности

Я просто дважды щелкнул по нему и он запустился и вот что появляется на вкладке эксперты

В журнале скрипта просто написано
2011.09.21 07:54:26 Script none EURUSD,M5: removed
2011.09.21 07:54:26 Script none EURUSD,M5: loaded successfully

Я думал, что должен увидеть 45.6 в качестве вывода? Я не прав?

Я создал свой фиксированный массив[5] = {1,2,3,4,5}

И, кажется, могу вывести Print[5] или Print[3] и т.д.

дайте мне вставить скобки и посмотреть скрипт снова





 

Хорошо, хорошо... теперь отредактируйте эту строку...

. ... и попробуйте снова.

double test[];

to

double test[40];
 
2011.09.21 08:07:58 none EURUSD,M5: uninit причина 0
2011.09.21 08:07:58 none EURUSD,M5: деинициализация
2011.09.21 08:07:58 none EURUSD,M5: test[39]= 45.6


Черт, надо бежать, вернусь через пару часов.

Может быть, я смогу еще немного подумать об этом за рулем.

 

Здесь действительно не о чем думать. ...

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

Вы должны объявить количество элементов в массиве ...

 

Интересно
Я думал, что объявление количества элементов делается с помощью v1[i]? Поскольку i=Bars, я думал, что это то же самое, что сказать v1[Bars], который является любым числом.


Если оно не объявлено, то я не понимаю, как индикатор узнает, что такое v1[i], если я тоже не могу на него сослаться?
Этот же скрипт работает на версии индикатора и хранит это в буфере v1[], так откуда он знает, как ссылаться на буфер, чтобы нарисовать линию?

Сейчас это работает на индикаторе. Это другая тема?

 

Да, индикаторные буферы обрабатываются иначе, чем обычные массивы.

v[i] не является объявлением массива, это просто один из элементов ... но double v[]; - это массив с нулевыми элементами ... поэтому v[anything] всегда = 0