Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 823

 

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

else nach der schließenden geschweiften Klammer hinzufügen, oder innerhalb dieser Klammer die Objektänderungsoperatoren verschieben.

 
tara:

Danke, aber das Problem ist nicht verschwunden.

 

Kann mir jemand sagen, ob diese Ausdrücke gleichwertig sind oder nicht?

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:
Könnt ihr mir sagen, warum 4202 ausfällt (Objekt existiert nicht). Richtig, es existiert nicht, es muss geschaffen werden, aber es gibt mich (nicht)! Was kann man damit machen? Oder habe ich irgendwo anders einen Fehler gemacht?

Ich habe in aller Eile Ihre Version als Skript ausprobiert, indem ich die Zeit und die Markierungen ersetzt und nach Objekten gesucht habe, aber es hat keine Fehler geliefert.

Vielleicht, um die Mühe zu sparen, versuchen, Pfeil-Objekte unter Berücksichtigung der neuen MQL4 Sprache zu bilden?

Hier ist der "Body" für das Skript, das die von Ihnen angegebenen Pfeil-Objekte erstellt, unter Berücksichtigung der neuen Sprache (die Zeiten und Marken sind willkürlich, anstelle von SignalBarsTime, Hi2, SignalBarsTime, Lo2, die Sie bisher nur kennen):

//+------------------------------------------------------------------+
//| 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.: Ich habe die Zeile in meinem Beitrag oben korrigiert und ANCHOR_BOTTOM durch ANCHOR_TOP ersetzt:
 if(ObjectFind(0,"Покупка")<0)
     {
      ArrowUpCreate(0,"Покупка",0,Time[1],Low[1],
                    ANCHOR_TOP,clrGreen,STYLE_SOLID,5,false,false,true,0);
     }
 
DiPach:
P./S.: Ich habe die Zeile in meinem Beitrag oben korrigiert und ANCHOR_BOTTOM durch ANCHOR_TOP ersetzt:
Vielen Dank, sehr hilfreich. Ich möchte noch eine Möglichkeit finden, die Namen der Objekte automatisch zuzuweisen, ich muss sie jedes Mal neu zeichnen. Vielleicht können Sie mir sagen, wo ich etwas darüber erfahren kann und in welchem Bereich ich suchen sollte?
 
Veterros:
Vielen Dank, das ist sehr hilfreich. Ich würde gerne herausfinden, wie ich Objekte automatisch benennen kann, weil ich sie jedes Mal neu zeichnen muss. Vielleicht können Sie mir sagen, wo ich etwas darüber erfahren kann und wo ich suchen muss?
Fügen Sie dem Namen des Objekts die Zeit hinzu.
 
Veterros:

Ja, der individuelle Name kann auf verschiedene Weise geschrieben werden.

Die Funktion zur Bildung individueller Namen für Objekte kann zum Beispiel so aussehen:

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

Und im Hauptteil des Programms kann es so ausgegeben werden (nachdem man vorher in die Bedingungen geschrieben hat, was als Präfix dienen wird):

...

string nameobj=nameNi(prefixX,timeX);

Für ein neu erstelltes Objekt könnte es wie folgt aussehen

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


Ich weiß nicht mehr genau, wo man das in der Hilfe nachschlagen oder auf der Website suchen kann, aber die Anleitung hat mich an diese Seite erinnert: https://book.mql4.com/ru/functions/strings

Dort finden Sie Informationen und ein Codebeispiel. Verwenden Sie einfach TimeToString anstelle von TimeToStr. Es kann jedoch eine große Hilfe bei der Beherrschung der neuen Sprache MQL4 sein. Auch in Kombination mit der Hilfe für die aktualisierte Sprache.

 
evillive:
Fügen Sie dem Namen des Objekts die Uhrzeit hinzu.
Herzlichen Dank!
 
DiPach:

Ja, der individuelle Name kann auf verschiedene Weise geschrieben werden.

Die Funktion zur Bildung individueller Namen für Objekte kann zum Beispiel so aussehen:

Und im Hauptteil des Programms kann es so ausgegeben werden (nachdem man vorher in die Bedingungen geschrieben hat, was als Präfix dienen wird):

Für ein neu erstelltes Objekt könnte es wie folgt aussehen


Ich weiß nicht mehr genau, wo man das in der Hilfe nachschlagen oder auf der Website suchen kann, aber die Anleitung hat mich an diese Seite erinnert: https://book.mql4.com/ru/functions/strings

Dort finden Sie Informationen und ein Codebeispiel. Verwenden Sie einfach TimeToString anstelle von TimeToStr. Es kann jedoch eine große Hilfe bei der Beherrschung der neuen Sprache MQL4 sein. Auch in Kombination mit der Hilfe für die aktualisierte Sprache.


Hallo, mein Schatz ;) Stellen Sie sich vor, wie lange ich schon Code für verschiedene Objekte schreibe, und ich habe nie daran gedacht, eine separate Funktion zum Erstellen von Namen zu erstellen - ich habe es immer direkt im Code getan. Ich habe zu hart gearbeitet. Danke für den Hinweis. Und überall sonst, wo es relevant ist, für Kompaktheit, schreibe ich die Funktionen, aber hier etwas gequält die ganze Zeit.

ZS: Da hast du Lyov gegrüßt ;).