Nützliche Funktionen von KimIV - Seite 33

 

Die Funktion SetVLine().

Diese Funktion setzt die vertikale Linie des Objekts OBJ_VLINE im aktuellen Diagramm.

  • cl - Farbe des Objekts VERTICAL LINE. Obligatorischer Parameter.
  • nm - Objektname. Wenn der Standardwert - "" - übergeben wird , wird die Öffnungszeit des aktuellen Balkens als Objektname verwendet.
  • t1 - Objekt-Einstellzeit. Standardwert - 0 - aktuelle Öffnungszeit des Balkens.
  • 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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2008                                                     |
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время                      (0  - время открытия текущего бара)     |
//|    st - стиль линии                (0  - простая линия)                    |
//|    wd - ширина линии               (1  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetVLine(color cl, string nm="", datetime t1=0, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_VLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

Beispiele für die Verwendung von SetVLine().

  1. Blaue durchgehende vertikale Linie auf dem aktuellen Balken.
    SetVLine(Aqua);
  2. Lila dicker Strich auf dem achten Balken.
    SetVLine(Magenta, "", Time[8], STYLE_SOLID, 3);
  3. Gitternetz aus gepunkteten Linien auf Balken 14:00.
    for (int i=0; i<7; i++) {
      datetime dt=StrToTime((TimeToStr(TimeCurrent()-i*1440*60, TIME_DATE))+" 14:00");
      int nb=iBarShift(NULL, 0, dt, True);
      SetVLine(Coral, "VLine"+i, Time[nb], STYLE_DOT);
    }

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

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

EXEKUTIV. >> ICH WERDE ES TUN.

Zeigen Sie mir ein Bild, lassen Sie uns versuchen, eines zu machen.

 
TheXpert писал (а) >>

Zeigen Sie es in der Abbildung, lassen Sie uns versuchen, es zu tun.

Eine benutzerdefinierte Funktion, die die durch den Indikator beschriebenen Bereiche berechnet, z. B. RSI und die Mittellinie.

Der Raum, der von der Kurve unterhalb der Mittellinie und der Mittellinie selbst begrenzt wird, ist die Fläche -S1, und oberhalb der Mittellinie ist +S2.

Gesendet an https://www.mql5.com/ru/forum/109590, um sich nicht einzumischen.

 

Die Funktion SetTLine().

Diese Funktion setzt das OBJ_TREND-Trendlinienobjekt auf dem aktuellen Chart.

  • cl - Farbe des TREND LINE Objekts. Dies ist ein obligatorischer 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. Standardwert - 0 - aktueller Tiefstand.
  • ry - Flagge der Eigenschaft BLUE; 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_TREND трендовая линия                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLine(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=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 (p2<=0) p2=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  ObjectSet(nm, OBJPROP_PRICE2, p2);
  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 SetTLine().

  1. Orangefarbene durchgezogene Linie durch die Minima des 15. und des aktuellen Balkens.
    SetTLine(Orange, "", Time[15], Low[15], 0, Low[0], True);
  2. Rote Trendlinie durch die Höchststände des 35. und 10. Balkens.
    SetTLine(Red, "", Time[35], High[35], Time[10], High[10]);
  3. Lila dicker Strahl durch die Hochs der beiden Vortage.
    datetime d0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
    datetime d1=TimeCurrent()-24*60*60;
    while (TimeDayOfWeek(d1)==0 || TimeDayOfWeek(d1)==6) d1-=24*60*60;
    d1=StrToTime(TimeToStr(d1, TIME_DATE));
    datetime d2=d1-24*60*60;
    while (TimeDayOfWeek(d2)==0 || TimeDayOfWeek(d2)==6) d2-=24*60*60;
    d2=StrToTime(TimeToStr(d2, TIME_DATE));
    int b2=iBarShift(NULL, 0, d2);     // номер бара начала второго дня
    int b1=iBarShift(NULL, 0, d1);     // номер бара начала первого дня
    int b0=iBarShift(NULL, 0, d0);     // номер бара начала текущего дня
    int n2=iHighest(NULL, 0, MODE_HIGH, b2-b1-1, b1);
    int n1=iHighest(NULL, 0, MODE_HIGH, b1-b0-1, b0);
    datetime t1=Time[n2];
    double   p1=High[n2];
    datetime t2=Time[n1];
    double   p2=High[n1];
    SetTLine(Magenta, "", t1, p1, t2, p2, True, STYLE_SOLID, 3);

HH: Im Anhang finden Sie ein Skript zum Testen der Funktion SetTLine().

Dateien:
 

Igor, ich wende mich an Sie als erfahreneren MQL4-Programmierer.

Ich habe begonnen, eine Bibliothek für Kohonens Netzwerk zu schreiben.

Ich möchte es so flexibel und bequem wie möglich machen, aber ich habe einen Moment erlebt, den ich noch nicht überwinden kann.

Beispiel 1:

int& value; // так нельзя, интересует аналог на MQL4, если он есть
 
void AssignValue(int& newValue)
{
   value = newValue;
}
 
void SetValue(int newValue)
{
   value = newValue;
}
 
int init()
{
   int someValue = 5;
   AssignValue(someValue);
   SetValue(10);
   Print(someValue); // очень хочется, чтобы вывелось 10
}

Ist es möglich, dies mit MQL4 zu tun, und wenn ja, wie?



Beispiel2:

void SetSize(double& matrix[][], int inSize, int outSize)
{
    // требуется установить размеры матрицы, не осилил
}
 
void Init(double& matrix[][])
{
    // допустим, требуется проиниализировать всю матрицу значением 1, также не осилил
}

Nochmals, wenn es möglich ist, geben Sie mir bitte den Code. Dieses Beispiel scheint mir realisierbar.



Ich danke Ihnen im Voraus.

 
TheXpert писал (а) >>
Ich möchte es so flexibel und bequem wie möglich gestalten, aber ich habe einen Moment, den ich noch nicht überwinden kann.
>> Beispiel1:
Ist es möglich, dies mit MQL4-Tools zu tun, und wenn ja, wie?

Ich verstehe, dass Sie die Arbeit mit Zeigern organisieren wollen. So dass eine Variable auf eine andere verweist... Oder habe ich es vielleicht falsch verstanden? Versuchen Sie, in Worten zu erklären, was Sie brauchen.

TheXpert schrieb >>
Beispiel2:
Nochmals, wenn es möglich ist, dies zu tun, geben Sie mir bitte den Code. Dieses Beispiel scheint mir umsetzbar zu sein.
void start()
{
  double arr[3][2];
  Init(arr);
  for (int i=0; i<3; i++)
  {
    for (int j=0; j<2; j++)
    {
      Print("arr[",i,"][",j,"]=",arr[i][j]);
    }
  }
}
void Init(double& matrix[][])
{
  ArrayInitialize(matrix, 1);
}
 
KimIV писал (а) >>

Ich verstehe, dass Sie die Arbeit mit Zeigern organisieren wollen. So dass eine Variable auf eine andere verweist... Oder habe ich es vielleicht falsch verstanden? Versuchen Sie, in Worten zu erklären, was Sie brauchen.

Ja, gewissermaßen.


Zum zweiten - wie wäre es mit einer Initialisierung mit Zufallswerten?

Ja, ich brauche auch genau dynamische Arrays.

 
TheXpert писал (а) >>
Ja, so in etwa.

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.

TheXpert schrieb (a) >>
Was die zweite Frage angeht: Wie wäre es mit einer Initialisierung mit Zufallswerten?

MathRand()

TheXpert schrieb (a) >>
Ja, ich brauche auch genau dynamische Arrays.
Nur die erste Dimension des Arrays kann programmatisch geändert werden. Die Funktion ArrayResize(). Die zweite, dritte und vierte Dimension müssen starr festgelegt werden.
Grund der Beschwerde: