Скачать MetaTrader 5

Как определить и прописать max и min

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
sdf3733
95
sdf3733 2015.11.16 03:31 

Подскажите плиз как определить max и min скользящей средней которые сформировались в тикущей сессии (дня), к примеру, на 5 мин графике

не могу разобраться с этой функцией ArrayMaximum () , как её использавать

 

Заранее Благодарен 

Vasyl Nosal
18637
Vasyl Nosal 2015.11.16 09:24  
sdf3733:

Подскажите плиз как определить max и min скользящей средней которые сформировались в тикущей сессии (дня), к примеру, на 5 мин графике

не могу разобраться с этой функцией ArrayMaximum () , как её использавать

 

Заранее Благодарен 

Создай буфер-туда запихни данные МА-потом ArrayMaximum ()

хотя логичней тогда перебрать бары которые находятся в дипазоне времени и там найти наибольший МА 

Alekseu Fedotov
892
Alekseu Fedotov 2015.11.16 09:34  
sdf3733:

Подскажите плиз как определить max и min скользящей средней которые сформировались в тикущей сессии (дня), к примеру, на 5 мин графике

не могу разобраться с этой функцией ArrayMaximum () , как её использавать

 

Заранее Благодарен 

 для работы функции, нужен дополнительный массив с данными индикатора

int         bars=50;
double      IndMa[bars];

 Забиваем массив данными

for (int i=0; i<=bars-1; i++)
      {
         IndMa[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);    // Запишем данные инд. 
      }

 И

int    max=ArrayMaximum(IndMa,WHOLE_ARRAY,0);
int    min=ArrayMinimum(IndMa,WHOLE_ARRAY,0);

Print("Min  = ",IndMa[min]);
Print("Max  = ",IndMa[max]);

 Как то так.

sdf3733
95
sdf3733 2015.11.16 15:56  
Благодарю, буду изучать и проверять
Dmitry Fedoseev
43472
Dmitry Fedoseev 2015.11.17 02:26  
sdf3733:

Подскажите плиз как определить max и min скользящей средней которые сформировались в тикущей сессии (дня), к примеру, на 5 мин графике

не могу разобраться с этой функцией ArrayMaximum () , как её использавать

 

Заранее Благодарен 

Пишем индикатора, в индикаторе значение МА складываем в индикаторный буфер, потом применяем к этому буферу ArrayMaximum (), значение складываем еще в один буфер. Из эксперта вызываем индикатора через iCustom и смотрим значения буфера с максимумами. Это единственный нормальный вариант. Остальные варианты или тормозные или ненадежные. 

Mislaid
621
Mislaid 2015.11.17 19:24  
Integer:

Пишем индикатора, в индикаторе значение МА складываем в индикаторный буфер, потом применяем к этому буферу ArrayMaximum (), значение складываем еще в один буфер. Из эксперта вызываем индикатора через iCustom и смотрим значения буфера с максимумами. Это единственный нормальный вариант. Остальные варианты или тормозные или ненадежные. 

Не нужны, ни массивы, ни индикаторы. Пишу "на коленке"

// на глобальном уровне определяем переменные, в которые будем записывать
// номера баров, на которых достигаются максимум и минимум МА
// Наверняка, интересно, в какой последовательности, и когда произошли события
int nmax, nmin;

// процедура вычисляет номера баров, на которых МА достигает минимума и максимума за интервал баров
// входящий параметр nlimit
// если nlimit <= 0, то значения экстремумов вычисляются в течение текущих суток, начиная с
// нуля часов по серверному времени
// иначе, для расчета берется nlimit баров
void minmaxMA( int nlimit )
{
   double r, rmax, rmin; // рабочие переменные
   int i, limit; // i - индекс, limit - количество баров для расчета минимума и максимума

   limit = nlimit:
   if ( limit <= 0 )
   {
      // расчет будет вестись только в пределах текущих суток
      // вычисляем номер последнего бара в предыдущих сутках
      nlimit = iBarShift( NULL, 0, iTime( NULL, PERIOD_D1, 0 ) );
      // корректируем nlimit, если ближайший бар попал в текущие сутки
      if ( Time[ nlimit ] >= iTime( NULL, PERIOD_D1, 0 ) ) nlimit ++;
   }
   // вычисляем стартовые значения цикла для нулевого бара
   nmax = 0; nmin = 0;
   // ... - это параметры МА: ma_period, ma_shift, ma_method, applied_price.
   r = iMA( NULL, 0, ..., ..., ..., ..., 0);
   rmax = r; rmin = r;
   // поиск максимума и минимума
   for ( i = 1; i < nlimit; i ++ )
   {
       r = iMA( NULL, 0, ..., ..., ..., ..., i);
       if ( r > rmax ) //новый максимум
       { rmax = r; nmax = i};
       if ( r < rmin ) //новый минимум
       { rmin = r; nmin = i};
   }
}
Алексей Тарабанов
7272
Алексей Тарабанов 2015.11.17 19:43  
Integer:

Пишем индикатора, в индикаторе значение МА складываем в индикаторный буфер, потом применяем к этому буферу ArrayMaximum (), значение складываем еще в один буфер. Из эксперта вызываем индикатора через iCustom и смотрим значения буфера с максимумами. Это единственный нормальный вариант. Остальные варианты или тормозные или ненадежные. 

Дмитрий, а этот - скоростной и надежный? 
Алексей Тарабанов
7272
Алексей Тарабанов 2015.11.17 19:56  
Mislaid:

Не нужны, ни массивы, ни индикаторы. Пишу "на коленке"

 

Если используете динамический расчет скользящей средней (по значению ее производной), то размер кода и вычислительную сложность сократите на порядок. 
Mislaid
621
Mislaid 2015.11.17 20:58  
tara:
Если используете динамический расчет скользящей средней (по значению ее производной), то размер кода и вычислительную сложность сократите на порядок. 

Это все понятно. Я пишу простой и понятный код для топикстартера.

В наши дни мы учились на "Построение и анализ вычислительных алгоритмов". А. Ахо и прочие. Для венчурных решений оптимальность не обязательна. 

Алексей Тарабанов
7272
Алексей Тарабанов 2015.11.17 21:34  
Mislaid:

Это все понятно. Я пишу простой и понятный код для топикстартера.

В наши дни мы учились на "Построение и анализ вычислительных алгоритмов". А. Ахо и прочие. Для венчурных решений оптимальность не обязательна. 

 

МВА? 
Mislaid
621
Mislaid 2015.11.17 21:35  
tara:
МВА? 
ЛГУ
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий