任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 823

 

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

否则在闭合的大括号后添加,或在此括号内移动对象的修改运算符。

 
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号文件发出来了(对象不存在)。正确,它不存在,它必须被创造出来,但它我(不存在)!可以用它来做什么?还是我在别的地方搞砸了?

我匆匆忙忙地试了一下你的版本,作为一个脚本,替换了时间和标记,并检查了对象,但它没有返回错误。

也许,为了节省麻烦,考虑到新的MQL4语言,尝试形成箭头对象?

这里是创建你指定的箭头对象的脚本的 "主体",考虑到新的语言(时间和标记是任意的,而不是你到目前为止才知道的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

在那里你可以找到信息和代码样本。只需使用TimeToString 而不是TimeToStr。然而,在掌握新的MQL4语言时,它可以起到很大的帮助作用。同时结合更新语言的帮助。

 
evillive:
将时间添加到对象的名称中。
非常感谢您!
 
DiPach:

是的,个人的名字可以有不同的拼写方式。

例如,为对象形成单独名称的函数可以是这样的。

而在程序的主体中,它可以这样输出(事先在条件中写好作为前缀的内容)。

此外,对于一个新创建的对象,它可能看起来像这样


现在我想不起来你到底在哪里可以在帮助中或在网站上搜索到它,但这个教程让我想起了这个页面:https://book.mql4.com/ru/functions/strings

在那里你可以找到信息和代码样本。只需使用TimeToString而不是TimeToStr。然而,在掌握新的MQL4语言时,它可以起到很大的帮助作用。同时结合更新语言的帮助。


嗨,亲爱的;)想象一下,我为不同的对象写了多久的代码,我从来没有想过要做一个单独的函数来创建名字--我总是直接在代码中完成它。我一直在努力工作。谢谢你的提示。而在其他地方,在相关的地方,为了紧凑起见,我写的是函数,但这里的东西一直在折磨着我。

ZS.你已经向Lyov问好了;)。