Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 823

 

Veterros:
Ребят подскажите, почему 4202 выдаёт (Объект не существует). Правильно что не существует его создать надо, а он мне (не существует)! Чего можно с ним сделать? Или я где-то опять накосячил?

 else добавьте после закрывающей фигурной скобки, либо внутрь этой скобки переместите операторы модификации объекта. 

 
tara:

Спасибо, но проблема не ушла.

 

 Подскажите, кто как думает, равноценны ли эти выражения: 

1) double BarN=NormalizeDouble(iHigh(Symbol(),5,iHighest(Symbol(),5,MODE_HIGH,num,1)),Digits) 

2) double BarN=NormalizeDouble(High[iHighest(Symbol(),5,MODE_HIGH,num,1)],Digits)
 
Veterros:
Ребят подскажите, почему 4202 выдаёт (Объект не существует). Правильно что не существует его создать надо, а он мне (не существует)! Чего можно с ним сделать? Или я где-то опять накосячил?

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

Может, чтобы не мучиться, попробуете воспользоваться формированием arrow объектов уже с учётом нового языка MQL4?

Здесь "тело" для скрипта, создающего обозначенные вами arrow-объекты уже с учётом нового языка (время и отметки проставлены произвольно, вместо пока только вам известных SignalBarsTime, Hi2, SignalBarsTime, Lo2):

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(ObjectFind(0,"Продажа")<0)
     {
      ArrowDownCreate(0,"Продажа",0,Time[2],High[2],
                      ANCHOR_BOTTOM,clrRed,STYLE_SOLID,5,false,false,true,0);
     }
   if(ObjectFind(0,"Покупка")<0)
     {
      ArrowUpCreate(0,"Покупка",0,Time[1],Low[1],
                    ANCHOR_TOP,clrGreen,STYLE_SOLID,5,false,false,true,0);
     }
  }
//+------------------------------------------------------------------+
//| Создает знак "Стрелка вниз"  https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_arrow_down
//+------------------------------------------------------------------+
bool ArrowDownCreate(const long              chart_ID=0,           // ID графика
                     const string            name="ArrowDown",     // имя знака
                     const int               sub_window=0,         // номер подокна
                     datetime                time=0,               // время точки привязки
                     double                  price=0,              // цена точки привязки
                     const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // способ привязки
                     const color             clr=clrRed,           // цвет знака
                     const ENUM_LINE_STYLE   style=STYLE_SOLID,    // стиль окаймляющей линии
                     const int               width=3,              // размер знака
                     const bool              back=false,           // на заднем плане
                     const bool              selection=true,       // выделить для перемещений
                     const bool              hidden=true,          // скрыт в списке объектов
                     const long              z_order=0)            // приоритет на нажатие мышью
  {
//--- установим координаты точки привязки, если они не заданы
   //ChangeArrowEmptyPoint(time,price);
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим знак
   if(!ObjectCreate(chart_ID,name,OBJ_ARROW_DOWN,sub_window,time,price))
     {
      Print(__FUNCTION__,
            ": не удалось создать знак \"Стрелка вниз\"! Код ошибки = ",GetLastError());
      return(false);
     }
//--- способ привязки
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- установим цвет знака
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль окаймляющей линии
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим размер знака
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения знака мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
//| Создает знак "Стрелка вверх" https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_arrow_up
//+------------------------------------------------------------------+
bool ArrowUpCreate(const long              chart_ID=0,           // ID графика
                   const string            name="ArrowUp",       // имя знака
                   const int               sub_window=0,         // номер подокна
                   datetime                time=0,               // время точки привязки
                   double                  price=0,              // цена точки привязки
                   const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // способ привязки
                   const color             clr=clrRed,           // цвет знака
                   const ENUM_LINE_STYLE   style=STYLE_SOLID,    // стиль окаймляющей линии
                   const int               width=3,              // размер знака
                   const bool              back=false,           // на заднем плане
                   const bool              selection=true,       // выделить для перемещений
                   const bool              hidden=true,          // скрыт в списке объектов
                   const long              z_order=0)            // приоритет на нажатие мышью
  {
//--- установим координаты точки привязки, если они не заданы
   //ChangeArrowEmptyPoint(time,price);
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим знак
   if(!ObjectCreate(chart_ID,name,OBJ_ARROW_UP,sub_window,time,price))
     {
      Print(__FUNCTION__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
      return(false);
     }
//--- установим способ привязки
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- установим цвет знака
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль окаймляющей линии
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим размер знака
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения знака мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
 
P./S.: Поправила сейчас в своём посте выше строку, заменив ANCHOR_BOTTOM на ANCHOR_TOP:
 if(ObjectFind(0,"Покупка")<0)
     {
      ArrowUpCreate(0,"Покупка",0,Time[1],Low[1],
                    ANCHOR_TOP,clrGreen,STYLE_SOLID,5,false,false,true,0);
     }
 
DiPach:
P./S.: Поправила сейчас в своём посте выше строку, заменив ANCHOR_BOTTOM на ANCHOR_TOP:
Спасибо большое, очень помогли. Ещё бы найти как сделать, что бы имена объектам присваивать автоматом, а то приходится перерисовывать каждый раз. Может подскажите, где про это узнать и в какую область смотреть?
 
Veterros:
Спасибо большое, очень помогли. Ещё бы найти как сделать, что бы имена объектам присваивать автоматом, а то приходится перерисовывать каждый раз. Может подскажите, где про это узнать и в какую область смотреть?
Добавляйте к имени обьекта время.
 
Veterros:

Да. Индивидуальное имя можно по разному прописать.

К примеру, функция для формирования индивидуальных имён объектам может выглядеть как-то так:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string nameNi(string PrefixN, datetime TimeN)
  {
   string textn=NULL;
   textn=StringConcatenate(PrefixN,TimeToString(TimeN,TIME_DATE|TIME_MINUTES));
   return (textn);
  }

А в теле программы её можно выводить как-то так (прописав до этого заранее в условиях то, что будет служить префиксом):

...

string nameobj=nameNi(prefixX,timeX);

Далее, для вновь создаваемого объекта это может выглядеть, к примеру, так:

if(ObjectFind(0,nameobj)<0)
     {
      ArrowDownCreate(0,nameobj,0,timeX,HiN,
                      ANCHOR_BOTTOM,clrRed,STYLE_SOLID,5,false,false,true,0);
     }


Сейчас не соображу где конкретно можно посмотреть это в справке или как лучше задать в поиске по сайту, но в учебнике вспомнилась эта страница: https://book.mql4.com/ru/functions/strings

Там есть инфа и пример кода. Просто вместо TimeToStr можно воспользоваться TimeToString. Учебник написан по прежнему языку MQL4, но, тем не менее, с моей точки зрения может хорошо помогать при осваивании и нового языка МQL4. В том числе, в сочетании со справкой к обновлённому языку.

 
evillive:
Добавляйте к имени обьекта время.
Спасибо большое!
 
DiPach:

Да. Индивидуальное имя можно по разному прописать.

К примеру, функция для формирования индивидуальных имён объектам может выглядеть как-то так:

А в теле программы её можно выводить как-то так (прописав до этого заранее в условиях то, что будет служить префиксом):

Далее, для вновь создаваемого объекта это может выглядеть, к примеру, так:


Сейчас не соображу где конкретно можно посмотреть это в справке или как лучше задать в поиске по сайту, но в учебнике вспомнилась эта страница: https://book.mql4.com/ru/functions/strings

Там есть инфа и пример кода. Просто вместо TimeToStr можно воспользоваться TimeToString. Учебник написан по прежнему языку MQL4, но, тем не менее, с моей точки зрения может хорошо помогать при осваивании и нового языка МQL4. В том числе, в сочетании со справкой к обновлённому языку.


Привет, дорогая ;) Представляешь, сколько пишу кода для всяческих объектов, ни разу в голову не пришло сделать отдельную ф-цию для создания имени - всегда это сразу в коде прописывал. Вот ведь заработался. Спасибо за наводку. А то везде, где актуально, для компактности пишу функциями, а вот тут что-то мучался всё время.

ЗЫ. Там тебе Лёва привет передал ;)

Причина обращения: