iMAonArray ??? что то я не понимаю:( - страница 3

 
LeonSi, Слава же писал используй ArraySetAsSeries. Попробовал принудительно менять тип массива, вот что получилось.
for(i=0; i<9; i++)
   {
   ArraySetAsSeries(buffer,true);
   for(z=0; z<300; z++)
      buffer[z]=iMA(NULL,iPer[i],26,0,MODE_SMA,PRICE_CLOSE,z);
   ArraySetAsSeries(buffer,false);
   ArraySetAsSeries(onarray,false);
   for(z=0; z<300; z++)
      onarray[z]=iMAOnArray(buffer,300,9,0,MODE_EMA,z);
   ArraySetAsSeries(onarray,true);
   one[i]=buffer[0];
   two[i]=onarray[0];
   };



За пределами цикла ничего не трогал. Какие-то значения выдает (не нулевые), но вот желания проверять правильно ли расчитана эксп.средняя от средней по close желания никакого.
Вообще, долго думал, так и не врубился, зачем ты хочешь заставить советник делать то, что должен делать индикатор. Он у тебя и ордера будет выставлять 300 баров назад? ))). Дождись тестера, расчитывай значения на нулевом баре, да гоняй его сколько хочешь.
С уважением.

 
#property copyright "Copyright © 2004, http://www.leonsi.nm.ru"
#property link      "http://www.leonsi.nm.ru"

int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
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++)
   {
   ArraySetAsSeries(buffer,true);
   for(z=0; z<300; z++)
      buffer[z]=iMA(NULL,iPer[i],9,0,MODE_SMA,PRICE_CLOSE,z)-iMA(NULL,iPer[i],26,0,MODE_SMA,PRICE_CLOSE,z);
   ArraySetAsSeries(buffer,false);
   ArraySetAsSeries(onarray,false);
   for(z=0; z<300; z++)
      onarray[z]=iMAOnArray(buffer,Bars,5,0,MODE_SMA,z);
   ArraySetAsSeries(onarray,true);
   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);
   }


И всеже! вот собранное все вместе! как пример! почему же оно и сейчас не работает?

твои предложения? из индюка через GlobalVariable передовать все эксперту?

 
Спасибо, поправил пример. Теперь красивше :)
 
из индюка через GlobalVariable передовать все эксперту?

а зачем через глобал?
есть такая штука - iCustom, посмотри, тебе понравится =)
 

Slawa 01.02.05 18:23

LeonSi, нужно иметь в виду, что iMAOnArray обрабатывает массивы слева направо (от старых данных к новым). чтобы в своих массивах данные расположить именно так, объявите массивы as series (ArrayAsSeries), либо самостоятельно организуйте изменение индекса задом наперёд. почему всё нормально, если написать циклы для каждого таймфрейма отдельно, для меня остаётся загадкой


Слава, iMAOnArray используется в пользовательском OsMA, но нет там никакой ArraySetAsSeries и никаких циклов задом наперед.
Вот кусок кода из OsMA
   for(int i=0; i<limit; i++)
      ind_buffer2[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd additional buffer
   for(i=0; i<limit; i++)
      ind_buffer3[i]=iMAOnArray(ind_buffer2,Bars,SignalSMA,0,MODE_SMA,i);
//---- main loop
   for(i=0; i<limit; i++)
      ind_buffer1[i]=ind_buffer2[i]-ind_buffer3[i];
//---- done



Получается, что iMA и iMAOnArray считаются в разные стороны? Из примера так и не понятно для чего в iMAOnArray второй параметр (total, который равен Bars).

 
Из примера так и не понятно для чего в iMAOnArray второй параметр (total, который равен Bars).

Я тоже не понял. :)
Пока не мешает, там будет видно.
 
а зачем через глобал?
есть такая штука - iCustom, посмотри, тебе понравится =)


спасибо! посмотрел! богатая вещица:)... просветите про формат указания валютной пары? NULL это смотреть на график к которому прекреплен.... а как указать к примеру EUR/USD или AUD/USD??? нигде не нашел описания формата? eurusd ? так наверное? кто подскажет?
 
EURUSD , и т.д. прописными буквами..
или #HPQ, например...
 
только не забудь в кавычки вставить, string всё таки ... ;)
 

Долго мучился с похожей проблемой, решил самостоятельно.

Вся проблема в следующем:

Если объявлять массив 

double buffer[300];
double onarray[300]; 

 то при работе через функцию for нужно учесть следующее:

for(z=0; z<300; z++) , строго меньше, но я сделал меньше либо ровно "299" 

Причина обращения: