Nützliche Funktionen von KimIV - Seite 16

 
KimIV:
khorosh:
Es gibt einen Fehler in der Funktion bool idPriceLevel(), die im e-TFL_v2 Expert Advisor enthalten ist: gdUpPrice==0 wird in der letzten Bedingung zweimal wiederholt, Sie wollten wahrscheinlich gdDnPrice==0 im zweiten Fall schreiben.

Ich danke Ihnen! Ich habe die korrigierte Version von e-TFL_v2 auf die Website hochgeladen.


khorosh:
Aus irgendeinem Grund funktioniert dieser EA in meinem Strategy Tester im visuellen Modus, aber er eröffnet keine Positionen auf einem Demokonto, obwohl er Kauf- und Verkaufslevel in den Kommentaren meldet. Vielleicht können Sie mir sagen, was das Problem ist.

Ich weiß es nicht... Ich habe gerade den Test dieses Expert Advisors auf einer NorthFinance-Demo beendet. Gestern rief mich mein Freund aus Moskau an. Er beschwerte sich über denselben Expert Advisor. Er sagt, dass er eine Position nach der anderen öffnet und dann immer mehr, bis man ihn stoppt und viele Positionen öffnet. Daher gab es zwei Ziele für die Prüfung:

1. Was Ihre Frage betrifft. Überprüfung der allgemeinen Funktionalität.

2. Zur Frage meines Freundes. Ich habe nur eine Position aus einer Linie eröffnet.

Um dies zu überprüfen, habe ich e-TFL_v2 Expert Advisor auf die 5-Minuten-Zeitrahmen EURUSD, GBPUSD, USDCHF und USDJPY angewendet. Mit Hilfe von Trendlinien habe ich Kanäle für die letzten 20-30 Balken gezeichnet. Infolgedessen funktionierte der Expert Advisor so, wie er sollte. Der EUR wurde in der unteren Zeile gekauft, während der JPY in der oberen Zeile verkauft wurde. Auch bei Pfund und Tschyf war alles korrekt. Sie sollten dies also selbst überprüfen. Der Expert Advisor funktioniert.

KimIV:
khorosh:
Die Funktion idPriceLevel() in e-TFL_v2 hat einen Fehler: in der letzten Bedingung wird gdUpPrice==0 zweimal wiederholt. Wahrscheinlich wollten Sie im zweiten Fall gdDnPrice==0 schreiben.

Ich danke Ihnen! Ich habe die korrigierte Version von e-TFL_v2 auf die Website hochgeladen.


khorosh:
Aus irgendeinem Grund funktioniert dieser EA in meinem Strategy Tester im visuellen Modus, aber er eröffnet keine Positionen auf einem Demokonto, obwohl er Kauf- und Verkaufslevel in den Kommentaren meldet. Vielleicht können Sie mir sagen, was das Problem ist.

Ich weiß es nicht... Ich habe gerade den Test dieses Expert Advisors auf einer NorthFinance-Demo beendet. Gestern rief mich mein Freund aus Moskau an. Er beschwerte sich über denselben Expert Advisor. Er sagt, dass er eine Position nach der anderen öffnet und dann immer mehr, bis man ihn stoppt und viele Positionen öffnet. Daher gab es zwei Ziele für die Prüfung:

1. Was Ihre Frage betrifft. Überprüfung der allgemeinen Funktionalität.

2. Zur Frage meines Freundes. Ich habe nur eine Position aus einer Linie eröffnet.

Um dies zu überprüfen, habe ich e-TFL_v2 Expert Advisor auf die 5-Minuten-Zeitrahmen EURUSD, GBPUSD, USDCHF und USDJPY angewendet. Mit Hilfe von Trendlinien habe ich Kanäle für die letzten 20-30 Balken gezeichnet. Infolgedessen funktionierte der Expert Advisor so, wie er sollte. Der EUR wurde in der unteren Zeile gekauft, während der JPY in der oberen Zeile verkauft wurde. Auch bei Pfund und Tschyf war alles korrekt. Sie sollten dies also selbst überprüfen. Der Expert Advisor funktioniert.

Vielleicht verstehe ich die EA-Logik nicht ganz, aber es scheint mir, dass bei Verwendung einer Zeile die Bedingung, bei der der Fehler auftrat, erfüllt wird und idPriceLevel() auf False gesetzt wird. Erklären Sie mir, wenn ich falsch liege.

 
khorosh:

Wenn eine einzelne Zeile verwendet wird, wird die Bedingung, bei der der Fehler auftrat, erfüllt und idPriceLevel() wird auf False gesetzt, wodurch die Position nicht geöffnet wird.

Ja, das ist richtig. Der EA benötigt zwei Linien für seinen normalen Betrieb: eine Linie liegt oberhalb des Preises und die zweite Linie liegt unterhalb des aktuellen Preises. Ich habe die Beschreibung auf der Website korrigiert. Ich danke Ihnen!

 
KimIV:
khorosh:

Wenn eine einzelne Zeile verwendet wird, wird die Bedingung, bei der der Fehler auftrat, erfüllt und idPriceLevel() wird auf False gesetzt, wodurch die Position nicht geöffnet wird.

Ja, das ist richtig. Der EA benötigt zwei Linien für seinen normalen Betrieb: eine Linie liegt oberhalb des Preises und die zweite Linie liegt unterhalb des aktuellen Preises. Ich habe die Beschreibung auf der Website korrigiert. Ich danke Ihnen!

Aus diesem Grund hat sich meine Position nicht geöffnet, da ich mit einer Leitung gearbeitet habe. Jetzt ist alles klar. Ich danke Ihnen für Ihren selbstlosen Einsatz. Ihre Funktionen sind sehr klar und deutlich beschrieben. Vielleicht werden die meisten unserer EAs, die jetzt entwickelt werden, jetzt Ihre Funktionen nutzen.

 

Funktion ExistOPNearMarket().

Diese Funktion gibt ein Flag zurück, das anzeigt, dass ein Auftrag oder eine Position in der Nähe des Marktes existiert (in einer bestimmten Entfernung in Pips vom Markt). Eine genauere Auswahl der zu prüfenden Aufträge oder Positionen wird durch externe Parameter festgelegt:

  • sy - Name des Instruments. Wenn dieser Parameter gesetzt ist, prüft die Funktion nur Aufträge oder Positionen des angegebenen Instruments. Das "" oder NULL bedeutet das aktuelle Symbol.
  • op - Art der Handelsoperation, des Auftrags oder der Position. Gültige Werte: OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP oder -1. Der Standardwert -1 bedeutet eine beliebige Handelsoperation.
  • mn - Kennung des Auftrags oder der Position (MagicNumber). Der Standardwert -1 bedeutet einen beliebigen Bezeichner.
  • ds - Abstand vom Markt in Pips. Der Standardwert ist 1000000.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг существования позиции или ордера около рынка   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    op - торговая операция               (    -1      - любая операция)     |
//|    mn - MagicNumber                     (    -1      - любой магик)        |
//|    ds - расстояние в пунктах от рынка   (  1000000   - по умолчанию)       |
//+----------------------------------------------------------------------------+
bool ExistOPNearMarket(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);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  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 (ot==OP_BUY || ot==OP_BUYLIMIT || ot==OP_BUYSTOP) {
            if (MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())<ds*p) return(True);
          }
          if (ot==OP_SELL || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
            if (MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))<ds*p) return(True);
          }
        }
      }
    }
  }
  return(False);
}
SZZY. beigefügtes Skript für Experimente mit der Funktion ExistOPNearMarket().
Dateien:
 

Funktion ExistPosByPrice().

Diese Funktion gibt ein Flag für das Vorhandensein einer Position zu einem bestimmten offenen Preis zurück. Eine genauere Auswahl der zu prüfenden Positionen wird durch externe Parameter definiert:

  • sy - Name des Marktinstruments. Wenn Sie diesen Parameter setzen, prüft die Funktion nur die Positionen eines bestimmten Instruments. Der Standardwert "" bedeutet ein beliebiges Marktinstrument. 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.
  • pp - Offener Preis der Position. Der Standardwert 0 bedeutet einen beliebigen Preis.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг существования позиций по цене открытия         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pp - цена                       ( 0   - любая цена)                     |
//+----------------------------------------------------------------------------+
bool ExistPosByPrice(string sy="", int op=-1, int mn=-1, double pp=0) {
  double px, py;
  int    d, 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=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            d=MarketInfo(OrderSymbol(), MODE_DIGITS);
            px=NormalizeDouble(pp, d);
            py=NormalizeDouble(OrderOpenPrice(), d);
            if (pp<=0 || px==py) return(True);
          }
        }
      }
    }
  }
  return(False);
}
ZS. Im Trailer befindet sich ein Skript zum Testen der Funktion ExistPosByPrice().
Dateien:
 

Die Funktion GetAmountLotFromOpenPos().

Diese Funktion gibt die Summe der Lose der offenen Positionen zurück. Eine genauere 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 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  - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=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=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
ZS: Im Anhang finden Sie ein Skript zum Testen der Funktion GetAmountLotFromOpenPos().
 

GetIndexByTicket() Funktion.

Diese Funktion gibt den Index der Bestellung oder Position per Ticket zurück. Die genauere Auswahl der zu durchsuchenden Aufträge oder Positionen wird durch externe Parameter festgelegt:

  • ti - Reihenfolge der Tickets, Position. Der Wert dieses Parameters kann nicht leer oder Null sein.
  • sy - Bezeichnung des Marktinstruments. Wenn Sie diesen Parameter setzen, berücksichtigt die Funktion nur Positionen des angegebenen Instruments. Standardwert - "" bedeutet ein beliebiges Marktinstrument. NULL bedeutet das aktuelle Instrument.
  • op - Art der Handelsoperation, des Auftrags oder der Position. Gültige Werte: OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP oder -1. Der Standardwert von -1 bedeutet eine beliebige Position.
  • mn - Positionsbezeichner, MagicNumber. Der Standardwert -1 bedeutet einen beliebigen Bezeichner.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает индекс ордера или позиции по тикету.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ti - тикет ордера, позиции                                              |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetIndexByTicket(int ti, string sy="", int op=-1, int mn=-1) {
  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=="") && (op<0 || OrderType()==op)) {
        if ((mn<0 || OrderMagicNumber()==mn) && OrderTicket()==ti) return(i);
      }
    }
  }
  return(-1);
}
PS. Im Anhang finden Sie ein Skript zum Testen der Funktion GetIndexByTicket().
Dateien:
 

Hallo

Ich möchte wissen, ob Sie eine Funktion zur Bestimmung der Korrelation zweier Reihen haben, die Sie ihr als Parameter übergeben?

 
scorpionk:

Hallo

Ich würde gerne wissen, ob Sie eine Funktion haben, die die Korrelation der beiden als Parameter übergebenen Reihen bestimmt?

Nein... Aber ich habe ein Interesse an diesem Thema. Wenn Sie die Formeln zur Berechnung der Korrelation bereitstellen, werde ich die Funktion schreiben.


ZS: Ich werde nicht selbst nach den Formeln suchen. Ich werde auch nicht auf Links mit Materialien eingehen. Das heißt, ich habe kein Interesse daran, das Thema zu verstehen. Es besteht lediglich der Wunsch, eine Funktion mit vorgefertigten Formeln zu schreiben.

 
KimIV:
skorpionk:

Hallo

Ich würde gerne wissen, ob Sie eine Funktion haben, die die Korrelation der beiden als Parameter übergebenen Reihen bestimmt?

Nein... Aber ich habe ein Interesse an diesem Thema. Wenn Sie die Formeln zur Berechnung der Korrelation bereitstellen, werde ich die Funktion schreiben.


ZS: Ich werde nicht selbst nach den Formeln suchen. Ich werde auch nicht auf Links mit Materialien eingehen. Das heißt, ich habe kein Interesse daran, das Thema zu verstehen. Es besteht nur der Wunsch, die Funktion auf die fertigen Formeln zu schreiben.


Korrelationsformel