Problem mit einem Indikator der sich nicht sofort Aktualisiert!

 

Hallo,

ich habe mir einen Indicator (für MT5) erstellt der den Profit minus z.Bsp: 26% anzeigt.

Jetzt habe ich das Problem das er sich nur nach jedem neuen Zeitfenster (Candle) Aktualisiert.

Ich würde es gerne so haben das er sich sofern sich der Profit ändert sich sofort Aktualisiert.

Kann mir da jemand helfen?

Hier ist der Code:

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_type1   DRAW_NONE
#property indicator_color1  clrRed
#property indicator_width1  1
#property indicator_label1  "Profit -26%"

//--- indicator buffers
double profit_buffer[];

//--- indicator initialization function
int OnInit()
{
   //--- define indicator buffers
   SetIndexBuffer(0, profit_buffer, INDICATOR_DATA);

   //--- set indicator label
   PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 0);
   PlotIndexSetString(0, PLOT_LABEL, "Profit -26%");

   return(INIT_SUCCEEDED);
}

//--- indicator calculation function
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[])
{
   //--- iterate through all available bars
   for(int i = prev_calculated; i < rates_total; i++)
   {
      //--- calculate profit at this bar
      double profit = AccountInfoDouble(ACCOUNT_PROFIT);

      //--- subtract 26% of profit
      double profit_minus_26 = profit - (profit * 0.26);

      //--- store value in buffer
      profit_buffer[i] = profit_minus_26;
   }

   //--- set chart corner value
   string profit_str = DoubleToString(profit_buffer[rates_total-1], 2);
   string corner_text = "Profit -26%: " + profit_str;
   ChartSetString(0, CHART_COMMENT, corner_text);
   return(rates_total);
}
Vielen Dank schonmal im voraus!!!!
Dokumentation zu MQL5: Grundlagen der Sprache / Preprozessor / Programmeigenschaften (#property)
Dokumentation zu MQL5: Grundlagen der Sprache / Preprozessor / Programmeigenschaften (#property)
  • www.mql5.com
Programmeigenschaften (#property) - Preprozessor - Grundlagen der Sprache - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
Bitte editiere Dein Post, sodass der Code mit Alt+S oder dem Codebutton formatiert wird.
 
Carl Schreiber # Please edit your post so that the code is formatted with Alt+S or the code button.
I hope this is correct now?
 
Yep ...
 

OnCalculate() wird bei jedem neuen Tick aufgerufen - hat sich da etwas in Deinem Text geändert?

Überprüfe den Code in dem Du die aktuelle Uhrzeit anzeigen lässt.

 
Carl Schreiber #:

OnCalculate() wird bei jedem neuen Tick aufgerufen - hat sich da etwas in Deinem Text geändert?

Überprüfe den Code in dem Du die aktuelle Uhrzeit anzeigen lässt.

eigentlich hat sich nichts geändert.

Ich muss hier auch sagen das ich noch anfänger bin daher suche ich ja die hilfe was ich da ändern muss.

 

Vielleicht lies das mal:

Quickstart for newbies: https://www.mql5.com/de/articles/496
und: https://www.mql5.com/de/articles/100
(Schrittweiser Leitfaden für Anfänger zum Schreiben eines Expert Advisors in MQL5)
Kochbücher: https://www.mql5.com/de/search#!keyword=kochbuch
Bedenke, es gibt fast nichts, was nicht schon für MT4/MT5 programmiert wurde => Suchen ist unsere AI: https://www.mql5.com/de/search

Schnelleinstieg oder Kurzanleitung für Anfänger
Schnelleinstieg oder Kurzanleitung für Anfänger
  • www.mql5.com
Liebe Leser, in diesem Artikel möchte ich Ihnen vermitteln und zeigen, wie man sich möglichst schnell und einfach die Grundlagen der Erstellung automatischer Handelssysteme, wie die Arbeit mit Indikatoren u. a., erschließt. Der Beitrag richtet sich an Neueinsteiger, in ihm kommen weder komplizierte noch schwer zu verstehende Beispiele zur Anwendung.
 
Carl Schreiber #:

Vielleicht lies das mal:

Quickstart for newbies: https://www.mql5.com/de/articles/496
und: https://www.mql5.com/de/articles/100
(Schrittweiser Leitfaden für Anfänger zum Schreiben eines Expert Advisors in MQL5)
Kochbücher: https://www.mql5.com/de/search#!keyword=kochbuch
Bedenke, es gibt fast nichts, was nicht schon für MT4/MT5 programmiert wurde => Suchen ist unsere AI: https://www.mql5.com/de/search

danke für diese info seiten.

Aber ich finde da nichts brauchbares.

Kann mir keiner sagen was ich noch einfügen muss oder ggf. abändern kann damit es funktioniert?

 
RobertM75 #:

danke für diese info seiten.

Aber ich finde da nichts brauchbares.

Kann mir keiner sagen was ich noch einfügen muss oder ggf. abändern kann damit es funktioniert?

  1. Was erwartest Du und passiert nicht?
  2. Wenn ein Programm nicht tut was es soll, sagt einem der Debugger wo und warum der Fehler passiert:
        Zur Fehlerbehebung von MQL5-Programmen (Debugging) : https://www.mql5.com/de/articles/654
        Einführung in MQL5: Schreiben eines einfachen Expert Advisor und benutzerdefinierten Indikators, Siehe Ende: Starten und Debuggen     https://www.mql5.com/de/articles/35
        Die Fehlerverarbeitung und Protokollierung in MQL5:     https://www.mql5.com/de/articles/2041
        https://www.mql5.com/de/articles/272
        Fehler finden und Protokollierung     https://www.mql5.com/de/articles/150

Zur Fehlerbehebung von MQL5-Programmen (Debugging)
Zur Fehlerbehebung von MQL5-Programmen (Debugging)
  • www.mql5.com
Dieser Artikel richtet sich primär an Programmierer, die die Sprache zwar bereits gelernt haben, die allerdings noch keine Meister ihres Fachs sind. Er wird auf verschiedene Debugging-Techniken eingehen, die der gebündelten Erfahrung des Autors sowie vieler anderer Programmierer entspringen.
 
Carl Schreiber #:
  1. Was erwartest Du und passiert nicht?
  2. Wenn ein Programm nicht tut was es soll, sagt einem der Debugger wo und warum der Fehler passiert:
        Zur Fehlerbehebung von MQL5-Programmen (Debugging) : https://www.mql5.com/de/articles/654
        Einführung in MQL5: Schreiben eines einfachen Expert Advisor und benutzerdefinierten Indikators, Siehe Ende: Starten und Debuggen     https://www.mql5.com/de/articles/35
        Die Fehlerverarbeitung und Protokollierung in MQL5:     https://www.mql5.com/de/articles/2041
        https://www.mql5.com/de/articles/272
        Fehler finden und Protokollierung     https://www.mql5.com/de/articles/150

Vielen Dank für diese links werde mich da mal durch Arbeiten.

Das Problem ist es gibt ja kein fehler, da er ja soweit funktioniert nur das er sich nicht pro Tick aktuallisiert.

Und da hab ich momentan mein Problem und dachte hier schnelle hilfe zu bekommen.

 

So sollte es funktionieren.

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_type1   DRAW_NONE
#property indicator_color1  clrRed
#property indicator_width1  1
#property indicator_label1  "Profit -26%"

//--- indicator buffers
double profit_buffer[];

//--- indicator initialization function
int OnInit()
{
   //--- define indicator buffers
   SetIndexBuffer(0, profit_buffer, INDICATOR_DATA);

   //--- set indicator label
   PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 0);
   PlotIndexSetString(0, PLOT_LABEL, "Profit -26%");

   return(INIT_SUCCEEDED);
}

//--- indicator calculation function
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[])
{

//--- start variable for calculation of bars
   int start=prev_calculated;

//--- work at the last bar if the indicator values have already been calculated at the previous tick
   if(prev_calculated>0)
      start-=1;

//--- Block mit Berechnung der  Buffer
   for(int i=start; i<rates_total; i++)
     {

      //--- calculate profit at this bar
      double profit = AccountInfoDouble(ACCOUNT_PROFIT);

      //--- subtract 26% of profit
      double profit_minus_26 = profit - (profit * 0.26);

      //--- store value in buffer
      profit_buffer[i] = profit_minus_26;
   }

   //--- set chart corner value
   string profit_str = DoubleToString(profit_buffer[rates_total-1], 2);
   string corner_text = "Profit -26%: " + profit_str;
   ChartSetString(0, CHART_COMMENT, corner_text);
   return(rates_total);
}
Grund der Beschwerde: