Funciones útiles de KimIV - página 28

 

La función ArrayMax().

Esta función devuelve el valor del elemento máximo de la matriz.

  • x es un array de elementos de tipo double, en el que se busca el valor máximo del elemento.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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.D. Se adjunta un script para probar la función ArrayMax().
Archivos adjuntos:
 

La función ArrayMin().

Esta función devuelve el valor del elemento mínimo de la matriz.

  • x - Una matriz de elementos de tipo double, en la que se busca el valor mínimo del elemento.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
  }
}
ZS. Se adjunta un script para probar la función ArrayMin().
Archivos adjuntos:
 

Hola, he encontrado un par de sus funciones ZigZag en el foro. Esto es exactamente lo que necesito. Decidí comprobar la funcionalidad de estas funciones, así que hice un Asesor Experto que sólo llama a esta función en el comentario. Número de barra en zigzag = tal y cual. El problema es que la función sólo muestra el número de barra del zigzag si no está en barra cero. Si el zigzag está en una barra cero, muestra la barra del zigzag anterior. Y necesito que se muestre en la barra cero. En otras palabras, quiero saber cuándo ha aparecido el nuevo zigzag.

El código del Asesor Experto se da a continuación:

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 писал (а) >>

muestra el número de barra del zigzag sólo si no está en barra cero.
Si el zigzag está en barra cero, muestra la barra del zigzag anterior.
Y necesito que se muestre en la barra cero. En otras palabras, quiero saber cuándo ha aparecido un nuevo zigzag.

Vale... corregido por barra cero

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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 писал (а) >>

Me disculpo por mi post al autor, escribí en vano, ya que no voy a utilizar este código de todos modos, ya que tengo mi propia libc con todo lo que necesito. Y como durante tanto tiempo no ha habido ningún comentario claramente negativo, significa que el código del autor es satisfactorio. No podía soportarlo :), lo siento.

Hay mucha gente inteligente, pero la gente inteligente y amable es poca. Tú, en cambio, no pones tu biblioteca, aunque crees que codificas mejor, mientras que Igor pone gratis casi todo su trabajo.

 
khorosh писал (а) >>

Hay muchas personas inteligentes, pero pocas inteligentes y amables. Tú no pones tu biblioteca, aunque crees que codificas mejor, mientras que Igor pone casi todo su trabajo gratis.

Ya he escrito por qué. Porque mi código no es completamente universal. Si puedo encontrar algo para publicar, lo haré seguro

 

La función ArrayAvg().

Esta función devuelve la media aritmética de los elementos del array.

  • x - Una matriz de elementos de tipo 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.D. Se adjunta un script para probar la función ArrayAvg().
Archivos adjuntos:
 
KimIV писал (а) >>

Vale... corregido por la barra de cero.

Muchas gracias. Algo con el internet en el trabajo, no pude agradecerte antes.

 

La función ArrayAvGeom().

Esta función devuelve la media geométrica de los elementos del array.

  • x - Una matriz de elementos de tipo 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);
}
ZS. Se adjunta un script para probar la función ArrayAvGeom().
Archivos adjuntos:
 
KimIV писал (а) >>

La función ArrayAvGeom().

Esta función devuelve la media geométrica de los elementos del array.

  • x es una matriz de elementos de tipo double.
ZS. Se adjunta un script para probar la función ArrayAvGeom().

Estimado KimIV , ¡gracias por la función!

¿Es realista escribir el mismo tipo de función para calcular el modo?