Nützliche Funktionen von KimIV - Seite 25

 

Die Funktion TimeOpenLastPos().

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

  • sy - Bezeichnung des Marktinstruments. Wenn Sie diesen Parameter setzen, berücksichtigt die Funktion nur Positionen dieses Instruments. Der Standardwert "" bedeutet ein beliebiges Marktinstrument. Ein Wert von NULL 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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает время открытия последней открытой позиций.          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime TimeOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  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);
}
ZS: Im Anhang finden Sie ein Skript zum Testen der Funktion TimeOpenLastPos().
Dateien:
 
Prival:
Gibt es eine Sortierfunktion für Blasen im Hinterzimmer?

Nicht verfügbar, aber ich habe 10 Minuten gebraucht, um es herzustellen.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.06.2008                                                     |
//|  Описание : Выполняет пузырьковую сортировку элементов массива.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    a - массив элементов                                                    |
//+----------------------------------------------------------------------------+
void BubbleSort(double& a[]) {
  double t;
  int    i, j, n=ArraySize(a);

  for (i=n-1; i>0; i--) {
    for (j=0; j<i; j++) {
      if (a[j]>a[j+1]) {
        t=a[j];
        a[j]=a[j+1];
        a[j+1]=t;
      }
    }
  }
}
ZS: Im Anhang finden Sie ein Skript zum Testen der Funktion BubbleSort().
Dateien:
 

Die Funktion BarsBetweenLastFractals().

Diese Funktion gibt die Anzahl der Balken zwischen den letzten beiden Fraktalen oder -1 zurück. Das Marktinstrument und der Zeitrahmen, aus dem die Fraktale entnommen werden sollen, werden durch Parameter festgelegt:

  • sy - Name des Marktinstruments. Standardwert ist "" oder NULL für das aktuelle Marktinstrument.
  • tf - Zeitrahmen (Anzahl der Minuten pro Balken). Der Standardwert 0 bedeutet den aktuellen Zeitrahmen.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.06.2008                                                     |
//|  Описание : Возвращает количество баров между двумя последними фракталами. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//+----------------------------------------------------------------------------+
int BarsBetweenLastFractals(string sy="", int tf=0) {
  double fu=0, fd=0;
  int    i, nu=0, nd=0;

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=2; i<100; i++) {
    fu=iFractals(sy, tf, MODE_UPPER, i);
    if (fu!=0) {
      if (nu==0) nu=i;
    }
    fd=iFractals(sy, tf, MODE_LOWER, i);
    if (fd!=0) {
      if (nd==0) nd=i;
    }
    if (nu>0 && nd>0) return(MathAbs(nu-nd));
  }
  Print("BarsBetweenLastFractals(): Фракталы не найдены");
  return(-1);
}
ZS: Im Anhang finden Sie ein Skript zum Testen der Funktion BarsBetweenLastFractals().
 

SecondsAfterCloseLastPos() Funktion.

Diese Funktion gibt die Anzahl der Sekunden zurück, nachdem die letzte Position geschlossen wurde. Die Auswahl der zu berücksichtigenden Positionen wird durch die Parameter festgelegt:

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

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}
P.S. Im Anhang finden Sie ein Skript zum Testen der Funktion SecondsAfterCloseLastPos().
 

Hallo

Ein Ratschlag.

Ich habe einen EA, der Aufträge an beide Seiten zu einem bestimmten Zeitpunkt stellt

Erläutern Sie bitte mit den Fingern, wie die zweite Bestellung automatisch gelöscht werden kann, wenn die erste ausgelöst wird.

Oder optimieren Sie es

Dankeschön

 
aceventura:

Hallo

Ein Ratschlag.

Ich habe einen EA, der Aufträge an beide Seiten zu einem bestimmten Zeitpunkt stellt

Erläutern Sie bitte mit den Fingern, wie die zweite Bestellung automatisch gelöscht werden kann, wenn die erste ausgelöst wird.

Oder optimieren Sie es

Dankeschön

KimIV

Igor. Haben Sie genug Finger?

 
aceventura:

Hallo

Ein Ratschlag.

Ich habe einen EA, der Aufträge an beide Seiten zu einem bestimmten Zeitpunkt stellt

Erläutern Sie bitte mit den Fingern, wie die zweite Bestellung automatisch gelöscht werden kann, wenn die erste ausgelöst wird.

Oder optimieren Sie es

Dankeschön

Nehmen Sie zunächst die Funktion Anzahl der Aufträge in diesem Zweig und wenn sie "== 1", "< 2" oder "== ungerade Zahl" zurückgibt, dann rufen Sie die Funktion aus diesem Zweig "Aufträge schließen" auf.

 
Vinin:

KimIV

Igor. Haben Sie genug Finger?

Wahrscheinlich nicht... Ich habe nur zwei: Zeigefinger und Griff... hee

 
SergNF:

Nehmen Sie zunächst die Funktion "Anzahl der Aufträge" in diesem Zweig, und wenn sie "== 1", "< 2" oder "== ungerade Zahl" zurückgibt, dann rufen Sie die Funktion "Aufträge schließen" aus diesem Zweig auf.

Die Funktion der Bestellmenge wird nicht funktionieren, da der EA für jedes Paar anders eingestellt ist. Und es werden gleichzeitig Aufträge für verschiedene Paare erteilt. Wenn dann vier Aufträge für zwei Paare erteilt werden und einer ausgelöst wird, werden drei davon gelöscht und der jeweils gegenüberliegende Auftrag wird gelöscht.

Grund der Beschwerde: