Nützliche Funktionen von KimIV - Seite 35

 
xrust писал (а) >>
Noch eine Frage: Hätten Sie etwas dagegen, wenn ich Ihre Syntax und Ihre Variablennamen in meinen Funktionen verwenden würde, um sie sozusagen zu standardisieren?

Tun Sie, was Sie für richtig halten.

 

Die Funktion SetLabel().

Diese Funktion setzt das OBJ_LABEL Textlabel-Objekt im aktuellen Diagramm.

  • nm - Name des Objekts. Erforderlicher Parameter.
  • tx - Text. Erforderlicher Parameter.
  • cl - Farbe der Markierung. Erforderlicher Parameter.
  • xd - X-Koordinate in Pixeln in Bezug auf den Referenzwinkel. Erforderlicher Parameter.
  • yd - Y-Koordinate in Pixeln, bezogen auf den Bezugswinkel. Obligatorischer Parameter.
  • cr - Nummer des Referenzwinkels. Gültige Werte: 0 oben-links, 1 oben-rechts, 2 unten-links, 3 unten-rechts. Der Standardwert ist 0.
  • fs - Schriftgröße. Der Standardwert ist 9.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка текстовой метки, объект OBJ_LABEL.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    nm - наименование объекта                                               |
//|    tx - текст                                                              |
//|    cl - цвет метки                                                         |
//|    xd - координата X в пикселах                                            |
//|    yd - координата Y в пикселах                                            |
//|    cr - номер угла привязки        (0 - левый верхний,                     |
//|                                     1 - правый верхний,                    |
//|                                     2 - левый нижний,                      |
//|                                     3 - правый нижний )                    |
//|    fs - размер шрифта              (9 - по умолчанию  )                    |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
  ObjectSetText(nm, tx, fs);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_XDISTANCE, xd);
  ObjectSet(nm, OBJPROP_YDISTANCE, yd);
  ObjectSet(nm, OBJPROP_CORNER   , cr);
  ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
 

Beispiele für die Verwendung von SetLabel().

  • Drei blaue Textschilder in der oberen linken Ecke, Schriftart 9.
    SetLabel("Label1", "Текстовая метка", Blue, 5, 15);
    SetLabel("Label2", "Ещё одна текстовая метка", Blue, 5, 30);
    SetLabel("Label3", "Параметр cr=0", Blue, 5, 45);

  • Drei violette Textetiketten in der oberen rechten Ecke, Schriftart 12.
    SetLabel("Label1", "Текстовая метка", Magenta, 5, 15, 1, 12);
    SetLabel("Label2", "Ещё одна текстовая метка", Magenta, 5, 30, 1, 12);
    SetLabel("Label3", "Параметр cr=1", Magenta, 5, 45, 1, 12);

  • Drei grüne Textschilder in der unteren rechten Ecke, Schriftart 12.
    SetLabel("Label1", "Текстовая метка", Green, 5, 15, 3, 12);
    SetLabel("Label2", "Ещё одна текстовая метка", Green, 5, 30, 3, 12);
    SetLabel("Label3", "Параметр cr=3", Green, 5, 45, 3, 12);


ZS: Im Anhang finden Sie ein Skript zum Testen der Funktion SetLabel().

Dateien:
 
SergNF писал (а) >>

Erstellen Sie eine "Inluder"-Datei (mqh) (wahrscheinlich 2 - "trade" und "other"), einigen Sie sich auf ihren Namen und zwingen Sie die "Entwickler", sie in die Verteilung aufzunehmen.

Die Idee ist nicht tot zu kriegen, die Konsolidierung hat lange auf sich warten lassen. Mein Traum als Nichtfachmann ist es, dem normalen Benutzer nur die Entscheidungsfindung zu überlassen und ihn von den Komplikationen der Software zu befreien.

Igors Entwicklungen (verblüffend in ihrer Konsistenz und Detailgenauigkeit) kamen dem so nahe wie möglich. Darüber hinaus programmiert der Autor nicht nur, sondern er hält auch ständig seine

Advisors im realen Handel, was den praktischen Wert des Codes erhöht.

Es wäre interessant, Igors Meinung über die Möglichkeit des mqh-Framings seiner Entwicklungen und über die Vor- und Nachteile einer solchen Implementierung zu erfahren.

 
granit77 писал (а) >>
Ich würde gerne Igors Meinung über die Möglichkeit des mqh-Designs seiner Entwicklungen sowie die Vor- und Nachteile einer solchen Implementierung erfahren.

Über die Möglichkeiten...

Ich habe die MQH-Dateien schon eine Weile fertig... Ich werde sie noch nicht veröffentlichen... Ich habe noch ein Ass im Ärmel... Der Schlussakkord wird sein... Ich werde alle Funktionen veröffentlichen und die mqh-Dateien zusammenfassen.

Das Für und Wider...

MQH-Dateien sind praktisch. Sie können sie in verschiedenen Expert Advisors verwenden. Der Code eines bestimmten EA wird erheblich reduziert. Nur die nackte Logik und einige andere Dinge sind übrig geblieben, und alle Geräte und Verpackungen sind draußen.

Ich verwende jedoch selten mqh-Dateien, im Allgemeinen nur eine. Das ist stdlib.mqh. Ich habe alle notwendigen Funktionen in die Datei von Expert Advisor kopiert. Das ist für mich bequemer. Ich habe mir das angewöhnt, als ich viel an Aufträgen gearbeitet habe und oft vergessen habe, die eine oder andere mqh-Datei an meinen Kunden zu schicken. Außerdem möchte ich eine EA-Datei in verschiedene Terminalordner kopieren, anstatt den ganzen Haufen von Inludes hinterher zu ziehen.

 
Es ist nicht nur ein Vergnügen! Es ist herrlich! Der Tag ist nicht mehr fern, an dem eine Verteilung ohne eine solche Bibliothek als unvollständig angesehen wird.
 

Vielleicht haben Sie ein Skript mit nützlichen Funktionen, das die in dem Artikel http://www.kroufr.ru/content/view/1027/124/ beschriebene Eröffnung von Aufträgen durchführen könnte.

Wenn nicht, geben Sie mir einen Tipp, wo ich einen finden kann. .

 

Die Funktion CrossPointOfLines().

Diese Funktion berechnet die Koordinaten des Schnittpunkts zweier Linien. Jede Linie ist durch ein Koordinatenpaar ihrer Punkte definiert. Drei Arrays werden als Parameter an die Funktion übergeben:

  • x - Feld der Abszisse. Sie sollte vier Elemente enthalten: x[0], x[1] - die Abszisse der ersten Zeile, x[2], x[3] - die Abszisse der zweiten Zeile.
  • y - Array von Ordinaten. Sollte vier Elemente enthalten: y[0], y[1] - die Ordinaten der ersten Zeile, y[0], y[1] - die Ordinaten der zweiten Zeile.
  • t - Array mit den Koordinaten des Schnittpunkts der beiden Linien. Nach der normalen Ausführung der Funktion enthält dieses Feld zwei Elemente: t[0] ist die Abszisse des gesuchten Schnittpunkts der beiden Linien und t[1] ist die Ordinate desselben Punkts.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Вычисляет координаты точки пересечения двух прямых.            |
//|             Каждая прямая задаётся парой координат своих точек.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив абсцисс              x[0], x[1] - первая прямая              |
//|                                    x[2], x[3] - вторая прямая              |
//|    y - массив ординат              y[0], y[1] - первая прямая              |
//|                                    y[0], y[1] - вторая прямая              |
//|    t - массив искомых координат    t[0]       - абсцисса                   |
//|                                    t[1]       - ордината                   |
//+----------------------------------------------------------------------------+
void CrossPointOfLines(double& x[], double& y[], double& t[]) {
  double z=(y[3]-y[2])*(x[1]-x[0])-(y[1]-y[0])*(x[3]-x[2]);
  ArrayResize(t, 2);
  ArrayInitialize(t, 0.0);

  if (z==0) Print("CrossPointOfLines(): Не удалось найти точку пересечения!");
  else {
    double xy1=x[1]*y[0]-x[0]*y[1];
    double xy2=x[3]*y[2]-x[2]*y[3];
    t[0]=NormalizeDouble((xy1*(x[3]-x[2])-xy2*(x[1]-x[0]))/z, 0);
    t[1]=(xy1*(y[3]-y[2])-xy2*(y[1]-y[0]))/z;
  }
}
 

Ein Beispiel für die Verwendung der Funktion CrossPointOfLines().

Als Beispiel für die Verwendung der Funktion CrossPointOfLines() biete ich traditionell mein Skript an (siehe Anhang). Damit das Skript richtig funktioniert, müssen Sie im aktuellen Diagramm zwei sich schneidende Linien eines der folgenden Typen zeichnen: vertikal, horizontal oder Trend. Dann sollte das Skript an das Diagramm angehängt werden. Das Skript wird dazu führen, dass der linke Preis am Schnittpunkt der beiden Linien markiert wird.

SZY: Im Anhang finden Sie ein Skript zum Testen der Funktion CrossPointOfLines().

Dateien:
 

Die Funktion SetRegression().

Diese Funktion setzt das OBJ_REGRESSION-Objekt des linearen Regressionskanals im aktuellen Diagramm.

  • cl - Farbe des Objekts. Erforderlicher Parameter.
  • nm - Name des Objekts. Wenn der Standardwert - "" - übergeben wird , wird die Eröffnungszeit des aktuellen Balkens als Name verwendet.
  • t1 - Erste Koordinate der Objektsetzungszeit. Standardwert - 0 - Öffnungszeit des zehnten Taktes.
  • t2 - Zweite Koordinate der Objektsetzungszeit. Der Standardwert ist 0 - die Öffnungszeit des aktuellen Balkens.
  • ry - Flagge der Eigenschaft BOW, Standardwert ist False.
  • st - Linienstil. Gültige Werte sind STYLE_SOLID (Standard), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
  • wd - Linienbreite. Der Standardwert ist 1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_REGRESSION канал линейной регрессии.     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ( ""   - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10])                      |
//|    t2 - время открытия бара        (  0   - Time[0])                       |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetRegression(color cl, string nm="", datetime t1=0, datetime t2=0,
                    bool ry=False, int st=STYLE_SOLID, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (t2<=0) t2=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_REGRESSION, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_TIME2, t2);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
Grund der Beschwerde: