Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 420

 
igrok333:
Есть функция, которая возвращает тип переменной?

например, пишешь.

int a=10;

потом пишешь:

functia(a);

а она тебе: ИНТ!

:)
string functia(int a) { return "ИНТ!"; } // внезапно
string functia(double a) { return "ДАБЛЬ!"; } // тоже неожиданно
 
igrok333:
Есть функция, которая возвращает тип переменной?

например, пишешь.

int a=10;

потом пишешь:

functia(a);

а она тебе: ИНТ!

:)

Из справки:

void OnStart() 
  { 
//---  
   CTrade trade;    
   double d_value=M_PI; 
   int i_value=INT_MAX; 
   Print("d_value: type=",GetTypeName(d_value), ",   value=", d_value); 
   Print("i_value: type=",GetTypeName(i_value), ",   value=", i_value); 
   Print("trade: type=",GetTypeName(trade)); 
//---  
  } 
//+------------------------------------------------------------------+ 
//| Возвращает в строковом виде тип                                  | 
//+------------------------------------------------------------------+ 
template<typename T> 
string GetTypeName(const T &t) 
  { 
//--- вернем тип в виде строки 
   return(typename(T)); 
//--- 
  }
 
WinProject:

Все делается гораздо проще. Создаете кнопку отображать (или используете одну из существующих кнопок). Далее при нажатии - всем нужным объектам устанавливается флаг видимости по всем ТФ. При отжатии кнопки, всем объектам выставляется свойство отображения на всех ТФ (или нужном если необходимо). Ничего удалять/перестраивать не придется. Просто нужно будет после этой операции перерисовать чарт.

Свойство объектов  OBJPROP_TIMEFRAMES.

 

Подскажите как запихнуть данные из индикатора в массив? То есть понятно что нужно объяить массив

double num_array[];  

а вот далее мне не совсем понятно...

 num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // массив с индексом [0]  равен МА, но если менять индекс на [1], то получается, что  num_array[1] равен 

этим же данным из индикатора что и num_array[0]. А такого не надо. Массив должен последовательно заполняться. И все что приходит в голову, это разбивать день на 24 

часа, объявлять уже двухмерный массив и к каждому часу присваивать индекс со своей  строкой и тд....  

Может быть есть более простой путь либо менее геморройный?  

 
Corvin85:

Подскажите как запихнуть данные из индикатора в массив? То есть понятно что нужно объяить массив

double num_array[];  

а вот далее мне не совсем понятно...

 num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // массив с индексом [0]  равен МА, но если менять индекс на [1], то получается, что  num_array[1] равен 

этим же данным из индикатора что и num_array[0]. А такого не надо. Массив должен последовательно заполняться. И все что приходит в голову, это разбивать день на 24 

часа, объявлять уже двухмерный массив и к каждому часу присваивать индекс со своей  строкой и тд....  

Может быть есть более простой путь либо менее геморройный?  


вижу так:

double num_array[];  

ArrayResize(num_array,24);

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

{

 num_array[i] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);

}
 
Vladislav Andruschenko:

вижу так:

double num_array[];  

ArrayResize(num_array,24);

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

{

 num_array[i] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);

}
А, получается через ArrayResize выставлять максимальное кол-во индексов в массиве и через цикл их прогонять. Огромное спасибо, но есть тогда вопрос, когда все индексы забьются данными из индюка, через ArrayFree их очищать, да? или он сам себя переписывать будет? или послt 24х все вообще остановиться? Извините конечно за тупые вопросы, но массивы для меня это вообще какая то темная лошадка с не известными функиями
 
Corvin85:
А, получается через ArrayResize выставлять максимальное кол-во индексов в массиве и через цикл их прогонять. Огромное спасибо, но есть тогда вопрос, когда все индексы забьются данными из индюка, через ArrayFree их очищать, да? или он сам себя переписывать будет? или послt 24х все вообще остановиться? Извините конечно за тупые вопросы, но массивы для меня это вообще какая то темная лошадка с не известными функиями
Ну смотря какую цель вы преследует. Я написал код заполнения массива данными по мА последних 24 баров. Он будет обновляется постоянно. 
 
Corvin85:
А, получается через ArrayResize выставлять максимальное кол-во индексов в массиве и через цикл их прогонять. Огромное спасибо, но есть тогда вопрос, когда все индексы забьются данными из индюка, через ArrayFree их очищать, да? или он сам себя переписывать будет? или послt 24х все вообще остановиться? Извините конечно за тупые вопросы, но массивы для меня это вообще какая то темная лошадка с не известными функиями

Массив = набор простых переменных, выстроенных в один ряд для удобства обращения к ним по индексу. Индекс - целая переменная для обращения к элементам массива по номеру для организации цикла. Индекс = счетчик номеров. ArrayFree = уничтожение массива - как бульдозером по ветхим домишкам. Правда можно снова восстановить с помощью ArrayResize. Ну а ArrayResize - это забор вокруг жилого массива. Тут наши - за забором чужие, туда лазить запрещено. В каждый дом заходить (присваивать новое значение элементу массива) можно многократно. Массив - это очень просто и для многих целей удобно. А кто боится массивов - тех ... Так что лучше скорее в них разобраться.

 
//+------------------------------------------------------------------+ 
//| Проверка массива                                                 | 
//+------------------------------------------------------------------+ 
#property strict
int m[10];
int n;

void OnStart() 
{ 
  ArrayInitialize(m,7);          Вывод();  // Заполнить семерками
  ArrayResize(m,7);              Вывод();  // Удалить 3 последних элемента
  ArrayResize(m,9);              Вывод();  // Увеличить размер
  m[1]=1;  m[7]=1;               Вывод();  // Изменить 2 элемента
  for(n=0; n<9; n++) m[n]=n*n;   Вывод();  // Заполнить квадратами номеров
  ArrayCopy(m,m,0,2,7);          Вывод();  // Копирование со сдвигом
  ArrayResize(m,ArraySize(m)-2); Вывод();  // Удалить 2 последних элемента
} 

void Вывод()
{
  string s="";
  for(n=0; n<ArraySize(m); n++)
  s+="  " + string(m[n]);
  Alert(ArraySize(m), ":", s);
}
Попробуйте запустить такой скрипт - и потренируйтесь
 
Artyom Trishkin:

Из справки:

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