Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 823

 

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

si no, añadir después de la llave de cierre, o dentro de esta llave mover los operadores de modificación del objeto.

 
tara:

Gracias, pero el problema no ha desaparecido.

 

¿Puede alguien sugerir si estas expresiones son equivalentes o no?

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:
¿Pueden ustedes decirme por qué el 4202 se da por vencido (el objeto no existe)? ¡Correcto, no existe, debe ser creado, pero yo (no existe)! ¿Qué se puede hacer con él? ¿O he metido la pata en otra parte?

He probado apresuradamente tu versión como script, sustituyendo la hora y las marcas y comprobando los objetos, pero no devuelve errores.

¿Tal vez, para ahorrarse la molestia, intentar formar objetos flecha teniendo en cuenta el nuevo lenguaje MQL4?

Aquí está el "cuerpo" del script que crea los objetos-flecha que has especificado, teniendo en cuenta el nuevo lenguaje (los tiempos y las marcas son arbitrarios, en lugar de SignalBarsTime, Hi2, SignalBarsTime, Lo2, que sólo conoces hasta ahora):

//+------------------------------------------------------------------+
//| 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.: Corregida la línea de mi post anterior, sustituyendo ANCHOR_BOTTOM por 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.: Corregida la línea de mi post anterior, sustituyendo ANCHOR_BOTTOM por ANCHOR_TOP:
Muchas gracias, muy útil. Todavía me gustaría encontrar una manera de hacer que los nombres de los objetos se asignen automáticamente, tengo que redibujarlos cada vez. ¿Quizás aconsejar dónde aprender sobre ello y en qué área buscar?
 
Veterros:
Muchas gracias, es muy útil. Me gustaría saber cómo nombrar los objetos automáticamente, porque tengo que redibujarlos cada vez. ¿Quizás puedas decirme dónde encontrarlo y dónde buscarlo?
Añade el tiempo al nombre del objeto.
 
Veterros:

Sí. El nombre individual puede escribirse de diferentes maneras.

Por ejemplo, la función para formar los nombres individuales de los objetos puede tener este aspecto:

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

Y en el cuerpo del programa puede salir así (habiendo escrito antes en condiciones lo que servirá de prefijo):

...

string nameobj=nameNi(prefixX,timeX);

Además, para un objeto recién creado podría ser así

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


Ahora no se me ocurre dónde exactamente se puede buscar en la ayuda o buscar en el sitio, pero el tutorial me recordó esta página: https://book.mql4.com/ru/functions/strings

Allí puede encontrar información y un ejemplo de código. Sólo tiene que utilizar TimeToString en lugar de TimeToStr. Sin embargo, puede ser de gran ayuda para dominar el nuevo lenguaje MQL4. También en combinación con la ayuda para el lenguaje actualizado.

 
evillive:
Añade la hora al nombre del objeto.
¡Muchas gracias!
 
DiPach:

Sí. El nombre individual puede escribirse de diferentes maneras.

Por ejemplo, la función para formar los nombres individuales de los objetos puede tener este aspecto:

Y en el cuerpo del programa puede salir así (habiendo escrito antes en condiciones lo que servirá de prefijo):

Además, para un objeto recién creado podría ser así


Ahora no se me ocurre dónde exactamente se puede buscar en la ayuda o buscar en el sitio, pero el tutorial me recordó esta página: https://book.mql4.com/ru/functions/strings

Allí puede encontrar información y un ejemplo de código. Sólo tiene que utilizar TimeToString en lugar de TimeToStr. Sin embargo, puede ser de gran ayuda para dominar el nuevo lenguaje MQL4. También en combinación con la ayuda para el lenguaje actualizado.


Hola, cariño ;) Imagínate, cuánto tiempo llevo escribiendo código para diferentes objetos y nunca se me ha ocurrido hacer una función aparte para crear nombres, siempre lo he hecho directamente en el código. He estado trabajando demasiado. Gracias por el consejo. Y en cualquier otro lugar, donde sea relevante, para la compacidad, escribo las funciones, pero aquí algo atormentado todo el tiempo.

ZS. Ahí has dicho hola Lyov ;).

Razón de la queja: