Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 899

 
AlexeyVik:
Ну извини, я вчера был не очень трезв. Или не трезв очень.
)), бывает
 

Есть ещё вопрос, допустим я хочу, чтобы массив заполнился взятыми с индикатора (к примеру ATR) данными с каждого бара, начиная с первого сформировавшегося (№1)? То есть массив объявлен и  в  функции  старт уже производится инициализация. Как правильно это сделать?  

как то так?: 

for(int i=0; i<N; i=i++)

     {                      

         Mas[i]=iATR(NULL,0,1,i+1);

     } 

    или же нужно делать через:

for(int i=0; i<N; i=i++)                    

     {                       

         ArrayFill(Mas,i,1,iATR(NULL,0,1,i+1));          

     }

или совсем по другому?, пока у меня не получилось никак(, в чём то косячу, подскажите, заранее благодарен. 

 
lufer:

Есть ещё вопрос, допустим я хочу, чтобы массив заполнился взятыми с индикатора (к примеру ATR) данными с каждого бара, начиная с первого сформировавшегося (№1)? То есть массив объявлен и  в  функции  старт уже производится инициализация. Как правильно это сделать?  

как то так?: 

for(int i=0; i<N; i=i++)

     {                      

         Mas[i]=iATR(NULL,0,1,i+1);

     } 


Первый вариант достаточен. Только вот если нужны значения начиная с первого бара, разумнее было бы и цикл с 1 считать.
 
evillive:
Первый вариант достаточен. Только вот если нужны значения начиная с первого бара, разумнее было бы и цикл с 1 считать.
Да я пробовал и с 1 и с 0, всё равно что то не так, не записываются значения, когда прошу вывести некоторые  - выдаёт только ноли
 
lufer:
Да я пробовал и с 1 и с 0, всё равно что то не так, не записываются значения, когда прошу вывести некоторые  - выдаёт только ноли
Код прошения вывода покажите.
 
evillive:
Код прошения вывода покажите.

на всякий случай покажу весь код:

//+------------------------------------------------------------------+

extern int    N        =100;                       // Количество баров

       int    Mas[];                             // Объявление массива

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

int OnInit()
  { 
     ArrayResize(Mas,N,0);                // Установка размера массива      
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {                                       
   for(int i=0; i<N; i=i++)                     // Цикл записи данных
     {                      

          Mas[i]=iATR(NULL,0,1,i+1);           // Вычисление значений          
     }
       Alert(Mas[0],"," ,Mas[50],"," ,Mas[99]);      // Вывод на экран
   return;                                           // Выход из start
  }
//+------------------------------------------------------------------+

 

Для вставки кода используйте SRC

 
lufer:

на всякий случай покажу весь код:


сделайте массив типа double
 
evillive:
сделайте массив типа double
 Это не решает проблему, сейчас вообще как-то странно, видать что-то не верно в OnTick() - когда загружаю в окно терминала советник ничего не происходит, а когда пытаюсь удалить, то очень долго тупит терминал и только потом через некоторое время удаляется. Попробовал вручную присвоить значения нескольким элементам, все нормально. Что-то с циклом инициализации массива судя по всему.
 
lufer:
 Это не решает проблему, сейчас вообще как-то странно, видать что-то не верно в OnTick() - когда загружаю в окно терминала советник ничего не происходит, а когда пытаюсь удалить, то очень долго тупит терминал и только потом через некоторое время удаляется. Попробовал вручную присвоить значения нескольким элементам, все нормально. Что-то с циклом инициализации массива судя по всему.

Что значит "не решает"??? Вы в массив инт пихаете данные дабл меньше 1, естественно на выходе нули будут. Ну и цикл корявый был.

Вот такой код должен работать:

#property strict

extern int N=100;                       // Количество баров

double Mas[];                             // Объявление массива
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

int OnInit()
  { 
    ArrayResize(Mas,N);
     return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {                                       
       for(int i=0; i<N; i++)                     // Цикл записи данных
         {                      
    
              Mas[i]=iATR(NULL,0,5,i+1);           // Вычисление значений          
         }
           Print(DoubleToStr(Mas[0],_Digits),"," ,DoubleToStr(Mas[50],_Digits),"," ,DoubleToStr(Mas[99],_Digits));      // Вывод значений
  }
 
evillive:

Что значит "не решает"??? Вы в массив инт пихаете данные дабл меньше 1, естественно на выходе нули будут. Ну и цикл корявый был.

Вот такой код должен работать:

Нет, на счёт double Mas[] вы конечно же абсолютно верно мне подсказали (я почему-то посчитал, что в АТР количество пунктов в целых значениях исчисляется), суть была в том, что значения не выводились даже после изменения типа массива, но уже понял где косяк. Спасибо большое за помощь!