Nützliche Funktionen von KimIV - Seite 115

 

Hallo Andrey!

  1. Es gibt bereits drei Funktionen für den Eröffnungspreis:
  2. Es gibt auch Funktionen für die Tickets. Es gibt zwei von ihnen:
Andrey, diese Funktionen bieten alles, was Sie brauchen, außer der Auswahl nach Losgröße. Ich werde in naher Zukunft weitere Funktionen erstellen, in denen der Eröffnungskurs und das Ticket nach Losgröße abgerufen werden können.

 
KimIV:

Hallo Andrey!

  1. Es gibt bereits drei Funktionen für den Eröffnungspreis:
  2. Es gibt auch Funktionen für die Tickets. Es gibt zwei von ihnen:
    • GetTicketLastPos() - Das Ticket der zuletzt geöffneten Position oder -1.
    • TicketNearPos() - Ticket der Position, die dem Markt zum Eröffnungskurs oder 0 am nächsten ist.
Andrey, diese Funktionen bieten alles, was Sie brauchen, außer der Auswahl nach Losgröße. Ich werde in naher Zukunft weitere Funktionen erstellen, in denen der Eröffnungskurs und das Ticket nach Losgröße abgerufen werden können.
Vielleicht sind sie für mich überflüssig und ich muss unnötige Bedingungen loswerden, wie z. B.: Preis der nächsten offenen Position, letzte offene Position, am nächsten zum Markt. Und das erweist sich nicht immer als richtig. Außerdem lassen sich all diese Feinheiten schneller verstehen, wenn wir sie richtig vergleichen. Vielen Dank, ich freue mich darauf.
 

Die Funktion GetOpenPriceByLot().

Diese Funktion gibt den Eröffnungskurs einer Position oder eines Auftrags nach Lotgröße 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, Position oder Auftragsart. Gültige Werte:OP_BUY,OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP oder-1. Der Standardwert-1 bedeutet eine beliebige Handelsoperation.
  • mn- Kennung einer Position oder eines Auftrags, MagicNumber. Der Standardwert-1 bedeutet einen beliebigen Bezeichner.
  • lo- Los. Der Standardwert0 bedeutet eine beliebige Partie.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает цену открытия позиции или ордера по размеру лота.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
double GetOpenPriceByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  double p=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((op<0 || OrderType()==op) && OrderType()<6) {
          if (lo==0 || lo==NormalizeLot(OrderLots())) p=OrderOpenPrice();
        }
      }
    }
  }
  return(p);
}
ZS: Im Anhang finden Sie ein Skript zum Testen der FunktionGetOpenPriceByLot().
 

Die Funktion GetTicketByLot().

Diese Funktion gibt das Ticket einer Position oder eines Auftrags nach Losgröße 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 Symbols. Der Standardwert"" bedeutet ein beliebiges Marktinstrument.NULL-Wert bedeutet das aktuelle Instrument.
  • op- Handelsoperation, Position oder Auftragsart. Gültige Werte:OP_BUY,OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP oder-1. Der Standardwert-1 bedeutet eine beliebige Handelsoperation.
  • mn- Kennung einer Position oder eines Auftrags, MagicNumber. Der Standardwert-1 bedeutet einen beliebigen Bezeichner.
  • lo - Los. Der Standardwert 0 bedeutet eine beliebige Partie.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает тикет позиции или ордера по размеру лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
int GetTicketByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  int i, k=OrdersTotal(), t;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((op<0 || OrderType()==op) && OrderType()<6) {
          if (lo==0 || lo==NormalizeLot(OrderLots())) t=OrderTicket();
        }
      }
    }
  }
  return(t);
}

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


Dateien:
 

Hallo Igor!

Vielen Dank für die neuen Funktionen und dafür, dass Sie so schnell waren. Alles ist sehr gut. Die Funktion gibt z.B. eine Ticketbestellung nach Bedingungen zurück, die durch externe Variablen gesetzt werden können oder nicht verwendet werden können. Ich bin mir über diese Zeile nicht ganz im Klaren:

if ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6))

Hier prüfen wir die Bedingung der if-Anweisung, d.h. wenn die externe Variable <0 ist, ist jede Auftragsart verfügbar ODER wenn wir z.B. OP_BUY in den Funktionsaufruf schreiben, wird die Auswahl unter den OP_BUY-Aufträgen getroffen. Diese Bedingung ist eindeutig, aber darüber hinaus haben wir eine äquivalente Bedingung durch&& geschrieben, die besagt, dassOrderType() innerhalb des Bereichs der ausstehenden Aufträge liegen muss, d.h. von 1 bis 5. Unser OP_BUY-Typ ist nicht in diesem Bereich enthalten, und daher muss die Bedingung des Operators falsch sein und die Kontrolle muss an den Operator nach dem if-else-Operator weitergegeben werden, d.h. es ist schwierig für mich zu sagen, wo, irgendwo hinter dem geschweiften Körperpfeil. Es scheint mir, dass wir hier die Bedingung für Marktaufträge und eine separate Funktion für schwebende Aufträge derselben Art festlegen sollten. Das heißt, wenn ich eine Auswahl aus den Marktaufträgen treffen möchte und den genauen Typ nicht kenne, nehme ich die externe Variable <0, wende mich aber an die Funktion, in der die Bedingungen von 0 bis 1 angegeben sind. Das gleiche Verfahren wird auf schwebende Aufträge angewandt. Daher bin ich zu dem Schluss gekommen, dass wir bei der Verwendung dieser nützlichen Bedingung für jede Kategorie von Auftragsarten eine andere Funktion verwenden sollten.

Außerdem habe ich ein Problem mit der Bibliotheksverbindung. Ich habe gesucht und gelesen, aber die Verbindung gibt einen Fehler beim Kompilieren des EA, den ich schreibe. Ich habe noch keine Zeit, mich damit zu beschäftigen, ich möchte schneller einen profitablen Expert Advisor schreiben, also habe ich alle drei benötigten Bibliotheken kopiert und sie nach der speziellen Funktion start() angehängt, und ihre globalen Variablen in die globalen Variablen des EA platziert und Verweise auf sie auskommentiert. Es ist nicht sehr bequem, aber es funktioniert.
 
00007:

Ich bin mir über diese Zeile nicht ganz im Klaren:

if ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6))

Ich danke Ihnen! Korrigiert... Dies ist eine Folge des Kopierens, d.h. der Verwendung einer Vorform einer anderen Funktion, die nur mit Limit- und Stop-Aufträgen arbeiten soll.

00007:

Ich habe auch ein Problem mit der Verbindung von Bibliotheken. Ich habe gesucht und gelesen, aber die Verbindung gibt mir einen Fehler beim Kompilieren der Expert Advisor ich schreibe. Ich habe keine Zeit, es herauszufinden, und ich möchte einen profitablen Expert Advisor schneller schreiben, also habe ich alle drei benötigten Bibliotheken kopiert und sie nach der speziellen Funktion start() angehängt, und ihre globalen Variablen in globalen EA-Variablen platziert und Referenzen auf sie auskommentiert. Es ist nicht sehr bequem, aber es funktioniert.

Übrigens verwende ich nicht meine eigenen Bibliotheken in Form von MQH-Dateien. Ich kopiere in der Regel die Funktionen, die ich in meinem EA benötige, d.h. mein fertiger Standard-EA ist eine einzige MQ4-Datei. Alles, was ich brauche, befindet sich in dieser Datei. Ja, es gibt einige Wiederholungen in dem Code. Aber es gibt keine Probleme mit Versionen von Funktionen.

 

Übrigens habe ich auch bemerkt, dass Sie Testskripte für jede Funktion haben, und sie haben alle zusätzlichen Funktionen, die Sie brauchen, die Sie einfach zu Ihrem EA zusammen mit der Funktion hinzufügen können, und es wird alles in einer Datei mit nichts extra sein. Die Funktionen sind einfach und nützlich, aber mit Ihrer Erlaubnis werde ich mir vier davon anfertigen: zwei für Positionen und zwei für Stopps. Sie werden universeller für die heiklen Anforderungen meines EA sein. Aber jetzt sehe ich, wie einfach es ist, das zu tun. Vielen Dank, Igor.

Mit freundlichen Grüßen Andrej.

 

Die Funktion TimeOpenFirstPos().

Diese Funktion gibt den Zeitpunkt der ersten offenen Position zurück. Die Auswahl der zu berücksichtigenden Positionen wird durch externe Parameter festgelegt:

  • sy- Bezeichnung des Marktinstruments. Wenn Sie diesen Parameter setzen, berücksichtigt die Funktion nur Positionen dieses 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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.01.2012                                                     |
//|  Описание : Возвращает время открытия первой открытой позиций.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime TimeOpenFirstPos(string sy="", int op=-1, int mn=-1) {
  datetime t=TimeCurrent();
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t>OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(t);
}
Die Verwendung der Funktion ist ähnlich wie bei TimeOpenLastPos()
 

Hallo

So fügen Sie einen Foeba zu Ihrem SetRegression()(https://www.mql5.com/ru/forum/107476/page35 ) Kanal hinzu.

 
gince:

Hallo

So fügen Sie einen Foeba zu Ihrem SetRegression()(https://www.mql5.com/ru/forum/107476/page35 ) Kanal hinzu.

Ente, es ist ganz einfach:

  1. Sie legen den ersten Punkt der Fibo-Linie fest (berechnen Sie, von wo aus sie kommen soll).
  2. Entscheide, auf welcher Stange du den zweiten Punkt bekommst.
  3. Verwenden Sie dannEquationDirect(), um den Preis zu ermitteln.
  4. Wenn Sie die Koordinaten von zwei Punkten haben, zeichnen Sie mit dem BefehlSetTLine() eine Linie durch diese Punkte.

Grund der Beschwerde: