[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 176

 
hoz:


:) Warum wird dies nicht als neue Balkenfunktion implementiert? Es muss einmal am Tag neu berechnet werden, d. h. ab 0.00 Uhr. Also machen wir es einfach. Am Anfang natürlich:

Meiner Meinung nach ist das der richtige Weg, auch wenn er primitiv ist!
Vinin, dein Namensvetter, hat mir gesagt, dass es sich von selbst ändern sollte, aber das hat es nie getan, nur mit der Kompilation. Danke für die Idee mit der Balkenkontrolle! Setzen Sie eine Variante auf die eine Karte, Ihre Variante auf die andere. Ich werde morgen sehen, was funktioniert.
 
hoz:


Es ist weder noch, es ist E. Es gibt ein && Zeichen.

OR. Denn die UND-Bedingung ist nicht erfüllt, wenn mindestens einer der Operanden falsch ist (erster ODER zweiter) - in der booleschen Logik wird dies als"De Morgan's law" bezeichnet.

Ich habe verstanden. Aber der Punkt ist folgender:

Die Variableindex hat im Allgemeinen nach dem Code den Wert Bar - IndicatorCounted().

D.h. es ist 1 auf dem aktuellen Balken und 2 auf dem neuen Balken.

Es wird die Funktion IsUpFractal() mit dem Wert 1 oder 1 eingegeben, wenn der Balken noch nicht neu ist, richtig?

Die Variable i hat also einen festen Wert, da der Index des Eingangsparameters ebenfalls fest ist. Die Schleife wird also immer nach der ersten Iteration abbrechen. Was ist dann der Zweck der Schleife?

Bei jedem Zyklusschritt wird die Variable i um 1 dekrementiert (i--), so dass i alle Werte von index+g_center-1 bis Null durchläuft. Außerdem ist zu beachten, dass IndicatorCounted() beim ersten Start des Indikators 0 ergibt, d.h. der Index läuft auf allen Bars, so dass i jedes Mal index+g_center-1 zugewiesen wird und dann abwärts läuft, bis er 0 Bar erreicht ODER bis cnt gleich g_center ist, d.h. bis die Schleifenbedingung nicht erfüllt ist (oder bis return, das sich im Schleifenkörper selbst befindet, aufgerufen wird).
 
alsu:

OR. Denn die UND-Bedingung ist nicht erfüllt, wenn mindestens einer der Operanden falsch ist (erster ODER zweiter) - in der Buda-Logik nennt man dies"De Morgan's law".

Wow. Was für ein Chaos. Wie oft habe ich diese Operatoren benutzt... und jetzt heißt es: "Ich sehe ein neues Tor". Ich habe das Gesetz gelesen, es ist seltsam geschrieben. Sie beschreibt eine Verweigerungssituation. Ich nehme an, dass diese Technik nur in Verweigerungssituationen anwendbar ist? Ich meine, wenn eine der booleschen Variablen nicht gleichTrue ist.

Ich merkte im Laufe der Zeit, dass ich es nicht verstanden hatte. Unterm Strich ist der Unterschied wie folgt. Das ist ein Indikator, und deshalb bin ich es nicht gewohnt, so zu denken. Das bedeutet, dass beim ersten Aufruf des Indikators die Balken nicht berechnet werden und der Index gleich der Anzahl der Balken im Diagramm oder dem Wert einer Variablen limitReCalcBar ist, wenn die Bedingungen für die Berechnung der Balken begrenzt sind.

In der Tat ist die Variable g_center = 2, basierend auf dem Code.limitReCalcBar = 5000 auch auf der Grundlage externer Variablen.

Beim ersten Start des Indikators in der Funktion:

//+-------------------------------------------------------------------------------------+
//| Определение наличия верхнего фрактала на указанном баре                             |
//+-------------------------------------------------------------------------------------+
bool IsUpFractal(int index)
{
   double centerHigh = High[index + g_center];     // За точку отсчета берется средний..
                                                   // ..бар на участке из i_fractalPeriod
                                                   // ..баров
// - 1 - == Поиск максимумов справа от центрального бара ================================
   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh <= High[i])                   // ..максимумом. Не позволяется..
         return (false);                           // ..наличие баров с большим или..
      cnt++;                                       // ..равным максимумом.
   }
   
   if (i < 0)                                      // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 1 - == Окончание блока =============================================================

// - 2 - == Поиск максимумов слева от центрального бара =================================
   cnt = 0;
   i = index + g_center + 1;
   int total = Bars - 1;
   for (; i < total && cnt < g_center; i++)        // Слева от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh == High[i])                   // ..максимумом. Не позволяется..
         continue;                                 // ..наличие баров с большим..
      if (centerHigh < High[i])                    // ..максимумом. Равный - позволяется
         return (false);
      cnt++;                                    
   }
   
   if (i >= total)                                 // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 2 - == Окончание блока =============================================================
                                                   
   return (true);                                  // Фрактал найден                 
}

entsprechend den Wert von 5000 erhält.

i = index + g_center - 1 = 5000 + 2 - 1 = 5001

Schauen wir uns die Schleife an:

for (; i >= 0 && cnt < g_center; i--)

Wir müssen 5000 Balken berechnen. Nach den ersten beiden Balken, d.h. 0 und 1, ist die Bedingungcnt < g_center falsch. Wie können wir dann alle 5000 Balken berechnen? Das ist der Punkt, den ich beherrschen möchte. Für einen Profi scheint das elementar zu sein, aber ich verstehe es nicht. Wenn wir den &&-Operator als ODER auffassen, passt natürlich alles zusammen... Aber es widerspricht irgendwie dem, was ich bereits in Expert Advisors verwendet habe und jemals kennengelernt habe.

Nun, wenn alles berechnet ist, wird alles einfach sein. 0 und 1 werden bei jedem Tick durch den Index durchgereicht, die Bedingungen werden in einer Schleife erfüllt und es gibt keine Schwierigkeiten, wie ich sehe.

 

Liebe Programmierer! Können Sie mir bitte sagen, ob es möglich ist, ein Skript zu schreiben, das offene Positionen überwacht und einen Teil der Position schließt, wenn sie eine bestimmte Verlusthöhe erreicht. Die Verlustschwelle sollte entweder in der Einzahlungswährung oder in Punkten festgelegt werden. So, wenn der Preis geht gegen uns, wir reduziert den Verlust und wenn der Preis wandte sich an den Gewinn, dann statt der Verlust können wir einige Gewinn oder sogar kleiner Verlust, je nach TP gesetzt. Das Skript muss die ganze Zeit im EA-Modus arbeiten, es ist ein Assistent für jedes Handelssystem oder Expert Advisor.

 
destan:

Liebe Programmierer! Können Sie mir bitte sagen, ob es möglich ist, ein Skript zu schreiben, das offene Positionen überwacht und einen Teil der Position schließt, wenn diese eine bestimmte Verlusthöhe erreicht. Die Verlustschwelle sollte entweder in der Einzahlungswährung oder in Punkten festgelegt werden. So, wenn der Preis geht gegen uns, wir reduziert den Verlust und wenn der Preis wandte sich an den Gewinn, dann statt der Verlust können wir einige Gewinn oder sogar kleiner Verlust, je nach TP gesetzt. Das Skript sollte immer im EA-Modus arbeiten, es ist ein Assistent für jedes Handelssystem oder Expert Advisor.

Vielleicht. Hier gibt es Hilfe.

 
valeryk:

Vielleicht. Hier gibt es Hilfe.


Es gibt so etwas wie einen Stop-Loss!!!
 

Hallo, ich habe eine Frage. Es gibt mehrere gleiche Fenster im Terminal, jedes von ihnen hat denselben Expert Advisor, aber mit unterschiedlichen Einstellungen. Können Sie mir sagen, ob es eine Funktion oder einen fertigen Algorithmus in MQL4 gibt, der erkennen kann, von welchem Fenster aus eine Marktorder geöffnet wird?

 
badbadboy:

Hallo, ich habe eine Frage. Es gibt mehrere identische Fenster im Terminal, jedes von ihnen hat den gleichen Expert Advisor, aber mit unterschiedlichen Einstellungen. Können Sie mir sagen, ob es eine Funktion oder einen fertigen Algorithmus in MQL4 gibt, mit dem man feststellen kann, in welchem Fenster eine Marktorder geöffnet ist?

Sinnvoller ist es, Kopien des EAs zu erstellen und diese unterschiedlich zu benennen, dann sehen Sie im Log, welcher Speer in welchem Fenster zu finden ist!
 
borilunad:
Es ist sinnvoller, Kopien des EA zu erstellen und diese unterschiedlich zu benennen. Im Logbuch sehen Sie dann, welche Kopie in welchem Fenster liegt, Sie können es herausfinden!

Ich werde es herausfinden, aber wie kann ich den Expert Advisor darüber informieren?
 
borilunad:
Sinnvoller ist es, Kopien des EAs zu erstellen, diese anders zu benennen, und Sie werden im Log alles sehen, welchen Speer und dementsprechend in welchem Fenster Sie bereits kennen!

Ich benötige dies, damit der Expert Advisor selbständig Berechnungen anstellen kann.