Fehler, Irrtümer, Fragen - Seite 1360

 
A100:
Das habe ich vorgeschlagen:
...
Nur die Operationen == und != sind von den Änderungen betroffen.
Alles andere, einschließlich des =-Operators, sollte so belassen werden, wie es jetzt ist (unverändert)

Wie kann man den Operator= unverändert lassen, wenn er jetzt zu einer Verwechslung zwischen Zeigern und den Objekten selbst führt? Wenn man * dafür verwendet, dann sollte man es auch für alle anderen Operatoren verwenden. Es muss einen einzigen Standard geben. Was Sie vorschlagen, ist, dass der Compiler von sich aus den richtigen auswählen soll - das ist falsch. Es wird eine Menge schwer zu findender Fehler geben. Alles sollte eindeutig sein: Aktionen entweder mit einem Objekt oder mit einem Zeiger.

Nun, all diese Sternchen sind natürlich erzwungene Krücken. Wir müssen das ganze Konzept ändern, das die Entwickler von Anfang an nicht so gut gewählt haben, denke ich.

Wir sollten uns von der Bindung an C++ lösen bzw. die Verwendung von Zeigern als eigenen Variablentyp aufgeben und sie durch Referenzen ersetzen. Referenzen sind im Wesentlichen dasselbe wie Zeiger, werden vom Compiler nur als Objekte interpretiert.Daher werden alle Aktionen mit diesen Variablen, einschließlich der Operatoren, wie Aktionen mit einem Objekt behandelt. Wenn Sie genau die Referenzen vergleichen oder zuweisen müssen, verwenden Sie den Referenzoperator, so dass es keine Widersprüche gibt:

 A  a;                     // воздаём объект
 A& aref;                  // создаём неинициализированную ссылку

 &aref = &a;                // присваиваем ссылку на a
 bool equalref = &aref==&a; // сравниваем ссылки

 aref = a;                  //вызываем оператор=()
 bool equal = aref==a;      // вызываем оператор==()

Alles in allem sollten wir, falls die Entwickler jemals MQL6 konzipieren, in diese Richtung gehen. Die Bindung an C++ macht keinen Sinn mehr, weil sie nicht dem Konzept der Sprache entspricht.

 
A100:
Welches ist das letzte Update, das Sie haben?

Sowohl MetaTrader als auch MetaEditor Build 1159 (Windows 10 32 bit). Auf einem großen PC (64 Bit) bin ich mir nicht sicher, was MetaEditor angeht, aber MetaTrader hat definitiv Build 1159.
 
A100:
Welches ist das letzte Update, das Sie haben?

Ich habe 1150. Ich kann das Upgrade auf die spätere 1159 nicht sehen.
 
Gennadiy Stanilevych:
Ich habe 1150. sieht keine Updates auf die spätere 1159
Sie müssen sich mit dem MetaQuotes-Demo-Server verbinden, um die neuesten Updates zu erhalten.
 
A100:
MetaQuotes-Demo ist von Interesse, da wir früher 2-3 Mal pro Monat Updates erhielten. Es liegt auf der Hand, dass die Makler viel seltener Aktualisierungen vornehmen.
Karputow Wladimir:
Sie müssen sich mit dem MetaQuotes-Demo-Server verbinden, um die neuesten Updates zu erhalten.

Einverstanden, aktualisiert über MetaQuotes-Demo, immer noch 1150! Und das Terminal informierte mich mehrmals, dass die Updates heruntergeladen wurden und bot einen Neustart an, immer noch 1150.

Ok, ich habe das Distributionspaket von http://www.metatrader5.com/ru/download heruntergeladen, ein Demokonto auf MetaQuotes-Demo eröffnet, das Terminal mehrmals aus- und eingeschaltet - 1150! UAC deaktiviert, Windows 7 SP1 - 64

Скачать MetaTrader 5
Скачать MetaTrader 5
  • www.metatrader5.com
Скачать торговый терминал MetaTrader 5 для комфортной и успешной работы на финансовых рынках. Терминал обладает внушительными торговыми и аналитическими возможностями и является одним из лучших в мире
 

Ich werde die Frage wiederholen, da niemand sie beantwortet hat und sie wegen der hitzigen Diskussion über OOP untergegangen ist. Diese Frage ist wirklich wichtig: Handelt es sich um einen Fehler oder eine Funktion? Ich habe es auf MT4 bemerkt.

Ich bin auf eine Situation gestoßen, in der sich die externe Variable während der Ausführung des Programms ändert, aber wenn ich den Zeitrahmen ändere, nimmt sie wieder den Wert an, den ich im Eigenschaftenfenster eingestellt habe. Wenn ich z.B. vor dem Start TradeEnable auf EnableAll setze und den Wert während der Programmausführung auf EnableBuy ändere, wird der Wert wieder auf EnableAll zurückgesetzt, wenn der Chart zu einem anderen Zeitrahmen wechselt. Der Wert, den ich im Timer-Ereignis definiere und über Comment ausgeben lasse, kann keinen Fehler darstellen.

enum ETradeEnable {EnableAll, EnableBuy, EnableSell, DisableAll};
extern ETradeEnable TradeEnable = EnableAll;

Die Variable TradeEnable wird durch das Umschalten zwischen den Charts nicht beeinflusst. Lesen Sie die Hilfe - Im Gegensatz zu Eingabevariablen können die Werte von externen Variablen während der Programmausführung programmatisch geändert werden.

So sind OnDeinit und OnInit aufgebaut.

Frage: Ich verstehe etwas nicht oder ist die Änderung von TradeEnable ein Laufzeitfehler?

int LastDeinitReason = 0;

void OnDeinit(const int reason)
{
    LastDeinitReason = reason;
    if(reason==REASON_CHARTCHANGE || reason==REASON_TEMPLATE || reason==REASON_PARAMETERS)
        return;
    EventKillTimer();
// далее код при завершении работы советника
}

int OnInit()
{
    if(LastDeinitReason==REASON_CHARTCHANGE || LastDeinitReason==REASON_TEMPLATE)
    {
        LastDeinitReason = 0;
        return(INIT_SUCCEEDED);
    }
    if(LastDeinitReason==REASON_PARAMETERS)
    {
        SetParams();
        return(INIT_SUCCEEDED);                              
    }
// далее код инициализации при запуске
}
 
Karputov Vladimir:
Sie müssen sich mit dem MetaQuotes-Demo-Server verbinden, um die neuesten Updates zu erhalten.
Dies ist nicht hilfreich. Ich habe sogar MT5 demoliert. Ich habe die Demo auf MetaQuotes geöffnet. Immer noch 1150.
 
Gennadiy Stanilevych:
Das ist nicht hilfreich. Ich habe sogar MT5 abgeschaltet. Eröffnete eine Demo zu Meta-Zitaten. Immer noch 1150.
Es reicht nicht aus, ein Demokonto auf dem MetaQuites-Demo-Server zu eröffnen: Sie müssen sich für das Update auch mit diesem Demokonto verbinden.
 
Karputov Vladimir:
Es reicht nicht aus, ein Demokonto auf dem MetaQuites-Demo-Server zu eröffnen: Sie müssen sich für das Update auch mit diesem Demokonto verbinden.

Natürlich habe ich eine Verbindung hergestellt. Starten Sie dann das Terminal erneut. Es werden immer noch keine Aktualisierungen angezeigt.

Dateien:
20150826.log  7 kb
 
Gennadiy Stanilevych:

Natürlich habe ich eine Verbindung hergestellt. Starten Sie dann das Terminal erneut. Es werden immer noch keine Aktualisierungen angezeigt.

Seltsam (ich habe mir die Protokolldatei angesehen). Aus Erfahrung - wenn es Updates gibt, dann nach dem Verbinden buchstäblich innerhalb von drei Sekunden beginnt das Herunterladen.

Grund der Beschwerde: