Diskussion zum Artikel "Anzeige historischer Positionen auf dem Chart als deren Gewinn/Verlust-Diagramm"
- www.mql5.com
Es ist bedauerlich, dass MQ die HistoryPositionGet-Funktion nicht in die Liste der History-Funktionen aufgenommen hat. Mit ihr wäre es viel einfacher gewesen.
Deshalb müssen wir es selbst tun
Hallo,
wie kann ich erreichen, dass der Indikator nicht jeden Gewinn/Verlust anzeigt, sondern eine kumulierte Summe ?
und wenn möglich - mit einer Linie ?!!
Hallo,
wie kann ich erreichen, dass der Indikator nicht jeden Gewinn/Verlust anzeigt, sondern die kumulierte Summe?
und wenn möglich - mit einer Linie ?!!
Nach einer Vermutung und ohne es zu überprüfen, müssen Sie nur den Gewinn zu dem bereits erhaltenen addieren, und nicht jedes Mal den aus den Positionen genommenen aufzeichnen.
So ist es nun einmal:
//+------------------------------------------------------------------+ //| Benutzerdefinierte Indikator-Iterationsfunktion | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- Indizierung der Felder "close" und "time" wie in "time series" einstellen ArraySetAsSeries(close,true); ArraySetAsSeries(time,true); //--- Kennzeichen für die erfolgreiche Erstellung der Artikelliste static bool done=false; //--- Wenn das Positionsdatenobjekt erstellt wird if(history!=NULL) { //--- Wenn die Liste der Elemente noch nicht erstellt wurde if(!done) { //--- Wenn die Liste der Positionen für das aktuelle Instrument erfolgreich erstellt wurde, if(history.CreatePositionList(Symbol())) { //--- Druck der Positionen im Journal und Setzen des Kennzeichens für die erfolgreiche Erstellung der Liste der Positionen history.Print(); done=true; } } } //--- Anzahl der für die Berechnung des Indikators erforderlichen Balken int limit=rates_total-prev_calculated; //--- Wenn der Grenzwert größer als 1 ist, bedeutet dies, dass es sich um den ersten Lauf oder eine Änderung der historischen Daten handelt if(limit>1) { //--- Setzen Sie die Anzahl der Balken für die Berechnung gleich der gesamten verfügbaren Historie und initialisieren Sie die Puffer mit "leeren" Werten limit=rates_total-1; ArrayInitialize(BufferFilling1,EMPTY_VALUE); ArrayInitialize(BufferFilling2,EMPTY_VALUE); } //--- In der Schleife der Symbolleiste static double profit=0; for(int i=limit;i>=0;i--) { //--- den Gewinn der Positionen auf dem Balken mit dem Zyklusindex i ermitteln und den erhaltenen Wert in den ersten Puffer schreiben profit+= Profit(close[i],time[i]); BufferFilling1[i]=profit; //--- Schreiben Sie immer Null in den zweiten Puffer. Je nachdem, ob der Wert im ersten Puffer größer oder kleiner als Null ist, //--- die Farbe der gezeichneten Füllung wechselt zwischen den Feldern 1 und 2 des Indikatorpuffers BufferFilling2[i]=0; } //--- Rückgabe des Wertes von prev_calculated für den nächsten Aufruf return(rates_total); }
Nun, und mit dem Puffer als Linie - es ist selbst. Da muss man einen zusätzlichen Puffer entfernen, weil das Füllen immer zwei Puffer braucht. Und für eine Linie braucht man einen.
Ich glaube, es funktioniert.
Ich habe Ihre Änderungen vorgenommen und nur den Typ - Liniengrafik - angegeben.
Ich habe die Puffer nicht entfernt.
https://www.mql5.com/ru/charts/18738352/nzdcad-d1-roboforex-ltd
- www.mql5.com
Bei den Währungen scheint alles in Ordnung zu sein, aber bei Silber wird er aus irgendeinem Grund ständig neu gezeichnet.
Es ist notwendig zu prüfen, welche Daten der Indikator erhält und warum er nicht berechnet wird. Das erneute Zeichnen kann durch einen Grenzwert von mehr als 1 verursacht werden. Dieser Wert wird als Differenz zwischen rates_total und prev_calculated berechnet. Sie müssen sich diese Werte ansehen, um zu sehen, was sie bei jedem Tick enthalten
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Anzeige historischer Positionen auf dem Chart als deren Gewinn/Verlust-Diagramm :
In diesem Artikel werde ich die Möglichkeit erörtern, Informationen über geschlossene Positionen auf der Grundlage ihrer Handelshistorie zu erhalten. Außerdem werde ich einen einfachen Indikator erstellen, der den ungefähren Gewinn/Verlust der Positionen auf jedem Balken als Diagramm anzeigt.
Die Funktion erhält den Preis (Schlusskurs des Balkens) in Bezug auf den die Anzahl der Gewinnpunkte der Position und den Zeitpunkt, zu dem das Vorhandensein der Position geprüft wird (Eröffnungszeit des Balkens). Anschließend wird der Gewinn aller Positionen, die von jedem Objekt der historischen Positionen erhalten wurden, summiert und zurückgegeben.
Nach der Kompilierung können wir den Indikator auf dem Chart eines Symbols laufen lassen, auf dem es viele offene Positionen gab, und er wird ein Gewinndiagramm aller historischen Positionen zeichnen:
Autor: Artyom Trishkin