Nützliche Funktionen von KimIV - Seite 34

 
KimIV писал (а) >>

Zeiger in MQL4 sind knifflig. Es gibt keine direkte Unterstützung. Jemand hier im Forum hat versucht, es mit Arrays zu machen, glaube ich. Genauer kann ich es nicht sagen. Suchen Sie selbst danach.

MathRand()

Sie können nur die erste Dimension des Arrays programmatisch ändern. Die Funktion ArrayResize(). Die zweite, dritte und vierte Dimension müssen starr festgelegt werden.

Nun, lassen Sie uns auch Zeiger und dynamische Arrays vergessen...

Ich freue mich auf die 5. Version der Sprache...

Danke für die Hilfe...



Die Arbeit mit einem Raster ist einfach zu realisieren.

Das Lustige ist, dass für meine Idee ein Netzwerk nicht ausreichte, und ich wollte einen Algorithmus für das Umschalten zwischen Netzwerken entwickeln, mit Zeigern ist das nicht schwer.

Aber nein... ...dann müssen wir es hart kodieren.

 

Die Funktion SetTLineByAngle().

Diese Funktion setzt das OBJ_TRENDBYANGLE-Objekt der Trendlinie um den Neigungswinkel im aktuellen Chart.

  • cl - Farbe des TRENDBYANGLE-Objekts. Erforderlicher Parameter.
  • nm - Objektname. 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.
  • p1 - Erste Koordinate des Objekts, das den Preis festlegt. Standardwert - 0 - Minimum des zehnten Balkens.
  • t2 - Zweite Koordinate der Objektsetzungszeit. Standardwert - 0 - Öffnungszeit des aktuellen Taktes.
  • p2 - Zweite Koordinate des Objekts, das den Preis festlegt. Dieser Parameter ist eine Art Schalter. Sein Wert ungleich Null setzt diese Funktion mit SetTLine() gleich, d. h. es wird eine Trendlinie unter Verwendung des Koordinatenpaars Zeit/Kurs gezeichnet, während der Wert des Neigungswinkels der Trendlinie ignoriert wird. Standardwert - 0 - Trendlinienkonstruktion nach Steigungswinkel.
  • an - Neigungswinkel in Grad. Standardwert - 0 - Horizontale Linie.
  • ry - Kennzeichen der BOW-Eigenschaft; der 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_TRENDBYANGLE трендовая линия по углу     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - время открытия текущего бара)  |
//|    p2 - ценовой уровень            (  0   - по углу)                       |
//|    an - угол                       (  0   - по умолчанию)                  |
//|    ry - луч                        (False - не луч)                        |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLineByAngle(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              double an=0, bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (p1<=0) p1=Low[10];
  if (t2<=0) t2=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TRENDBYANGLE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  if (p2>0) ObjectSet(nm, OBJPROP_PRICE2, p2);
  else ObjectSet(nm, OBJPROP_ANGLE, an);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

Beispiele für die Verwendung von SetTLineByAngle().

  1. Orangefarbener Balken im 45°-Winkel vom Minimum des 5. Balkens.
    SetTLineByAngle(Orange, "", Time[5], Low[5], 0, 0, 45, True);
  2. Ein Fächer von rot gepunkteten Strahlen vom Minimum des 13.
    for (int i=0; i<90; i+=10)
      SetTLineByAngle(Red, "TL"+i, Time[13], Low[13], 0, 0, i, True, STYLE_DOT);

ZY: Im Anhang finden Sie ein Skript zum Testen von SetTLineByAngle().

Dateien:
 

Die Funktion SetArrow().

Diese Funktion setzt das Objektsymbol OBJ_ARROW auf das aktuelle Diagramm.

  • cd - Icon-Code. Erforderlicher Parameter.
  • cl - Farbe des Symbols. Erforderlicher Parameter.
  • nm - Name des Objekts. Wenn der Standardwert - "" übertragen wird , wird die Eröffnungszeit des aktuellen Balkens als Name verwendet.
  • t1 - Erste Koordinate der Einstellzeit des Objekts. Standardwert - 0 - aktuelle Öffnungszeit des Balkens.
  • p1 - Erste Koordinate des Objekts, das den Preis festlegt. Standardwert - 0 - aktueller Geldkurs.
  • sz - Größe des Symbols. Standardwert - 0.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объекта OBJ_ARROW.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
 

Beispiele für die Verwendung von SetArrow().

  • Die goldene linke Kursmarkierung am Hoch des 9. Balkens.
    SetArrow(5, Gold, "", Time[9], High[9], 3);

  • Rote rechte Kursmarke beim Maximum des 2. Balkens.
    SetArrow(6, Red, "", Time[2], High[2], 3);

  • 3. Blauer Pfeil über dem Maximum des 2. Balkens.
    SetArrow(242, Blue, "", Time[2], High[2]+50*Point, 2);
    

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

Dateien:
 
Vielen Dank für das, was Sie tun, stört es Sie, wenn ich die Features aus diesem Thread sammle und sie auf meiner Website in einem separaten Abschnitt mit einem Link zum Forum und zu Ihrer Website veröffentliche?
 

Generell wäre es gut, ein "Inhaltsverzeichnis" auf der ersten Seite dieses Beitrags zu haben. Eine Tabelle mit einer Liste von Funktionen, Beschreibungen und Links zu Seiten. Oder Sie halten ein aktualisiertes Archiv auf der ersten Seite, und die Beschreibungen sind auf den anderen Seiten zu finden.

Wenn xrust also seinen Vorschlag macht, wäre es gut, ihn hier zu wiederholen. Um der Systematisierung des hart Erarbeiteten willen :))

 
xrust писал (а) >>
...stört es Sie, wenn ich Beiträge aus diesem Thread sammle und sie auf meiner Website in einem separaten Abschnitt mit einem Link zum Forum und zu Ihrer Website veröffentliche?

Nein, ich werde nicht...

 
xrust писал (а) >>
Vielen Dank für das, was Sie tun, würde es Ihnen etwas ausmachen, wenn ich die Funktionen aus diesem Zweig sammeln, und sie auf meiner Website, in einem separaten Abschnitt mit einem Verweis auf das Forum und Ihre Website veröffentlichen

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. So muss nicht jeder in jedem EA das Rad neu erfinden.

:)

 
Nochmals vielen Dank, ich bin nur ein bisschen faul, ich möchte alles auf einmal sammeln. Noch eine Frage: Würde es Ihnen etwas ausmachen, wenn ich in meinen Funktionen die gleiche Syntax und die gleichen Variablennamen wie Sie verwenden würde, um sie sozusagen zu standardisieren?