Полезные функции от KimIV - страница 28

 

Функция ArrayMax().

Эта функция возвращает значение максимального элемента массива.

  • x - Массив элементов типа double, в котором выполняется поиск максимального по значению элемента.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 17.05.2008                                                     |
//|  Описание : Возвращает значение максимального элемента массива.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayMax(double& x[]) {
  if (ArraySize(x)>0) return(x[ArrayMaximum(x)]);
  else {
    Print("ArrayMax(): Массив пуст!");
    return(0);
  }
}
P.S. Во вложении скрипт для тестирования функции ArrayMax().
Файлы:
 

Функция ArrayMin().

Эта функция возвращает значение минимального элемента массива.

  • x - Массив элементов типа double, в котором выполняется поиск минимального по значению элемента.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 17.05.2008                                                     |
//|  Описание : Возвращает значение минимального элемента массива.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayMin(double& x[]) {
  if (ArraySize(x)>0) return(x[ArrayMinimum(x)]);
  else {
    Print("ArrayMin(): Массив пуст!");
    return(0);
  }
}
ЗЫ. Во вложении скрипт для тестирования функции ArrayMin().
Файлы:
 

Здравствуйте, нашёл на форуме парочку ваших функций по ZigZag. Это как раз то что мне надо. Решил проверить работоспособностьэтих функций, поэтому сделал советника, в котором выполняется просто обращение к этой функции в комментарии. Номер бара зигзага = столько-то. Проблема заключается в следующем, функция показывает номер бара зигзага, только если он находится не на нулевом баре. Если зигзаг находится на нулевом баре, она показывает бар предыдущего зигзага. А мне как раз необходимо чтоб на нулевом показывало. То есть знать, когда появился новый зигзаг.

Код советника привожу ниже:

int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
GetExtremumZZBar ();
 Comment("бар зигзага = ", GetExtremumZZBar());         //Просто проверяю работоспособность функции
//----
   return(0);
  }
//+------------------------------------------------------------------+
int GetExtremumZZBar(string sym="EURUSD", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sym=="") sym=Symbol();
  double zz;
  int    i, k=iBars(sym, tf), ke=0;
 
  for (i=1; i<k; i++) {
    zz=iCustom(sym, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
 
Climber писал (а) >>

функция показывает номер бара зигзага, только если он находится не на нулевом баре.
Если зигзаг находится на нулевом баре, она показывает бар предыдущего зигзага.
А мне как раз необходимо чтоб на нулевом показывало. То есть знать, когда появился новый зигзаг.

ок... поправил для нулевого бара

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает номер бара экстремума ЗигЗага по его номеру.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=0; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(-1);
}
 
TheXpert писал (а) >>

Извиняюсь за мой пост автору, зря я писал, т.к. все равно не буду использовать этот код, т.к. имею собственную либку со всем мне необходимым. А т.к. за столь долгое время не было однозначно негативных отзывов, это значит,что авторский код устраивает. Просто не стерпел :), извините.

Умных много, а умных и добрых мало. Вот Вы же не выкладываете свою библиотеку, хотя и считаете, что кодируете лучше, а Игорь выкладывает в свободное пользование почти все свои наработки.

 
khorosh писал (а) >>

Умных много, а умных и добрых мало. Вот Вы же не выкладываете свою библиотеку, хотя и считаете, что кодируете лучше, а Игорь выкладывает в свободное пользование почти все свои наработки.

Уже написал, почему. Потому, что мой код не полностью универсален. Если найдется что-нибудь выложить, сделаю это обязательно

 

Функция ArrayAvg().

Эта функция возвращает среднее аримфетическое элементов массива.

  • x - Массив элементов типа double.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает среднее аримфетическое элементов массива.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayAvg(double& x[]) {
  double s=0;
  int    i, k=ArraySize(x);

  for (i=0; i<k; i++) s+=x[i];
  if (k>0) s/=k; else Print("ArrayAvg(): Массив пуст!");

  return(s);
}
P.S. Во вложении скрипт для тестирования функции ArrayAvg().
Файлы:
 
KimIV писал (а) >>

ок... поправил для нулевого бара

Премного благодарен. Что-то с интернетом на работе было, не мог поблагодарить раньше.

 

Функция ArrayAvGeom().

Эта функция возвращает среднее геометрическое элементов массива.

  • x - Массив элементов типа double.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.06.2008                                                     |
//|  Описание : Возвращает среднее геометрическое элементов массива.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayAvGeom(double& x[]) {
  double s=1, k=ArraySize(x);
  int    i;

  for (i=0; i<k; i++) s*=x[i];
  if (k>0) s=MathPow(s, 1/k); else Print("ArrayAvGeom(): Массив пуст!");

  return(s);
}
ЗЫ. Во вложении скрипт для тестирования функции ArrayAvGeom().
Файлы:
 
KimIV писал (а) >>

Функция ArrayAvGeom().

Эта функция возвращает среднее геометрическое элементов массива.

  • x - Массив элементов типа double.
ЗЫ. Во вложении скрипт для тестирования функции ArrayAvGeom().

Уважаемый KimIV , спасибо за функции!

А реально написать такого же рода функцию для вычисления моды?