Ошибки, баги, вопросы - страница 2392

 

Где можно посмотреть реализацию торгового уровня через графические объекты

Нужно как можно ближе к тому, что делает сам Терминал.

 
fxsaber:

Где можно посмотреть реализацию торгового уровня через графические объекты

Нужно как можно ближе к тому, что делает сам Терминал.

Горизонтальная линия со стилем DASHDOT и описанием в OBJPROP_TEXT.

 
Andrey Khatimlianskii:

Горизонтальная линия со стилем DASHDOT и описанием в OBJPROP_TEXT.

Спасибо, не знал про текстовое свойство.


Не выходит. Что делаю не так?

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");
}

Текста не видно.

 
fxsaber:

Спасибо, не знал про текстовое свойство.


Не выходит. Что делаю не так?

Текста не видно.

В настройках чарта включить отображение текстовых подписей граф.объектов.
 
Artyom Trishkin:
В настройках чарта включить отображение текстовых подписей граф.объектов.

Спасибо!

 
fxsaber:

Спасибо!

Программно тоже можно.
 
Комментарии, не относящиеся к этой теме, были перенесены в "Вопросы от начинающих MQL4 MT4 MetaTrader 4".
 
Ilya Malev:

MQL5 ME 2006

В MQL4 тот же код, как и должно быть, "function 'f' must have a body"

Спасибо за сообщение.

Исправление внёс, будет выдаваться правильная ошибка.

 
Ilyas:

Когда почините личные сообщения на сайте?

1. Постоянно вылазят сообщения об обновлении продукта (на сайте и в терминале). Одного и того же продукта. Читаешь, а они снова, читаешь - снова;

2. Подсвечиваются собственные сообщения (в терминале). Я знаю, что я написал и знаю кому я это написал. Свои собственные сообщения подсвечивать как новые не нужно!

 

Всем привет.

Пытаюсь соединить несколько текстовых меток в одну длинную строку. Почему-то при отсутствии тиков (выходной день), да и в обычном режиме, функция ObjectGetInteger(0,name,OBJPROP_XSIZE) периодически (не всегда) возвращает 0 при том, что объект "name" точно есть. В тестере ошибки реже, но тоже появляются.

Код ошибки 0, а значение не получено.  Вопрос к разработчикам и знатокам. Почему? Что я делаю не так или это баг?

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

код тестового советника ниже

//+------------------------------------------------------------------+
//|                                                     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. Кстати, мне так никто из разработчиков и не ответил на предыдущий вопрос

Файлы:
DBS_Bug3.mq5  13 kb
Причина обращения: