Fehler, Irrtümer, Fragen - Seite 2815

 

Fehler bei der Ausführung:

class A {
public:
        A( int ) { Print( 1 ); }
        A( A&  ) { Print( 2 ); }
};
void OnStart()
{       
        int a = 5;
        {
                A a( a );         //(1)
        }
}

  • Ergebnis in MQL: 2
  • Erwartet in MQL: 1

Tatsächlich wird dieses Beispiel durch C++-Regeln ausgeführt

void OnStart()
{
        int a = 5;
        {
                A a( a );         //(2)
        }
}

während das folgende Beispiel in MQL nach dessen (von C++ verschiedenen) Regeln funktioniert

void OnStart()
{       
        int a = 5;
        {
                int a = a;         //(3)
                printf( "%d", a );
        }
}

  • Ergebnis (3) in MMS: 5
  • in C++: 0 (oder Zufallszahl)

Eine Variable wird entweder als deklariert angesehen

  • ab dem Zeitpunkt des Erscheinens (*), oder
  • seit dem Ende der Erklärung (**)

In С++ gibt es einen einzigen (*) Ansatz, während es in MQL im Fall von (2) (*) und im Fall von (3) (**) ist. Was ist der grundlegende Unterschied zwischen (2) und (3)?

Dies ist die Frage, warum in MQL in einem Fall eine Variable als deklariert gilt, sobald sie erscheint, und im anderen Fall, sobald die Deklaration beendet ist?

 

Kompilierungsfehler:

#import "z.ex5"
#import
#define  MACRO1( x )    (x) //(*)
#define  MACRO2( x )    MACRO1(x)
int f( int z )
{
        return MACRO2( z ); //Error: '()' - operand expected
}

Ansonsten:

#define  MACRO1( x )    x  //(**)

GUT. Was ist der Unterschied zwischen (*) und (**)?

 
Fast235:

Ich kann den Verlauf nicht in einem leeren Terminal oder in einem zuvor nicht verwendeten Symbol laden

Wenn ich ihn auf M1 laufen lasse, lädt er alles, auf H1 lädt er ~720 Balken und das war's, der Indikator braucht viel weniger, um zu funktionieren, aber das Laden weiterer Balken hört auf und der Indikator rendert nicht korrekt(wenn ich etwa 900 Balken überprüfe, funktioniert der Indikator überhaupt nicht mehr),

.....

Ich habe das Skript vonhttps://www.mql5.com/ru/docs/series/timeseries_access angehängt, ich wollte es lange Zeit nicht verwenden, weil es zu umständlich war. Ich habe es dem Indikator hinzugefügt, ein paar Zeilen hinzugefügt und es funktioniert gut,

Dieses Skript ist gut durchdacht und leicht in einen Handelsroboter zu integrieren. Es ist ein Muss für Multicurrency und Multitime Timeframes! Da es je nach den Arbeitsindikatoren nicht lädt oder einfriert,

Das Gleiche kann man auch mit Standard-MA bekommen, aber wegen seiner Besonderheiten usw. werden viele Leute es nicht bemerken und einfach den Chart oder die Periode ändern, und dann wird es neu geladen.

Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
  • www.mql5.com
Прежде чем ценовые данные будут доступны в терминале MetaTrader 5, их необходимо получить и обработать. Для получения данных требуется подключение к торговому серверу MetaTrader 5. Данные поступают с сервера по запросу терминала в виде экономно упакованных блоков минутных баров. Механизм обращения к серверу за данными не зависит от того, каким...
 
Guten Tag, der MT5 auf Android 4.4 hat aufgehört, sich zu aktualisieren. Ich kann die App nicht einmal öffnen. Falls jemand auf dieses Problem gestoßen ist, wäre ich für Hilfe dankbar.
Ich danke Ihnen!
 
fxsaber:

Sie können über Expert.mqh in OnTesterInit abgerufen werden, da der Expert Advisor im Frame-Modus läuft, um die Parameter zu setzen.

Der Aufruf von EXPERT::Parameters hat aus irgendeinem Grund den Typ String. Ist dies ein Fehler oder eine Einschränkung?

 
Stanislav Korotky:

Als Ergebnis des Aufrufs von EXPERT::Parameters sind alle Parameter aus irgendeinem Grund vom Typ String. Ist dies ein Fehler oder eine Einschränkung?

Ein besseres Beispiel.

 
Andrey:
Guten Tag, der MT5 auf Android 4.4 hat aufgehört, sich zu aktualisieren. Ich kann die App nicht einmal öffnen. Falls jemand schon einmal damit in Berührung gekommen ist, wäre ich für Hilfe dankbar.
Ich danke Ihnen!

Das Minimum ist Android5, darüber haben die Entwickler kürzlich geschrieben.

 
fxsaber:

Ein Beispiel wäre besser.

Nun, das Beispiel ist Standard für diese Methode, sozusagen:

    EXPERT::Parameters(0, parameters, names);
    for(int i = 0; i < ArraySize(parameters); i++)
    // здесь parameters[i].type всегда равно TYPE_STRING, вне зависимости от фактического типа параметра

Dies geht auch aus dem Quellcode der Expert.mqh-Bibliothek selbst hervor.

PS. Die Diskussion wurde auf das Thema Bibliothek verschoben.

 

Ein weiterer Fehler mit ParameterGetRange/ParameterSetRange.

Der Aufruf vonParameterSetRange ändert nicht das Kennzeichen zur Einbeziehung des Parameters in die Optimierung für den nachfolgendenParameterGetRange-Aufruf:

// параметр "name" изначально включен в оптимизацию
// в одной части кода...
ParameterSetRange("name", false, value, start, step, stop);
...
// в другой части кода финализация проверок
ParameterGetRange("name", enabled, value, start, step, stop); // получаем enabled=true, т.е. изменения внесенные ParameterSetRange не применились
 
Stanislav Korotky:

Ein weiterer Fehler mit ParameterGetRange/ParameterSetRange.

Ein Aufruf von ParameterSetRange ändert nicht das Kennzeichen zur Einbeziehung des Parameters in die Optimierung für den nachfolgenden Aufruf vonParameterGetRange:

Ich erinnere mich, als ich mich mit diesem Thema befasste, gab es eine Menge Nuancen. Je nach der Funktion OnTester* wurde etwas richtig oder falsch angezeigt. Versuchen Sie, es in verschiedenen On-Funktionen aufzurufen.

Grund der Beschwerde: