Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1001

 

Подскажите, пожалуйста, почему я получаю ошибки

2019.02.17 06:13:28.974 Test_4G_CB (Si Splice,H1)       1 Тут ошибка 4202 Графический объект не найден
2019.02.17 06:13:28.983 Test_4G_CB (Si Splice,H1)       2 Тут ошибка 4202 Графический объект не найден

в этом коде

      if(ObjectFind(chart,name)<0)
        {
         Print("1 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
         graphic.Create(chart,name,0,0,0,pix_X,pix_Y);//Создает графический ресурс, привязанный к объекту чарта 
         Print("2 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
        }

Если первая ошибка ещё объяснима - мол объект не найден, но не ясна реализация поиска отсутствующего объекта без ошибки, то вторая ошибка не понятна, при этом объект явно создается - график формируется, и причина ошибки не ясна.

Как избавиться от ошибок?

 
Aleksey Vyazmikin:

Подскажите, пожалуйста, почему я получаю ошибки

в этом коде

Если первая ошибка ещё объяснима - мол объект не найден, но не ясна реализация поиска отсутствующего объекта без ошибки, то вторая ошибка не понятна, при этом объект явно создается - график формируется, и причина ошибки не ясна.

Как избавиться от ошибок?

ResetLastError() необходимо выполнять перед обращением к функции. Что здесь:

graphic.Create()

непонятно. Если это CCanvas, то метод Create() создает графический ресурс без привязки к объекту чарта. И возвращает он либо true, либо false:

Create

Создает графический ресурс без привязки к объекту чарта.

virtual bool  Create(
   const string       name,                                 // имя
   const int          width,                                // ширина
   const int          height,                               // высота
   ENUM_COLOR_FORMAT  clrfmt=COLOR_FORMAT_XRGB_NOALPHA      // формат
   );

Параметры

name

[in]  Основание для имени графического ресурса. Имя ресурса формируется при создании путем добавления псевдослучайной строки.

width

[in]  Ширина (размер по оси X) в пикселях.

height

[in]  Высота (размер по оси Y) в пикселях.

clrfmt=COLOR_FORMAT_XRGB_NOALPHA

[in]  Способ обработки цвета. Более подробно о способах обработки цвета смотрите в описании функции ResourceCreate().

Возвращаемое значение

true - в случае удачи, иначе false


В общем, из того, что вы показали, сложно понять.

Но попробуйте так:

//+------------------------------------------------------------------+
ResetLastError();
if(ObjectFind(chart,name)<0)
  {
   Print("1 Тут ошибка потому, что объекта нет ещё",GetLastError()," ",cLng::CodeDescription(GetLastError()));
   ResetLastError();
   if(!graphic.Create(chart,name,0,0,0,pix_X,pix_Y))
      Print("2 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
  }
//+------------------------------------------------------------------+

Если там у вас CGraphic, то нужно лезть в код Create() для понимания чего он возвращает, так как в справке про то ни слова:

Документация по MQL5: Стандартная библиотека / Научные графики / CGraphic / Create
Документация по MQL5: Стандартная библиотека / Научные графики / CGraphic / Create
  • www.mql5.com
Стандартная библиотека / Научные графики / CGraphic / Create - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

ResetLastError() необходимо выполнять перед обращением к функции. Что здесь:

непонятно. Если это CCanvas, то метод Create() создает графический ресурс без привязки к объекту чарта. И возвращает он либо true, либо false:

Create

Создает графический ресурс без привязки к объекту чарта.

Параметры

name

[in]  Основание для имени графического ресурса. Имя ресурса формируется при создании путем добавления псевдослучайной строки.

width

[in]  Ширина (размер по оси X) в пикселях.

height

[in]  Высота (размер по оси Y) в пикселях.

clrfmt=COLOR_FORMAT_XRGB_NOALPHA

[in]  Способ обработки цвета. Более подробно о способах обработки цвета смотрите в описании функции ResourceCreate().

Возвращаемое значение

true - в случае удачи, иначе false


В общем, из того, что вы показали, сложно понять.

Но попробуйте так:

Если там у вас CGraphic, то нужно лезть в код Create() для понимания чего он возвращает, так как в справке про то ни слова:

Я выше уже проверил со сбросом ошибки и локализовал место, где возникает ошибка

К тому же там она возникает два раза от разных функций - после первой функции идет сброс ошибки, но потом она опять возникает.

И мой вариант создания

Create

Создает графический ресурс, привязанный к объекту чарта.

bool  Create(
   const long    chart,      // идентификатор чарта
   const string  name,       // имя
   const int     subwin,     // номер подокна
   const int     x1,         // координата x1
   const int     y1,         // координата y1
   const int     x2,         // координата x2
   const int     y2          // координата y1
   )

Параметры

chart

[in]  Идентификатор графика.

name

[in]  Имя.

subwin

[in]  Номер подокна.

x1

[in]  Координата X1.

y1

[in]  Координата Y1.

x2

[in]  Координата X2.

y2

[in]  Координата Y2.

 
Aleksey Vyazmikin:

Я выше уже проверил со сбросом ошибки и локализовал место, где возникает ошибка

Вы не сбрасываете ошибку перед обращением к функции поиска объекта.

 
Artyom Trishkin:

Вы не сбрасываете ошибку перед обращением к функции поиска объекта.

Да, в цитате кода не сбрасываю, так-как я уже проверил код выше - там ошибки нет, поэтому я стер аналогичные проверочные строки, что показаны ниже.

 
Здравствуйте, у меня функция alert считанную из файла строку выводит либо китайскими, либо японскими иероглифами, как исправить?
 
Artyom Trishkin:

Вы не сбрасываете ошибку перед обращением к функции поиска объекта.

Ещё раз решил повторить эксперимент, вот код

      //--- отключим показ ценового графика
      ChartSetInteger(0,CHART_SHOW,false);
      long chart=ChartID();

      CGraphic graphic;
         Print("0 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
      if(ObjectFind(chart,name)<0)
        {
         Print("1 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
         graphic.Create(chart,name,0,0,0,pix_X,pix_Y);//Создает графический ресурс, привязанный к объекту чарта 
         Print("2 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
        }

Вот результат

2019.02.17 08:55:19.845 Test_4G_CB (Si Splice,H1)       0 Тут ошибка 0 Операция выполнена успешно
2019.02.17 08:55:19.860 Test_4G_CB (Si Splice,H1)       1 Тут ошибка 4202 Графический объект не найден
2019.02.17 08:55:19.860 Test_4G_CB (Si Splice,H1)       2 Тут ошибка 4202 Графический объект не найден
Есть идеи о причине возникновения ошибки?
 
Denis Nikolaev:
Здравствуйте, у меня функция alert считанную из файла строку выводит либо китайскими, либо японскими иероглифами, как исправить?

Настройте шрифты в Windows. Поставьте Русский для "Язык программ, не поддерживающих Юникод".

"Региональные стандарты" - "Дополнительно".

 
Vladimir Karputov:

Настройте шрифты в Windows. Поставьте Русский для "Язык программ, не поддерживающих Юникод".

"Региональные стандарты" - "Дополнительно".

это не помогло

у меня происходит автоматический перевод на японский или китайский язык, строчки считанной из файла, почему так?

 
Aleksey Vyazmikin:

Ещё раз решил повторить эксперимент, вот код

Вот результат

Есть идеи о причине возникновения ошибки?

Ну раз вы сбросили последнюю ошибку, то смотрите в дебрях CGraphic где там возникает такой код ошибки.