Nützliche Funktionen von KimIV - Seite 117

 
tim-time:

...PUSH-Benachrichtigungen zu Ihreme-SignalOfTrade EA hinzufügen?

Erledigt... von meiner Website herunterladen...
 
KimIV:

Ich habe die Funktion ErrorRU() erstellt, die eine kurze oder ausführliche russische Beschreibung eines Fehlers anhand seines Codes liefert. Es werden sowohl vom Handelsserver zurückgegebene Fehler als auch Fehler bei der Ausführung von MQL-Programmen erkannt. Nicht bei allen Fehlern gibt es jedoch eine detaillierte Beschreibung mit Empfehlungen, was zu tun ist, aber das ist nun mal so.

Ich veröffentliche die Funktion im Skript, um sie zu testen.

Wenn jemand eine Variante in Form einer MQH-Datei benötigt, kann er sie von meiner Website erhalten.


Grüße Igor. Vielen Dank für diese Funktion, sie ist sehr nützlich.
 

Hallo KimIV.

Sie haben eine wunderbare Funktion i-Profit.mq4 auf Ihrer Website.

Könnten Sie mir bitte sagen, wie ich die Bilanzdaten daraus extrahieren kann?

// 0 - aktueller Saldo

// 1 - Saldo zu Beginn des Tages.

// 2 - Saldo zu Beginn der Woche.

// 3 - bilanz zu beginn des monats

// 4 - Saldo zu Beginn des Quartals

// 5 - saldo zu beginn des jahres

// 6 - bilanz zum datum des benutzers

 

Die Funktion ProfitByPrice().

Diese Funktion gehört zu meiner kleinen Gruppe von Vorhersagefunktionen. Voraussagend in dem Sinne, dass sie die Zukunft anzeigen, d. h. sie beantworten die Frage: "Was wird passieren, wenn ein bestimmtes Ereignis eintritt? Diese Funktion gibt zum Beispiel einen Gewinn in der Währung der Einlage zurück, wenn die aktuellen Positionen zu dem als Parameter übergebenen Preis geschlossen werden.

  • op- Handelsoperation, Positionsart. Gültige Werte: OP_BUY,OP_SELL oder-1. Der Standardwert-1 bedeutet eine beliebige Handelsoperation.
  • mn- Positionsbezeichner, MagicNumber. Der Standardwert-1 bedeutet einen beliebigen Bezeichner.
  • cp- Erwarteter Schlusskurs. Der Standardwert0 bedeutet den aktuellen Geldkurs.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.04.2013                                                     |
//|  Описание : Возвращает профит в валюте депозита, если текущие позиции      |
//|             будут закрыты по цене, переданной в качестве параметра.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    op - операция                             (-1 - любая позиция)          |
//|    mn - MagicNumber                          (-1 - любой магик)            |
//|    cp - цена предполагаемого закрытия (Bid)  ( 0 - текущая цена)           |
//+----------------------------------------------------------------------------+
double ProfitByPrice(int op=-1, int mn=-1, double cp=0) {
  double pr=0;
  double po=MarketInfo(Symbol(), MODE_POINT);
  double sp=MarketInfo(Symbol(), MODE_SPREAD);
  double tv=MarketInfo(Symbol(), MODE_TICKVALUE);
  int    i, k=OrdersTotal();

  RefreshRates();
  if (cp<=0) cp=Bid;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol() && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            pr+=(cp-OrderOpenPrice())/po*OrderLots()*tv;
            pr+=OrderCommission()+OrderSwap();
          }
          if (OrderType()==OP_SELL) {
            pr+=(OrderOpenPrice()-cp-Ask+Bid)/po*OrderLots()*tv;
            pr+=OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(pr);
}

ZZY: Im Anhang finden Sie ein traditionelles Skript zum Testen der Funktion.

Es gibt kein traditionelles System zwischen den Parametern, da der im anderen Parameter übergebene Preis mit einem Handelsinstrument verbunden sein sollte. Ich habe beschlossen, mich nicht zu sehr damit zu befassen und es mit dem aktuellen Symbol zu verbinden.

Dateien:
 
Lieber Igor, vielen Dank für deine Funktionen, die uns die ersten Schritte in der Programmierung erleichtern! Können Sie mir helfen, ich brauche eine Funktion, um eine Position zu schließen, aber ohne auf andere Funktionen zu verweisen, sondern um Select, 3 Versuche und Fehlerbehandlung zu haben! Und am Anfang würde ich Bedingungen mit Kontrollfunktionen ohne Select vorschreiben, um den Prozess nicht zu verlangsamen. Bisher habe icheine Selekt-Schleife am Anfangmit verschiedenen Prüfungen verwendet und die Close-Funktion ohne Selekt aufgerufen, was fast doppelt so langsam ist! Was können Sie mir raten? Danke!
 

KimIV:

Wir müssen einen schwebenden Auftrag zu einem Abrechnungskurs einstellen, vorausgesetzt, es gibt keine anderen Aufträge oder Positionen innerhalb der Distanz zu diesem Kurs. Sie scheinen eine solche Funktion nicht zu haben: das Vorhandensein eines Auftrags oder einer Position in einem bestimmten Abstand zu einem bestimmten Preis?

 
Ich schätze, KimIV schaut hier nicht hin! :(
 
khorosh:

KimIV:

Wir müssen einen schwebenden Auftrag zu einem Abrechnungskurs einstellen, vorausgesetzt, es gibt keine anderen Aufträge oder Positionen innerhalb der Distanz zu diesem Kurs. Sie scheinen eine solche Funktion nicht zu haben: Das Vorhandensein eines Auftrags oder einer Position mit einem Abstand zu einem bestimmten Preis?


Sie können etwas Ähnliches wie das hier zeichnen...

Update...

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 24.06.2013                                                     |
//|  Описание : Возвращает флаг существования ордера или позиции               |
//|             около заданной цены.                                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    zp - заданная цена                                                      |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    op - торговая операция               (    -1      - любая операция)     |
//|    mn - MagicNumber                     (    -1      - любой магик)        |
//|    ds - расстояние в пунктах от цены    (  1000000   - по умолчанию)       |
//+----------------------------------------------------------------------------+
bool ExistOPNearPrice(double zp, string sy="", int op=-1, int mn=-1, int ds=1000000) {
  int i, k=OrdersTotal(), ot;

  if (sy=="" || sy=="0") sy=Symbol();
  double p=MarketInfo(sy, MODE_POINT);
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if ((OrderSymbol()==sy) && (op<0 || ot==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (MathAbs(OrderOpenPrice()-zp)<ds*p) return(True);
        }
      }
    }
  }
  return(False);
}

Im Anhang finden Sie ein Skript zum Testen der Funktion ExistOPNearPrice()

Dateien:
 
borilunad:
Lieber Igor, vielen Dank für deine Funktionen, die uns die ersten Schritte in der Programmierung erleichtern! Können Sie mir helfen, ich brauche eine Funktion, um eine Position zu schließen, aber ohne auf andere Funktionen zu verweisen, sondern um Select, 3 Versuche und Fehlerbehandlung zu haben! Und am Anfang würde ich Bedingungen mit Kontrollfunktionen ohne Select vorschreiben, um den Prozess nicht zu verlangsamen. Bisher habe icheine Selekt-Schleife am Anfangmit verschiedenen Prüfungen verwendet und die Close-Funktion ohne Selekt aufgerufen, was fast doppelt so langsam ist! Was können Sie mir raten? Danke!
Ist nicht ClosePosBySelect()?
 
artmedia70:
Ist ClosePosBySelect() nicht etwas?
Es ist das, aber nicht das, eine Menge unnötiger Aufrufe von anderen Funktionen mit daraus resultierenden Fehlern!