Fehler, Irrtümer, Fragen - Seite 2050

 

Können Sie mir sagen, ob es einen funktionierenden MT4 und MT5 Demoserver mit Wochenendkursen gibt?

 
Kirill Belousov:

Gibt es einen funktionierenden MT4- und MT5-Demoserver mit Kursen an Wochenenden?

Der Demoserver ist ein Demoserver, weil der Handel nicht mit echtem Geld, sondern mit "Demo" durchgeführt wird :), und alles andere (sowie die Zeit der Notierungen) ist fast wie im wirklichen Leben.

 
Kirill Belousov:

Können Sie mir sagen, ob es einen funktionierenden MT4 und MT5 Demoserver mit Wochenendkursen gibt?

Am Wochenende liegen keine Angebote vor.
Können Sie die Ankunft von Zitaten nachahmen.
 

Nehmen Sie MT5 offline (linker Proxy, zum Beispiel) und führen Sie einen EA wie folgt aus

void OnInit()
{
  Print("Hello World!");
}

Der Ausdruck im Protokoll erfolgt nur fünf Sekunden nach dem Start des Beraters - BAG.


Diesen Indikator offline ausführen

#property indicator_chart_window

#property indicator_buffers 0
#property indicator_plots 0

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(rates_total);
}

void OnInit()
{
  const datetime LastBar = (datetime)SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_LASTBAR_DATE);

  Print(LastBar);
  Print(Bars(_Symbol, PERIOD_CURRENT, LastBar - 24 * 3600, LastBar)); // 0
  Print(GetLastError());                                              // ERR_HISTORY_NOT_FOUND
}

Wir bekommen einen Knaller in Bars. Das gleiche Problem tritt bei wiederholten Aufrufen auf, z. B. bei OnTimer. Wenn Sie jedoch Bars in Expert Advisor aufrufen, funktioniert alles. Im Falle des Indikators handelt es sich eindeutig um einen Fehler.

2017.10.22 23:35:40.678 Terminal        Alpari Limited MT5 x64 build 1653 started (Alpari Limited)
2017.10.22 23:35:40.678 Terminal        Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700 K  @ 3.50 GHz, RAM: 11310 / 16301 Mb, HDD: 827 / 30000 Mb, GMT+02:00
Die Erklärung in der Dokumentation erklärt gar nichts

Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, или данные таймсерии в момент вызова функции не синхронизированы с торговым сервером, то функция вернет нулевое значение.

Das Senden der Anfrage zur Aktualisierung der Zeitreihe mit demselben Zeitraum wie der Indikator, der die Aktualisierung aufruft, ist äußerst unerwünscht. Die Unerwünschtheit der Anfrage für die gleiche Symbolperiode, die der Indikator hat, ist darauf zurückzuführen, dass die Aktualisierung der historischen Daten im gleichen Thread durchgeführt wird, in dem auch der Indikator läuft. Daher ist die Wahrscheinlichkeit eines Zusammenstoßes hoch.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Merkmale der Sprache mql5, Feinheiten und Tricks

fxsaber, 2017.10.17 15:07

Nachkommen-Arrays können nicht in Vorfahren-Arrays konvertiert werden. Element für Element hingegen ja. Darin liegt eine Einschränkung von ArrayCopy, die zu beseitigen gut wäre.

In dieser Situation stimmt etwas mit der Sprache nicht

struct RATES : public MqlRates {};

void f1( RATES& ) {}

void f2( MqlRates& ) {}
void f2( MqlRates &[] ) {}

void OnStart()

{
  MqlRates a = {0};  
  
  f1(a); // 'a' - parameter conversion not allowed
  
  RATES b[1] = {0};
  
  b[0] = a; // no problem
  a = b[0]; // no problem
  
  f2(b[0]); // no problem
  f2(b);    // 'f2' - no one of the overloads can be applied to the function call
}


Die gelben und roten Fäden widersprechen einander. Wenn die Vererbung von einer Struktur im Gange ist und der Konstruktor, der Zuweisungsoperator und die Felder nicht geändert werden, muss die Umwandlung des Nachfolgers in den Vorgänger und umgekehrt ohne Probleme erfolgen. Und die gelben Linien beweisen es. Es gibt jedoch auch Situationen, in denen es zu Problemen kommt - zu roten Problemen.
 
fxsaber:

In dieser Situation stimmt etwas mit der Sprache nicht

Mein Compiler gab aus


 
Kirill Belousov:

Mein Compiler gab aus

Ja, ich habe die Nachricht korrigiert.
 
   int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE);
   int cur_tim=(int)TimeCurrent();

   RefreshRates();
   if(FileGetInteger(aFileName,FILE_EXISTS)==1)
      if(tim>0)
         if((cur_tim-tim)>120) 
           {
            Print(" ttt   "+TimeToString(cur_tim)+"  "+TimeToString(tim));
            FileDelete(aFileName);
            Print("Обновление файла ");
            return false;
           }

int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); aktualisiert die Zeit nicht.

Ich erstelle eine Datei und möchte sie nach 60 Sekunden löschen, die Datei wird gelöscht undint tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); gibt die Zeit der ersten Datei nach der Kompilierung zurück. Ich sehe im Windows-Fenster, dass die Datei gelöscht und mit neuer Zeit erstellt wurde.

RefreshRates hilft nicht...

 

int tim=(int)FileGetInteger(aFileName,FILE_MODIFY_DATE);

Funktioniert korrekt

 
Vladimir Pastushak:

int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); aktualisiert die Zeit nicht.

Ich erstelle eine Datei und möchte sie nach 60 Sekunden löschen, die Datei wird gelöscht undint tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); gibt die Zeit der ersten Datei nach der Kompilierung zurück. Ich sehe im Windows-Fenster, dass die Datei gelöscht und mit neuer Zeit erstellt wurde.

RefreshRates hilft nicht...

Wo befindet sich der Code für die Dateierstellung?

Schließen Sie die Datei, bevor Sie sie löschen?

Was hat RefreshRates damit zu tun?

Handelt es sich um eine Fünf oder eine Vier?