Fehler, Irrtümer, Fragen - Seite 1005

 
ns_k:

Guten Tag!

Speicherndie Indikatorpuffer die Werte zwischen den Indikatorläufen oder gibt es eine Störung in meinem Terminal?

Ich habe einen Indikator erstellt, dann habe ich den Zählalgorithmus auskommentiert und auf "Kompilieren" gedrückt - alle Werte bleiben im Diagramm. Ich glaube, ich muss den Indikator erneut auf das Diagramm setzen, um die Pufferwerte zu aktualisieren; ich habe ihn mit fehlendem Berechnungszyklus gesetzt und er hat immer noch die gleichen Werte. Ich musste das Terminal neu starten, um es loszuwerden.

Bitte kommentieren Sie dies.

Ich danke Ihnen!

Es scheint, dass es immer noch Bedingungen gibt, die bereits berechnete Werte in den Puffern belassen. Ich verstehe nicht, was genau diese Bedingungen sind. Nach dem Neustart des Terminals ist das Problem verschwunden. Deshalb würde ich auch keinen Antrag an die Dienststelle stellen.

Vielleicht ist es generell kein Fehler, sondern eine Funktion?

Ich danke Ihnen!

 
ns_k:

Es scheint jedoch Bedingungen zu geben, unter denen die bereits berechneten Werte in den Puffern verbleiben. Was genau sind das für Bedingungen, die ich nicht verstehe? Nach einem Neustart des Terminals war das Problem verschwunden. Das ist der Grund, warum ich keine Anwendung für den Dienst schreiben würde.

Vielleicht ist es generell kein Fehler, sondern eine Funktion?

Ich danke Ihnen!

Setzen Sie einfach die Array-Werte vor dem Befüllen oder während der Initialisierung auf Null zurück:

ArrayInitialize(buffer_data,EMPTY_VALUE);
 
ns_k:

Es scheint jedoch Bedingungen zu geben, unter denen die bereits berechneten Werte in den Puffern verbleiben. Was genau diese Bedingungen sind, verstehe ich nicht. Nach einem Neustart des Terminals war das Problem verschwunden. Das ist der Grund, warum ich keine Anwendung für den Dienst schreiben würde.

Vielleicht ist es generell kein Fehler, sondern eine Funktion?

Ich danke Ihnen!

Die Werte müssen zurückgesetzt werden
 
tol64:

Vor dem Befüllen oder während der Initialisierung setzen Sie die Werte des Arrays einfach auf Null zurück:

Ich danke Ihnen!!!
 

Es wäre schön, wenn das Rechtsklick-Kontextmenü einen separaten Eintrag mit benutzerdefinierten Indikatoren haben könnte

Ich danke Ihnen!

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 

Noch eine Frage, bitte :)

Wie kann man Kommentare im Indikatorfenster und nicht im Diagrammfenster anzeigen?

Ich danke Ihnen!

 
ns_k:

Wie können die Kommentare im Indikatorfenster und nicht im Chartfenster angezeigt werden?

Für dieses Verhalten gibt es keine Bestimmungen. Verwenden Sie Objekte, wenn es wirklich nötig ist.
 

Guten Tag!

Esist besser, das Fenster mit den Indikatoreigenschaften nach Möglichkeit nicht modalzu gestalten.

Ich danke Ihnen!

 
ns_k:

Guten Tag!

Esist besser, das Fenster mit den Indikatoreigenschaften nach Möglichkeit nicht modalzu gestalten.

Ich danke Ihnen!

Und fügen Sie eine Schaltfläche Anwenden hinzu. Mit anderen Worten: Wir haben den Wert geändert, klicken auf die Schaltfläche Übernehmen, und die Änderungen werden angezeigt, ohne dass das Fenster geschlossen wird. Das wäre viel bequemer.

Und zum hundertsten Mal - die Möglichkeit, die Größe des Eigenschaftsfensters zu ändern.

P.S. Schreiben Sie mehr in Service Desk.

 

Ich weiß nicht, wo ich mich sozusagen dumm anstelle.

int OnCalculate (const int rates_total,      // size of input time series
                 const int prev_calculated,  // bars handled in previous call
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread
                 )

  {
   
   
   
   doDrawIndicator(gSymbols[0],rates_total,g1ThermB);


//Comment(rates_total);
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int doDrawIndicator(string xSymbol, int xRatesTotal, double &xBuffer[])//,double &xPrice[],double &xBuffer[])
  {
   double l1Close[]; // , l2Close[];
   datetime lTime[];
   datetime lEnd,lStart;
   int copied;
   ArrayInitialize(xBuffer,0);
   lEnd=TimeCurrent();
   lStart=(TimeCurrent()/86400)*86400+3600;

   copied=CopyTime(xSymbol,Period(),lStart,lEnd,lTime);
   if(copied==-1){Print("Can't copy time",__FUNCSIG__);return(0);}
   copied=CopyClose(xSymbol,Period(),lStart,lEnd,l1Close);
   if(copied==-1){Print("Ждите...1");return(0);}

   sThermometer lT;
  // Print("rates_total=",rates_total);
   //Comment(xSymbol);
   Comment(copied);
   g1RM=new CRangeManager(1,0.2,20,xSymbol);
 
   for(int i=0;i<copied;i++)
     {
      lT=g1RM.getStateByValue(l1Close[copied-i-1]);
      if(gThermRange==Up && lT.cTemperature.State<7 || gThermRange==Down && lT.cTemperature.State>6 )
        {
         xBuffer[xRatesTotal-i-1]=lT.cTemperature.Temperature;
        }
      else
        {
         xBuffer[xRatesTotal-i-1]=0;
        }
     }

     
   delete g1RM;
   return(1);

  }

Der Indikator wird nicht aktualisiert, d.h. ich sehe immer noch 739 in der linken Ecke (auf die Kleinigkeiten geworfen, wie Sie verstehen). Und sobald ich auf Kompilieren drücke, wird der Indikator aktualisiert. Wo im Code liegt der Fehler?

Danke!