Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 139

 
fxsaber:

Questa opzione non funziona

Ho corretto il codice, ora è ok.
 
Alexey Navoykov:
Ho corretto il codice, ora è tutto ok.

Qualcosa che hai postato con un errore, dato che non compila affatto.

 
fxsaber:

Qualcosa che hai postato con un errore, dato che non compila affatto.

Sì, è un errore di battitura, l'ho corretto.
 
Alexey Navoykov:
Sì, è un errore di battitura, corretto.

Grazie, funziona. Resta da vedere l'effetto sulle prestazioni.

 
Per coloro che usano risorse dinamiche (per esempio Kanvas), consiglio di accelerare i popolamenti di array in questo modo

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

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));
}
Accelerazione di decine di percentuali.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

fxsaber, 2019.07.09 19:40

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

Versione di rilascio in esecuzione. Ottimizzazione abilitata.


Trovato la dimensione ottimale dell'array statico per esperienza

#define  ARRAY_SIZE 256
 
fxsaber:
Per coloro che usano risorse dinamiche (per esempio, Kanvas), consiglio di accelerare il riempimento degli array nel modo seguente
Un'accelerazione di decine di percento.


Ho trovato la dimensione ottimale di un array statico attraverso la sperimentazione.

E se lo confrontate conArrayFill di mql5, ci sarà un guadagno di velocità o no?

 

Non ho letto tutto il topic, forse c'è una risposta a questa domanda, MT5 non si comporta in modo comprensibile con gli oggetti grafici. Il terminale è chiuso per qualche tempo e gli oggetti rimangono attaccati a qualche punto oscuro, come ci si comporta? Non è difficile da fare in quei casi in cui una finestra del grafico è aperta. Personalmente aggiungo una transizione a OnDeinit in OnInit(), ma se la finestra è dotata di segnalibri non risolve il problema. Forse qualcuno ci dirà dove possiamo "dare voce" ai suggerimenti ai creatori di MT5.

.

 
Alexander Lasygin:

Non ho letto tutto il topic, forse c'è una risposta a questa domanda, MT5 non si comporta comprensibilmente con gli oggetti grafici, il terminale è chiuso per qualche tempo e gli oggetti rimangono attaccati a qualche punto oscuro. Come si affronta questo? Non è difficile da fare in quei casi in cui una finestra del grafico è aperta. Personalmente aggiungo una transizione a OnDeinit in OnInit(), ma se la finestra è dotata di segnalibri non risolve il problema. Forse qualcuno ci dirà dove possiamo "dare voce" ai suggerimenti ai creatori di MT5.

.

Fornire dati esatti da riprodurre: per esempio un modello di grafico con oggetti.

Ho il sospetto che gli oggetti siano disegnati dall'indicatore, ed è l'indicatore che traccia erroneamente prev_calculato.

 
Konstantin:

e se lo si confronta conArrayFill di mql5, ci sarà un guadagno di velocità o no?

Non credo che ci sarà.

 
fxsaber:

Non credo che sarà così.

quindi perché reinventare il proprio lisepad quando c'è già una funzione produttiva?

Motivazione: