Nützliche Funktionen von KimIV - Seite 28

 

Die Funktion ArrayMax().

Diese Funktion gibt den Wert des maximalen Elements des Arrays zurück.

  • x ist ein Array von Elementen des Typs double, in dem nach dem Maximalwert des Elements gesucht wird.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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. Im Anhang finden Sie ein Skript zum Testen der Funktion ArrayMax().
Dateien:
 

Die Funktion ArrayMin().

Diese Funktion gibt den Wert des kleinsten Elements des Arrays zurück.

  • x - Ein Array von Elementen des Typs double, in dem nach dem Mindestwert des Elements gesucht wird.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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: Im Anhang finden Sie ein Skript zum Testen der Funktion ArrayMin().
Dateien:
 

Hallo, habe im Forum ein paar Ihrer ZigZag-Funktionen gefunden. Das ist genau das, was ich brauche. Ich beschloss, die Funktionalität dieser Funktionen zu überprüfen, und erstellte einen Expert Advisor, der nur diese Funktion im Kommentar aufruft. ZigZag-Balken-Nummer = so-und-so. Das Problem ist, dass die Funktion nur die Taktnummer des Zickzacks anzeigt, wenn er nicht auf dem Nulltakt liegt. Befindet sich der Zickzackkurs auf einem Null-Balken, wird der Balken des vorherigen Zickzackkurses angezeigt. Und es muss bei Null bar angezeigt werden. Mit anderen Worten: Ich möchte wissen, wann der neue Zickzackkurs erschienen ist.

Der Code des Expert Advisors ist unten angegeben:

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

zeigt die Taktnummer des Zickzacks nur an, wenn er nicht auf dem Nulltakt liegt.
Befindet sich der Zickzackkurs auf einem Null-Balken, wird der Balken des vorherigen Zickzackkurses angezeigt.
Und es muss bei Null bar angezeigt werden. Mit anderen Worten: Ich möchte wissen, wann ein neuer Zickzackkurs entstanden ist.

Okay... korrigiert für Nullbar

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

Ich entschuldige mich für mein Posting an den Autor, ich habe umsonst geschrieben, da ich diesen Code sowieso nicht verwenden werde, da ich meine eigene Libc mit allem was ich brauche habe. Und da es so lange kein eindeutig negatives Feedback gab, bedeutet dies, dass der Code des Autors zufriedenstellend ist. Ich konnte es einfach nicht ertragen :), sorry.

Es gibt viele kluge Menschen, aber kluge und freundliche Menschen sind selten. Du hingegen stellst deine Bibliothek nicht zur Verfügung, obwohl du glaubst, dass du besser programmierst, während Igor fast seine gesamte Arbeit kostenlos zur Verfügung stellt.

 
khorosh писал (а) >>

Es gibt viele kluge Menschen, aber nur wenige kluge und freundliche Menschen. Sie stellen Ihre Bibliothek nicht zur Verfügung, obwohl Sie glauben, dass Sie besser programmieren, während Igor fast seine gesamte Arbeit kostenlos zur Verfügung stellt.

Ich habe bereits geschrieben, warum. Denn mein Code ist nicht vollständig universell. Wenn ich etwas zum Posten finde, werde ich es sicher tun.

 

Die Funktion ArrayAvg().

Diese Funktion gibt den arithmetischen Durchschnitt der Arrayelemente zurück.

  • x - Ein Array von Elementen des Typs 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. Im Anhang finden Sie ein Skript zum Testen der Funktion ArrayAvg().
Dateien:
 
KimIV писал (а) >>

Okay... um den Nullstrich korrigiert.

Ich danke Ihnen vielmals. Irgendwas mit dem Internet auf der Arbeit, konnte mich nicht früher bedanken.

 

Die Funktion ArrayAvGeom().

Diese Funktion gibt das geometrische Mittel der Arrayelemente zurück.

  • x - Ein Array von Elementen des Typs 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: Im Anhang finden Sie ein Skript zum Testen der Funktion ArrayAvGeom().
Dateien:
 
KimIV писал (а) >>

Die Funktion ArrayAvGeom().

Diese Funktion gibt das geometrische Mittel der Arrayelemente zurück.

  • x ist ein Array von Elementen des Typs double.
ZS: Im Anhang finden Sie ein Skript zum Testen der Funktion ArrayAvGeom().

Liebe KimIV , danke für die Funktion!

Ist es realistisch, die gleiche Art von Funktion zu schreiben, um den Modus zu berechnen?

Grund der Beschwerde: