Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 823

 

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

else ajouter après le crochet fermant, ou à l'intérieur de ce crochet déplacer les opérateurs de modification d'objet.

 
tara:

Merci, mais le problème n'a pas disparu.

 

Quelqu'un peut-il suggérer si ces expressions sont équivalentes ou non?

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:
Pouvez-vous me dire pourquoi le 4202 s'arrête (Object does not exist). Correct, il n'existe pas, il doit être créé, mais il me (n'existe pas) ! Que peut-on en faire ? Ou j'ai merdé ailleurs ?

J'ai hâtivement essayé votre version en tant que script, en remplaçant l'heure et les marques et en vérifiant les objets, mais il n'a pas renvoyé d'erreurs.

Peut-être, pour éviter les problèmes, essayez de former des objets flèches en tenant compte du nouveau langage MQL4 ?

Voici le "corps" du script qui crée les objets-flèches que vous avez spécifiés, en tenant compte du nouveau langage (les temps et les marques sont arbitraires, au lieu de SignalBarsTime, Hi2, SignalBarsTime, Lo2, que vous ne connaissez que jusqu'à présent) :

//+------------------------------------------------------------------+
//| 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. : J'ai corrigé la ligne dans mon message ci-dessus en remplaçant ANCHOR_BOTTOM par 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. : J'ai corrigé la ligne dans mon message ci-dessus en remplaçant ANCHOR_BOTTOM par ANCHOR_TOP:
Merci beaucoup, très utile. J'aimerais encore trouver un moyen de faire en sorte que les noms des objets soient attribués automatiquement, je dois les redessiner à chaque fois. Vous pourriez peut-être indiquer où se renseigner sur ce sujet et dans quel domaine chercher ?
 
Veterros:
Merci beaucoup, très utile. J'aimerais trouver comment nommer les objets automatiquement, car je dois les redessiner à chaque fois. Peut-être pouvez-vous me dire où trouver des informations à ce sujet et où chercher ?
Ajouter le temps au nom de l'objet.
 
Veterros:

Oui. Le nom de l'individu peut être épelé de différentes manières.

Par exemple, la fonction permettant de former des noms individuels pour les objets peut ressembler à ceci :

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

Et dans le corps du programme on peut l'éditer comme ceci (en ayant écrit au préalable dans les conditions ce qui servira de préfixe) :

...

string nameobj=nameNi(prefixX,timeX);

De plus, pour un objet nouvellement créé, cela pourrait ressembler à ceci

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


Je ne sais pas où vous pouvez le trouver dans l'aide ou sur le site, mais le tutoriel m'a rappelé cette page : https://book.mql4.com/ru/functions/strings

Vous y trouverez des informations et un exemple de code. Utilisez simplement TimeToString au lieu de TimeToStr. Cependant, il peut être d'une grande aide lors de la maîtrise du nouveau langage MQL4. Également en combinaison avec l'aide pour la langue mise à jour.

 
evillive:
Ajoutez l'heure au nom de l'objet.
Merci beaucoup !
 
DiPach:

Oui. Le nom de l'individu peut être épelé de différentes manières.

Par exemple, la fonction permettant de former des noms individuels pour les objets peut ressembler à ceci :

Et dans le corps du programme on peut l'éditer comme ceci (en ayant écrit au préalable dans les conditions ce qui servira de préfixe) :

De plus, pour un objet nouvellement créé, cela pourrait ressembler à ceci


Je ne sais pas où vous pouvez le trouver dans l'aide ou sur le site, mais le tutoriel m'a rappelé cette page : https://book.mql4.com/ru/functions/strings

Vous y trouverez des informations et un exemple de code. Utilisez simplement TimeToString au lieu de TimeToStr. Cependant, il peut être d'une grande aide lors de la maîtrise du nouveau langage MQL4. Également en combinaison avec l'aide pour la langue mise à jour.


Salut, chérie ;) Imaginez, depuis combien de temps j'écris du code pour différents objets et je n'ai jamais pensé à faire une fonction séparée pour créer des noms - je l'ai toujours fait directement dans le code. J'ai travaillé trop dur. Merci pour le conseil. Et partout ailleurs, là où c'est pertinent, pour la compacité, j'écris les fonctions, mais ici quelque chose me tourmente tout le temps.

ZS. Voilà, tu as dit bonjour à Lyov ;).