Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1139

 
ascerdfg:
Où dois-je faire un clic droit ?

Ctrl T pour faire apparaître le menu du bas, Trading, Assets, ...... et enfin Log. Cliquez sur le journal de bord et cliquez avec le bouton droit de la souris sur l'une des entrées pour afficher

 
Alexey Viktorov:

Il est possible que le prix et le temps pour les coordonnées de l'objet soient égaux à zéro. Vérifiez-le de la façon suivante : appuyez sur Ctrl+B, appuyez sur le bouton "Tout" dans la boîte de dialogue qui apparaît et voyez la liste des objets existants. S'il y en a un, ouvrez les propriétés et voyez les coordonnées.

débogué, tout est ok lors de la création de tous les objets

 
ascerdfg:
Où devez-vous faire un clic droit ?

spécialement, rzewski : une souris à piquer au bon endroit

 
Maxim Kuznetsov:

Surtout pour Rzewski : une souris pour cliquer au bon endroit

Pour être honnête, la méthode de tâtonnement pour trouver où le journal est appelé, et aimé le mot vue, pressé. et il ya le journal))))) Et d'ailleurs, n'y a-t-il aucun moyen d'appeler le journal via la contre-clause ou quoi ?

 

Bon après-midi.

Est-il possible de faire en sorte qu'un objet soit toujours au-dessus des autres, y compris les objets nouvellement placés ? Pour que, lorsque des objets se chevauchent, l'objet désiré ne chevauche jamais le haut ?

J'ai d'abord pensé que la propriété OBJPROP_ZORDER pourrait être utile, si l'objet requis était toujours défini sur la valeur la plus élevée. Mais dans la pratique, il s'est avéré que ce n'est une priorité que pour la capture de clics. Visuellement, l'objet n'est pas plus haut que tous les autres.

Dans la pratique, j'ai également découvert que si un objet est dessiné en dernier, il sera certainement visuellement plus haut que les autres. Je dois donc soit créer une propriété que je ne connais pas, soit redessiner l'objet, qui ne doit pas chevaucher le haut à chaque fois que le nombre d'objets du graphique change. Mais lors du redessin, j'ai rencontré un problème - le scintillement d'un objet qui a été supprimé et redessiné. Existe-t-il un moyen de redessiner l'objet de manière agréable, sans scintillement, ou de faire en sorte qu'il ne se chevauche pas depuis le haut ?


 
Oleg Remizov:

Bon après-midi.

Est-il possible de faire en sorte qu'un objet soit toujours au-dessus des autres, y compris les objets nouvellement placés ? Pour que, lorsque des objets se chevauchent, l'objet souhaité ne chevauche jamais le haut ?

J'ai d'abord pensé que la propriété OBJPROP_ZORDER pourrait être utile, si l'objet requis était toujours défini sur la valeur la plus élevée. Mais dans la pratique, il s'est avéré que ce n'est une priorité que pour la capture de clics. Visuellement, l'objet n'est pas plus haut que tous les autres.

Dans la pratique, j'ai également découvert que si un objet est dessiné en dernier, il sera certainement visuellement plus haut que les autres. Je dois donc soit créer une propriété que je ne connais pas, soit redessiner l'objet, qui ne doit pas chevaucher le haut à chaque fois que le nombre d'objets du graphique change. Mais lors du redessin, j'ai rencontré un problème - le scintillement d'un objet qui a été supprimé et redessiné. Existe-t-il un moyen de redessiner l'objet joliment, sans scintillement, ou de faire en sorte qu'il ne se chevauche pas depuis le haut ?


OBJPROP_TIMEFRAMES :

OBJ_NO_PERIODS - invisible sur toutes les périodes,

OBJ_ALL_PERIODS - visible sur toutes les périodes

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger...
 
Oleg Remizov:

Bon après-midi.

Est-il possible de faire en sorte qu'un objet soit toujours au-dessus des autres, y compris les objets nouvellement placés ? Pour que, lorsque des objets se chevauchent, l'objet souhaité ne chevauche jamais le haut ?

J'ai d'abord pensé que la propriété OBJPROP_ZORDER pourrait être utile, si l'objet requis était toujours défini sur la valeur la plus élevée. Mais dans la pratique, il s'est avéré que ce n'est une priorité que pour la capture de clics. Visuellement, l'objet n'est pas plus haut que tous les autres.

Dans la pratique, j'ai également découvert que si un objet est dessiné en dernier, il sera certainement visuellement plus haut que les autres. Je dois donc soit créer une propriété que je ne connais pas, soit redessiner l'objet, qui ne doit pas chevaucher le haut à chaque fois que le nombre d'objets du graphique change. Mais lors du redessin, j'ai rencontré un problème - le scintillement d'un objet qui a été supprimé et redessiné. Existe-t-il un moyen de redessiner l'objet joliment, sans scintillement, ou de faire en sorte qu'il ne se chevauche pas depuis le haut ?


Les objets sont affichés en fonction de l'index :

string  ObjectName( 
   int    object_index   // номер в списке объектов
   );

Il s'ensuit que visuellement, l'objet ayant l'indice le plus élevé sera au premier plan.

Je me sors de cette situation de la manière suivante :

string pref="own"; //префикс в именах своих объектов
bool CheckOtherObj(string &arrObjOther[]){
   CheckOtherObjDelete(&arrObjOther);
   for(int i=ObjectsTotal(0,-1,-1)-1; i>=0; i--){
      string name=ObjectName(0,i,-1,-1);
      if(StringFind(name,pref)>=0)continue;
      bool add=true;
      for(int k=ArraySize(arrObjOther)-1; k>=0; k--){
         if(arrObjOther[k]==name){
            add=false;
            break;
         }
      }
      if(add){
         AddToArr(name,arrObjOther);
         return(true);
      }
   }
   return(false);
}
void CheckOtherObjDelete(string &arrObjOther[]){
   string arrdel[];
   ArrayFree(arrdel);
   for(int k=0; k<ArraySize(arrObjOther); k++){
      bool add=true;
      for(int i=0; i<ObjectsTotal(0,-1,-1); i++){
         string n=ObjectName(0,i,-1,-1);
         if(StringFind(n,pref)>=0)continue;
         if(n==arrObjOther[k]){
            add=false;
            break;  
         }
      }
      if(add) AddToArr(arrObjOther[k],arrdel);
   }
   if(ArraySize(arrdel)>0){
      string temp[];
      ArrayCopy(temp,arrObjOther);
      ArrayFree(arrObjOther);
      for(int i=0; i<ArraySize(temp); i++){
         bool add=true;
         for(int k=0; k<ArraySize(arrdel); k++){
            if(arrdel[k]==temp[i]){
               add=false;
               break;
            }
         }
         if(add)AddToArr(temp[i],arrObjOther);
      }
   }
}
void AddToArr(string value, string &arr[]){
   int s=ArraySize(arr);
   ArrayResize(arr,s+1);
   arr[s]=value;
}


dans ce cas, j'ai un tableau de noms d'objets dans mon code qui n'ont pas été créés par le programme (autres). Dès qu'un nouvel autre objet apparaît, je supprime tous les objets créés par le programme (les miens) et les crée à nouveau. Dans ce cas, les objets propres auront toujours l'indice le plus élevé dans la liste des objets, et seront donc visuellement au premier plan. Mais il est également nécessaire de toujours vider le tableau des autres objets, en cas de retrait de ceux-ci du graphique, afin d'éviter une croissance incontrôlable du tableau.

Si vous devez contrôler vos objets, c'est plus facile. Il suffit de contrôler les indices des objets.

 
Maksym Mudrakov:
Les objets sont affichés en fonction de l'index :

il s'ensuit que visuellement, l'objet ayant l'indice le plus élevé sera au premier plan.

C'est comme ça que je me sors de cette situation :


Dans ce cas, mon code a un tableau de noms d'objets non créés dans le programme (autres). Dès qu'un nouvel objet apparaît, je supprime tous les objets créés par le programme (les miens) et les crée à nouveau. Dans ce cas, les objets propres auront toujours l'indice le plus élevé dans la liste des objets, et seront donc visuellement au premier plan. Mais il est également nécessaire de toujours vider le tableau des autres objets, au cas où ils seraient supprimés du graphique, afin que le tableau ne grossisse pas de manière incontrôlée.

Si vous voulez contrôler vos objets, c'est plus facile. Il suffit de contrôler les indices des objets.

J'ai montré ci-dessus ce qu'il faut faire. Pourquoi se donner tant de mal alors qu'il existe une méthode recommandée par les développeurs ?

 
Bonjour.

Je veux transférer l'indicateur ATP sur le graphique des prix. Mais je ne sais pas comment m'y prendre. Je veux qu'il montre le mouvement maximal de la volatilité par rapport à la ligne médiane de la même période. Si quelqu'un a le code, merci de le partager.
 
Bonjour, je ne sais pas par où commencer, car après un mois de recherches infructueuses, j'avais la tête en vrac. J'ai décidé d'écrire un message dans ce fil. Si je vais au mauvais endroit ici, je suis désolé. Peut-être que quelqu'un pourra dire dans quelle branche il est préférable d'aborder ce sujet ? Le cœur de ma question est le suivant : quel est le meilleur moyen et le plus facile d'obtenir des données dans MT4 à partir d'un site tiers pour afficher ensuite ces informations sur un graphique de symboles à l'aide d'un conseiller expert, d'un indicateur ou d'un script ? Pour le moment, j'utilise mon propre script qui ouvre le fichier Book1.csv à l'adresse "MT4 Data Directory"\MQL4\Files. Avant d'exécuter le script, je dois lancer le navigateur Chrome, aller sur la page des ressources, sélectionner un symbole sur cette page, puis sélectionner le type de données affichées pour ce symbole (l'adresse de la page ne change pas), après avoir affiché les données pour ce symbole sous forme de tableau avec les valeurs des paramètres pour une gamme limitée de niveaux de prix, j'utilise l'extension Table Capture pour le navigateur Chrome, je copie les données du tableau sur la page des ressources dans le presse-papiers, puis j'ouvre Excel et colle les données du presse-papiers dans la feuille Exel. Ensuite, je convertis les données numériques dans Exel (je remplace les virgules dans les chiffres par des points) et je sauvegarde le fichier au format csv dans le répertoire de données du terminal. Et déjà après avoir effectué cette série d'actions, je lance le script. De toute évidence, la fonction WebRequest ne convient pas à cette tâche, car il n'y a pas de données à l'adresse de la page spécifiée au début (elle apparaît après la sélection de l'instrument et du type de données). Je serais reconnaissant à toute personne qui pourrait m'indiquer la bonne direction (évidemment, il peut y avoir plusieurs directions).
Raison: