Caractéristiques du langage mql5, subtilités et techniques - page 139

 
fxsaber:

Cette option ne fonctionne pas

J'ai corrigé le code, maintenant c'est bon.
 
Alexey Navoykov:
J'ai corrigé le code, tout est ok maintenant.

Quelque chose que vous avez posté avec une erreur, car il ne compile pas du tout.

 
fxsaber:

Quelque chose que vous avez posté avec une erreur, car il ne compile pas du tout.

Oui, c'est une faute de frappe. Je l'ai corrigée.
 
Alexey Navoykov:
Oui, c'est une faute de frappe. Corrigé.

Merci, ça marche. Reste à voir l'effet sur les performances.

 
Pour ceux qui utilisent des ressources dynamiques (par exemple, Kanvas), je recommande d'accélérer les populations de tableaux de la manière suivante

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Bugs, bugs, questions

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));
}
Accélération de quelques dizaines de pour cent.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Bugs, bugs, questions

fxsaber, 2019.07.09 19:40

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

Version en cours d'exécution. Optimisation activée.


Trouver la taille optimale des tableaux statiques par expérience

#define  ARRAY_SIZE 256
 
fxsaber:
Pour ceux qui utilisent des ressources dynamiques (par exemple, Kanvas), je recommande d'accélérer le remplissage des tableaux de la manière suivante
Une accélération de quelques dizaines de pour cent.


J'ai trouvé la taille optimale d'un tableau statique par l'expérimentation.

Et si vous le comparez avecArrayFill de mql5, y aura-t-il un gain de vitesse ou pas ?

 

Je n'ai pas lu tout le sujet, peut-être y a-t-il une réponse à cette question, MT5 ne se comporte pas de manière compréhensible avec les objets graphiques, le terminal est fermé pendant un certain temps et les objets restent attachés à certains points obscurs. Comment gérez-vous cela ? Ce n'est pas difficile à faire dans les cas où une fenêtre graphique est ouverte. Personnellement, j'ajoute une transition à OnDeinit dans OnInit(), mais si la fenêtre est marquée d'un signet, cela ne résout pas le problème. Peut-être quelqu'un nous dira-t-il où nous pouvons "exprimer" nos suggestions aux créateurs de MT5.

.

 
Alexander Lasygin:

Je n'ai pas lu tout le sujet, peut-être y a-t-il une réponse à cette question, MT5 ne se comporte pas de manière compréhensible avec les objets graphiques. Le terminal est fermé pendant un certain temps et les objets restent attachés à certains points obscurs. Comment gérez-vous cela ? Ce n'est pas difficile à faire dans les cas où une fenêtre graphique est ouverte. Personnellement, j'ajoute une transition à OnDeinit dans OnInit(), mais si la fenêtre est marquée d'un signet, cela ne résout pas le problème. Peut-être quelqu'un nous dira-t-il où nous pouvons "exprimer" nos suggestions aux créateurs de MT5.

.

Fournir des données exactes à reproduire : par exemple, un modèle de graphique avec des objets.

Je soupçonne que les objets sont dessinés par l'indicateur, et que c'est l'indicateur qui suit incorrectement prev_calculated.

 
Konstantin:

et si vous le comparez àArrayFill de mql5, y aura-t-il un gain de vitesse ou pas ?

Je ne pense pas qu'il y en aura.

 
fxsaber:

Je ne pense pas que ce sera le cas.

alors pourquoi réinventer votre propre lisepad quand il existe déjà une fonction productive ?