Erreurs, bugs, questions - page 310

 

En quoi est-elle différente ?

CHART_WIDTH_IN_BARS Ширина графика в барах
от
CHART_VISIBLE_BARS Количество баров на графике, доступных для отображения
 
Urain:

En quoi est-elle différente ?

Il peut y avoir un champ vide à droite, si une indentation est définie. Dans ce cas, la valeur de CHART_VISIBLE_BARS sera plus petite que celle de CHART_WIDTH_IN_BARS.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков - Документация по MQL5
 
Urain:

En quoi est-elle différente ?

Littéralement différent.


 
Rosh:
Quelle est la question ?

1. prenez le script tordu au poste et exécutez-le sur le graphique. Le script doit copier un certain nombre de barres et effectuer le déroulement des 20 plus anciennes.

Cette méthode est utilisée (je comprends qu'il n'y a pas de contrôles et toutes sortes de pièges pour les erreurs, mais quand même)

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   int              start_pos,         // откуда начнем 
   int              count,             // сколько копируем
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   ); 

Ainsi, avec les paramètres que j'ai spécifiés (nombre de barres et M1), le script fonctionne mais parfois il refuse de fonctionner NORMALEMENT. Cela se produit à partir d'un certain nombre de barres (j'ai obtenu plus de 368700).

À 368800, il renvoie beaucoup moins de barres (mais toujours un nombre différent - 368732 / 368735 / 368736 ou quelque chose dans ce genre).

Mais cela ne fonctionne pas toujours correctement même à 360000, il y a eu des cas où il a juste copié 10000 barres.

2. La variante où deux dates sont spécifiées m'a vraiment choqué. Non seulement il n'accepte pas 0 comme première date (ce qui est logique à mon avis) mais il copie aussi jusqu'à 10000.

Bien qu'avec 0 comme int comme start_time c'est compréhensible (j'ai de l'expérience), c'est une question de surcharge de fonctions et de compilateur qui ne "comprend pas" certaines choses. Mais c'est pourquoi la question des 10000 barres est une question distincte qui s'appelle "sur un million".

Les barres de 10 000 minutes telles que nous les concevons n'iront pas au-delà de 2011, si je comprends bien, elles n'iront pas au-delà de février (et comme il ressort clairement de tout ce qui précède, au moins 360000 sont chargées à coup sûr).

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   datetime         start_time,        // с какой даты
   datetime         stop_time,         // по какую дату
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   ); 

PS

En même temps, la vitesse du normal et du "buggy" (lorsque le script ne copie que 10000 mesures) diffère plusieurs fois.

PPS

Veillez à mener certaines sections de l'aide (ou plutôt leurs exemples) jusqu'à leur conclusion logique, afin d'éviter toute ambiguïté et autres situations "stupides".

Les chèques doivent être placés en plus, etc. De plus, dans ce cas, il n'y a pas de références croisées dans les descriptions des paramètres (au moins dans le cadre temporel) et le type de start_time et start_pos n'est pas clair.Je suppose que c'est le datetime (sinon pourquoi le compilateur jurerait-il par 0 comme start_time).

//Код по третьему варианту, может я что-то упустил?
//Так ругается - 'CopyRates' - ambiguous call to overloaded function
Copied = CopyRates(Symbol(),PERIOD_M1,0,TimeCurrent(),Rates);
//Так нет, но копирует только 10000 баров
Copied = CopyRates(Symbol(),PERIOD_M1,(datetime)0,TimeCurrent(),Rates);
 

Est-ce un bug ou mon manque de compétence ?

void OnStart()
  {
//---
   long chart_id=ChartID();
   ChartSetInteger(chart_id,CHART_AUTOSCROLL,false);   // отключаем автоскролл
   while(!IsStopped())
     {
      //------------------      
      ChartNavigate(chart_id,CHART_END,-2410); // делаем навигацию, поставим константу
      //------------------
      Sleep(500);
      ChartSetString(chart_id,CHART_COMMENT,ChartGetInteger(chart_id,CHART_FIRST_VISIBLE_BAR));
      ChartRedraw(chart_id);// отображаем первый бар чарта после навигации
      Sleep(500);
     }        
  }


Le graphique est saccadé lors de la navigation à partir de la barre zéro. J'ai volontairement inséré des glissements entre la navigation et la mise à jour pour mettre en évidence le problème. Mais le bogue existe même sans glissement. Il s'avère que ChartNavigate() déplace d'abord le graphique à zéro, puis le ramène en arrière. En outre, il ne le fait pas à chaque fois.

Au moins, le fait que le bug n'existe pas à chaque fois que vous appelez ChartNavigate(), il apparaît lorsque vous l'exécutez sans slip.

Документация по MQL5: Операции с графиками / ChartNavigate
Документация по MQL5: Операции с графиками / ChartNavigate
  • www.mql5.com
Операции с графиками / ChartNavigate - Документация по MQL5
 
Urain:

Est-ce un bug ou mon manque de compétence ?


Le graphique est saccadé lors de la navigation à partir de la barre zéro. J'ai volontairement inséré des glissements entre la navigation et la mise à jour pour mettre en évidence le problème. Mais le bogue existe même sans glissement. Il s'avère que ChartNavigate() déplace d'abord le graphique à zéro, puis le ramène en arrière. En outre, il ne le fait pas à chaque fois.

Au moins, le fait que le bug n'existe pas à chaque fois que vous appelez ChartNavigate(), il apparaît lorsque vous l'exécutez sans slip.


Essayez l'exemple de La fonction ChartNavigate ne fonctionne pas, aidez-nous s'il vous plaît.
 

Alors, qu'y a-t-il dans cet exemple qui soit si fondamentalement différent de mon code ?

C'est juste que dans votre code, la navigation n'est appelée qu'une seule fois, alors que je dois maintenir le graphique sur la barre souhaitée en permanence (indépendamment des actions de l'utilisateur).

J'ai essayé votre exemple et j'ai exécuté mon code sans mise à jour du graphique (bien que cela soit important pour moi car le programme utilise beaucoup de transformations graphiques), mais cela n'a pas fonctionné non plus. L'imbécile reste. Je navigue toujours vers le même point, puis vers la barre de zéro.

Je trouve également inacceptable l'utilisation de la navigation à partir de la barre courante, car l'utilisateur peut déplacer le graphique par inadvertance pendant l'exécution du programme.

 
Si ce n'est pas immédiatement clair, laissez-moi vous expliquer : le code ci-dessus est une tentative d'émuler un autoscroll sur une barre donnée.
 
Interesting:
L'histoire est bien cachée ?
Bien sûr, il y a une histoire, mais tous les vers n'ont pas une histoire de propagation !
 
Urain:

Alors, qu'y a-t-il dans cet exemple qui soit si fondamentalement différent de mon code ?

C'est juste que dans votre code, la navigation est appelée une seule fois, alors que j'ai besoin de garder le graphique sur la barre désirée tout le temps (indépendamment des actions de l'utilisateur).

Après avoir examiné votre exemple, j'ai exécuté mon code sans rafraîchissement du graphique (bien que ce soit important pour moi puisque le programme utilise également un tas de conversions graphiques), mais cela n'a pas aidé non plus. L'imbécile reste. Je navigue toujours vers le même point, puis vers la barre de zéro.

Je trouve également inacceptable l'utilisation de la navigation à partir de la barre courante, car l'utilisateur peut déplacer le graphique par inadvertance pendant l'exécution du programme.

J'ai le même problème avec mon indicateur, seulement il est redessiné dès que le tick arrive et il n'est pas clair comment le réparer ?
Raison: