MT5 et la vitesse en action - page 91

 
Anton:

Le freinage d'ObjectGetInterger est-il la norme ?

 
fxsaber:

Le freinage d'ObjectGetInterger est-il la norme ?

Les méthodes Get sont déjà synchrones, donc elles attendent. Le travail avec les objets se fait par l'intermédiaire d'une file d'attente spéciale de commandes, et non par un accès direct aux objets.

Pour information, il est fortement recommandé de ne pas mélanger les méthodes Set et Get. Il est préférable de mettre au pluriel écrire et ensuite lire. Ou vice versa.

 
Renat Fatkhullin:

Les méthodes Get sont déjà synchrones, elles sont donc en attente. Les objets sont gérés par une file d'attente spéciale de commandes, et non par un accès direct aux objets.

Pour information, il n'est pas recommandé de mélanger les méthodes Set et Get. Il est préférable d'écrire set et ensuite de lire set. Ou vice versa.

J'ai des problèmes avec elle, malheureusement. Montré par le code ci-dessus.

Merci pour les éclaircissements.

 
Ça permet de s'en débarrasser dans certaines situations.

un compte réel.

2021.03.29 17:18:55.280 TradesID_Example (EURUSD,M1)    HistoryDealsTotal() = 99663
2021.03.29 17:18:55.280 TradesID_Example (EURUSD,M1)    HistoryOrdersTotal() = 174307

2021.03.29 17:24:15.862 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID) = 29906412.60837016
2021.03.29 17:24:15.862 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID))] = 320581370 mcs.

2021.03.29 17:24:16.057 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID2) = 29906412.60837016
2021.03.29 17:24:16.057 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID2))] = 195526 mcs.
2021.03.29 17:24:16.170 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID2) = 29906412.60837016
2021.03.29 17:24:16.170 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID2))] = 112839 mcs.

La bibliothèque est ~2500 fois plus rapide que l'implémentation habituelle. Seule une approche alternative permet d'effectuer certains calculs en un temps raisonnable.

 

Pour forcer le terminal à allouer de la mémoire, vous pouvez exécuter ce script

void OnStart()
  {
   short arr[];
   ArrayResize(arr,INT_MAX);
   ArrayInitialize(arr,0);
   Print(ArraySize(arr));
   Sleep(5000);
  }

Adaptez lataille du tableau à la taille de votre RAM

 
Rorschach:

Pour forcer le terminal à allouer de la mémoire, vous pouvez exécuter ce script

Adaptez lataille du tableau à la taille de votre RAM

Quelle est l'idée ?

 
fxsaber:

Quelle est l'idée ?

Apparemment, mettez le terminal dans une pénurie de mémoire et voyez si les mécanismes internes pour le libérer fonctionnent.

 
traveller00:

Apparemment, si vous placez le terminal dans des conditions de pénurie de mémoire, les mécanismes internes de libération de la mémoire fonctionneront.

Oui, le terminal manque de mémoire et commence à réinitialiser les données mises en cache.

 

Une situation hors norme s'est présentée. L'Expert Advisor prend une capture d'écran basée sur le signal de l'indicateur et, si les filtres passent, donne une commande pour ouvrir/fermer les positions.
Le nom de la capture d'écran contient l'heure : jour, heure et seconde, par exemple, CHFJPY_d29_h10_m24_s17. L'heure est tirée de la fonction TimeCurrent().

Il y a 28 instances de l'Expert Advisor en cours d'exécution dans le terminal. À un moment donné, pendant 44 minutes, le terminal a semblé se figer et à 10h27, il a recommencé à fonctionner normalement. Voici la partie du journal du terminal elle-même :


Aucune interruption de connexion n'est visible. La première entrée pour EURUSD à 10:27 est la clôture de 10:14 sl dans l'historique des transactions.

Vous trouverez ci-dessous une partie du journal de l'EA. Comme vous pouvez le voir dans les cadres rouges supérieurs, l'heure d'enregistrement et TimeCurrent() qui est dans le nom de la capture d'écran sont presque les mêmes.
Et dans les cadres inférieurs, la différence est d'une demi-heure.


Sur le symbole CHFJPY, la formation d'une capture d'écran avec le signal d'ouverture a eu lieu à 10:12, tandis que la seconde avec le signal a été formée à 10:24. Mais l'ouverture/fermeture et la nouvelle ouverture se sont produites en une minute à 10h27.

Quoi qu'il en soit, cette bizarrerie s'est produite de 9:43 à 10:27 :
1) TimeCurrent() fonctionne et obtient l'heure réelle du serveur, le conseiller expert reçoit des signaux corrects de l'indicateur.
2) Le journal a été écrit seulement à 10:27. Les captures d'écran ont été écrites sur mon disque dur dans le dossier Files à 10:27, de nouveaux ordres (basés sur d'anciens signaux) ont été ouverts à 10:27.

Peut-être que quelqu'un a rencontré ce problème, quelle pourrait être la raison de tels hoquets ou ralentissements ? Veuillez indiquer quelle fonction doit être utilisée pour détecter la raison ? Cette situation s'est répétée plusieurs fois depuis le mois d'avril.

 
Vasiliy Pushkaryov:

Pouvez-vous me dire quelles fonctions utiliser pour trouver la cause ?

Surveillez l'écart entre l'heure locale et l'heure actuelle.

Raison: