Fehler, Irrtümer, Fragen - Seite 2931

 

Bei 10 wird der Speicherverbrauch des Terminals als hoch eingestuft. Unter Windows Server sind es viel weniger.

Offenbar hängt die Berechnung des Speicherverbrauchs vom Betriebssystem ab.

 
fxsaber:

Das ist die Art von Merkmal, bei der man, selbst wenn man sie kennt, die ganze Ebene noch einmal im Kopf durchgehen muss.

Hier habe ich eine Selbstauskunft über die Anwesenheit abgegeben. Es schien zu funktionieren, wenn man die TFs wechselte.

Ich habe mich nicht wirklich damit befasst, aber nach diesen Zeilen zu urteilen:

    const int Total = ::IndicatorParameters(handle, Type, Params);
    ::IndicatorRelease(handle);

    uchar Bytes[];

    for (int i = 1; i < Total; i++)
    {
      ::ArrayCopy(Bytes, _R(Params[i].double_value).Bytes, ::ArraySize(Bytes));
      ::ArrayCopy(Bytes, _R(Params[i].integer_value).Bytes, ::ArraySize(Bytes));
      ::ArrayCopy(Bytes, _R(Params[i].string_value).Bytes, ::ArraySize(Bytes));
    }

Der Indikatorname (im 0. Parameter) wird bei der Erstellung der Signatur nicht verwendet, was recht merkwürdig ist.

 
fxsaber:

Bei 10 wird der Speicherverbrauch des Terminals als hoch eingestuft. Unter Windows Server sind es viel weniger.

Offenbar hängt die Berechnung des Speicherverbrauchs vom Betriebssystem ab.

Vielmehr ist die Speicherreservierung auf den Server-Achsen optimaler.
 
Stanislav Korotky:

Ich habe mich nicht wirklich damit befasst, aber nach diesen Zeilen zu urteilen:

der Name des Indikators (in Parameter 0) wird bei der Erstellung der Signatur nicht verwendet, was recht merkwürdig ist.

return("::" + (string)::ChartID() + (string)INIT_SYNC::crc64(Bytes) + ::MQLInfoString(MQL_PROGRAM_NAME));
 
fxsaber:

Ja, ich bin darauf gestoßen. Die Validierung beginnt mit dem ersten Durchlauf, die folgenden Durchläufe nicht mehr. Die Starttaste lässt sich nicht betätigen.

Debugged - es läuft. Habe Debugging in der Version durchgeführt, alles ist angeblich in Ordnung, aber es funktioniert nicht.


Jetzt starte ich speziell die Debug-Version. Er drückt die Start-Taste ohne Probleme.

Ich konnte den Grund für den Fehler nicht herausfinden.

Diese Antwort habe ich vor kurzem gesehen.

Soweit ich weiß, sind es meine lokalen Agenten, die nicht starten, warum nicht herausgefunden. In den neuesten Versionen des Terminals scheint es besser zu laufen.

 
fxsaber:

Bei 10 wird der Speicherverbrauch des Terminals als hoch eingestuft. Unter Windows Server sind es viel weniger.

Offensichtlich hängt die Berechnung des Speicherverbrauchs vom Betriebssystem ab.

Ich habe das Gefühl, dass der Server auf Windows Server nicht ganz korrekt ist.

Genauer gesagt, werden die Grafikeinstellungen ständig zurückgesetzt, und das hängt von der Speicherknappheit ab. Gleichzeitig scheint im Dispatcher alles normal zu sein. Entweder ist vpc begrenzt oder mt5 ist gefräßiger.

 
Print(PERIOD_H4);

ergibt ein Ergebnis von 16388. Wie kann ich den umgekehrten Vorgang durchführen: den Wert 16388 ersetzen und eine Zeichenfolge mit dem PeriodennamenPERIOD_H4 erhalten? Gibt es eine eingebaute Funktion oder soll ich einen eigenen Konverter schreiben? Wenn es keine integrierte Funktion gibt, wie würde dann eine benutzerdefinierte Funktion aussehen? Wäre es notwendig, so etwas wie einen Schlüssel-Wert-Abgleich zu schreiben?

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

ergibt ein Ergebnis von 16388. Wie kann ich den umgekehrten Vorgang durchführen: den Wert 16388 ersetzen und eine Zeichenfolge mit dem PeriodennamenPERIOD_H4 erhalten? Gibt es eine eingebaute Funktion oder soll ich einen eigenen Konverter schreiben? Wenn es keine integrierte Funktion gibt, wie würde dann eine benutzerdefinierte Funktion aussehen? Wäre es notwendig, so etwas wie einen Schlüssel-Wert-Abgleich zu schreiben?

Print(EnumToString((ENUM_TIMEFRAMES)16388));
 
fxsaber
Print(EnumToString((ENUM_TIMEFRAMES)16388));

Es stellt sich heraus, dass es eine gibt. Das ist eine Erleichterung. Ich danke Ihnen.

 

Ich versuche, dem Benutzer die Möglichkeit zu geben, beide Zeitrahmen und deren Anzahl aus dem Menü des Indikatoreinrichtungsfensters auszuwählen:

enum PERIOD
  {
   NO_PERIOD=0,      // NOT USED
   P1=PERIOD_H1,     // H1 
   P2=PERIOD_H2,     // H2 
   P3=PERIOD_H4,     // H4 
  };

input PERIOD TIMEFRAME_1=P1;
input PERIOD TIMEFRAME_2=P2;
input PERIOD TIMEFRAME_3=P3;

ENUM_TIMEFRAMES PArray[3]={P1,P2,P3};

und ich möchte, dass die ausgewählten Zeiträume direkt in PArray gespeichert werden. Aus dem obigen Beispiel geht jedoch hervor, dass ich dem Array die im Programm voreingestellten Werte zuweise und nicht die von einem Benutzer eingegebenen Werte. Darüber hinaus erzeugt der Compiler Warnungen:

implicit conversion from 'enum PERIOD' to 'enum ENUM_TIMEFRAMES'        test.mq5        23      28
   'ENUM_TIMEFRAMES::PERIOD_H1' will be used instead of 'PERIOD::P1'    test.mq5        23      28
implicit conversion from 'enum PERIOD' to 'enum ENUM_TIMEFRAMES'        test.mq5        23      31
   'ENUM_TIMEFRAMES::PERIOD_H2' will be used instead of 'PERIOD::P2'    test.mq5        23      31
implicit conversion from 'enum PERIOD' to 'enum ENUM_TIMEFRAMES'        test.mq5        23      34
   'ENUM_TIMEFRAMES::PERIOD_H4' will be used instead of 'PERIOD::P3'    test.mq5        23      34

Wenn ich versuche, die letzte Zeile zu ersetzen durch:

ENUM_TIMEFRAMES PArray[3]={TIMEFRAME_1,TIMEFRAME_2,TIMEFRAME_3};

erzeugt der Compiler insgesamt einen Fehler:

'TIMEFRAME_1' - constant expression required    test.mq5        23      28
'TIMEFRAME_2' - constant expression required    test.mq5        23      40
'TIMEFRAME_3' - constant expression required    test.mq5        23      52

Außerdem bedeutet NO_PERIOD=0PERIOD_CURRENT, und das brauche ich nicht, ich brauche etwas wie false oder EMPTY_VALUE, aber die passen überhaupt nicht.

Wie kann man das beheben?

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5