Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1190

 
MakarFX:

MetaQuotes Demo-Server schließen

MetaQuotes Software Corp.

4. März 2009

Am 5. April 2009 wird der Server "demo.metaquotes.net" abgeschaltet. Das Geschichtszentrum mit der winzigen Geschichte wird jedoch seine Arbeit fortsetzen.

Seit diesem Tag weigert sich unser Unternehmen, den Demoserver zu benutzen. Heutzutage ist die Zahl der Unternehmen, die die MetaTrader 4-Plattform betreiben, so hoch, dass wir keine Notwendigkeit sehen, einen eigenen Server zu unterhalten.

Dies ist eine Art Antiquität (ein anderer Server wird erwähnt). Das letzte Mal wurde vor einem Monat auf MetaQuotes-Demo ein neues Demokonto normal erstellt.

Wenn der Server entfernt wurde, warum wird er dann im Kontoeröffnungsassistenten angezeigt und angepiept? Der Stau tritt nur beim letzten Schritt auf.

 
Artyom Trishkin:

Wenn der Indikator zum ersten Mal auf historische Daten zugreift und nicht genügend lokale Daten vorhanden sind, beginnt das Laden der Daten und die Funktion gibt einen Fehler zurück.

Das verstehe ich sehr gut. Wenn es um unzureichende Takte in der Historie ginge, würden beide Funktionen 0 zurückgeben. Eine der Funktionen gibt jedoch 0 zurück, während die andere korrekt die Anzahl der Takte in der Historie zurückgibt. Außerdem werden sie nacheinander aufgerufen:

Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); // Этот же вызов iBars() работает нормально
  }

Nur im ersten Fall werden die Daten aus den vorbereiteten Prämembers (Symbol und Timeframe) der Loader-Klasse (korrekt initialisiert) entnommen, im zweiten Fall jedoch aus den Funktionen Symbol() und Period() (die genau die gleichen Werte zurückgeben, wie sie in Symbol und Timeframe stehen). Die Werte der Variablen sind mit denen der Funktionen identisch (ich habe es überprüft). Aber es ist nicht klar, wo iBars(Symbol, Zeitrahmen) mit absolut korrekten Symbolen und Zeitrahmen durcheinander kommt. Während iBars(Symbol(), Period()) keinen Fehler macht. Also habe ich beschlossen, dass es ein Fehler im Terminal selbst oder eine fehlerhafte Kompilierung des Quellcodes sein muss.

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Если указаны параметры start_time и stop_time, то функция возвращает количество баров в диапазоне дат. Если эти параметры не указаны, то функция возвращает общее количество баров. Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, или данные таймсерии в момент вызова функции не...
 
Mihail Matkovskij:

Ich verstehe das sehr gut. Wenn es um das Fehlen von Takten in der Historie ginge, würden beide Funktionen 0 zurückgeben, aber so wie es ist, gibt eine Funktion 0 zurück, während die andere korrekt die Anzahl der Takte in der Historie zurückgibt. Außerdem werden sie nacheinander aufgerufen:

Nur im ersten Fall werden die Daten aus den vorbereiteten Prämembers (Symbol und Timeframe) der Loader-Klasse (korrekt initialisiert) entnommen, im zweiten Fall jedoch aus den Funktionen Symbol() und Period() (die genau die gleichen Werte zurückgeben, wie sie in Symbol und Timeframe stehen). Die Werte der Variablen sind mit denen der Funktionen identisch (ich habe es überprüft). Aber es ist nicht klar, wo iBars(Symbol, Zeitrahmen) mit absolut korrekten Symbolen und Zeitrahmen durcheinander kommt. Während iBars(Symbol(), Period()) keinen Fehler macht. Also habe ich beschlossen, dass es irgendwo einen Fehler in der Bedienung des Terminals gibt.

Schreiben Sie es nun so, wie Igor es empfohlen hat:

Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(Symbol(), Period())); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(symbol, timeframe)); // Этот же вызов iBars() работает нормально
  }
Und vergessen Sie nicht, dass dies ein Klassenkonstruktor ist, der vor der Initialisierung aufgerufen wird
 
Mihail Matkovskij:

Ich verstehe das sehr gut. Wenn es um das Fehlen von Takten in der Historie ginge, würden beide Funktionen 0 zurückgeben, aber so wie es ist, gibt eine Funktion 0 zurück, während die andere korrekt die Anzahl der Takte in der Historie zurückgibt. Und sie werden einer nach dem anderen aufgerufen:

Sie denken sich eine Geschichte aus

und dann beschließt man, es als Forderung zu schreiben, und dann die Frage

Was besagt die 4401-Fehlerhilfe?

Was habe ich geschrieben?

Kennen Sie den Unterschied zwischen fehlenden Balken und einem nicht fertigen Diagramm?

Sie haben die Situation nach dem Neustart des Terminals mit dem Start des Indikators, und Sie fordern die Daten in der globalen Initialisierung des MQL-Programms (Klassenkonstruktor), die vor OnInit() ausgeführt wird


weg, Sie schreiben schneller als Sie lesen, suchen Sie das Forum 4401 - alle Antworten

 
MakarFX:

Ich berechne das Los wie folgt

Sie steht am Anfang des EA... und ich habe sie ganz ans Ende des Codes gesetzt

#property link      "http://www.mql5.com"
input double CheckLots = 0.01;
input int    Persent   = 5;
   double Lots=NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2);  

Wenn die Lots-Variable in der OnTick-Funktion aufgerufen wird, findet der EA sie und berechnet sie neu.

So kann es nicht sein. Die Deklaration und die Initialisierung sind im Gange, und der VariablenLots wird ein Ausdruck zugewiesen.

NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2)

Diese Zuweisung kann nur einmal beim Start erfolgen, es kann nicht sein, dass ein Ausdruck bei jedem Zugriff aufLots automatisch zugewiesen wird. Ich habe nicht gehört, dass mql so etwas kann.

 
Seric29:

So kann es nicht sein. Sie haben eine Deklaration und eine Initialisierung, und ein Ausdruck wird der VariablenLots zugewiesen.

Diese Zuordnung kann einmal beim Start erfolgen, es kann nicht sein, dass bei jedem Zugriff aufLots automatisch ein Ausdruck zugeordnet wird. Ich habe nicht gehört, dass mql so etwas kann.

Ich habe überprüft, dass sich bei einer Änderung des Gleichgewichts auch die Partie ändert.
 
MakarFX:
Ich habe geprüft, ob sich bei einer Änderung des Saldos auch die Partie ändert.

Wow, das werde ich mir ansehen. Ich weiß, dass man Variablen mit Array-Elementen mit Funktionen initialisieren kann, aber ich wusste nicht, dass sich das automatisch ändert, ich glaube auch nicht, dass es so etwas in C++ gibt, ich werde das später überprüfen.

 
Artyom Trishkin:
Und vergessen Sie nicht, dass dies ein Klassenkonstruktor ist, der vor der Initialisierung aufgerufen wird

Dies ist der Fall, wenn das Objekt automatisch ist. Aber ich erstelle sie mit dem Schlüsselwortnew (in OnInit()) und lösche sie mit dem Schlüsselwort delete (in OnDeinit()). Das heißt, ich verwende einen Zeiger auf ein Objekt vom Typ Loader. Aber ich denke, Sie wissen über all diese Details Bescheid. Deshalb wird der Lader in OnInit() erstellt und es kann hier kein Fehler auftreten.

Wenn Sie das Vertauschen von Funktionen meinen, habe ich es ausprobiert, und das Ergebnis ist das gleiche. Nur die Reihenfolge der Nachrichten ist anders :)

public:  
  Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); 
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); 
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
  }

Ergebnis:

2020.06.24 23:10:48.568 Loader::Loader Symbol: EURUSD Zeitrahmen: PERIOD_H1

2020.06.24 23:10:48.568 Loader::Loader Bars (2): 140435

2020.06.24 23:10:48.568 Loader::Loader Bars: 0

2020.06.24 23:10:48.568 Loader::Loader Fehler: 4401

Bitte beachten Sie, dass dies nur geschieht, wenn das Terminal neu gestartet wird! Denn beim ersten Start des Terminals (nach dem Start von Windows) funktioniert dieses Beispiel korrekt.
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Igor Makanu:

Sie haben sich eine Geschichte ausgedacht.

und beschloss dann, daraus eine Beschwerde zu machen.

Keine Ansprüche! Und was ist, wenn ich den Quellcode zur Verfügung stelle und sogar die Abfolge der Aktionen beschreibe, um die Funktion zu testen? Offensichtlich haben Sie mich missverstanden ...

Igor Makanu:

Und Sie fragen nach Daten in der globalen Initialisierung des MQL-Programms (Klassenkonstruktor), die vor OnInit() ausgeführt wird


weg, du schreibst schneller als du liest,suche im Forum 4401 - alle Antworten


Sie sollte nicht vorOnInit() ausgeführt werden, wie ich in einem früheren Beitrag schrieb. Sie sind es, die nicht aufmerksam lesen, sowohl die Beiträge als auch den Quellcode, den ich zum Testen hinzugefügt habe.

 
Stanislav Korotky:

Dies ist schon etwas älter (ein anderer Server wird erwähnt). Mehr als einmal in diesem Jahr, das letzte Mal vor einem Monat auf MetaQuotes-Demo wurde ein neues Demokonto normal erstellt.

Wenn der Server entfernt wurde, warum wird er dann im Kontoeröffnungsassistenten angezeigt und angepiept? Der Stau tritt nur beim letzten Schritt auf.

Ja, irgendetwas wird nicht registriert, auch nicht auf dem mobilen Endgerät. Zu Beginn dieses Jahres war alles registriert.
Grund der Beschwerde: