Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 823

 

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

caso contrário, adicionar após o fechamento do suporte encaracolado, ou dentro deste suporte mover os operadores de modificação de objetos.

 
tara:

Obrigado, mas o problema não desapareceu.

 

Alguém pode sugerir se essas expressões são equivalentes ou não?

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:
Vocês podem me dizer por que o 4202 desiste (Objeto não existe). Correto, ele não existe, ele deve ser criado, mas ele me (não existe)! O que pode ser feito com ele? Ou eu estraguei tudo em outro lugar?

Tentei apressadamente sua versão como um roteiro, substituindo o tempo e as marcas e verificando objetos, mas não retornou erros.

Talvez, para poupar o trabalho, tente formar objetos de seta considerando a nova linguagem MQL4?

Aqui está o "corpo" do roteiro que cria os objetos de seta que você especificou, levando em conta a nova linguagem (os tempos e as marcas são arbitrários, ao invés de SignalBarsTime, Hi2, SignalBarsTime, Lo2, que você conhece apenas até agora):

//+------------------------------------------------------------------+
//| 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.: Corrigi agora a linha em meu posto acima, substituindo 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.: Corrigi agora a linha em meu posto acima, substituindo ANCHOR_BOTTOM por ANCHOR_TOP:
Muito obrigado, muito útil. Eu ainda gostaria de encontrar uma maneira de fazer com que os nomes dos objetos sejam atribuídos automaticamente, tenho que redesenhá-los a cada vez. Talvez aconselhar onde aprender sobre o assunto e em que área procurar?
 
Veterros:
Muito obrigado, isso é muito útil. Eu gostaria de descobrir como nomear objetos automaticamente, porque tenho que redesenhá-los a cada vez. Talvez você possa me dizer onde descobrir e onde procurar?
Acrescente tempo ao nome do objeto.
 
Veterros:

Sim. O nome individual pode ser grafado de diferentes maneiras.

Por exemplo, a função de formar nomes individuais para objetos pode se parecer com isto:

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

E no corpo do programa pode ser produzido assim (tendo escrito previamente em condições o que servirá como prefixo):

...

string nameobj=nameNi(prefixX,timeX);

Além disso, para um objeto recém-criado, ele poderia se parecer com este

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


Agora não consigo pensar onde exatamente você pode procurar em ajuda ou pesquisar o site, mas o tutorial me lembrou desta página: https://book.mql4.com/ru/functions/strings

Lá você pode encontrar informações e uma amostra de código. Basta usar o TimeToString em vez do TimeToStr. Entretanto, pode ser de grande ajuda quando se domina a nova linguagem MQL4. Também em combinação com a ajuda para a linguagem atualizada.

 
evillive:
Acrescente o tempo ao nome do objeto.
Muito obrigado!
 
DiPach:

Sim. O nome individual pode ser grafado de diferentes maneiras.

Por exemplo, a função de formar nomes individuais para objetos pode se parecer com isto:

E no corpo do programa pode ser produzido assim (tendo escrito previamente em condições o que servirá como prefixo):

Além disso, para um objeto recém-criado, ele poderia se parecer com este


Agora não consigo pensar onde exatamente você pode procurar em ajuda ou pesquisar o site, mas o tutorial me lembrou desta página: https://book.mql4.com/ru/functions/strings

Lá você pode encontrar informações e uma amostra de código. Basta usar o TimeToString em vez do TimeToStr. Entretanto, pode ser de grande ajuda quando se domina a nova linguagem MQL4. Também em combinação com a ajuda para a linguagem atualizada.


Oi, querido ;) Imagine há quanto tempo estou escrevendo código para diferentes objetos e nunca pensei em fazer uma função separada para criar nomes - eu sempre fiz isso diretamente no código. Eu tenho trabalhado muito. Obrigado pela dica. E em todos os outros lugares, quando relevante, para a compacidade, escrevo as funções, mas aqui algo atormentado o tempo todo.

ZS. Lá você disse olá Lyov ;).