Fehler, Irrtümer, Fragen - Seite 1030

 
Al_key:

Und ich habe auch Barshift bekommen, indem ich die Composter-Bibliothek benutzt habe. Gibt es keine eingebauten Tools im Metatrader?

Eigentlich funktioniert iBarShift() in MT4 wahrscheinlich auf die gleiche Weise wie in der Compiler-Bibliothek, aber es wäre besser, es eingebaut zu haben - es würde schneller funktionieren (weil es in C++ ist).
 
MetaDriver:

Ihr Fall wird mit einem kleinen Zettel behandelt.

Bei mir ist es noch schlimmer. (Übrigens, Ihr Fall ohne Slip hat früher funktioniert, seit ein paar Wochen nicht mehr).

Dasselbe Schema funktioniert nicht mehr, ohne dass es bei anderen (nicht aktuellen) Diagrammen zu unangenehmen Zwischenfällen kommt:

Code von hier: https://www.mql5.com/ru/code/224

Installierte Eulen, siehe.

Auf den aktuellen werfe ich Standard. AMA auf dem Chart, Poke-Neuberechnung (bei Sleep von 0 auf 2350) - ich falle auf M1 und komme nie wieder zurück. Nach ein paar Sekunden. Die AMA erscheint, und das war's.

Ich versuche, Flaggen zu verwenden (wenn ich zwei Flaggen speichern möchte, die aktuelle und m1? Wenn ich bereits die aktuelle (Flagge) verwendet habe und jetzt m1 (Flagge 2) verwende, dann...).

aber ich bezweifle es... Die Zecken vom Montag werden kommen, bevor ich zum aktuellen zurückkehre :)

Aktualisierung ja, ich habe hundert Objekte auf der Karte, und plus AMA, d.h., es ist so schwer.

 
MetaDriver:

"Das müssen wir, Fedja. Wir müssen es tun."

(c) Shurik.

--

Ein solcher Fehler tritt z.B. auf, wenn der Speicher für den dynamischen Puffer nicht zugewiesen ist (in diesem Fall unter ActualBuffer). Dieses Codefragment macht es nicht deutlich.

Hier.

Und wie kann man Speicher für dynamische Puffer zuweisen?

Ich denke, wenn ich das herausfinde, wird die Frage verschwinden.

Hier ist der gesamte Code

#include <TimeSeries.mqh>

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot Actual
#property  indicator_label1  "Actual"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrLime
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- plot Consensus
#property  indicator_label2  "Consensus"
#property  indicator_type2   DRAW_LINE
#property  indicator_color2  clrPeachPuff
#property  indicator_style2  STYLE_SOLID
#property  indicator_width2  1
//--- plot Previous
#property  indicator_label3  "Previous"
#property  indicator_type3   DRAW_LINE
#property  indicator_color3  clrLightCyan
#property  indicator_style3  STYLE_SOLID
#property  indicator_width3  1
//--- indicator buffers
double         ActualBuffer[];
double         ConsensusBuffer[];
double         PreviousBuffer[];
//--- indicator vars
string sDatetime;
string sActual;
string sConsensus;
string sPrevious;
int file_handle;
int barshift;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ActualBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ConsensusBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,PreviousBuffer,INDICATOR_DATA);
   file_handle = FileOpen("CSV - макроэкономика и госкорпстат/Existing Home Sales Change.csv",FILE_READ|FILE_CSV|FILE_ANSI,',');
   while(!FileIsEnding(file_handle))
        {
         sDatetime  = FileReadString(file_handle);
         sActual    = FileReadString(file_handle);
         sConsensus = FileReadString(file_handle);
         sPrevious  = FileReadString(file_handle);
         
         barshift = iBarShift(Symbol(), Period(), datetime(formatdatetime(sDatetime)), false);
         if(StringToDouble(formatstring(sActual)) > 0 && StringToDouble(formatstring(sActual)) < 10000) ActualBuffer[barshift] = StringToDouble(formatstring(sActual));
         Print(formatdatetime(sDatetime));
         Print("iBarShift = ", barshift, " Datetime = ", formatstring(sDatetime), " sActual = ", sActual, " sConsensus = ", sConsensus, " sPrevious = ", sPrevious);
        }
    
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration 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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+
//--- Функции форматирования
string formatstring(string strparam)
   {
      string result = StringSubstr(strparam,1, StringLen(strparam) - 2);
      return(result);
   }
string formatdatetime(string strparam)
   {
      string result = StringSubstr(strparam, 1, 4) + "." + StringSubstr(strparam, 5, 2) + "." + StringSubstr(strparam, 7, 11);
      
      return(result);
   }
 
Al_key:

Hier.

Wie weist man einem dynamischen Puffer Speicher zu?

Ich denke, sobald ich das herausgefunden habe, wird die Frage verschwinden.

Hier ist der gesamte Code

Ps.

Ich habe dort über Array Resize gelesen...hier ist eine Kopie

"Nach dem Linken wird ein dynamisches Array buffer[]wie in regulären Arrays indiziert, auch wenn das zu verknüpfende Array so eingestellt ist, dass es wie in timeseries indiziert wird.Wenn Sie die Reihenfolge des Zugriffs auf die Elemente des Indikator-Arrays ändern möchten, sollten Sie die Funktion ArraySetAsSeries() anwenden, nachdem Sie das Array mit der Funktion SetIndexBuffer() gebunden haben. Es ist zu beachten, dass dynamische Arrays, die mit der Funktion SetIndexBuffer() als Indikatorpuffer zugewiesen wurden, nicht in ihrer Größe verändert werden sollten. Bei Indikatorpuffern werden alle Größenänderungsoperationen vom ausführenden Subsystem des Terminals durchgeführt."

Ich bin verwirrt.

 
Silent:
Konfiguriertes Profil als Standard speichern Datei - Profile - Standard
Art von Standard, immer noch keine Daten zu laden. Das erste Mal seit ein paar Stunden ging alles wieder runter.
 
Al_key:

Hier.

Wie weist man einem dynamischen Puffer Speicher zu?

Ich denke, wenn ich das herausfinde, wird die Frage verschwinden.

Hier ist der gesamte Code

INDICATOR_DATA sind die zu zeichnenden Daten. Dieser Puffer (Größe) wird vom Terminal überwacht (durch rates_total, wie ich es verstehe).

Hinzufügen von Puffern für Zwischenberechnungen (INDICATOR_CALCULATIONS). Legen Sie für sie die Größe fest.

PS Ich habe #include <TimeSeries.mqh> kann aus irgendeinem Grund nicht öffnen, lässt sich nicht kompilieren.

Upd Monday muss warten, hier stimmt etwas nicht.

 
Silent:

INDICATOR_DATA sind die zu zeichnenden Daten. Dieser Puffer (Größe) wird vom Terminal überwacht (durch rates_total, wie ich verstanden habe).

Hinzufügen von Puffern für Zwischenberechnungen (INDICATOR_CALCULATIONS). Legen Sie für sie die Größe fest.

PS Ich habe #include <TimeSeries.mqh> kann aus irgendeinem Grund nicht öffnen, kompiliert nicht.

Upd Monday muss warten, hier stimmt etwas nicht.

Habe schon versucht zu ändern, immer noch der gleiche Fehler. Ich werde versuchen, die Werte zumindest in ein reguläres Array zu packen, vielleicht klappt es ja.
 
Al_key:
Ich habe versucht, sie zu ändern, aber ich habe immer noch den gleichen Fehler. Ich werde versuchen, die Werte zumindest in ein reguläres Array zu packen, vielleicht klappt es ja.

Hier ist eine einfache Methode, die funktioniert. In INDICATOR_DATA schreiben wir von INDICATOR_CALCULATIONS.

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrOrangeRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input string   s="EURUSD";
input ENUM_TIMEFRAMES      tf;          // D1
input int      countBars=100;          // count
//--- put parameters
int   copied,i;
//--- indicator buffers
double         Label1Buffer[];
//--- buffers
double         p_Symbol[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,p_Symbol,INDICATOR_CALCULATIONS);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   if(prev_calculated==0)
     {
      ArrayInitialize(Label1Buffer,EMPTY_VALUE);
      ArrayInitialize(p_Symbol,EMPTY_VALUE);
      ArraySetAsSeries(Label1Buffer,true);
      ArraySetAsSeries(p_Symbol,true);
      ArraySetAsSeries(price,true);
     };
   ArrayCopy(p_Symbol,price,0,0,countBars);
   if(_LastError!=0) {Print(_LastError); return(prev_calculated);};
   if(_LastError==0)
     {
      for(i=countBars;i>0;i--)
        {
         Label1Buffer[i]=p_Symbol[i];
         Print("limitBars i = "+IntegerToString(i));
        };
     };
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
Silent:

INDICATOR_DATA sind die zu zeichnenden Daten. Dieser Puffer (Größe) wird vom Terminal überwacht (durch rates_total, wie ich es verstehe).

Hinzufügen von Puffern für Zwischenberechnungen (INDICATOR_CALCULATIONS). Legen Sie für sie die Größe fest.

PS Ich habe #include <TimeSeries.mqh> kann aus irgendeinem Grund nicht öffnen, lässt sich nicht kompilieren.

Upd Monday muss warten, hier stimmt etwas nicht.

Nehmen Sie hier: https://www.mql5.com/ru/code/1008

Ich habe ihn gerade erst gefunden, deshalb habe ich den Code noch nicht gefühlt. Und er wird auch nicht funktionieren - die Öffentlichkeit hier treibt mich zum Einkaufen.

Ich denke, dass alles funktionieren wird, wenn der problematische Code von OnInit() nach OnCalculate() verschoben wird. Seit langem kenne ich das Feature von Five - nicht jeder Code in OnInit funktioniert einwandfrei. Es ist wahrscheinlich, dass die tatsächliche automatische Verteilung von Puffern, die durch SetIndexBuffer() registriert werden, garantiert erst nach dem Verlassen von OnInit() endet, da dies im Hintergrund geschehen muss (es ist automatisch, richtig?).

TimeSeries - Библиотека функций для работы с таймсериями
TimeSeries - Библиотека функций для работы с таймсериями
  • Stimmen: 12
  • 2012.08.24
  • Andrey Khatimlianskii
  • www.mql5.com
Библиотека функций для работы с таймсериями: iBars, iTime, iOpen, iHigh, iLow, iClose, iVolume, iHighest, iLowest, iBarshift. Для всех функций доступен краткий вариант вызова (с символом и периодом текущего графика).
 

Ich stelle fest, dass nur 3 von 8 Agenten gleichzeitig laufen können, wenn sie Aufgaben aus der Cloud erhalten.
Wenn Sie Ihren Test parallel laufen lassen, werden auch die anderen Agenten aktiviert.

Ist das so gewollt?