Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 139

 
fxsaber:

Diese Option funktioniert nicht

Ich habe den Code korrigiert, jetzt ist alles in Ordnung.
 
Alexey Navoykov:
Ich habe den Code korrigiert, jetzt ist alles in Ordnung.

Etwas, das Sie mit einem Fehler gepostet haben, da es sich überhaupt nicht kompilieren lässt.

 
fxsaber:

Etwas, das Sie mit einem Fehler gepostet haben, da es sich überhaupt nicht kompilieren lässt.

Ja, das ist ein Tippfehler, ich habe ihn korrigiert.
 
Alexey Navoykov:
Ja, das ist ein Tippfehler. Korrigiert.

Danke, es funktioniert. Es bleibt abzuwarten, wie sich dies auf die Leistung auswirkt.

 
Für diejenigen, die dynamische Ressourcen verwenden (z. B. Kanvas), empfehle ich, die Array-Populationen auf folgende Weise zu beschleunigen

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2019.07.09 18:36

void FillArray1( int &Array[] )
{
  const int Size = ArraySize(Array);
  
  for (int i = 0; i < Size; i++)
    Array[i] = i;
}

#define  ARRAY_SIZE 10000

void FillArray2( int &Array[] )
{
  int ArrayStatic[ARRAY_SIZE];
  
  const int Size = ArraySize(Array);
  
  for (int i = 0; i < Size;)
  {
    const int Size2 = i + ARRAY_SIZE < Size ? ARRAY_SIZE : Size - i;
    
    for (int j = 0; j < Size2; j++)
      ArrayStatic[j] = i++;
      
    if (Size2)
      ArrayCopy(Array, ArrayStatic, i - Size2, 0, Size2);
  }
}

#define  BENCH(A)                                                               \
{                                                                              \
  const ulong _StartTime = GetMicrosecondCount();                              \
  A;                                                                           \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - _StartTime)); \
}

void OnStart()
{
  int Array1[];
  ArrayResize(Array1, 1 e7);

  int Array2[];
  ArrayResize(Array2, 1 e7);
  
  BENCH(FillArray1(Array1));
  BENCH(FillArray2(Array2));
}
Beschleunigung um mehrere zehn Prozent.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2019.07.09 19:40

Time[FillArray1(Array1)] = 39501
Time[FillArray2(Array2)] = 30304

Freigabeversion läuft. Optimierung aktiviert.


Optimale statische Array-Größe durch Erfahrung gefunden

#define  ARRAY_SIZE 256
 
fxsaber:
Für diejenigen, die dynamische Ressourcen verwenden (z. B. Kanvas), empfehle ich, das Füllen von Arrays auf folgende Weise zu beschleunigen
Eine Beschleunigung um mehrere zehn Prozent.


Ich habe die optimale Größe eines statischen Arrays durch Experimentieren herausgefunden.

Und wenn Sie es mitArrayFill aus mql5 vergleichen, wird es einen Geschwindigkeitsgewinn oder nicht?

 

Ich habe nicht das ganze Thema gelesen, vielleicht gibt es eine Antwort auf diese Frage, MT5 verhält sich nicht verständlich mit grafischen Objekten, das Terminal ist für einige Zeit geschlossen und die Objekte bleiben an irgendwelchen obskuren Punkten hängen. Wie geht man damit um? Das ist nicht schwer zu bewerkstelligen, wenn ein Diagrammfenster geöffnet ist. Ich persönlich füge einen Übergang zu OnDeinit in OnInit() hinzu, aber wenn das Fenster mit einem Lesezeichen versehen ist, löst das das Problem nicht. Vielleicht kann uns jemand sagen, wo wir den Entwicklern von MT5 unsere Vorschläge unterbreiten können.

.

 
Alexander Lasygin:

Ich habe nicht das ganze Thema gelesen, vielleicht gibt es eine Antwort auf diese Frage, MT5 verhält sich nicht verständlich mit grafischen Objekten, das Terminal ist für einige Zeit geschlossen und die Objekte bleiben an irgendwelchen obskuren Punkten hängen. Wie geht man damit um? Das ist nicht schwer zu bewerkstelligen, wenn ein Diagrammfenster geöffnet ist. Ich persönlich füge einen Übergang zu OnDeinit in OnInit() hinzu, aber wenn das Fenster mit einem Lesezeichen versehen ist, löst das das Problem nicht. Vielleicht kann uns jemand sagen, wo wir den Entwicklern von MT5 unsere Vorschläge unterbreiten können.

.

Geben Sie genaue Daten an, die Sie reproduzieren wollen: z. B. eine Diagrammvorlage mit Objekten.

Ich vermute, dass die Objekte vom Indikator gezeichnet werden und dass der Indikator prev_calculated nicht korrekt verfolgt.

 
Konstantin:

und wenn Sie es mitArrayFill aus mql5 vergleichen, wird es einen Geschwindigkeitsgewinn oder nicht?

Ich glaube nicht, dass das der Fall sein wird.

 
fxsaber:

Ich glaube nicht, dass das der Fall sein wird.

Warum also ein eigenes Lisepad neu erfinden, wenn es bereits eine produktive Funktion gibt?