Nützliche Funktionen von KimIV - Seite 27

 
SamMan писал (а) >>

Ganz genau. Und je kleiner der Code ist, desto leichter ist er zu verstehen. Ich kann es nicht ertragen, wenn Schriftarten auf 2-3 Bildschirmen "verschmiert" werden. Eine Funktion sollte vollständig auf dem Bildschirm angezeigt werden, ohne zu spiegeln. Deshalb bin ich für die Kompaktheit.


Ich kann sie auch nicht ausstehen :) . Meine Funktion passt in den Bildschirm.


Und ist es in Ordnung, dass Sie viele optionale Kontinua haben, die im Übrigen die Aufmerksamkeit des Lesers wieder von Ihnen ablenken?


Nun, die Reduzierung der Komplexität von Funktionen ist eine der Grundvoraussetzungen für das Schreiben von GUTEM Code.

Wenn Sie es auf diese Weise mögen, haben Sie 2 Möglichkeiten:

1. Sie haben sich an einen schlechten Codestil gewöhnt und verwenden ihn selbst, da kann nichts Gutes herauskommen, wenn Sie einen wirklich grundlegenden Code schreiben müssen, werden Sie verstehen, dass ich Recht habe. Zumindest wenn Sie zu MQL5 wechseln.

2 Und ich denke, hier geht es nur um dich - du benutzt diesen Code, weil du nicht in der Lage bist, deinen eigenen Code richtig zu schreiben, als Programmierer bist du nichts und dann hast du auch kein Recht, meinen Beitrag zu beurteilen und mit dem Autor dieses Threads zu diskutieren. Umso mehr habe ich mich an den Autor gewandt.

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 keine eindeutig negativen Rückmeldungen gab, bedeutet dies, dass der Code des Autors zufriedenstellend ist. Ich konnte es einfach nicht ertragen :), sorry.

 
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 keine eindeutig negativen Rückmeldungen gab, bedeutet dies, dass der Code des Autors zufriedenstellend ist. Ich konnte es einfach nicht ertragen :), sorry.

Ich entschuldige mich für das Schreiben, aber ich konnte es nicht ertragen. Sie werden vergeblich sein, wenn Sie den Zweig wegen der Meinung eines anderen verlassen. Vor allem der Autor hat sich bedankt.

Ich denke, es wäre schön, wenn ein und dieselbe Aufgabe durch 2 (oder mehr) Codes gelöst werden kann. Sie können Ihre Codes, die dieselbe Aufgabe lösen, weitergeben, wenn Sie sie für besser halten.

Oft ist es interessant zu sehen, wie jemand anderes die gleiche Sache kodiert hat, aber in einem anderen Stil. Sie können eine Menge lernen.

P.S. Igor, ich danke Ihnen für Ihre Arbeit.

 
In der Tat, Andrej, du solltest das nicht so auffassen. Halten Sie es einfach! Und haben Sie keine Angst, mich runterzuschubsen. Ich habe nichts dagegen, wenn Sie etwas zu meiner Arbeit beitragen oder Ihre eigene Arbeit veröffentlichen.
 

Die Funktion ArraySearchDouble().

Diese Funktion sucht nach einem Array-Element mit einem Wert vom Typ double und gibt den Index des gefundenen Elements oder -1 zurück. Die Funktion findet nur ein Element und bricht die Suche ab, wenn das Ergebnis positiv ist.

  • m - Das Array, in dem das Element gesucht wird.
  • e - Wert vom Typ double, der im Array m zu finden ist.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble(double& m[], double e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
ZS: Im Anhang finden Sie ein Skript zum Testen der Funktion ArraySearchDouble().
Dateien:
 

Die Funktion ArraySearchInt().

Diese Funktion sucht nach einem Element des Arrays mit einem Wert vom Typ int und gibt den Index des gefundenen Elements oder -1 zurück. Die Funktion findet nur ein Element und bricht die Suche ab, wenn das Ergebnis positiv ist.

  • m - Das Array von Elementen des Typs int, in dem die Suche durchgeführt wird.
  • e - Wert vom Typ int, der im Array m zu finden ist.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchInt(int& m[], int e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
ZS: Im Anhang finden Sie ein Skript zum Testen der Funktion ArraySearchInt().
Dateien:
 

Die Funktion ArraySearchString().

Diese Funktion sucht ein Array-Element nach einem Wert vom Typ String und gibt den Index des gefundenen Elements oder -1 zurück. Die Funktion findet nur ein Element und bricht die Suche ab, wenn das Ergebnis positiv ist.

  • m - Das Array von Elementen des Typs string, in dem die Suche durchgeführt wird.
  • e - Der Wert vom Typ String, der im Array m zu finden ist.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 04.03.2008                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchString(string& m[], string e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
ZS: Im Anhang finden Sie ein Skript zum Testen der Funktion ArraySearchString().
Dateien:
 
KimIV писал (а) >>
In der Tat, Andrey, du hättest es nicht so auffassen sollen. >> Sei einfach! Und haben Sie keine Angst, mich runterzuschubsen. Ich habe nichts dagegen, wenn Sie einen Beitrag leisten und etwas von mir korrigieren oder einen eigenen Beitrag schreiben.

OK, ich habe eine etwas andere Sicht der Dinge, wie ich bereits geschrieben habe, halte ich globale Universalität für ein Übel, d.h. der Code sollte zumindest ein wenig an das angepasst werden, was Sie schreiben, um maximale Einfachheit und Bequemlichkeit zu erreichen. Deshalb sehe ich auch keinen Sinn darin, meinen eigenen Code hier zu veröffentlichen.


Ich kann als Prüfer Ihres Codes fungieren, wenn Sie nichts dagegen haben, und Ihre eigene Version des Codes anbieten oder einfach nur Kommentare abgeben.



SZZH: Vielen Dank für Ihre Unterstützung, um ehrlich zu sein, habe ich diese Art von Feedback von Ihnen nicht erwartet.

 
KimIV писал (а) >>

Die Funktion ArraySearchDouble().

Diese Funktion sucht nach einem Array-Element mit einem Wert vom Typ double und gibt den Index des gefundenen Elements oder -1 zurück. Die Funktion findet nur ein Element und bricht die Suche ab, wenn das Ergebnis positiv ist.

  • m - Das Array, in dem das Element gesucht wird.
  • e - Der Wert vom Typ double, der im Array m zu finden ist.
ZS: Im Anhang finden Sie ein Skript zum Testen der Funktion ArraySearchDouble().

Das Doppelte ist eine knifflige Sache, und Ihr Code kann in manchen Situationen falsch funktionieren.

Hier eine mögliche Abhilfe

int ArraySearchDouble(double& array[], double value, double precision = 0.00000000001) 
{ // на то, что я перемещаю скобки не обращайте внимания, мне так читабельней
  for (int i = 0; i < ArraySize(array); i++) 
  {
    if (array[i] > value - precision && array[i] < value + precision) return(i);
  }
  return(-1);
}

Und wenn Sie dasselbe tun wollen, aber vom Ende her.

int ArrayRevertSearchDouble(double& array[], double value, double precision = 0.00000000001) 
{ 
  for (int i = ArraySize(array) - 1; i >= 0; i--) 
  {
    if (array[i] > value - precision && array[i] < value + precision) return(i);
  }
  return(-1);
}
 
TheXpert писал (а)
Wenn Sie nichts dagegen haben, kann ich natürlich Ihren Code überprüfen und meine eigene Version anbieten oder einfach nur Kommentare abgeben.
Großartig! Es ist gut für alle, eine vielseitige Sicht der Dinge zu haben. Ich, vor allem :-)
 

Ich habe neulich einen EA geschrieben, bei dem ich die Losgröße in Abhängigkeit vom Ergebnis eines früheren Handels und der Losgröße desselben Handels ändern musste. Und es stellte sich heraus, dass ich keine Funktion hatte, die die Losgröße der letzten geschlossenen Position zurückgeben würde. Hier eine Korrektur...

Die Funktion GetLotLastClosePos().

Diese Funktion gibt die Losgröße der letzten geschlossenen Position oder -1 zurück. Die Auswahl der zu berücksichtigenden Positionen wird durch externe Parameter festgelegt:

  • sy - Bezeichnung des Marktinstruments. Wenn dieser Parameter gesetzt ist, berücksichtigt die Funktion nur Positionen des angegebenen Instruments. Der Standardwert "" bedeutet ein beliebiges Marktinstrument. NULL-Wert bedeutet das aktuelle Instrument.
  • op - Handelsoperation, Positionsart. Gültige Werte: OP_BUY, OP_SELL oder -1. Der Standardwert -1 bedeutet eine beliebige Position.
  • mn - Positionsbezeichner, MagicNumber. Der Standardwert -1 bedeutet einen beliebigen Bezeichner.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.06.2008                                                     |
//|  Описание : Возвращает размер лота последней закрытой позиции или -1       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastClosePos(string sy="", int op=-1, int mn=-1) {
  datetime o;
  double   l=-1;
  int      i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderCloseTime()) {
                o=OrderCloseTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
  return(l);
}
HH: Im Anhang finden Sie ein Skript zum Testen der Funktion GetLastClosePos().
Dateien:
Grund der Beschwerde: