Nützliche Funktionen von KimIV - Seite 37

 
KimIV писал (а) >>

Die Funktion isLossLastPos().

Diese Funktion gibt das Verlustkennzeichen der letzten geschlossenen Position zurück. Flagge oben - Wahr - letzte Position wurde mit Verlust geschlossen. Flag ausgelassen - Falsch - die letzte Position wurde entweder mit Null oder mit Gewinn geschlossen. Bei dieser Funktion werden Swaps und Provisionen nicht berücksichtigt. Die Auswahl der Positionen wird durch externe Parameter bestimmt:

  • sy - Bezeichnung des Marktinstruments. Wenn Sie diesen Parameter angeben, berücksichtigt die Funktion nur Positionen des angegebenen 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.
P.S. Im Anhang finden Sie ein Skript zum Testen der Funktion isLossLastPos().

Um die Anzahl der Funktionen, die sich auf die letzte geschlossene Position beziehen, nicht zu vervielfachen, schlage ich die folgende Variante vor:

int LastClosePos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, j=-1, 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();
                j=OrderTicket();              }
              else
                return(j);
            }
          }
        }
      }
    }
  }
  return(-1);
}

Diese Funktion definiert die Ticketnummer der letzten geschlossenen Position...

Weitere Aktionen mit der Nummer des Tickets liegen im Ermessen des Programmierers, je nach dem zu lösenden Problem...

 

Funktion FindNearFractal().

Diese Funktion sucht nach dem nächstgelegenen Fraktal und gibt dessen Preisniveau zurück. 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.
  • mode - Fraktaler Typ. MODE_LOWER und MODE_UPPER sind erlaubt. Der Standardwert ist MODE_LOWER.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 

Beispiele für die Verwendung von FindNearFractal().

  • Der Preis des nächst niedrigeren Fraktals auf dem aktuellen Diagramm.
    Message(FindNearFractal());
  • Preis des nächstgelegenen oberen Fraktals auf dem H4-Chart des aktuellen Symbols.
    Message(FindNearFractal(NULL, PERIOD_H4, MODE_UPPER));
  • Der Preis des nächst niedrigeren Fraktals auf dem GBPUSD M30-Chart.
    Message(FindNearFractal("GBPUSD", PERIOD_M30, MODE_LOWER));
    

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

Dateien:
 
KimIV писал (а) >>

Примеры использования функции SetVLine().

  1. Голубая сплошная вертикальная линия на текущем баре.
  2. Сиреневая толстая линия на восьмом баре.
  3. Сетка пунктирных линий на барах 14:00.

ЗЫ. Во вложении скрипт для тестирования функции SetVLine().

KimIV
писал (а)
>>

Beispiele für die Verwendung von SetVLine().

  1. Blaue durchgehende vertikale Linie auf dem aktuellen Balken.
  2. Lila dicker Strich auf dem achten Balken.
  3. Ein Gitter aus gepunkteten Linien auf den Balken 14:00.

ZS: Im Anhang finden Sie ein Skript zum Testen der Funktion SetVLine().

Hallo Igor,
Könnten Sie mir bitte ein Beispiel dafür geben, wie eine solche Funktion in einem Indikator verwendet werden kann?
Ich versuche, den Indikator PreviousiHighsvAndhLows0 zu verbessern und ihm eine Markierung nach Zeit hinzuzufügen.

Verwenden Sie SetVLine() Beispiel und zeichnen Sie die Markierung bei der Bar-Eröffnung mit einer bestimmten Zeit...
Bislang zeichnet meine Version des Indikators einigen Unsinn.
Ich habe bereits im Forum um Hilfe gebeten, aber Anfänger werden hier nicht verwöhnt...

Vielen Dank, Ihre Funktionen sind sehr nützlich, um Schritt für Schritt zu lernen, aber es wäre natürlich gut, wenn es mehr Hinweise oder Beispiele gäbe

 
obabuev писал (а) >>
Könnten Sie mir bitte ein Beispiel dafür geben, wie eine solche Funktion in einem Indikator verwendet werden kann?
Ich versuche, den Indikator zu verbessern und eine Zeitstempelzeichnung hinzuzufügen.
SetVLine()-Beispiel verwenden und eine Markierung bei der Bar-Eröffnung mit einer bestimmten Zeit zeichnen...

Zeigen Sie in der Abbildung, welche Marken Sie zeichnen möchten.

 

GetExtremumZZZBar() Funktion.

Diese Funktion sucht nach einem Extremwert des standardmäßigen benutzerdefinierten ZigZag-Indikators und gibt die Taktnummer zurück. Die Funktion akzeptiert die folgenden optionalen Parameter:

  • sy - Name des Instruments. "" oder NULL - das aktuelle Symbol. Der Standardwert ist NULL.
  • tf - Zeitrahmen. Der Standardwert ist 0 - der aktuelle Zeitrahmen.
  • ne - Extreme Zahl. 0 - letzte, 1 - vorherige, 2 - vorherige, usw.
  • dp, dv, bs - ZigZaga-Parameter: ExtDepth, ExtDeviation bzw. ExtBackstep.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает номер бара экстремума ЗигЗага по его номеру.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=0; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(-1);
}
 

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

  • Die Nummer des Balkens mit dem letzten ZigZag-Extremum im aktuellen Chart.
    Message(GetExtremumZZBar());
  • Die Nummer des Balkens mit dem vorletzten ZigZag-Extremum auf dem H4-Chart des aktuellen Symbols.
    Message(GetExtremumZZBar(NULL, PERIOD_H4, 1));
  • Suchen Sie den letzten ZigZag-Break im aktuellen Chart und ziehen Sie eine vertikale Linie durch ihn.
    int n=GetExtremumZZBar(NULL, 0, 1);
    SetVLine(Magenta, "", Time[n]);

ZS: Im Anhang finden Sie ein Skript zum Testen der Funktion GetExtremumZZZBar().

Dateien:
 
KimIV писал (а) >>

Zeigen Sie in der Abbildung, welche Markierungen Sie einzeichnen möchten.

Danke, Igor, für deine Antwort,
Ich habe zwei Tage gebraucht, aber ich habe das Ziel erreicht.
Jetzt versuche ich, eine weitere zu machen.
Ich brauche es für Tests
Mit Ihrem i-AnyRange-Indikator möchte ich
Der Indikator wird die Zeit mit zufälliger Abweichung verarbeiten.
Zum Beispiel.
hat der Indikator
time1=10:05;
time2=15:35;
und im Indikator selbst für die Berechnung der Indikatorlinien verwendet er
T1=Zeit1(+/- zufällig)
T2=Zeit2(+/- zufällig)
aber wir müssen auch die maximalen Abweichungsgrenzen festlegen, zum Beispiel
max random =5min;
Das Rätsel ist nur, wie man die Zufälligkeit auf 5 Minuten begrenzen kann?
Sie haben wahrscheinlich ähnliche Beispiele

Dateien:
 
obabuev писал (а) >>

aber Sie müssen auch die maximalen Abweichungsgrenzen festlegen, z. B.
max random =5min;
Der Haken an der Sache ist nur, wie kann man die Zufälligkeit auf 5 Minuten begrenzen?
Sie müssen ähnliche Beispiele haben.

5 Minuten sind 300 Sekunden:

void init() {
  MathSrand(TimeLocal());
}

void start() {
  double a=MathRand()/32767.0*300;
  int b=MathFloor(a);
  Comment(b);
}
 
KimIV писал (а) >>

Fünf Minuten sind 300 Sekunden:

Ich danke Ihnen natürlich, aber das beantwortet die Fragen nicht ganz,
Wie addiert man int b zu string Time2 minutes now oder wie macht man plus minus random

>> Ich werde mich natürlich darum kümmern, aber es fällt mir schwer.