Caratteristiche utili da KimIV - pagina 28

 

La funzione ArrayMax().

Questa funzione restituisce il valore dell'elemento massimo della matrice.

  • x è un array di elementi di tipo doppio, in cui si cerca il valore massimo dell'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.S. In allegato c'è uno script per testare la funzione ArrayMax().
File:
 

La funzione ArrayMin().

Questa funzione restituisce il valore dell'elemento minimo della matrice.

  • x - Un array di elementi di tipo doppio, in cui si cerca il valore minimo dell'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. In allegato c'è uno script per testare la funzione ArrayMin().
File:
 

Ciao, ho trovato un paio delle tue funzioni ZigZag sul forum. Questo è esattamente ciò di cui ho bisogno. Ho deciso di verificare la funzionalità di queste funzioni, così ho fatto un Expert Advisor che chiama solo questa funzione nel commento. Numero di barra ZigZag = così e così. Il problema è che la funzione mostra solo il numero di barra dello zigzag se non è sulla barra zero. Se lo zigzag è su una barra zero, mostra la barra dello zigzag precedente. E ho bisogno che si mostri a zero bar. In altre parole, voglio sapere quando il nuovo zigzag è apparso.

Il codice dell'Expert Advisor è riportato di seguito:

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

mostra il numero di barra dello zigzag solo se non è sulla barra zero.
Se lo zigzag è su una barra zero, mostra la barra dello zigzag precedente.
E ho bisogno che si mostri a zero bar. In altre parole, per sapere quando è apparso un nuovo zigzag.

ok... corretto per zero bar

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

Mi scuso per il mio post all'autore, ho scritto invano, dato che non userò comunque questo codice, dato che ho la mia libc con tutto ciò di cui ho bisogno. E poiché per così tanto tempo non c'è stato un feedback inequivocabilmente negativo, significa che il codice dell'autore soddisfa. Non potevo sopportarlo :), mi dispiace.

Ci sono molte persone intelligenti, ma le persone intelligenti e gentili sono poche. Tu, d'altra parte, non metti fuori la tua libreria, anche se pensi di codificare meglio, mentre Igor mette fuori gratuitamente quasi tutto il suo lavoro.

 
khorosh писал (а) >>

Ci sono molte persone intelligenti, ma poche intelligenti e gentili. Tu non metti fuori la tua libreria, anche se pensi di codificare meglio, mentre Igor mette fuori quasi tutto il suo lavoro gratuitamente.

Ho già scritto perché. Perché il mio codice non è completamente universale. Se riesco a trovare qualcosa da postare, lo farò di sicuro

 

La funzione ArrayAvg().

Questa funzione restituisce la media aritmetica degli elementi della matrice.

  • x - Una matrice di elementi di tipo doppio.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. In allegato c'è uno script per testare la funzione ArrayAvg().
File:
 
KimIV писал (а) >>

ok... corretto per la barra zero.

Grazie mille. Qualcosa con internet al lavoro, non ho potuto ringraziarvi prima.

 

La funzione ArrayAvGeom().

Questa funzione restituisce la media geometrica degli elementi della matrice.

  • x - Una matrice di elementi di tipo doppio.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. In allegato c'è uno script per testare la funzione ArrayAvGeom().
File:
 
KimIV писал (а) >>

La funzione ArrayAvGeom().

Questa funzione restituisce la media geometrica degli elementi della matrice.

  • x è una matrice di elementi di tipo doppio.
ZS. In allegato c'è uno script per testare la funzione ArrayAvGeom().

Caro KimIV , grazie per la funzione!

È realistico scrivere lo stesso tipo di funzione per calcolare il modo?