Symboles personnalisés. Erreurs, bogues, questions, suggestions. - page 26

 
Roman:

Merci, maintenant je sais quelle est la raison.
Le pas de la minuterie du système est toujours un multiple de 15.625

Ajouté.
Mais j'ai changé la période de la minuterie du système de la fonction wine api timeBeginPeriod(1)
c'est-à-dire que le timer du système est maintenant incrémenté à 1 milliseconde.
Et le pas de la minuterie du système devrait être de 1 milliseconde, non ?
Pourquoi le compteur dans le commentaire reste-t-il figé ?
https://rsdn.org/forum/winapi/4159851.1
 
Et sous Linux sous Wine, le compteur dans le commentaire fonctionne sans problème, même avec EventSetMillisecondTimer(1) ;
Mais la charge sur le processeur augmente jusqu'à 40%, avec huit threads de processeur.
En général, le sujet est clos, hors sujet ;))
 
Roman:
Et sous Linux sous Wine, le compteur dans le commentaire fonctionne sans problème, même avec EventSetMillisecondTimer(1) ;
. Mais la charge CPU augmente jusqu'à 40%, avec huit threads CPU.

C'est de ça que je parle...
Pourquoi 64 fois par seconde ?
Je pense que cela permet d'afficher toutes sortes d'informations à l'écran. C'est assez de fréquence. Il n'y a aucun intérêt à l'afficher plus souvent, et cela coûterait trop cher.
Je me demande siOnChartEvent, OnCalculate et OnTick sont également déclenchés 64 fois par seconde. - Je le pense, oui.

 
Nikolai Semko:

C'est de ça que je parle...
Pourquoi 64 fois par seconde ?
Je pense que cela permet d'afficher toutes sortes d'informations à l'écran. C'est assez de fréquence. Il n'y a aucun intérêt à l'afficher plus souvent, et cela coûterait trop cher.
Je me demande si OnChartEvent, OnCalculate et OnTick sont également générés 64 fois par seconde.

Le problème n'était pas le chargement, mais les capacités du gestionnaire OnTimer()
. Il s'avère que Windows limite ces capacités, alors que Linux ne les limite pas.

Question, OnChartEvent, OnCalculate et OnTick ne sont pas générés plus de 64 fois par seconde également ?
Il est probablement préférable d'attendre une réponse du développeur.

 
Roman:

À la question, est-ce que OnChartEvent, OnCalculate et OnTick sont également générés pas plus de 64 fois par seconde ?
Il est probablement préférable d'attendre une réponse du développeur.

Vérifié OnChartEvent avec la souris.
J'ai obtenu la fréquence maximale de 124 hertz. Pas plus. Je me demande pourquoi ce n'est pas 128.

Dossiers :
 
Nikolai Semko:

J'ai vérifié le OnChartEvent avec la souris.
La fréquence maximale est de 124 hertz. Pas plus que ça. C'est étrange que ce ne soit pas 128.

J'ai changé un peu l'algorithme. Je n'ai pas tenu compte du fait que ce commentaire prend beaucoup de temps. J'ai 127 Hz.
C'est déjà logique. L'erreur de 1 Hz peut déjà être expliquée par le programme lui-même, il s'agit donc d'une erreur de 128.

La fréquence maximale de OnChartEvent est donc de 128 Hz.

Dossiers :
 
Est-il possible d'obtenir un spread synthétique en utilisant MQL5 ?
Il y a un écart sur les produits synthétiques dans le terminal lui-même.
 
Aidas Geguzis:
Est-il possible d'obtenir un spread synthétique en utilisant MQL5 ?
Il y a un écart sur les produits synthétiques dans le terminal lui-même.

Pour les programmes tiers, les symboles personnalisés sont très peu différents des symboles originaux. Il ne devrait donc y avoir aucun obstacle.

 
Si un instrument personnalisé est créé via l'interface du terminal et que le symbole personnalisé a une valeur négative
Dans l'interface du symbole personnalisé, vous devez autoriser les prix négatifs.
Si vous ne spécifiez pas ce paramètre, l'historique n'est pas calculé pour le symbole créé et le graphique est affiché uniquement à partir du moment présent.
Pendant longtemps, je n'ai pas compris la raison pour laquelle l'historique n'est pas calculé, car le journal n'affiche pas l'avertissement indiquant que les prix négatifs doivent être activés.
Il serait bon d'avoir un tel avertissement dans le journal.
 

L'ajout de ticks un à un (en particulier de EURUSD sur MQ Demo) à un nouveau symbole personnalisé vide donne l'erreur 5310 (pas immédiatement, mais dans une boucle à partir d'une date arbitraire).

input int Limit = 10000;
input datetime Start = D'2020.06.01';

int fillArray(ulong &_start)
{
  MqlTick array[];
  int size = CopyTicks(_Symbol, array, COPY_TICKS_ALL, _start, Limit);
  if(size > 0)
  {
    _start = array[size - 1].time_msc + 1;
    if(CustomTicksAdd(symbolName, array) == -1)
    {
      Print("Error:", GetLastError());
      return -1;
    }
  }
  return size;
}

...
{
  ulong startMsc = (ulong)Start * 1000;
  while(fillArray(startMsc) > 0);
}

Qu'est-ce qu'il y a ? Comment puis-je savoir quelles tiques spécifiques sont grondées ? Les tableaux de sortie vers le journal - pas de violation de la chronologie ici.

Raison: