Скачать MetaTrader 5

Ребята помогите плиз с iМА!

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ведешь свой блог? Размести в нем ссылку на MQL5.community и заработай!
dronsm
19
dronsm 2015.03.17 10:26 

Не могу приклеить массив к последнему значению MA!

Задача: Получить максимальную и минимальную цену на последних 100 барах iMA 

Задрался уже с for'м, i Lowest, Highest, Фигаест... 8((( 

 double MA14=iMA(Symbol(),PERIOD,14,0,MODE_SMA,PRICE_CLOSE,???);

Mikhail Filimonov
5931
Mikhail Filimonov 2015.03.17 11:44  
dronsm:

Не могу приклеить массив к последнему значению MA!

Задача: Получить максимальную и минимальную цену на последних 100 барах iMA 

Задрался уже с for'м, i Lowest, Highest, Фигаест... 8((( 

 double MA14=iMA(Symbol(),PERIOD,14,0,MODE_SMA,PRICE_CLOSE,???);

int  iMA(
   string               symbol,            // имя символа
   ENUM_TIMEFRAMES      period,            // период
   int                  ma_period,         // период усреднения
   int                  ma_shift,          // смещение индикатора по горизонтали
   ENUM_MA_METHOD       ma_method,         // тип сглаживания
   ENUM_APPLIED_PRICE   applied_price      // тип цены или handle
   );

Не double, а int возвращаемое значение.

И что Вы хотите "втиснуть" вместо знаков ??? 

int MA14 = iMA( Symbol(), PERIOD_H1 , 14, 0, MODE_SMA, PRICE_CLOSE );
Sergey Dzyublik
4818
Sergey Dzyublik 2015.03.17 11:55  
Он же про 4-ку скорее всего спрашивал))
Alexey Kozitsyn
6375
Alexey Kozitsyn 2015.03.17 11:55  
dronsm:

Не могу приклеить массив к последнему значению MA!

Задача: Получить максимальную и минимальную цену на последних 100 барах iMA 

Задрался уже с for'м, i Lowest, Highest, Фигаест... 8((( 

 double MA14=iMA(Symbol(),PERIOD,14,0,MODE_SMA,PRICE_CLOSE,???);

После получения данных из индикатора, используйте функцию ArrayMinimum() или ArrayMaximum().
dronsm
19
dronsm 2015.03.18 04:28  

ArrayMinimum() - это понятно. но он копает в массиве который я не знаю как вытащить из iMA.

Что то я запутался.

double MA14=iMA(Symbol(),PERIOD,14,0,MODE_SMA,PRICE_CLOSE,???); 

Там где вопросы крепим смещение от последнего бара. Получаем значение на одном каком то баре. А мне нужно на 100 последних.

Видимо массив.  Но как так прописать не пойму...

Задача: Получить все значения МА за последние 100 баров!

Не прописывать же эту строку 100 раз! 8))))))))) что видимо мне светит, а потом перебирать все переменные! Гы.. 8)               

double MA14=iMA(Symbol(),PERIOD,14,0,MODE_SMA,PRICE_CLOSE,???);

 ----------------

Как то так? Или я что то не догоняю! 8\

 for(int i=0; i<100; i++){

   double MA14=iMA(Symbol(),PERIOD,14,0,MODE_SMA,PRICE_CLOSE,i);

  } 

   double max=ArrayMaximum(???,WHOLE_ARRAY,0);    ???-что там рисовать

   double min=ArrayMaximum(???,WHOLE_ARRAY,0); 

-------  или же как то так?:

 

   double MA14=iMA(Symbol(),PERIOD,14,0,MODE_SMA,PRICE_CLOSE,???); 

   double bar[100]={ ?сюда нужно запихнуть, как то, значения iMA 100та последних баров? };
   double    max=ArrayMaximum(bar,WHOLE_ARRAY,0);

   double    min=ArrayMinimum(bar,WHOLE_ARRAY,0); 

Хелп! Напишите кусочек кода хотя бы...  а то совсем запутался...  У меня с массивами в голове  совсем беда.... 8(((((((

Vladimir Karputov
Модератор
45571
Vladimir Karputov 2015.03.18 05:39  

Вы пишите в MQL4 или MQL5?

А простой пример работы с iMA - индикатор "Alligator". 

Alexey Kozitsyn
6375
Alexey Kozitsyn 2015.03.18 05:51  
dronsm:

Хелп! Напишите кусочек кода хотя бы...  а то совсем запутался...  У меня с массивами в голове  совсем беда.... 8(((((((

Уточню, Вы на mq4 хотите получить данные? И еще:

Задача: Получить все значения МА за последние 100 баров! 

Надеюсь, Вы понимаете, что получаете только последнее значение индикатора на каждом баре?

Если да, то код получения выглядит так: 

// Получаем значения МА с периодом 14 на текущем символе/ТФ
// Чтобы получить значение на конкретном баре, нужно указать номер этого бара в последнем параметре функции: shift
double array[ 100 ];             // Массив для получения данных
for( int i = 0; i < 100; i++ )   // Цикл по последним 100 свечам (вкл. текущую свечу, значение МА которой еще может измениться)
   {
    array[ i ] = iMA( _Symbol, _Period, 14, 0, MODE_SMA, PRICE_CLOSE, i );
   }
dronsm
19
dronsm 2015.03.18 06:39  
Tapochun:

Уточню, Вы на mq4 хотите получить данные? И еще:

Надеюсь, Вы понимаете, что получаете только последнее значение индикатора на каждом баре?

Если да, то код получения выглядит так: 

8)))), Tapochun Большое Спасибо! Да я понимаю, что получаю PRICE_CLOSE. Супер. То что надо!!! Будем учиться... 8) В чем разница mql4 и mql5? вроде основа одна! я в MT4.
Alexey Kozitsyn
6375
Alexey Kozitsyn 2015.03.18 06:49  
dronsm:

   

В mql5 совсем можно запариться получать значения. Хотя, в конечном итоге получается немного удобнее. Для начала нужно будет получить хэндл индикатора, проверить его, а уже потом получать данные, но не в цикле, а функцией, с указанием начального числа и количества нужных значений, либо с указанием начальной даты и количества, либо с указанием начальной и конечной дат. Посмотрите в документации CopyBuffer() если интересно.
Vladimir Karputov
Модератор
45571
Vladimir Karputov 2015.03.18 07:10  
dronsm:
8)))), Tapochun Большое Спасибо! Да я понимаю, что получаю PRICE_CLOSE. Супер. То что надо!!! Будем учиться... 8) В чем разница mql4 и mql5? вроде основа одна! я в MT4.

На форуме иногда бывает неприятность: Форум: при ответе курсор заскакивает в цитату

Разница между MQL4 и MQL5: в "пятёрке" Вы в OnInit() создаёте хендл индикатора и потом уже в OnCalculate() с помощью хендла созданного индикатора копируете данные из индикаторного буфера. В "четвёрке" Вы обращаетесь к iMA на каждом тике. Как пример я уже советовал рассмотреть индикатор:

forexman77
2112
forexman77 2015.03.18 11:05  
dronsm:

Не могу приклеить массив к последнему значению MA!

Задача: Получить максимальную и минимальную цену на последних 100 барах iMA 

Задрался уже с for'м, i Lowest, Highest, Фигаест... 8((( 

 double MA14=iMA(Symbol(),PERIOD,14,0,MODE_SMA,PRICE_CLOSE,???);

Если рассматриваем MQL4, то код будет следующим:

extern int       p            =120;//количество для заполнения буфера
double val[];//массив с данными индикатора
///////////////////////////////////то что выше размещаем на глобальном уровне, то есть, где внешние настройки советника, ниже код в старте
ArrayInitialize(val,0);//инициализация массива вначале нолем

for(int k=0;k<p;k++)//цикл для заполнения массива данными с индикатора
{
ArrayResize(val_min,p);//установка размера массива
val[k]=iCustom(NULL,0,"indikator",period,razbeg,0,k);//собственно сами данные на каждом индексе
}

int iMin=ArrayMinimum(val,WHOLE_ARRAY,0);//индекс минимума
int iMax=ArrayMaximum(val,WHOLE_ARRAY,0);//индекс максимума
double min=val[iMin];//минимальное значение индикатора
double max=val[iMax];//максимальное значение индикатора

 ресурсы данный код поджирает, поэтому вызывайте раз на новом баре.

"iCustom" для примера, можете заменить на индикатор, который Вам нужен. 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий