Nützliche Funktionen von KimIV

 

In diesem Thread werde ich die Codes meiner Funktionen in MQL4 veröffentlichen, Beispiele für ihre Verwendung geben und Fragen zu ihrer Verwendung beantworten. Jede Funktion wird in zwei Beiträgen veröffentlicht. Der erste Beitrag wird den Funktionscode enthalten, der zweite - Anwendungsbeispiele und kurze Erläuterungen. Manchmal hänge ich den Code eines Skripts an den zweiten Beitrag an, um die Funktion tatsächlich zu testen und die Ergebnisse anzuzeigen.

Ich werde am Ende mit Funktionen zur Handhabung von Aufträgen gemäß Lukyanovs Anfrage im Thema "Wie man zwei EAs gleichzeitig laufen lässt" beginnen.

Die erste ist die Funktion zum Setzen von Aufträgen (MT4-Testerversion):

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 13.06.2007                                                      |
//|  Описание : Установка ордера. Версия функции для тестов на истории.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, datetime ex=0) {
  color clOpen;
  int   err, ticket;
 
  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell;
  ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, "", mn, ex, clOpen);
  if (ticket<0) {
    err=GetLastError();
    Print("Error(",err,") set ",GetNameOP(op),": ",ErrorDescription(err));
    Print("Ask=",Ask," Bid=",Bid," sy=",sy," ll=",ll,
          " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
  }
}
//+----------------------------------------------------------------------------+
 
Wird es irgendwelche veröffentlichten Funktionen für den realen Handel geben? P.S.: Danke für das Thema. Ich denke, es wird sehr beliebt und gefragt sein.
 
Hallo, Igor!
Ich unterstütze diese Idee. Richtige Entscheidung........!!!
Ihr Code ist riesig, es tauchen oft Fragen auf, und es ist nicht gut, Sie in Beiträgen anderer Leute und zu anderen Themen anzusprechen.
 

Großartig.

Ein Vorschlag an die Entwickler: Erstellen Sie eine Funktionsbibliothek. Meines Erachtens ist es dazu wünschenswert, der Gemeinschaft Gestaltungsvorgaben zu machen (z. B. obligatorische Beschreibung von Variablen, Festlegung von Verwendungsgrenzen, Anzahl der Zeichen pro String usw.). Ein MQ-Artikel zu diesem Thema wäre eine gute Idee.

Mit der Zeit werden nicht nur einfache, sondern auch komplexe Funktionen in der Bibliothek erscheinen.

 
Lukyanov:
Wird es veröffentlichte Funktionen für den realen Handel geben?

Ja, sie werden... Als nächstes wird die Funktion SetOrder() für den Online-Handel folgen...


Beispiele für die Verwendung der Funktion SetOrder():

1. Einstellen eines BuyLimit-Auftrags mit 0,1 Lot, 50 Pips unter dem aktuellen Kurs:

SetOrder(NULL, OP_BUYLIMIT, 0.1, Ask-50*Point);

2. Einstellen eines BuyStop-Auftrags mit Lot 0,3 36 Pips über dem aktuellen Kurs mit einem Stop bei 32 Pips:

SetOrder(NULL, OP_BUYSTOP, 0.3, Ask+36*Point, Ask+(36-32)*Point);

3. Platzierung einer SellLimit-Order von Lot 0.2 bei 42 Pips über dem aktuellen Kurs mit einem Takeaway von 50 Pips:

SetOrder(NULL, OP_SELLLIMIT, 0.2, Bid+42*Point, 0, Bid+(42-50)*Point);

4. Platzierung eines SellStop-Auftrags über Lot 0,5 um 100 Pips unter dem aktuellen Kurs mit einem Stop von 30 Pips und einem Takeaway von 70 Pips:

SetOrder(NULL, OP_SELLSTOP, 0.5, Bid-100*Point, Bid-(100-30)*Point, Bid-(100+70)*Point);

5. Ein BuyLimit-Auftrag mit Lot 0,1 wird 50 Pips unter dem aktuellen Kurs mit der magischen Nummer 123456 und einem Verfallstermin in zwei Stunden platziert:

SetOrder(NULL, OP_BUYLIMIT, 0.1, Ask-50*Point, 0, 0, 123456, TimeCurrent()+2*60*60);
Der Trailer ist ein Drehbuch aus dem wirklichen Leben mit den oben genannten Beispielen. Die ersten vier Beispiele sind auskommentiert.
Dateien:
 
VBAG:
Hallo, Igor!
Ich unterstütze diese Idee. Richtige Entscheidung........!!!
Ihr Code ist riesig, es tauchen oft Fragen auf, und es ist nicht gut, Sie in Beiträgen anderer Leute und zu anderen Themen anzusprechen.
Nun, hier können wir reden. Formulieren Sie Ihre Fragen, ich werde sie gerne beantworten :-)
 
Zeigen Sie Ihre Version der Verzögerungen zwischen den Handelsgeschäften
Ich danke Ihnen.
 
Danke für das nützliche Thema, auch wenn es mir um verbrannte Torten geht, aber vielleicht hat sich schon jemand mit dem Problem der Vorratshaltung und der Probenahme aus großen Datensätzen in µl auseinandergesetzt. µl und Datenbanken? Hat jemand in diese Richtung gedacht?
 
zhuki писал (а):
Zeigen Sie Ihre Version der Verzögerungen zwischen den Geschäften

Ich mache keine Verzögerungen zwischen den Geschäften. Das heißt, wenn ich zwei oder mehr Aufträge erteilen muss, führe ich diese Handelsoperationen ohne eine Pause dazwischen aus. Aber zwischen den Handelsversuchen, die im Falle eines Fehlers bei der Kontaktaufnahme mit dem Server wiederholt werden müssen, mache ich gemäß den Empfehlungen der MT4-Entwickler eine Pause. Als Beispiel können Sie sehen, wie solche Pausen in meiner SetOrder() -Funktion für den Online-Handel implementiert sind. Für verschiedene vom Handelsserver zurückgegebene Fehler werden unterschiedliche Pausen eingelegt.

Diese Funktion SetOrder() wird zum Setzen von schwebenden Aufträgen verwendet. Es wird für den Online-Handel auf Demo- und Live-Konten empfohlen.

Dateien:
 
Sehr originell, aber erklären Sie, warum die Verzögerungen von 7,7, 17 und 11 Sekunden. Und was ist, wenn es mehr als einen Expert Advisor gibt, dann ist die Analyse erforderlich.
 
zhuki:
...erklären, warum es eine Verzögerung von 7,7,17,11 Sekunden gibt. Ist dies ein Scherz oder ist es gerechtfertigt.

Welche Art von Witzen kann man mit echtem Geld machen?

Bei den Fehlern 129 (Falscher Geld- oder Briefkurs), 130 (Falsche Stops), 134 (Nicht genug Geld), 136 (Kein Kurs) wird eine Pause von 7,7 Sekunden eingelegt. Die MT4-Entwickler empfehlen für diese Fälle Pausen von mehr als 5 Sekunden. Ich habe ihn auf 7,7 Sekunden eingestellt. Man hätte auch 6,1 Sekunden sagen können. Ich mag keine runden Werte wegen ihrer Attraktivität, also setze ich nicht runde Werte.

Die 17-Sekunden-Pause war für den Fehler 145 (Änderung verboten) vorgesehen. Da die Funktion SetOrder jedoch keine Änderungen vornimmt, habe ich die Behandlung dieses Fehlers entfernt. Danke, dass Sie mich auf diesen Aspekt meiner Funktion aufmerksam gemacht haben!

Die Pause von 11 Sekunden befindet sich innerhalb der Schleife, die den Status des Teilsystems Handel überprüft. Sie können den Wert auf 15 oder 30 Sekunden einstellen. Es spielt keine Rolle, was Sie mögen.

zhuki:
Ich frage mich auch, was zu tun ist, wenn es mehr als einen Expert Advisor gibt und man nicht ohne Analyse auskommt.

Bei mehreren Expert Advisors auf einem Handelskonto wird der Fehler 146 (Trading Subsystem is busy) behandelt. Die Funktion SetOrder wartet, bis das Handelsteilsystem frei ist.


Warnung! Ich habe den vorherigen Beitrag bearbeitet. Änderungen an der Funktion SetOrder vorgenommen.