Fehler, Irrtümer, Fragen - Seite 2206

 
Alexander Nikolaev:
Wer weiß, warum ich nicht auf kürzlich erstellte Demokonten, die direkt im MT4 Terminal erstellt wurden, auf dem Metaquotes Demo Server zugreifen kann? Ich habe vor einer Woche eine erstellt. Die ersten 2 Tage funktioniert es, aber nach einiger Zeit verschwindet das Konto, als ob das Passwort falsch ist (obwohl es kopiert wurde, konnte ich es nicht falsch eingeben) und ich muss das Konto erneut öffnen, um den Expert Advisor zu testen. Ist es wirklich notwendig, jede Woche ein neues Konto anzulegen?
das ist schon lange so, wenn es keine Aktivität auf dem Konto gibt, wird es geschlossen. erstellen Sie ein neues und machen Sie sich keine Sorgen.
 
Denis Sartakov:

Ich habe vor kurzem eine solche Funktion geschrieben, also probieren Sie es selbst aus,

Wenn es nicht funktioniert, werde ich es erklären.

danke

 

eine weitere Frage:

die Beschreibung vonCHART_IS_MAXIMIZED undCHART_IS_MINIMIZED sagt nicht, dass diese Eigenschaften schreibgeschützt sind, aber ChartSetInteger(ChartID(),CHART_IS_MAXIMIZED,true); funktioniert nicht, was könnte das Problem sein???

 

Warum lässt es sich nicht kompilieren?

template <typename T>
void f(T &t)
{
   t.f();
}

void OnStart()
{
   class Q
   {
   public:
      void f() {}
   }q;
   
   f(q);
}

Ältere Versionen des Compilers aßen solche Konstrukte gut, nahmen gültigen früheren Code neu zu kompilieren und Fehler. Handelt es sich um einen Unfall oder ist er absichtlich abgebrochen?

 
pavlick_:

Warum lässt es sich nicht kompilieren?

Ältere Versionen des Compilers kamen mit solchen Konstrukten gut zurecht, ich habe vorher gültigen Code neu kompiliert und es gibt einen Fehler. Handelt es sich um einen Unfall oder ist er absichtlich abgebrochen?

aber können wir gemäß der Sprachspezifikation Klassen innerhalb von Funktionen erstellen?

 
Konstantin:

aber können Sie gemäß der Sprachspezifikation Klassen innerhalb von Funktionen erstellen?

Welche Sprachspezifikation? Mcl ist überhaupt nicht gut dokumentiert, während es in C++ normale Praxis ist, von der Referenz:

Lokale Klassen

Eine Klassendeklaration kann im Namespace-Bereich erscheinen (in diesem Fall definiert sie eine gewöhnliche Klasse), innerhalb einer anderen Klassendefinition (in diesem Fall definiert sie eine verschachtelte Klasse) und innerhalb des Körpers einer Funktion, in diesem Fall definiert sie eine lokale Klasse. Der Name einer solchen Klasse existiert nur innerhalb des Funktionsbereichs und ist außerhalb nicht zugänglich.

http://en.cppreference.com/w/cpp/language/class

 

Die Antwort ist wie immer Schweigen. Eigentlich ist es einfach, das Problem zu umgehen - statt elegant Platzierung innerhalb der Funktion, habe ich es außerhalb mit einschüchternden Namen internal__Chart_bar_shift_Comp. Aber der Punkt ist ein anderer - sie haben gerade ein solches Konstrukt geschnitten. Das heißt, es gibt keine Garantie, dass mein Code morgen kompiliert werden kann. Sie können irgendwie mit Schlüsseln den Dialekt auswählen, zum Beispiel -std=mql18. Aber nein, ich kümmere mich nicht um die Abwärtskompatibilität. Es fällt mir schwer, mir vorzustellen, dass dies bei einigen gcc möglich ist.

Ich denke, ein einfaches Skripting mql4 war für eine Handelsplattform völlig ausreichend. Oder noch besser, importieren Sie Plugins (in dynamische Bibliotheken) mit Skripten/Experten. Aber nein, Sie brauchen Ihre eigene, wie man hier oft sagt, "Infrastruktur", in der Sie groß und wichtig sind.

 
pavlick_:

Nach welcher Sprachspezifikation? Mcl ist überhaupt nicht gut dokumentiert, aber in C++ ist es normale Praxis, aus dem Referenzbuch:

Lokale Klassen

Eine Klassendeklaration kann im Namespace-Bereich erscheinen (in diesem Fall definiert sie eine gewöhnliche Klasse), innerhalb einer anderen Klassendefinition (in diesem Fall definiert sie eine verschachtelte Klasse) und innerhalb des Körpers einer Funktion, in diesem Fall definiert sie eine lokale Klasse. Der Name einer solchen Klasse existiert nur innerhalb des Funktionsbereichs und ist außerhalb nicht zugänglich.

http://en.cppreference.com/w/cpp/language/class

Ich bin irgendwo auf eine Diskussion gestoßen, dass es in der Mql5-Spezifikation nicht vorgesehen ist. Schauen Sie im Forum nach, dort gab es auch eine Diskussion über Lambas, dass sie nicht vorgesehen sind.

 
pavlick_:

Die Antwort ist wie immer Schweigen. Eigentlich ist es einfach, das Problem zu umgehen - statt elegant Platzierung innerhalb der Funktion, habe ich es außerhalb mit einschüchternden Namen internal__Chart_bar_shift_Comp. Aber der Punkt ist ein anderer - sie haben gerade ein solches Konstrukt geschnitten. Das heißt, es gibt keine Garantie, dass mein Code morgen kompiliert werden kann. Sie könnten z. B. mit Schlüsseln den Dialekt auswählen -std=mql18. Aber nein, ich kümmere mich nicht um die Abwärtskompatibilität. Ich kann mir kaum vorstellen, dass das in irgendeinem gcc möglich ist.

Wahrscheinlich war ein einfaches mql4-Skript für eine Handelsplattform völlig ausreichend. Oder besser - importieren Sie Plugins (in dynamische Bibliotheken) mit Skripten/Experten. Aber nein, Sie brauchen Ihre eigene, wie man hier oft sagt, "Infrastruktur", in der Sie groß und wichtig sind.

Um ehrlich zu sein, verstehe ich nicht, warum sie das tun. Es ist einfacher, alle Hilfseinheiten in einem separaten Verzeichnis des Quellcodes unterzubringen, zum Beispiel util.mqh

 
Konstantin:

Um ehrlich zu sein, verstehe ich nicht, warum es einfacher ist, alle Hilfseinheiten in ein separates Verzeichnis des Quellcodes zu stellen, zum Beispiel util.mqh

Dies ist ein Prädikat für die binäre Suche, die nicht universell ist und nur einmal in einer Funktion verwendet wird, warum sollte ich es irgendwo unterbringen? Wir haben z.B. ein Array von Strukturen (kein Vergleichsoperator, sie können nicht unbeholfen mit < verglichen werden, oder die Vergleichsbedingung ist sehr knifflig), und wir wollen ein Element durch binäre Suche finden. In der plus-Bibliothek nehmen die Algorithmusfunktionen einen Funktor (der praktischerweise als Lambda übergeben wird), innerhalb dessen wir Array-Elemente vergleichen. Meiner Meinung nach eine sehr elegante Lösung.

int main()
{
    typedef pair<int, double> myPair; // typedef to shorten the type name
    vector <myPair> vec(5);

    myPair low_val; // reference value (set this up as you want)
    auto it = lower_bound(vec.begin(), vec.end(), low_val, 
        [](myPair lhs, myPair rhs) -> bool { return lhs.second < rhs.second; });
}

Aufgrund der Einschränkungen von µl wurde jedoch eine Instanz der Prädikatsklasse erstellt.