[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 720

 
artmedia70:
Wie ich sehe, sind Sie bereits dabei, selbst eine Entscheidung zu treffen
Ich bin zu dem Entschluss gekommen... Aber es ist wie bei einem Hund: Ich verstehe, was ich verstehe, aber ich kann es nicht sagen, das heißt, ich kann es nicht im Code darstellen).
Vielleicht ist es die Hitze, die mein Gehirn zum Schmelzen bringt.)
 
Shuba:
Ich nähere mich der Lösung... Es ist wie bei einem Hund: Ich verstehe, was ich verstehe, aber ich kann es nicht sagen, d. h. ich kann es nicht im Code darstellen).
Vielleicht ist es die Hitze, die mein Gehirn zum Schmelzen bringt.)
Wie kann man nach Fraktalen suchen?
 
artmedia70:
Wie kann man nach Fraktalen suchen?

Ich suche nach Fraktalen, indem ich den Indikator ZIGZAG-FRACTALS mit dieser Funktion verwende:

void GetSignal()
  {
  int UpCount = 0, DnCount = 0;                                        // счетчик пиков ЗЗ
  int i = 0;                                                              // счетчик баров
  double ZZFirst = 0;                            // Значение первого найденного экстремума
  ArrayInitialize(ZZVUp, 0);                       // Значения верхних экстремумов зигзага
  ArrayInitialize(ZZVDn, 0);                         //Значения нижних экстремумов зигзага
  
  while(i < Bars && (UpCount < 2 || DnCount < 2))
    {
    double ZZCur = iCustom(NULL,0,"BW ZIGZAG-FRACTALS_2",0,i);
    if(ZZCur != 0)                                                   // найден экстремум
      {
      if(ZZFirst != 0)                             // Это не первый найденный экстремум
        {
        if(ZZCur == High[i] && UpCount < 2)
          {
          ZZVUp[UpCount] = ZZCur;
          ZZNUp[UpCount] = i;
          UpCount++;
          }         
          if(ZZCur == Low[i] && DnCount < 2)
            {
            ZZVDn[DnCount] = ZZCur;
            ZZNDn[DnCount] = i;
            DnCount++;
            }         
        }
      else
        ZZFirst = ZZCur; 
      }
    i++;
    } 
  if(i == Bars) return;                           // Последний посчитанный бар запоминаем
  
  }
 

Jetzt habe ich folgende Zeilen hinzugefügt: if(ZZCur == High[i] && UpCount < 2) und if(ZZCur == Low[i] && DnCount < 2), die nach dem nächsten Fraktal suchen, das höher oder niedriger ist als das erste gefundene.

Wir haben die folgenden Zeilen

if(ZZCur == High[i] && ZZCur > ZZFirst && UpCount < 2) und

if(ZZCur == Low[i] && ZZCur < ZZFirst && DnCount < 2)

Aber am Ende ist die Suche irgendwie unzureichend :(

Auf dem Bild zeigt eine dicke weiße Linie, wie es sein sollte, und eine dünne grüne Linie, wie es gemacht wird...


 
Shuba:

Ich suche nach Fraktalen, indem ich den Indikator ZIGZAG-FRACTALS mit dieser Funktion verwende:

Versuchen Sie, mit dieser Funktion zu suchen:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.08.2008                                                     |
//|  Описание : Возвращает номер бара фрактала по его номеру.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
int GetFractalBar(string sy="0", int tf=0, int nf=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    i, k=iBars(sy, tf), kf;

  for (i=2; i<k; i++) {
    f=iFractals(sy, tf, MODE_LOWER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
    f=iFractals(sy, tf, MODE_UPPER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}

Diese Funktion gibt die Taktnummer des Fraktals zurück. Zuerst ruft man sie mit dem Parameter nf = 0 auf - das letzte Fraktal wird gefunden, und dann ruft man diese Funktion in der Schleife auf, wobei nf = Zykluszähler von 1 bis ... so lange wie nötig. Prüfen Sie im Schleifenkörper, ob das nächste gefundene Fraktal den gewünschten Kriterien entspricht, und wenn ja, verlassen Sie die Schleife. Nach der Analyse haben Sie die Taktzahlen von zwei Fraktalen, die Sie benötigen, und können mit ihnen machen, was Sie wollen.

 
artmedia70:

Versuchen Sie, mit dieser Funktion zu suchen:

Die Funktion gibt die Taktnummer des Fraktals zurück. Zuerst ruft man sie mit dem Parameter nf = 0 auf - das letzte Fraktal wird gefunden, und dann ruft man diese Funktion in der Schleife auf, wobei nf = Zykluszähler von 1 bis ... so lange wie nötig. Prüfen Sie im Schleifenkörper, ob das nächste gefundene Fraktal den gewünschten Kriterien entspricht, und wenn ja, verlassen Sie die Schleife. Nach der Analyse haben Sie die Taktzahlen von zwei Fraktalen, die Sie benötigen, und können mit ihnen machen, was Sie wollen.


Dankeschön) Ich werde es jetzt ausprobieren.
 
Vinin:


Im Testgerät oder in der Demo?

Im Prüfgerät wird der Punkt auf den anderen Instrumenten 0 sein.


Es war im Testgerät,... Ich hatte noch keine Gelegenheit, es zu benutzen, aber ich habe eine Menge Probleme damit. Deshalb habe ich mir mit meinem Schleppnetzcode viel Mühe gegeben und die Funktion zur Überwachung von Schleppnetzpaaren von KimIV übernommen. Jetzt funktioniert alles in der Demo ))

Vielen Dank für Ihre Hilfe, Ihre Erklärungen sind sehr hilfreich.

 

Das Problem scheint gelöst zu sein, aber die Frage bleibt...

Wie kann ich eine Variable zur Wiederverwendung deinitialisieren?

 

Das geht nicht, denn wenn man eine Variable initialisiert, wird nur ein Bereich des Arbeitsspeichers zugewiesen, warum sollte man ihn also neu zuweisen? Setzen Sie die Variable einfach auf Null zurück, und verwenden Sie sie so oft Sie wollen. Wo liegt eigentlich das Problem? Warum eine Variable deinitialisieren? Das macht einfach keinen Sinn.

 
ToLik_SRGV:

Warum eine Variable deinitialisieren?



Die Bedingung, wenn

for(int a=0;a<8;a++)

hier tun wir etwas

sonst, wenn eine andere Bedingung

for(int a=0;a<8;a++)

etwas anderes tun.

Es geht nicht darum, Variablen, viele Bedingungen und Zähler zu multiplizieren.