Nützliche Funktionen von KimIV - Seite 53

 
KimIV >> :

IIFc()-Funktion.

...

Versuchen Sie, einen fehlenden ternären Operator zu erstellen?

Score, danke, mit meiner Gewohnheit, geschweifte Klammern zu setzen, wo immer ich kann, wird es sehr nützlich sein.

 
CMEPTHiK писал (а) >>
Ich habe das Buch von V. Yakimkin gelesen. "Forex-Markt - Ihr Weg zum Erfolg" und stieß auf solche Zeilen "...Differenz von (DJI x Nikkei)..." Sagen Sie mir, Igor, ist es möglich, zu implementieren und die Ausgabe in Form von Indikator...

Der Unterschied ist die Geschwindigkeit, die der ROC-Indikator anzeigt.

 

Igor, hast du nicht eine Funktion in deinem Stash, um alle Positionen auf einmal zu schließen, einschließlich der Schließung mit Gegenpositionen im Hinterkopf?

D.h. zuerst alle Gegenpositionen so weit wie möglich zu schließen, unter Berücksichtigung des Missverhältnisses zwischen den Losen der Gegenpositionen, dann die gewinnbringenden Verlustpositionen...

 
alexx_v писал(а) >>

Igor, haben Sie in Ihrem Lagerraum eine Funktion, mit der Sie alle Positionen auf einmal schließen können, einschließlich des Schließens mit Gegenpositionen im Hinterkopf?

D.h. zuerst alle gegenläufigen Positionen zu schließen, so weit wie möglich, unter Berücksichtigung des Missverhältnisses vieler gegenläufiger Positionen, dann die verlustbringenden, gewinnbringenden Positionen...

Nein, ich habe es noch nicht.

 

Die Funktion ExistInHistoryCloseBetween().

Gibt ein Kennzeichen für das Vorhandensein einer Position oder eines Auftrags in der Historie zurück, der zwischen den Daten geschlossen (gelöscht) wurde. Die Funktion ExistInHistoryCloseBetween() erhält die folgenden Parameter:

  • sy - Bezeichnung des Marktinstruments. "" - beliebiges Symbol, NULL - aktuelles Symbol. Der Standardwert ist "".
  • op - Handelsoperation. Gültige Werte: -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP. Standardwert -1 - beliebiger Vorgang.
  • mn - Kennung der Handelsgeschäfte, MagicNumber. Standardwert -1 - eine beliebige magische Zahl.
  • d1 - Zeitpunkt des Positionsschlusses (anstehende Auftragslöschung). Der Standardwert ist 0 - beliebige Schließzeit (löschen). Die Zeit d1 muss kürzer sein als d2.
  • d2 - Schließungszeit der Position (Löschung des Auftrags steht noch aus). Standardwert - 0 - beliebige Schließzeit (Löschen). Die Zeit d2 muss länger sein als die Zeit d1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : закрытой (удалённого) между датами.                            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая операция)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время закрытия             ( 0   - любое время закрытия)           |
//|    d2 - время закрытия             ( 0   - любое время закрытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryCloseBetween(string sy="", int op=-1, int mn=-1,
                                datetime d1=0, datetime d2=0) {
  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=="") && ( op<0 || OrderType()== op)) {
        if ( mn<0 || OrderMagicNumber()== mn) {
          if ( d1<=OrderCloseTime() && ( d2==0 || d2>=OrderCloseTime())) return( True);
        }
      }
    }
  }
  return( False);
}
 

Beispiele für die Verwendung von ExistInHistoryCloseBetween().

  1. Vorhandensein von gestern geschlossenen Positionen oder gelöschten Aufträgen beliebigen Typs mit MagicNumber=0 für das aktuelle Chart-Symbol.
    datetime d1=iTime(NULL, PERIOD_D1, 1);
    datetime d2=iTime(NULL, PERIOD_D1, 0)-1;
    Message( IIFs( ExistInHistoryCloseBetween(NULL, -1, -1, d1, d2), "Есть", "Нет"));
  2. Vorhandensein von Positionen oder Aufträgen, die in den letzten drei Stunden geschlossen (gelöscht) wurden.
    datetime d1=TimeCurrent()-3*60*60;
    Message(IIFs(ExistInHistoryCloseBetween("", -1, -1, d1), "Есть", "Нет"));
  3. Ob in den letzten 5 Minuten ein Kauf in EUR abgeschlossen wurde oder nicht.
    datetime d1=TimeCurrent()-5*60;
    Message( IIFs( ExistInHistoryCloseBetween("EURUSD", OP_BUY, -1, d1), "Да", "Нет"));

P.S. Im Anhang finden Sie ein Skript zum Testen der Funktion ExistInHistoryCloseBetween().

 

Die Funktion ExistInHistoryOpenBetween().

Gibt ein Kennzeichen für das Vorhandensein einer Position oder eines Auftrags in der Historie zurück, der zwischen den Daten offen (gesetzt) ist. Die Funktion ExistInHistoryOpenBetween() nimmt die folgenden Parameter entgegen:

  • sy - Name des Instruments. "" - ein beliebiges Zeichen, NULL - das aktuelle Symbol. Der Standardwert ist "".
  • op - Handelsoperation. Gültige Werte: -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP. Standardwert -1 - beliebiger Vorgang.
  • mn - Kennung der Handelsgeschäfte, MagicNumber. Standardwert -1 - eine beliebige magische Zahl.
  • d1 - Zeitpunkt der Positionseröffnung (in Erwartung der Auftragserteilung). Der Standardwert ist 0 - eine beliebige Öffnungszeit (Einstellzeit). Die d1-Zeit sollte kürzer sein als die d2-Zeit.
  • d2 - Zeitpunkt der Positionseröffnung (in Erwartung der Auftragserteilung). Der Standardwert ist 0 - eine beliebige offene (eingestellte) Zeit. Die Zeit d2 muss länger sein als die Zeit d1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : открытой (установленного) между датами.                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время открытия             ( 0   - любое время открытия)           |
//|    d2 - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryOpenBetween(string sy="", int op=-1, int mn=-1,
                               datetime d1=0, datetime d2=0) {
  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=="") && ( op<0 || OrderType()== op)) {
        if ( mn<0 || OrderMagicNumber()== mn) {
          if ( d1<=OrderOpenTime() && ( d2==0 || d2>=OrderOpenTime())) return( True);
        }
      }
    }
  }
  return( False);
}
 

Guten Tag!

Igor, kannst du mir sagen, wie ich den Balken in der gewünschten Farbe streichen kann?

Ich werde es Ihnen von Anfang an sagen. Ich schreibe einen Indikator für den zonalen Handel - die vierte Dimension des B-Marktes von Williams. Ich brauche Balken, die entweder grün, rot oder grau gefärbt sind.

Ich habe einen Indikator geschrieben, und das Ergebnis sieht so aus:

Das ist nicht das, was ich will. Wie man einen Balken in der Mitte einfärbt. Ich verwende ein Rechteck mit zwei Koordinaten als Schattierungsmethode. Das ist, wo ich das ganze Problem, wie man die Koordinaten des Beginns und des Endes des Rechtecks zu wählen haben.

Bitte geben Sie mir einen Hinweis.

Hier ist der Code für den Indikator.

Dateien:
zonetrade.mq4  6 kb
 
Duke3D писал(а) >>
Igor, kannst du mir bitte sagen, wie ich einen Balken in der gewünschten Farbe schattieren kann.
...
Wie man einen Balken genau in der Mitte schattiert
.

Werfen Sie einen Blick auf den Heiken Ashi Indikator. Sein Quellcode ist in MetaTrader 4 enthalten.

 

Function ExistInHistoryToDay().

Gibt das Kennzeichen für das Vorhandensein einer heute eröffneten (gesetzten) Position oder Order in der Historie zurück. Die Funktion ExistInHistoryToDay() erhält die folgenden Parameter:

  • sy - Name des Instruments. "" - ein beliebiges Symbol, NULL - das aktuelle Symbol. Der Standardwert ist "".
  • op - Handelsoperation. Gültige Werte: -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP. Standardwert -1 - beliebiger Vorgang.
  • mn - Handelskennzeichen, MagicNumber. Standardwert -1 - beliebige Magie.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.08.2008                                                     |
//|  Описание : Возвращает флаг наличия ордера или позиции в истории за сегодня|
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool ExistInHistoryToDay(string sy="", int op=-1, int mn=-1) {
  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 ( op<0 || OrderType()== op) {
          if ( mn<0 || OrderMagicNumber()== mn) {
            if (TimeDay  (OrderOpenTime())==Day()
            &&  TimeMonth(OrderOpenTime())==Month()
            &&  TimeYear (OrderOpenTime())==Year()) return( True);
          }
        }
      }
    }
  }
  return( False);
}
Grund der Beschwerde: