Nützliche Funktionen von KimIV - Seite 44

 

Beispiele für die Verwendung von GetNearestDownFractal().

  • Das Kursniveau des nächstgelegenen aufwärts gerichteten Fraktals auf dem aktuellen Chart. Die Fraktalformel lautet 2-2 (Standard).
    Message(GetNearestUpFractal());
  • Das Kursniveau des nächstgelegenen oberen Fraktals auf dem H1-Chart des USDJPY. Die Formel des Fraktals 5-2.
    Message(GetNearestUpFractal("USDJPY", PERIOD_H1, 5));
  • Ziehen Sie eine horizontale Linie durch das Kursniveau des nächsthöheren Fraktals 4-3 im aktuellen Diagramm.
    double p=GetNearestUpFractal(NULL, 0, 4, 3);
    SetHLine(Red, "", p);

SZY: Im Anhang finden Sie ein Skript zum Testen der Funktion GetNearestUpFractal().

 

Funktion CorrectTF().

Ich habe diese Funktion geschrieben, nachdem ich festgestellt habe, dass ich in den Eingabeparametern eines Indikators oder eines EAs manchmal leicht einen falschen Zeitrahmen angeben kann, der einer ganzen Zahl von Minuten entspricht. Ich habe zum Beispiel 50 statt 60 für den Stundenlohn eingegeben. Na ja... irgendwie vermisst. Es stellt sich heraus, dass die Funktion iRSI() bei einem falschen Zeitrahmen Null zurückgibt. Über andere Funktionen kann ich nichts sagen, da ich sie nicht überprüft habe. Um Missverständnisse zu vermeiden, die aus meinen eigenen Unachtsamkeiten resultieren, habe ich diese Funktion als eine primitive, narrensichere Funktion geschrieben. Es passt den Eingabeparameter an den "nächstgelegenen" geeigneten und korrekten Zeitrahmen an und gibt dessen Wert zurück.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.03.2008                                                     |
//|  Описание : Корректирует таймфрейм под ближайший поддерживаемый МТ4.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeFrame - таймфрейм (количество секунд)      (0 - текущий ТФ)         |
//+----------------------------------------------------------------------------+
int CorrectTF(int TimeFrame=0) {
  if (TimeFrame==0) TimeFrame=Period();
  if (TimeFrame< PERIOD_M5                         ) return(PERIOD_M1);
  if (TimeFrame>=PERIOD_M5  && TimeFrame<PERIOD_M15) return(PERIOD_M5);
  if (TimeFrame>=PERIOD_M15 && TimeFrame<PERIOD_M30) return(PERIOD_M15);
  if (TimeFrame>=PERIOD_M30 && TimeFrame<PERIOD_H1 ) return(PERIOD_M30);
  if (TimeFrame>=PERIOD_H1  && TimeFrame<PERIOD_H4 ) return(PERIOD_H1);
  if (TimeFrame>=PERIOD_H4  && TimeFrame<PERIOD_D1 ) return(PERIOD_H4);
  if (TimeFrame>=PERIOD_D1  && TimeFrame<PERIOD_W1 ) return(PERIOD_D1);
  if (TimeFrame>=PERIOD_W1  && TimeFrame<PERIOD_MN1) return(PERIOD_W1);
  if (TimeFrame>=PERIOD_MN1                        ) return(PERIOD_MN1);
}
SZY: Im Anhang finden Sie ein Skript zum Testen der Funktion CorrectTF().
Dateien:
 

Die Funktion DateBeginQuarter().

Diese Funktion gibt das Anfangsdatum des Quartals anhand seiner Nummer zurück. Wenn wir jetzt zum Beispiel den 27.08.2008 haben, ist das Anfangsdatum des aktuellen Quartals der 01.07.2008. Die Funktion benötigt nur einen Parameter - die Quartalsnummer bezogen auf das aktuelle Quartal. So steht beispielsweise 0 für das aktuelle Quartal, 1 für das nächste Quartal und -1 für das vorherige Quartal. Das heißt, dass positive Quartalszahlen Daten aus der Zukunft anfordern, während Null und negative Zahlen Daten aus der Vergangenheit anfordern. Der zurückgegebene Wert ist die Anzahl der seit 00:00 Uhr am 1. Januar 1970 verstrichenen Sekunden.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.05.2008                                                     |
//|  Описание : Возвращает дату начала квартала                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|                                    (-2 - позапрошлый)                      |
//|                                    (-1 - прошлый)                          |
//|    nq - номер квартала             ( 0 - текущий)                          |
//|                                    ( 1 - следующий)                        |
//|                                    ( 2 - последующий)                      |
//+----------------------------------------------------------------------------+
datetime DateBeginQuarter(int nq=0) {
  int ye=Year()-MathFloor(nq/4);
  nq=MathMod(nq, 4);
  int mo=Month()-MathMod(Month()+2, 3)+3*nq;
  if (mo<1) {
    mo+=12;
    ye--;
  }
  if (mo>12) {
    mo-=12;
    ye++;
  }

  return(StrToTime(ye+"."+mo+".01"));
}

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

Dateien:
 

Die Funktion DateOfMonday().

Diese Funktion gibt das Datum des Wochenbeginns (Montag) durch seine Nummer zurück. Wenn wir zum Beispiel heute den 29.08.2008 haben, ist das Datum des Beginns der aktuellen Woche der 25.08.2008. Die Funktion benötigt nur einen Parameter - die Nummer der Woche im Verhältnis zur aktuellen Woche. Zum Beispiel steht 0 für die aktuelle Woche, 1 für die nächste Woche und -1 für die vorherige Woche. Das heißt, dass positive Wochenzahlen Daten aus der Zukunft anfordern, während Null und negative Zahlen Daten aus der Vergangenheit anfordern. Der zurückgegebene Wert ist die Anzahl der seit 00:00 Uhr am 1. Januar 1970 verstrichenen Sekunden.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.05.2008                                                     |
//|  Описание : Возвращает дату понедельника по номеру недели                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|                                    (-2 - предпредыдущая неделя)            |
//|                                    (-1 - предыдущая неделя)                |
//|    nn - номер недели               ( 0 - текущая неделя)                   |
//|                                    ( 1 - следующая неделя)                 |
//|                                    ( 2 - последующая неделя)               |
//+----------------------------------------------------------------------------+
datetime DateOfMonday(int nn=0) {
  datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));

  while (TimeDayOfWeek(dt)!=1) dt-=24*60*60;
  dt+=nn*7*24*60*60;

  return (dt);
}

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

Dateien:
 

Die Funktion Fibonacci().

Diese Funktion gibt ein Element einer Fibonacci-Reihe anhand seiner Folgenummer zurück.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.08.2008                                                     |
//|  Описание : Возвращает элемент ряда Фибоначчи по его порядковому номеру.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    n - номер элемента ряда                                                 |
//+----------------------------------------------------------------------------+
int Fibonacci(int n) {
  int a=0, b=0, i=1, s=0;

  if (n==1) s=1;
  if (n>1) {
    s=1;
    while (i<n) {
      i++;
      a=b;
      b=s;
      s=a+b;
    }
  }
  return(s);
}

P.S. Im Anhang finden Sie ein Skript zum Testen von Fibonacci().

Dateien:
 

GetNameMA() Funktion.

Diese Funktion gibt den Namen der MA-Methode (gleitende Durchschnitte) anhand ihres Bezeichners zurück. Diese Funktion lässt sich bequem in Kommentaren, Indikatoren und Expert Advisors-Nachrichten verwenden.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование метода МА.                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    mm - идентификатор метода МА                                            |
//+----------------------------------------------------------------------------+
string GetNameMA(int mm) {
  switch (mm) {
    case MODE_SMA : return("SMA");
    case MODE_EMA : return("EMA");
    case MODE_SMMA: return("SMMA");
    case MODE_LWMA: return("LWMA");
    default       : return("Unknown Method");
  }
}
 
KimIV писал (а) >>

GetNameMA() Funktion.

Diese Funktion gibt den Namen der MA-Methode (gleitende Durchschnitte) anhand ihres Bezeichners zurück. Diese Funktion ist in Kommentaren, Indikatoren und Expert Advisors nützlich.

Betrachten Sie es nicht als Erbsenzählerei ....

default       : return("Unknown Method");

Es ist nur so, dass man, wenn man konsequent sein will, den ganzen Weg gehen muss...
 
TheXpert писал (а) >>

Betrachten Sie es nicht als Herumhacken....

auf jeden Fall... Ich danke Ihnen! Korrigiert!

 
KimIV

Guten Tag!

Helfen Sie mir, die Expo ein wenig zu vermitteln.

Ich kann nicht glauben, dass er Aufträge eröffnet und diesen Stapel nicht unter der Bedingung schließt.

D.h. wenn ein Geschäft nur eines ist, wird es aus der Pose gehen und wenn es 2 Geschäfte sind, wird es geschlossen.

Dateien:
panzer.mq4  5 kb
 

GetPriceDiffInPoint() Funktion.

Diese Funktion gibt die Preisdifferenz zwischen zwei Balken zurück, die durch ihre Nummern angegeben werden. Der Zweck der Entwicklung dieser Funktion bestand darin, den Wert und die Richtung der Kursbewegung zu bestimmen. Die Funktion GetPriceDiffInPoint() bestimmt die Referenzpunkte (Open oder High oder Low oder Close) der zu berücksichtigenden Bars. Die Funktion akzeptiert die folgenden optionalen Parameter:

  • sy - Name des Instruments. "" oder NULL - aktuelles Symbol. Der Standardwert ist NULL.
  • tf - Zeitrahmen. Standardwert 0 - aktuelles Symbol.
  • n2 - Nummer des linken Balkens. Standardwert - 2.
  • n1 - Rechte Taktnummer. Standardwert - 1.

Zurückgegebener Wert:

  • positiv - zwischen den Balken N2 und N1 gab es einen Anstieg der Rate.
  • Negativ - es gab einen Rückgang zwischen den Balken N2 und N1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает ценовую разницу в пунктах между двумя барами.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий таймфрейм)  |
//|    n2 - номер левого бара               (    2       - второй бар)         |
//|    n1 - номер правого бара              (    1       - первый бар)         |
//|  Возвращаемое значение:                                                    |
//|    положительное - между барами N2 и N1 был рост курса                     |
//|    отрицательное - между барами N2 и N1 было снижение курса                |
//+----------------------------------------------------------------------------+
int GetPriceDiffInPoint(string sy="0", int tf=0, int n2=2, int n1=1) {
  if (sy=="" || sy=="0") sy=Symbol();
  double p=MarketInfo(sy, MODE_POINT);
  int    d=MarketInfo(sy, MODE_DIGITS);
  int    dd=0, k=iBars(sy, tf);

  if (n1>k || n2>k)
    Print("GetPriceDiffInPoint(): Недостаточно баров для ",sy," ",GetNameTF(tf));
  else {
    if (n1>0 && n2>0) {
      int d1=NormalizeDouble((iHigh(sy, tf, n1)-iLow(sy, tf, n2))/p, d);
      int d2=NormalizeDouble((iLow(sy, tf, n1)-iHigh(sy, tf, n2))/p, d);

      if (MathAbs(d1)>MathAbs(d2)) dd=d1;
      if (MathAbs(d1)<MathAbs(d2)) dd=d2;
      if (MathAbs(d1)==MathAbs(d2)) {
        if (iOpen(sy, tf, n2)>iClose(sy, tf, n1)) dd=d2; else dd=d1;
      }
    }
  }

  return(dd);
}