Nützliche Funktionen von KimIV - Seite 10

 

Vielen Dank, KimIV!

 

DeleteOrders() Funktion. Tester-Version.

Die Funktion DeleteOrders() dient zum Löschen der schwebenden Aufträge BuyLimit, BuyStop, SellLimit und SellStop. Die Funktion DeleteOrders() ist universell, d.h. sie kann verwendet werden, um alle vorhandenen schwebenden Aufträge zu löschen, sowie bestimmte Aufträge, die die mit den Funktionsparametern festgelegten Auswahlbedingungen erfüllen:

sy - Name des Instruments. Da im Tester nur das aktuelle Symbol gehandelt werden kann, ist dieser Parameter für die Tester-Version nicht relevant und wird nur für die Kompatibilität mit der Online-Version dieser Funktion benötigt. Es ist besser, im Prüfgerät die Werte "" oder NULL zu verwenden. Der Standardwert "" steht für ein beliebiges Symbol.
op
- Art der Handelsoperation, Art der Pending Order. Einer von fünf Werten ist möglich: -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT oder OP_SELLSTOP. Der Standardwert -1 steht für eine beliebige Bestellung.
mn
- MagicNumber, Identifikationsnummer der ausstehenden Bestellung. Standardwert -1 - bedeutet beliebige Magie.

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 

DeleteOrders() Funktion. Online-Version.


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 28.11.2006                                                      |
//| Описание : Удаление ордеров                                                |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента   ( ""  - любой символ,                    |
//|                                    NULL - текущий символ)                  |
//|   op - операция                   (  -1 - любой ордер)                     |
//|   mn - MagicNumber                (  -1 - любой магик)                     |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  bool fd;
  int err, i, it, k=OrdersTotal(), ot;
  
  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            for (it=1; it<=NumberOfTry; it++) {
              if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
              while (!IsTradeAllowed()) Sleep(5000);
              fd=OrderDelete(OrderTicket(), clDelete);
              if (fd) {
                if (UseSound) PlaySound(NameFileSound); break;
              } else {
                err=GetLastError();
                Print("Error(",err,") delete order ",GetNameOP(ot),
                      ": ",ErrorDescription(err),", try ",it);
                Sleep(1000*5);
              }
            }
          }
        }
      }
    }
  }
}
 

Beispiele für die Verwendung der Funktion DeleteOrders().


1. Alle Aufträge löschen:

DeleteOrders();
2. Alle BuyStop-Aufträge entfernen:
DeleteOrders(NULL, OP_BUYSTOP);

3. Löschen Sie alle Aufträge mit der magischen 123456:

DeleteOrders(NULL, -1, 123456);

ZY: Im Trailer befindet sich ein Arbeitsskript mit denselben Beispielen.

Dateien:
 
KimIV:

Beispiele für die Verwendung der Funktion DeleteOrders().

Wenn wir so weitermachen, kommen wir nie in der Bibliothek an. Dann muss ich eben doch in die Bibliothek gehen. Wenn Sie mich einladen. Ohne Einladung gehe ich nicht hin.
 
Jeder Mensch hat das Recht auf die linke Seite... Hehe... Ich werde ein bisschen Spaß damit haben

Ilnar fragte im Thema Anhängige Fraktal-Aufträge, wie man anhängige Aufträge auf Fraktalen macht?


Ich nehme an, dass Ilnar einige Schwierigkeiten hatte, das Preisniveau von Fraktalen zu erkennen. Deshalb schlage ich vor, meine Funktion zu verwenden:


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 07.10.2006                                                      |
//| Описание : Поиск ближайшего фрактала.                                      |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента     (NULL - текущий символ)                |
//|   tf - таймфрейм                    (  0  - текущий ТФ)                    |
//|   mode - тип фрактала               (MODE_LOWER|MODE_UPPER)                |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
 
  for (s=2; s<100; s++) {
    f=iFractals(sy, tf, mode, s);
    if (f!=0) return(NormalizeDouble(f, d));
  }
  Print("FindNearFractal(): Фрактал не найден");
  return(0);
}
Die Funktion FindNearFractal() sucht nach dem nächstgelegenen Fraktal des angegebenen Typs für das angegebene Symbol und den angegebenen Zeitrahmen und gibt dessen Kursniveau zurück. Wenn Sie das Preisniveau am Ort des Fraktals kennen, ist es bereits einfach, einen Auftrag auf diesem Niveau zu erteilen.
 
KimIV:
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
Frage... Was hat d mit 0 zu tun?
 
kharko:
KimIV:
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
Frage... Was hat d mit 0 zu tun?
Ich weiß es nicht... Ich hatte in meiner Praxis einen Fall, bei dem d=0 war. Ich musste eine Überprüfung durchführen, um den Wert auf Null zu setzen. Seitdem habe ich diesen Code überallhin mitgeschleppt, wo ich konnte. Vielleicht ist es unnötig, aber ich denke, es ist besser, zu viel zu sein als zu wenig.
 
Vinin:
KimIV:

Beispiele für die Verwendung von DeleteOrders().

Wenn wir so weitermachen, schaffen wir es nie bis zur Bibliothek. Wir müssen also doch in die Bibliothek gehen. Wenn Sie mich einladen. Ohne Einladung gehe ich nicht hin.

Vitek, was ist das Problem? Klar, komm und grabe bald den Garten um... Sie können helfen...

 
KimIV:
Vinin:
KimIV:

Beispiele für die Verwendung von DeleteOrders().

Wenn wir so weitermachen, schaffen wir es nie bis zur Bibliothek. Wir müssen also doch in die Bibliothek gehen. Wenn Sie mich einladen. Ohne Einladung gehe ich nicht hin.

Vitek, was ist das Problem? Klar, komm und grabe bald den Garten um... Sie können helfen...

Kein Problem mit dem Garten, obwohl ich nicht im richtigen Alter bin. Vielleicht können wir jemand Jüngeren für den Job gewinnen. Wir gehen in die Bäder und trinken Kwas (du bist allergisch, ich war es auch mal). Wir werden sehen, wie junge Menschen arbeiten. Das wäre nichts Ernstes.