mql5 - vertikale Linie nach einer bestimmten Zeit seit dem letzten Handel - Seite 3

 
renatmt5:
Ich habe richtig verstanden, dass die Variablen last_time und result die Werte sind, nach denen wir suchen. Das Ergebnis bestimmt, um wie viel Zeit die Linie in die Zukunft verschoben (neu gezeichnet) wird. Dann sollte der Codeblock "Gewinn für die Periode" vor dem Block "Verschieben der vertikalen Linie" eingefügt werden, um die Linie unter Berücksichtigung der Daten des letzten Geschäfts zu verschieben.
Ist das richtig oder verwechsle ich etwas?

Dies sind interne Variablen der Funktion LastProfitForPeriod.

Wir wollen den Wert des Gewinns aus dem letzten Handel erhalten, richtig? Hier liefert LastProfitForPeriod() den Gewinn des letzten Handels. Es bleibt nur noch, die vertikale Linie in Abhängigkeit von diesen Gewinnen zu verschieben.

 
Vladimir Karputov:

Der letzte Schritt besteht also darin, die Linie in Abhängigkeit vom erzielten Gewinn zu verschieben.

Erinnern Sie sich an die Umzugsregeln?

oops, sorry - nur um das klarzustellen:

- Wenn das Ergebnis des letzten Handels negativ ist und das Ergebnis des Tages negativ ist, wird die vertikale Linie 24 Stunden (24 Stunden) in die Zukunft gezogen.
- Wenn das Ergebnis der letzten Transaktion negativ und das Ergebnis des Tages positiv ist, wird die vertikale Linie in einem Abstand von 2 Stunden in die Zukunft gezogen.
- wenn das Ergebnis der letzten Transaktion positiv ist, wird die vertikale Linie in einem Abstand von 1 Stunde in die Zukunft gezogen.

 
Vladimir Karputov:

Im Folgenden wird erklärt, warum der Parameter "before" in Zukunft verwendet werden muss:


Ich danke Ihnen!

 

Die Bedingungen erfordern das Ergebnis des Tages, an dem die letzte Transaktion durchgeführt wurde (wenn es an diesem Tag mehrere Transaktionen gab)

 
renatmt5:

Ups, Entschuldigung - nur zur Klarstellung:

- Wenn das Ergebnis des letzten Handels negativ ist und das Ergebnis des Tages negativ ist, wird die vertikale Linie 24 Stunden (einen Tag) in die Zukunft gezogen.
- Wenn das Ergebnis der letzten Transaktion negativ und das Ergebnis des Tages positiv ist, wird die vertikale Linie in einem Abstand von 2 Stunden in die Zukunft gezogen.
- wenn das Ergebnis der letzten Transaktion positiv ist, wird die vertikale Linie in einem Abstand von 1 Stunde in die Zukunft gezogen.

Ah, wir müssen also auch den Gewinn für den aktuellen Tag separat ermitteln.


Um Korrekturen an LastProfitForPeriod() vorzunehmen, entfernen wir die Eingabezeit-Parameter "von" und "bis" und bilden diese Parameter innerhalb der Funktion: bilden die Uhrzeit des Tagesbeginns (es wird "von" sein), und "bis" erhalten wir die aktuelle Uhrzeit + Tag.


Daher werden wir zwei Parameter per Referenz an LastProfitForPeriod() übergeben: den Tagesgewinn und den Gewinn des letzten Handels.


Der Beginn des Tages wird mitiTime ermittelt

   datetime from_date=iTime(Symbol(),PERIOD_D1,0);

- d.h. es ist der Zeitpunkt der Öffnung des aktuellen Tagesbalken.

 

Kompiliert - großartig!
Es gibt nur wenige Probleme:
1) Bei der Einführung des Indikators wird der Wert der Variablen Gewinn am letzten Tag nicht dem letzten Tag des letzten Geschäfts zugewiesen, sondern dem Endgewinn des Kontos im Allgemeinen. Bei der Neuberechnung des Indikators (in ca. 1-2 Minuten) ändert sich der Wert jedoch auf den richtigen Wert (den Gesamtgewinn des Tages des letzten Handels). Ich urteile nur nach dem Konto, auf dem heute der letzte Handel stattgefunden hat.
2) Wenn Sie den Indikator aus dem Diagramm löschen, wird der Kommentar in der oberen linken Ecke nicht gelöscht. Beim Löschen der Liste der Objekte werden diese auch nicht gelöscht. Ich starte das Terminal neu, damit die Werte verschwinden, was natürlich nicht praktisch ist. Wie man es einfacher machen kann - ich weiß es nicht :)

Vielleicht wäre es sinnvoller, die Blöcke mit dem Code für die Erstellung, Verschiebung und Löschung von Linien (Erstellen der vertikalen Linie, Verschieben der vertikalen Linie und Löschen der vertikalen Linie) nach dem Block für die Berechnung des letzten Geschäfts (Gewinn für die Periode) zu platzieren. Ziehen der Linie unter Berücksichtigung der Verschiebung in die Zukunft um n-Stunden, berechnet auf der Grundlage von profit_last_day und profit_last_deal.

Wie

if (profit_last_day<=0 und profit_last_deal<=0){n=24;}

else (profit_last_day>0 und profit_last_deal<=0){n=2;}

sonst {n=1;}
//---
time = last_time + n;
//---
Ziehen Sie dann die Linie mit einer zeitlichen Verschiebung gegenüber dem letzten Handel, indem Sie den berechneten Zeitwert verwenden...

 

Version 1.002 führt einen Schutz ein: wenn die Eröffnungszeit des Tagesbalkens "0" zurückgibt - dann ist es kein Schicksal und wir steigen aus.

//+------------------------------------------------------------------+
//| Profit for the period                                            |
//+------------------------------------------------------------------+
void LastProfitForPeriod(double &profit_last_day,double &profit_last_deal)
  {
   datetime from_date=iTime(Symbol(),PERIOD_D1,0);
   if(from_date==D'1970.01.01 00:00')
      return;
   datetime to_date=TimeCurrent()+60*60*24;

   long last_time=0;


Jetzt wird für die gesamte Laufzeit des Handelskontos kein Antrag mehr gestellt.

 
Vladimir, nochmals vielen Dank für Ihre Arbeit!
Ich werde versuchen, den Code selbst zu schreiben, damit mich mein Gewissen nicht quält und um der Übung willen :) Ich werde über die Ergebnisse berichten, falls es welche gibt
 
renatmt5:
Vladimir, nochmals vielen Dank für Ihre Arbeit!
Ich werde versuchen, den Code selbst zu schreiben, damit ich nicht vor Gewissen und Übung krank werde :) Ich werde über die Ergebnisse berichten, falls es welche gibt

Gut.

 
Übrigens, zu dem von Ihnen hinzugefügten Schutz gibt es folgenden Punkt. Da ich eine Verzögerung von 1-2 Minuten habe, bevor der korrekte Wert berechnet wird, während der die Variablen gleich Null sind, wechsle ich den aktuellen Zeitrahmen zu einem anderen für eine schnelle Aktualisierung - die Werte werden sofort neu berechnet. Wahrscheinlich ist es möglich, eine Software-Krücke nach diesem Prinzip zu erstellen?