iMAonArray ??? что то я не понимаю:(

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

//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                        Copyright © 2004, http://www.leonsi.nm.ru |
//|                                          http://www.leonsi.nm.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, http://www.leonsi.nm.ru"
#property link      "http://www.leonsi.nm.ru"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- TODO: Add your code here.
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: Add your code here.

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//---- TODO: Add your code here.
double buffer[300];
double onarray[300];
double one[9];
double two[9];
double iPer[9]={PERIOD_MN1,PERIOD_W1,PERIOD_D1,PERIOD_H4,PERIOD_H1,PERIOD_M30,PERIOD_M15,PERIOD_M5,PERIOD_M1};
int i;
int z;   

for(i=0; i<9; i++)
   {
   for(z=0; z<300; z++)
      buffer[z]=iMA(NULL,iPer[i],26,0,MODE_SMA,PRICE_CLOSE,z);
   for(z=0; z<300; z++)
      onarray[z]=iMAOnArray(buffer,300,9,0,MODE_EMA,z);
   one[i]=buffer[0];
   two[i]=onarray[0];
   };

Comment("iMA   MN=",one[0]," W=",one[1]," D=",one[2]," H4=",one[3]," H1=",one[4]," \n",
        "Array MN=",two[0]," W=",two[1]," D=",two[2]," H4=",two[3]," H1=",two[4]);
//----
   return(0);
  }
//+------------------------------------------------------------------+



почему значения переменой TWO = 0???
и что означает total - Items number to counting. в операторе iMAonArray??? длина буфера? поставил туда Bars и не увидел никаких перемен... если можно растолкуйте что к чему?

 
ObjectCreate("text_object", OBJ_TEXT, 0, T'2004.02.20 12-30', 1.0045);



Все чертится! только как цвет задать для этого объекта? в MQL2 в конце всего задовался цвет! а как тут быть?

 
посмотрите функцию ObjectSet. используйте значение свойства OBJPROP_COLOR
 
посмотрите функцию ObjectSet. используйте значение свойства OBJPROP_COLOR

Спасибо! помогло! напоминаю про присланный вам пример!...
самое странное что если написать все в лоб то работает:
for(i=0; i<bars; i++)
{
zzz1[i]=iMA(.......,i);
zzz2[i]=iMA(.......,i);
zzz3[i]=iMA(.......,i);
};
for(i=0; i<bars; i++)
{
xxx1[i]=iMAonArray(zzz1,.....);
xxx2[i]=iMAonArray(zzz2,.....);
xxx3[i]=iMAonArray(zzz3,.....);
};
 
LeonSi, нужно иметь в виду, что iMAOnArray обрабатывает массивы слева направо (от старых данных к новым). чтобы в своих массивах данные расположить именно так, объявите массивы as series (ArrayAsSeries), либо самостоятельно организуйте изменение индекса задом наперёд. почему всё нормально, если написать циклы для каждого таймфрейма отдельно, для меня остаётся загадкой
 
LeonSi, нужно иметь в виду, что iMAOnArray обрабатывает массивы слева направо (от старых данных к новым). чтобы в своих массивах данные расположить именно так, объявите массивы as series (ArrayAsSeries), либо самостоятельно организуйте изменение индекса задом наперёд. почему всё нормально, если написать циклы для каждого таймфрейма отдельно, для меня остаётся загадкой

(ArrayAsSeries) - нет такого:(... сколько тут не бился:( ничего не выходит! немогли бы вы подправить 1 пример? и выложить сдесь?... думаю что это был бы для многих наглядный пример... Заранее благодарен
 
пардон. ArraySetAsSeries
 
Та же беда! Ничего не могу понять. Есть объявление

double PrimaryBuffer[];
double SmoothedBuffer[];



Далее в start() по циклу обсчитывается PrimaryBuffer, и идет попытка получить сглаженные значения, опять же через цикл:

SmoothedBuffer[i]=iMAOnArray(PrimaryBuffer,Bars,SmoothPeriod,0,MODE_SMA,i);


В итоге выходят одни бублики, то есть нули.
Так же непонятен параметр

total - Items number to counting. в операторе iMAonArray??? длина буфера? поставил туда Bars и не увидел никаких перемен... если можно растолкуйте что к чему?
Присоединяюсь к предыдущему оратору.

А пример вообще шедевр!
Sample

if(iMAOnBuffer(ExtBuffer,0,21,0,MODE_EMA,0)>iMAOnBuffer(ExtBuffer,0,60,0,MODE_EMA,0)) return(0);


Долго я искал функцию iMAOnBuffer() :)
Самое подлое, что примеры со Стохастиком и Осмой работают, и вроде написаны также.

 
Rosh, Вы привели два фрагмента кода, но среди них нет какой-либо информации во-первых, о размере массивов PrimaryBuffer и SmoothedBuffer, во-вторых о том, как заполнен массив PrimaryBuffer. без этой информации трудно дать ответ.
вы можете задавать количество рассчитываемых элементов, меньшее, чем размер массива
 
PrimaryBuffer считает корректно, я проверял. Считается он на основе цифровых фильтров. Размер массива(количество обсчитываемых баров) я менял от Bars(max) до конкретного значения (160). В init() задается название индикатора, которое выводится в окошке индикатора (сам индикатор в отдельном окне, как OSMA).

  	short_name="MyInduk Smoothed ";
	switch(SmoothMode)
	  {
	   case 0: name="SMA"; break;
      case 1: name="EMA"; break;
      case 2: name="SSMA"; break;
      case 3: name="LMA"; break;
     }
   IndicatorShortName(short_name+name+"("+SmoothPeriod+")");


Если я забиваю строку

SmoothedBuffer[i]=iMAOnArray(PrimaryBuffer,Bars,SmoothPeriod,0,MODE_SMA,i);
комментами, то эта надпись появляется, если нет, то исчезает. Отсюда я делаю вывод, что блок init() не может выполниться, если не выполняется блок start() - это я так, к слову, может другим это наблюдение пригодится.
Далее, я забыл , что логи МТ и логи индикаторов теперь в разных папках находятся, поэтому думал, что МТ не ругается.
Сейчас поднял нужный лог, там выдает:
13:19:31 MyInduk Smoothed EURUSD,H4: index 0 is out of range [0-0]


Поэтому, так как вина наполовину на мне (потому что я не понимаю суть всех параметров в функции iMAOnArray, а именно total), прошу объяснить только , как бороться с этой ошибкой - почему нулевой индекс не входит в этот range, и почему размер массива получился такой, хотя обращение шло как

iMAOnArray(PrimaryBuffer,Bars,SmoothPeriod,0,MODE_SMA,i);

?

 
объявление массива
double SmoothedBuffer[];


говорит о его нулевой длине.
либо указывайте конкретный размер сначала, либо делайте ArrayResize, ArrayCopy, ArrayCopySeries или SetIndexBuffer, после чего размер будет назначен