Обновление платформы MetaTrader 4 build 670: виртуальный хостинг, web-запросы и работа с сигналами из MQL-программ - страница 32

 
sergeev:

да, поэтому не забывайте про такую "правильную" запись при необходимости.



Ваше решение помогло, Спасибо!
 
atztek:

Ваше решение помогло, Спасибо!


вообще оно не моё, а от разработчиков МТ
 

При отладке индикатора наткнулся на интересный эффект.

В ходе отладки решил отказаться от рисования линии в пользу ещё одного индикаторного буфера. Добавил в #property  indicator_buffers ещё один буфер, добавил массив, переоформил с линии на него, нажимаю F5...

Всё вроде нормально, но ниже вижу array out of range in...

Потом понял, что у меня оставался висеть этот индикатор, вытащенный через Навигатор, вот он и запутался, так как новой информации в OnInit() ему было недостаточно.

В связи с вышеизложенным предложения:

  1. При переинициализации по причине REASON_RECOMPILE перепрочитывать не только OnInit(), но и все #property.
  2. В сообщениях с ошибками типа array out of range in... писать заодно, с программы какого графика эти сообщения, как это делается в сообщениях про инициализацию/деинициализацию, комментариях экспертов и т.д.


 
Y.A.K._:

При отладке индикатора наткнулся на интересный эффект.

В ходе отладки решил отказаться от рисования линии в пользу ещё одного индикаторного буфера. Добавил в #property  indicator_buffers ещё один буфер, добавил массив, переоформил с линии на него, нажимаю F5...

Всё вроде нормально, но ниже вижу array out of range in...

Потом понял, что у меня оставался висеть этот индикатор, вытащенный через Навигатор, вот он и запутался, так как новой информации в OnInit() ему было недостаточно.

В связи с вышеизложенным предложения:

  1. При переинициализации по причине REASON_RECOMPILE перепрочитывать не только OnInit(), но и все #property.
  2. В сообщениях с ошибками типа array out of range in... писать заодно, с программы какого графика эти сообщения, как это делается в сообщениях про инициализацию/деинициализацию, комментариях экспертов и т.д.


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

Похоже на глюк. При использовании в советнике функции EditCreate, если в поле текст задан NULL (или ""), тогда при удалении советника в поле вставляется слово "Edit". Это же проскакивает и при сохранении шаблона графика. Прилагаю код, объект специально остается на графике. Функция EditCreate из справки.

void OnInit(){OnTick();}
//--------------------------------------------------------------------
void OnTick()
   {
   string Text=NULL;//"";
   EditCreate(0,"111",0,120,90,200,100,Text,"Arial",10,ALIGN_LEFT,0,0,clrYellow,clrDimGray,clrGray,false,false,true,0);
   }
//--------------------------------------------------------------------
bool EditCreate(const long             chart_ID,   // ID графика
                const string           name,       // имя объекта
                const int              sub_window, // номер подокна
                const int              x,          // координата по оси X
                const int              y,          // координата по оси Y
                const int              width,      // ширина
                const int              height,     // высота
                const string           text,       // текст
                const string           font,       // шрифт
                const int              font_size,  // размер шрифта
                const ENUM_ALIGN_MODE  align,      // способ выравнивания
                const bool             read_only,  // возможность редактировать
                const ENUM_BASE_CORNER corner,     // угол графика для привязки
                const color            clr,        // цвет текста
                const color            back_clr,   // цвет фона
                const color            border_clr, // цвет границы
                const bool             back,       // на заднем плане
                const bool             selection,  // выделить для перемещений
                const bool             hidden,     // скрыт в списке объектов
                const long             z_order)    // приоритет на нажатие мышью
   {
   if(ObjectFind(name)<0)if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0))
      {
      Print(__FUNCTION__,": не удалось создать объект \"Поле ввода\"! Код ошибки = ",GetLastError());
      return(false);
      }
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
   ObjectSetString (chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetString (chart_ID,name,OBJPROP_FONT,font);
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
   ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);
   ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only);
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   return(true);
   }
 
Скрин, демонстрирующий некорректное отображение при смещенииМаксимум в индикаторах не закреплён.
Похоже, проблема в том, что задано смещение в будущее, и в этом диапазоне игнорируются локальные максимумы, что приводит к не слишком корректному отображению.
 
Если в одно подокно графика загружено сразу несколько индикаторов, то при удалении самого первого по списку индикатора из этого общего подокна, удаляются все объекты которые были созданы в данном подокне без исключения, даже объекты созданные другими индикаторами. Такая ситуация наблюдается только при удалении самого первого по списку индикатора из подокна. Если удалять второй по списку, последующие или самый последний индикатор, такого не происходит и это правильно. Индикатор при удалении из подокна где остаются работать другие индикаторы, не должен удалять вообще никакие объекты, за исключением специально прописанной в функции деинициализации процедуры удаления.

Добавлено в Сервисдеск - #1054777.
 

Ресурсы

Похоже на опечатку:

//+------------------------------------------------------------------+
//|                                                     SampleEA.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#resource "\\Indicators\\SampleIndicator.ex5"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- получим значение пользовательского индикатора
   double value=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex4",0,0);
   PrintFormat("Indicator: iCustom value=%f",value);
//--- ...
   return(INIT_SUCCEEDED);
  }

 
Y.A.K._:
Максимум в индикаторах не закреплён.
Похоже, проблема в том, что задано смещение в будущее, и в этом диапазоне игнорируются локальные максимумы, что приводит к не слишком корректному отображению.
не это Digits у индикатора не настроен. надо большую точность задать.
 
sergeev:
не это Digits у индикатора не настроен. надо большую точность задать.

Ошибаетесь.