Questions des débutants MQL5 MT5 MetaTrader 5 - page 1284

 
Youri Lazurenko:

Merci encore, maintenant la ligne est comme une ligne, agréable à voir. SeulObjectDelete(0, name); ; est nécessaire, sinon une fois dessinée la ligne n'est pas redessinée. La même chose dans mql4, j'ai juste oublié.

Je l'aurais fait

bool CreateLine(string name, datetime time1, double price1, datetime time2, double price2, color clr)
 {
  if(ObjectFind(ChartID(), name) < 0)
    if(!ObjectCreate(ChartID(), name, OBJ_TREND, 0, 0, 0, 0, 0))
     {
      Print("Ошибка в создании линии");
      return (false);
     }
  ObjectSetInteger(ChartID(), name, OBJPROP_COLOR, clr);
  ObjectSetInteger(ChartID(), name, OBJPROP_STYLE, TrendStyle);
  ObjectSetInteger(ChartID(), name, OBJPROP_WIDTH, TrendWidth);
  ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 0, time1);
  ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 1, time2);
  ObjectSetDouble(ChartID(), name, OBJPROP_TIME, 0, price1);
  ObjectSetDouble(ChartID(), name, OBJPROP_TIME, 1, price2);

  ChartRedraw();
  return(true);
 }
 
Vladimir Karputov:

Quelle absurdité. L'objet graphique dessiné se déplace en douceur. Un exemple est donné dans l'aide de chaque objet (pour la ligne horizontaleOBJ_HLINE).

Vous pouvez également modifier n'importe quelle propriété d'un objet déjà dessiné : couleur, style, odeur...

C'est fait manuellement, je ne discute pas. Mais le conseiller expert trace des lignes de tendance par points DeMark. Avec la fonction ObjectDelete(0, name) ;, lorsque les points changent, l'ancienne ligne de tendance est supprimée et une nouvelle est dessinée. Sans cette fonction, les premières lignes dessinées ne sont plus redessinées. Ce n'est pas un non-sens, c'est un fait.

Документация по MQL5: Графические объекты / ObjectDelete
Документация по MQL5: Графические объекты / ObjectDelete
  • www.mql5.com
ObjectDelete - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko:

Manuellement, je ne discute pas. Le conseiller expert, quant à lui, trace des lignes de tendance par points DeMark. Avec la fonction ObjectDelete(0, name) ;, lorsque les points changent, l'ancienne ligne de tendance est supprimée et une nouvelle est dessinée. Sans cette fonction, les premières lignes dessinées ne sont plus redessinées. Ce n'est pas un non-sens, c'est un fait.

Pourquoi ne lisez-vous pas l'aide ? Et lancez l'exemple.

 
Alexey Viktorov:

Je le ferais.

Merci, mais je laisse ma variante, elle fonctionne. Bien que je vais l'essayer à la place de ObjectDelete(0, name) ;.

 ChartRedraw();
Документация по MQL5: Графические объекты / ObjectDelete
Документация по MQL5: Графические объекты / ObjectDelete
  • www.mql5.com
ObjectDelete - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:

Lisez l'aide, pour l'amour de Dieu ! Et lancez l'exemple.

J'ai lu la référence. Seulement vous êtes indigné et j'écris à partir de la pratique. Une autre chose est d'utiliser ChartRedraw() au lieu de ObjectDelet(), je ne discute pas et je vais le vérifier. C'est la seule chose que vous devez souligner en vous référant à l'exemple.

 
Youri Lazurenko:

J'ai lu le mémoire. Seulement vous vous indignez avec des mots et j'écris à partir de la pratique. Une autre chose est d'utiliser ChartRedraw() au lieu de ObjectDelet(), je ne discute pas et je le vérifie. C'est la seule chose que vous devez souligner en vous référant à l'exemple.

Les gens demandent généralement des conseils dans ce fil et quand ils en reçoivent, ils les écoutent. Lisez au moins l'aide et appliquez les exemples. S'il vous plaît, si vous ne voulez pas écouter les autres, ne demandez rien du tout.

 
Youri Lazurenko:


Un exemple de la façon dont vous pouvez changer n'importe quelle propriété de l'objet graphique"Ligne horizontale" à la volée - vous n'avez pas besoin de supprimer l'objet pour le faire, vous devez simplement changer la propriété.

C:\Users\barab\OneDrive\Изображения\Screenpresso\2021-02-01_16h09_06.gif

Code :

//+------------------------------------------------------------------+
//|                       OBJ_HLINE change properties on the fly.mq5 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- input parameters
input string          InpName="HLine";     // Line name
//--- an array for storing colors contains 14 elements
color colors[]=
  {
   clrRed,clrBlue,clrGreen,clrChocolate,clrMagenta,clrDodgerBlue,clrGoldenrod,
   clrIndigo,clrLightBlue,clrAliceBlue,clrMoccasin,clrWhiteSmoke,clrCyan,clrMediumPurple
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(1);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- the number of colors
   int size=ArraySize(colors);
//--- get a random value
   int number=MathRand();
//--- get an index in the col[] array as a remainder of the integer devision
   int i=number%size;
//--- set line color
   ObjectSetInteger(ChartID(),InpName,OBJPROP_COLOR,colors[i]);
   ChartRedraw();
  }
//+------------------------------------------------------------------+
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko:

Merci, mais je laisse ma variante, elle fonctionne. Bien que je vais l'essayer à la place de ObjectDelete(0, name) ;.

Une décision complètement erronée. La suppression d'un objet graphique et le rafraîchissement d'un graphique ne se remplacent en aucun cas.

Mon exemple vérifie d'abord s'il existe un objet, en particulier, une tendance avec le nom tfyu, qui est le nom dans la disposition du clavier russe)). Ensuite, si elle n'existe pas, la tendance est dessinée. Si la tentative de dessin échoue, le message est affiché et la fonction est quittée avec le retour false.

Tout ce qui suit, que la tendance soit déjà présente ou qu'elle vienne d'être dessinée, se voit attribuer les paramètres spécifiés, les prix de temps et de coordonnées, le type, l'épaisseur et tout ce que vous voulez ajouter. Après cela, le graphique est mis à jour et la fonction renvoie vrai.

Par la vitesse d'exécution, il sera moins coûteux de vérifier la présence de la tendance que de la supprimer et d'en dessiner une nouvelle.

Mais... la décision finale vous appartient et si vous aimez vous gratter l'oreille gauche avec votre petit doigt droit, je n'ai pas le droit de vous en empêcher.

 
Youri Lazurenko:

Et retour au dessin de la ligne de tendance. Si vous avez besoin d'un code.

Très mauvais code.

 
Alexey Viktorov:

Je ferais ça.

J'aurais fait ça :

void CreateLine(string name, datetime time1, double price1, datetime time2, double price2, color clr)
 {
  if(ObjectFind(ChartID(), name) < 0)
   {
    ObjectCreate(ChartID(), name, OBJ_TREND, 0, 0, 0, 0, 0);
    ObjectSetInteger(ChartID(), name, OBJPROP_COLOR, clr);
    ObjectSetInteger(ChartID(), name, OBJPROP_STYLE, TrendStyle);
    ObjectSetInteger(ChartID(), name, OBJPROP_WIDTH, TrendWidth);
   }
   ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 0, time1);
   ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 1, time2);
   ObjectSetDouble(ChartID(), name, OBJPROP_PRICE, 0, price1);
   ObjectSetDouble(ChartID(), name, OBJPROP_PRICE, 1, price2);

  ChartRedraw();
 }
Raison: