Erreurs, bugs, questions - page 2392

 
fxsaber:

Où pouvez-vous voir l'implémentation du niveau de négociation via des objets graphiques ?

Il faut être aussi proche que possible de ce que fait le terminal lui-même.

Ligne horizontale avec le style DASHDOT et la description dans OBJPROP_TEXT.

 
Andrey Khatimlianskii:

Ligne horizontale avec le style DASHDOT et la description dans OBJPROP_TEXT.

Merci, je ne connaissais pas la propriété textuelle.


Ça ne marche pas. Qu'est-ce que je fais de mal ?

void OnStart()
{
  const string Name = __FUNCTION__;
  
  ObjectCreate(0, Name, OBJ_HLINE, 0, 0, SymbolInfoDouble(_Symbol, SYMBOL_BID));
  ObjectSetString(0, Name, OBJPROP_TEXT, "12345");
  ObjectSetString(0, Name, OBJPROP_LEVELTEXT, "12345");
}

Je ne peux pas voir le texte.

 
fxsaber:

Merci, je ne connaissais pas la propriété textuelle.


Ça ne marche pas. Qu'est-ce que je fais de mal ?

Je ne peux pas voir le texte.

Dans les paramètres du graphique, activez l'affichage des légendes de texte pour les objets graphiques.
 
Artyom Trishkin:
Dans les paramètres du graphique, activez l'affichage des légendes de texte pour les objets graphiques.

Merci !

 
fxsaber:

Merci !

Vous pouvez également le faire de manière programmatique.
 
Les commentaires non liés à ce sujet ont été déplacés vers "Questions des débutants de MQL4 MT4 MetaTrader 4".
 
Ilya Malev:

MQL5 ME 2006

Le même code dans MQL4 comme il devrait être,"la fonction 'f' doit avoir un corps".

Merci pour le message.

Si vous la corrigez, l'erreur correcte s'affiche.

 
Ilyas:

Quand allez-vous corriger les messages personnels sur le site web ?

1. Les messages de mise à jour du produit ne cessent de s'afficher (sur le site web et dans le terminal). Le même produit. Vous le lisez et ils reviennent, lisez-le encore ;

2. Mes propres messages sont mis en évidence (dans le terminal). Je sais ce que j'ai écrit et je sais à qui je l'ai écrit. Mes propres messages n'ont pas besoin d'être mis en évidence comme nouveaux !

 

Bonjour à tous.

J'essaie de combiner plusieurs étiquettes de texte en une longue chaîne. Pour une raison quelconque, lorsqu'il n'y a pas de ticks (jour chômé), et en mode normal, la fonctionObjectGetInteger(0,name,OBJPROP_XSIZE) renvoie périodiquement (pas toujours) 0 alors que l'objet "name" existe exactement. Chez le testeur, les erreurs sont moins fréquentes mais elles se produisent aussi.

Le code d'erreur est 0 mais la valeur n'est pas acquise. Question pour les développeurs et les experts. Pourquoi ? Qu'est-ce que je fais de travers ou est-ce un bug ?

2019.02.28 13:58:16.922 DBS_Bug3 (RTS-3.19,M4)  DBS_Bug3: GetLastX: Не удалось получить размер объекта dbs_inf_11! Код ошибки: 0. Операция выполнена успешно.

Le code d'un conseiller expert de test est le suivant

//+------------------------------------------------------------------+
//|                                                     DBS_Bug3.mq5 |
//|                                            Copyright © 2019, DBS |
//+------------------------------------------------------------------+
#include "Include\Errors.mqh"
//+------------------------------------------------------------------+
//| Входные параметры эксперта                                       |
//+------------------------------------------------------------------+
sinput int     Renew_Interval=5;             //Интервал обновления, сек.
sinput string  iFontName="Tahoma";           //Название шрифта
sinput int     iFontSize=9;                  //Размер шрифта
sinput color   iColorBase=clrYellow;         //Основной цвет
sinput int     iText_X=300;                  //Смещение от левого края графика, пикс.
sinput int     iText_Y=5;                    //Смещение от верхнего края графика, пикс.
sinput string  iName_pref="dbs_inf_";        //Префикс имени объектов текста
//+------------------------------------------------------------------+
//| Глобальные переменные                                            |
//+------------------------------------------------------------------+
datetime LastCalculateTime=0;                //время последнего расчёта
//+------------------------------------------------------------------+
//| Обработчик события OnInit                                        | 
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(Renew_Interval);                                     //установка таймера
   ShowInfo();                                                        //отобразить информацию   
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Обработчик события Deinit                                        | 
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,iName_pref);                                    //удаляем все свои объекты текста
   ChartRedraw();
  }
//+------------------------------------------------------------------+
//| Обработчик событий таймера                                       |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(SymbolInfoInteger(_Symbol,SYMBOL_TIME)>LastCalculateTime)       //проверка периода перерасчёта
      ShowInfo();                                                     //вывести информацию
  }
//+------------------------------------------------------------------+
//| Выводит на экран информацию про некоторые параметры эксперта     |
//+------------------------------------------------------------------+
void ShowInfo()
  {
   string t10="Прибыль: "+IntegerToString(MathRand())+" ";
   string t11="Убыток: "+IntegerToString(MathRand())+" ";
   string t12="Баланс: "+IntegerToString(MathRand())+" ";
   TextCreate(10,t10,iText_X,iText_Y);
   TextCreate(11,t11,GetLastX(10),iText_Y);
   TextCreate(12,t12,GetLastX(11),iText_Y);
   LastCalculateTime=TimeCurrent();                                   //запомним время последнего пересчёта
  }
//+------------------------------------------------------------------+
//| Функция получает значение координаты X конца заданного объекта   |
//+------------------------------------------------------------------+
int GetLastX(int a_idx)
  {
   string name=iName_pref+IntegerToString(a_idx);                    //имя объекта
   long x=ObjectGetInteger(0,name,OBJPROP_XDISTANCE);
   long size=ObjectGetInteger(0,name,OBJPROP_XSIZE);
   if(size==0)
      PrintFormat("%s: %s: Не удалось получить размер объекта %s! Код ошибки: %i. %s.",EXPERT_NAME,__FUNCTION__,name,_LastError,ErrorDescription(_LastError));
   return(int(x+size));
  }
//+------------------------------------------------------------------+ 
//| Создает объект "Текстовая метка"                                 | 
//+------------------------------------------------------------------+ 
bool TextCreate(const int    name_idx,                                //индекс имени объекта 
                const string text,                                    //текст
                const int    x=0,                                     //координата по оси X 
                const int    y=0,                                     //координата по оси Y
                const color  a_color=clrNONE)                         //цвет текста                
  {
   string name=iName_pref+IntegerToString(name_idx);                  //формируем имя объёкта
   if(!ObjectCreate(0,name,OBJ_LABEL,0,0,0)) // создадим объект "Текстовая метка" 
     {
      PrintFormat("%s: %s: Не удалось создать объект %s! Код ошибки: %i. %s.",EXPERT_NAME,__FUNCTION__,name,_LastError,ErrorDescription(_LastError));
      return(false);
     }
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);                      //установим координаты привязки объекта
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
   ObjectSetString(0,name,OBJPROP_TEXT,text);                         //установим текст 
   ObjectSetString(0,name,OBJPROP_TOOLTIP,text);
   ObjectSetString(0,name,OBJPROP_FONT,iFontName);                    //установим шрифт текста 
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,iFontSize);               //установим размер шрифта
   color font_color=(a_color==clrNONE)?iColorBase:a_color;            //если цвет не задан - используем установленный в настройках
   ObjectSetInteger(0,name,OBJPROP_COLOR,font_color);                 //установим цвет объекта
   ObjectSetInteger(0,name,OBJPROP_BACK,false);                       //отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);                 //включим (true) или отключим (false) режим перемещения объекта мышью 
   ObjectSetInteger(0,name,OBJPROP_SELECTED,false);                   //включим (true) или отключим (false) режим выделенности объекта
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);                      //скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ChartRedraw();                                                     //обновим график   
   return(true);
  }
//+------------------------------------------------------------------+


P.S. Au fait, aucun des développeurs n'a répondu à ma question précédente.

Dossiers :
DBS_Bug3.mq5  13 kb
 
Dmitriy Burlachenko:

Bonjour à tous.

J'essaie de combiner plusieurs étiquettes de texte en une longue chaîne. Pour une raison quelconque, en l'absence de ticks (jour de repos), et en mode normal, la fonctionObjectGetInteger(0,name,OBJPROP_XSIZE) renvoie périodiquement (pas toujours) 0 alors que l'objet "name" existe exactement. Chez le testeur, les erreurs sont moins fréquentes mais elles se produisent aussi.

Le code d'erreur est 0 mais la valeur n'est pas acquise. Question pour les développeurs et les experts. Pourquoi ? Qu'est-ce que je fais de travers ou est-ce un bug ?

Le code d'un conseiller expert de test est le suivant


P.S. Au fait, aucun des développeurs n'a jamais répondu à ma question précédente.


Peut-être que la longueur du nom est trop importante ?