Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 220

 
Hey! Leute, helft mir mal! Ich kann mich nicht an eine Funktion erinnern. Der Expert Advisor eröffnet eine Position pro Tag (zwischen 00:00 und 23:59), d.h. ein Tag, ein Auftrag. Die Aufgabe besteht darin, die Serie der kontinuierlichen Verluste zu finden und sie im Protokoll anzuzeigen (mit dem Befehl Print(), um einmal zu drucken). Die Anzahl der Elemente in der Reihe wird über die Tastatur eingegeben (wenn Sie z. B. 5 über die Tastatur eingeben und die Reihe 4 Tage verliert, ignorieren wir sie --> warten auf das Auftreten von 5 oder mehr Tagen). Eine Serie wird berücksichtigt, wenn die Verlusttage aufeinander folgen oder die Aufträge an einem Tag geschlossen werden (sie werden einmal pro Tag eröffnet, und Marktaufträge können mehr als einen Tag "hängen"). Im Protokoll sollten zum Beispiel die folgenden Verlustreihen stehen: 01.05, 02.05, 03.05, 04.05, 05.05. Wichtige Bedingung: Reihe erkennen (und folglich ins Protokoll ausgeben), die größer oder gleich dem über die Tastatur eingegebenen Wert ist (extern).
//
Persönlich habe ich folgende Idee:
1. Fiya füllt das Array der Verlustaufträge mit ihren Schlusswerten ( Mass[i] = OrderCloseTime();). Das heißt, das Array speichert nur die Schlussdaten und -zeiten der Verlustaufträge
2. Wir beginnen mit dem Vergleich des Elements an der Position i und an der Position i-1 (2 benachbarte Elemente)
2.1 wir vergleichen sie, indem wir die Zellendaten in den Tag des Jahres umwandeln ( TimeDayOfYear(Mass[i]) und TimeDayOfYear(Mass[i-1])
2.(Angenommen, der erste Verlierertag ist 178 und der vorhergehende 176 --> keine Serie, weil sie nicht aufeinander folgen, bzw. wenn der erste 178 und der zweite 177 ist --> haben wir eine Serie)
2.3 Mit der for-Schleife gehen wir alle Zellen des Arrays durch und vergleichen ihre Nachbarn. Wenn es eine Serie von Verlusten an benachbartenElementen des Arraysgibt--> beginnen wir mit der Komprimierung, bis wir die erforderlicheMindestanzahl von Verlusttagennicht erreicht haben, um sie als Serie zu betrachten. 2. (wenn Punkt 1 erfüllt ist), BEVOR die Serie stoppt.
2.4 DIE SERIE STOPP --> Merken Sie sich den Index des Array-Elements, an dem sie endete, und merken Sie sich die Anzahl der Elemente in der Serie (die Serie kann == ODER größer sein als der über die Tastatur eingegebene Wert)
3. ----hier beginnt das Problem der Realisierung---
3.1 Wir sollten irgendwie durch eine Reihe von verlorenen Tagen "zurückgehen", das Datum jedes Elements kennen, das Datum von datetime --> string übersetzen,
3.11 string füllen (ich weiß nicht, vielleicht durch StringAdd()?), und es in eine LOG-Datei ausgeben (nicht millionenfach, nur einmal)

Algorithmus des Beraters ist nicht wichtig, wichtig ist die Benutzerfunktion

Christ help me!))
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
Dateien:
 
Hallo. Ich habe mich für das Signal angemeldet. Aber nach ein paar Tagen betrug der prozentuale Anteil der Gesamtzunahme von einigen Hundert nur noch 58 %. Die Prozentzahlen der Vormonate haben ihre blaue Farbe verloren und sind grau geworden. Warum ist das so? Was könnte der Grund dafür sein?
Dateien:
 
Maestro8:
Hallo. Ich habe mich für das Signal angemeldet. Aber nach ein paar Tagen betrug der Prozentsatz der Gesamtzunahme von ein paar Hundert nur noch 58 %. Die Prozentsätze der Vormonate haben ihre blaue Farbe verloren und sind grau geworden. Warum ist das so? Was könnte der Grund dafür sein?

Sie haben sich für einen weiteren Kautionsteiler angemeldet. Sehen Sie die vertikale Linie auf dem Diagramm links vom 76. Handel? In dieser Zeile wird der Zeitpunkt angezeigt, zu dem Sie die Verbindung zur Überwachung hergestellt haben. Vor dem Anschluss an die Überwachung wurde dieses Konto von mehreren Dutzend anderen Konten "abgezogen", die nicht so ein schönes Bild abgeben (sie wurden sicher abgezogen). Das Depot mit schönen Indikatoren ist mit der Überwachung verbunden und erhält Geld von Neuankömmlingen, die schöne Bilder mögen. Glauben Sie also nicht den Indikatoren, die vor der Teilnahme an der Überwachung ermittelt wurden.

 

Eine Kopie einer Instanz der Klasse.

Wenn ich diesen Auftrag erfülle:

Cl1 = Cl2;

Wenn ich dann Cl1 ändere, dann ändert sich auch Cl2.

Der Auftrag ist also nur eine Referenz.

Ich muss jedoch eine Instanz einer Klasse speichern, die alle Eigenschaften enthält, die ihr zum Zeitpunkt der Zuweisung zugewiesen wurden.

Wie kann man das tun?

 
Evgeny Potapov:

Eine Kopie einer Instanz der Klasse.

Wenn ich diesen Auftrag erfülle:

Wenn ich dann Cl1 ändere, dann ändert sich auch Cl2.

Der Auftrag ist also nur eine Referenz.

Aber ich muss eine Instanz einer Klasse behalten, die alle Eigenschaften speichert, die ihr zum Zeitpunkt der Zuweisung gegeben wurden.

Wie kann man das tun?

Sie tun es wahrscheinlich:

CClass* cl1=new CClass;
CClass* cl2=cl1;

und Sie brauchen das hier.

CClass cl1;
CClass* _cl1=new CClass;
CClass cl2=cl1;
CClass _cl2=_cl1;
CClass* cl3=new CClass(cl1);
CClass* cl4=new CClass(_cl1);

Sie benötigen einen Kopierkonstruktor:

class CClass{
public:
   CClass(){}
   CClass(CClass &mOther){this=mOther;}
};
 
Vladimir Simakov:

Sie brauchen einen Copy Builder:

Ich danke Ihnen!

Ich werde es versuchen, aber es ist nicht klar, wie es funktioniert.

Welchen Unterschied macht es, wenn er die Kopierreferenz an die kopierte Klasse weitergibt?

Werden beide wieder aufeinander Bezug nehmen?

 
Evgeny Potapov:

Ich danke Ihnen!

Ich werde es ausprobieren, aber es ist nicht klar, wie es funktioniert.

Welchen Unterschied macht es, wenn der Kopie eine Referenz auf die kopierte Klasse übergeben wird?

Werden die beiden wieder aufeinander Bezug nehmen?

Nein, das werden sie nicht. Dies ist ein neues Objekt. Und im Konstruktor füllen Sie einfach die Felder aus. In der lokalen Hilfe steht nichts darüber (obwohl ich mich irren könnte), also lesen Sie, wie es in C++ gemacht wird, und nehmen Sie Korrekturen für die lokalen Gegebenheiten vor. Viel Glück!)

 
Vladimir Simakov:

Das werden sie nicht. Dies ist ein neues Objekt. Und im Konstruktor füllen Sie einfach Felder aus. Es gibt auch dort Feinheiten, also kauen Sie darauf) Es gibt nichts darüber in der lokalen Hilfe (obwohl ich falsch sein kann), so lesen Sie, wie C++ tut es alle und Anpassungen für lokale Realitäten. Viel Glück!)

Ja, so funktioniert es.

Ich danke Ihnen!

Es wäre interessant, von den Autoren zu erfahren, wie das funktioniert:

{this=mOther;}

Warum gibt es eine Wertübertragung, wenn man doch eine Referenz erwarten würde?

Zum Glück ist ein solches Kopierkonstrukt möglich!

 

Guten Tag!

Können Sie mir bitte sagen, warum ich in meinem MT4 nicht Take und Stop Loss mit der Maus vom Einstiegspunkt der Position setzen kann?

Vielleicht muss ich etwas einstellen, aber ich verstehe nicht, was es ist. Bitte helfen Sie mir.

 
from_Reva:

Guten Tag!

Können Sie mir bitte sagen, warum ich in meinem MT4 nicht Take und Stop Loss mit der Maus vom Einstiegspunkt der Position setzen kann?

Vielleicht muss ich etwas konfigurieren, aber ich verstehe nicht, was es ist, bitte helfen Sie mir

Versuchen Sie, die Alt-Taste auf Ihrer Tastatur gedrückt zu halten und zu ziehen