Bogue MQL5 lors du travail avec l'accès aux séries chronologiques iClose/iOpen, etc. - page 3

 
Par exemple, étant donné que les développeurs sont manifestement des professionnels, experts en architecture et en optimisation de la vitesse, il ne devrait pas être difficile pour eux d'écrire une telle fonction de manière correcte et de l'inclure dans la bibliothèque standard, ce dont les utilisateurs reconnaissants seront extrêmement reconnaissants.
 
Renat Fatkhullin:

Pensez à l'endroit où les données (d'autant plus qu'elles sont garanties) seront disponibles, lorsque vos indicateurs sont terriblement lents à recevoir/poser des ticks, passant des centaines de millisecondes voire des secondes pour un tick. Par conséquent, aucune unité centrale n'est suffisante en temps pour traiter les ticks, ce qui se traduit par un déficit accumulé et un décrochage correspondant dans l'historique du graphique.

Lorsque vous demandez un "don garanti", il s'agit très probablement d'une demande de "je ne veux rien savoir, je veux continuer à écrire comme je le veux, je ne veux pas penser aux performances et aux verrous, donnez simplement" ?


Lorsque vous disposez de millions de barres, pensez à la performance de vos indicateurs et de ceux des autres. Un indicateur mal écrit et coûteux peut facilement bloquer les mises à jour des graphiques de son symbole.

Commencez par mesurer le temps de réponse de OnCalculate en microsecondes. Divisez ensuite 1 seconde par le temps de réponse moyen des ticks pour obtenir le débit maximal de l'indicateur en ticks par seconde.

Cela donne immédiatement à réfléchir.

Laissons un seul tick (une nouvelle barre) pour le nouveau type de traitement des données par l'indicateur dans la version proposée. Ceux qui aiment les multiples recalculs des barres zéro et le graal dans la barre zéro devraient apprécier la version existante. Ajouter une nouvelle fonction à OnInit - iOnCalculate - un handle vers une des fonctions TF / OnCalculate dans l'indicateur, comme iCustom, mais c'est un peu plus proche, les buffers de l'indicateur sur OnCalculate devraient être liés au handle iOnCalculate. Dans les fonctions de l'indicateur comme OnCalculate, envoyez seulement une nouvelle barre de tick. Pour le terminal, rien ne changera, la logique de base de OnCalculate sera la même, le corps principal de l'indicateur sera ajouté, par exemple OnMain. (Maintenant tout est fait par le(s) indicateur(s), attaché(s) à l'indicateur principal comme ressource et appelé(s) depuis celui-ci sur une nouvelle barre).

 
transcendreamer:


Vous n'avez pas toujours besoin d'une super vitesse, la facilité d'utilisation est aussi très importante, de nos jours écrire des indicateurs multi-devises c'est comme "mettre le soleil à la main", même dans MT4 c'était plus facile, parce que vous pouviez toujours l'obtenir par les i-fonctions, même si c'était lentement, mais vous pouviez l'obtenir, mais dans MT5 vous pouvez avoir certaines données ou pas, et vous devez toujours faire un code spécial vous-même.

Passons sur les théories.

Il suffit de soumettre un exemple à reproduire et nous verrons quelle est l'horreur autour de votre cas. Jusqu'à présent, cela ressemble à un mépris total des performances, à une dissimulation des indicateurs de retardement des tueurs et à une tentative de faire de l'ombre.

 
Renat Fatkhullin:

Passons sur les théories.

Il suffit de fournir un exemple à reproduire et nous verrons quelle horreur entoure votre cas. Jusqu'à présent, cela ressemble à un mépris total des performances, à la dissimulation des indicateurs de retardement des tueurs et à la tentative d'y mettre de l'ombre.


L'exemple en pièce jointe, ce n'est pas le code fini, il est incomplet à certains endroits, mais il est possible de l'exécuter, je joins aussi un modèle pour plus de commodité,

Je vous le dis tout de suite, je ne suis pas un programmeur, c'est sûr que le code n'est pas optimal, je suis un économiste humanitaire, j'ai vraiment souffert dans MT5, j'ai moins souffert dans MT4,

Je veux vraiment une fonction simple et fiable qui construirait un tableau synchronisé comme décrit ci-dessus https://www.mql5.com/ru/forum/289897/page2#comment_9363454.

Je ne me plains pas, je ne demande pas à écrire mon indicateur, je veux juste (et pas seulement moi d'ailleurs) une belle fonction standard.


EDIT : correction des pièces jointes

Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
  • 2018.11.14
  • www.mql5.com
Общее обсуждение: Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
Dossiers :
 
Renat Fatkhullin:

Faites ce que je vous ai conseillé, s'il vous plaît.

Sinon, vous avez besoin de matériaux complets pour une lecture à 100%.

Votre attitude à l'égard des rapports de bogue est étrange. Ce n'est pas comme si j'étais payé pour prouver quoi que ce soit. J'ai décrit la situation du mieux que j'ai pu.

Je ne suis pas le seul à avoir ce problème. Ce problème s'est produit après votre 30e mise à jour, mais vous insinuez quand même que je suis un idiot et que certains indicateurs lents sont à blâmer.

N'étaient-ils pas au ralenti pendant un an avant ça ?

Voici un exemple de code qui se bloque après 25 minutes sur M30 :

//+------------------------------------------------------------------+
//|                                                      Feezzzz.mq5 |
//|                                   Copyright 2018, Dray Stanislav |
//|                               https://www.mql5.com/ru/users/fan9 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Dray Stanislav"
#property link      "https://www.mql5.com/ru/users/fan9"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
    datetime CM1_T[1];
    if(CopyTime(_Symbol,PERIOD_M1,0,1,CM1_T)==-1){
      Comment("\n\n CopyTime return -1");
      return;
    }
    Comment("\n\n CopyTime : "+TimeToString(CM1_T[0],TIME_DATE | TIME_SECONDS));   
  }
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---
   
  }
//+------------------------------------------------------------------+

Et voici le résultat :

1

 
transcendreamer:


L'exemple en pièce jointe, ce n'est pas encore du code complet, à certains endroits pas écrit, mais il est possible de l'exécuter, je joins aussi un modèle pour plus de commodité,

je peux vous promettre que je ne suis pas un programmeur, c'est sûr que le code n'est pas optimal, je suis un économiste humanitaire, je souffre vraiment dans MT5, je souffrais moins dans MT4,

Je veux vraiment une fonction simple et fiable qui construirait un tableau synchronisé comme décrit ci-dessus https://www.mql5.com/ru/forum/289897/page2#comment_9363454.

Je ne me plains pas, je ne cherche pas les ennuis,

Je ne me plains pas, je ne demande pas d'écrire mon indicateur à ma place, je veux juste (et pas seulement moi d'ailleurs) une belle fonction standard.


EDIT : correction des pièces jointes

Merci, nous allons vérifier maintenant.
 
Stanislav Dray:

Votre attitude à l'égard des rapports de bogue est étrange. Ce n'est pas comme si j'étais payé pour prouver quoi que ce soit. J'ai décrit la situation du mieux que j'ai pu.

Ce que j'ai écrit plus tôt dans ce fil ne constitue en aucun cas un rapport de bogue.

Tout s'est déroulé sur le modèle des plaintes sans aucun détail technique. Ce n'est qu'après mes recherches que les détails ont commencé à apparaître.

 
Stanislav Dray:

Votre attitude à l'égard des rapports de bogue est étrange. Ce n'est pas comme si j'étais payé pour prouver quoi que ce soit. J'ai décrit la situation du mieux que j'ai pu.

Le problème ne vient pas seulement de moi, le problème est apparu après votre 30ème mise à jour, mais vous insinuez quand même que je suis un imbécile et que je blâme certains indicateurs retardés.

N'étaient-ils pas au ralenti pendant un an avant ça ?

Voici un exemple de code qui se bloque après 25 minutes sur M30 :

Et voici le résultat :


Téléchargé sur

2018.11.14 17:33:32.570 Experts expert Feezzzz (USDCHF,M30) loaded successfully

C'est maintenant 18.10. Tout fonctionne.


 
transcendreamer:


L'exemple est joint, ce n'est pas encore un code complet, il est sous-écrit à certains endroits, mais il peut être exécuté, je joins également un modèle pour plus de commodité,

Je vais vous montrer le code et le travail tout de suite :

  1. Les fonctions CopyXXX des indicateurs n'attendent pas le téléchargement synchrone complet des données, mais donnent ce qui est disponible. Sinon, les indicateurs auraient complètement gelé tout.

  2. Apparemment, il y a un problème avec le suivi, si toutes les données n'ont pas été synchronisées la première fois.
    Il est nécessaire de passer à un mode doux "Je vais attendre avec attention que le téléchargement soit réussi". Par exemple, OnCalculate n'est pas appelé.

  3. La mauvaise chose est que l'initialisation globale avec la charge maximale est placée dans OnInit où l'indicateur prend un temps très long pour compter et attendre.
    Dans ce cas, la mise à jour des graphiques de ce symbole est bloquée et de nombreux autres participants doivent attendre et ne pas recevoir de nouvelles données. L'indicateur ne doit pas prendre de ressources pendant une longue période. Il est préférable d'étirer l'initialisation longue étape par étape/initialisation du symbole dans OnCalculate, en comptant étape par étape.

  4. J'ai demandé à cet indicateur de pomper environ 800 Mo de données historiques sur le réseau pour la synchronisation.

  5. L'indicateur possède 512 lignes de dessin pour lesquelles de la mémoire est explicitement allouée. C'est extrêmement coûteux. Seules 100 lignes sont utilisées.

  6. Le code est peu lisible


 
Stanislav Dray:

Votre attitude à l'égard des rapports de bogue est étrange. Ce n'est pas comme si j'étais payé pour prouver quoi que ce soit. J'ai décrit la situation du mieux que j'ai pu.

Le problème ne vient pas seulement de moi, le problème est apparu après votre 30ème mise à jour, mais vous insinuez quand même que je suis un imbécile et que je blâme certains indicateurs retardés.

N'étaient-ils pas au ralenti pendant un an avant ça ?

Voici un exemple de code qui se bloque après 25 minutes sur M30 :

Et voici le résultat :

J'ai mis le code au travail. Jusqu'à présent, tout va bien.

Un dossier sans corps, d'ailleurs.

Raison: