Verser l'objet

 

Salutations, chers programmateurs !

"Pour le terminal MT4.

J'aimerais que vous me donniez quelques conseils. Je suis tombé sur la nuance suivante...

1. je crée un objet rectangle - cela fonctionne :

2. je définis les propriétés :

- style - ça a marché ;

- largeur de ligne - travaillée ;

- couleur - travaillée ;

- remplir - ne veut pas écouter ;

J'ai cherché, cherché et trouvé que l'objet rectangle est créé avec l'option "Draw object as background" cochée par défaut. Tant que cette case est cochée, le rectangle n'écoute pas les commandes du programme. Si vous supprimez manuellement cette case des propriétés de l'objet, le programme peut alors contrôler le remplissage.

La question est de savoir pourquoi l'objet n'est pas tout de suite mis en propriété "fill" ? Ce que je fais mal et ce que je ne sais pas ?

Aidez ceux qui le peuvent !

Voici le code utilisé :

#property indicator_chart_window

int start()
{
long current_chart_id=ChartID() ;
//
chaîne de caractères obj_name1="Rectangle1" ;
//
double Price_Level_1 = 1296 ; // prix de l'or
double Price_Level_2 = 1293 ;
//
datetime Left_Side_1 = Time[9] ;
// datetime Right_Side_1 = Time[0] + PeriodSeconds() * 7 ;
//
const. couleur clr = clrBeige ;
const ENUM_LINE_STYLE style = STYLE_DASH ;
const int width = 1 ;
const bool fill = false ;
//
ObjectCreate (current_chart_id, obj_name1, OBJ_RECTANGLE, 0, Left_Side_1, Price_Level_1, Right_Side_1, Price_Level_2) ;
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_COLOR, clr) ;
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_STYLE, style) ;
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_WIDTH, width) ;
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false) ; // n'est pas défini immédiatement

retour(0) ;

 

Essayez

//+------------------------------------------------------------------+
void Prn_Rect_Label(string Name, int X, int Y, int width, int height, color CLR, int Corner, bool back)
   {
      ObjectDelete(0,Name);
      ObjectCreate(0,Name,OBJ_RECTANGLE_LABEL,0,0,0);
      ObjectSetInteger(0,Name,OBJPROP_XDISTANCE,X);
      ObjectSetInteger(0,Name,OBJPROP_YDISTANCE,Y);
      ObjectSetInteger(0,Name,OBJPROP_XSIZE,width);
      ObjectSetInteger(0,Name,OBJPROP_YSIZE,height);
      ObjectSetInteger(0,Name,OBJPROP_BGCOLOR,CLR);
      ObjectSetInteger(0,Name,OBJPROP_CORNER,Corner);
      ObjectSetInteger(0,Name,OBJPROP_BACK,back);
      return;
   }
 
Quelle est l'astuce ? Pourquoi l'objet ne répond-il pas au remplissage sans autre manipulation ?
 
Renat Akhtyamov:

Essayez

Vous n'avez pas à le supprimer, vous devez vérifier s'il existe. Si elle n'existe pas, créez-la. Et ensuite, définir les paramètres.
 
Alors, pourquoi le bouche-trou n'écoute-t-il pas ?
 
Artyom Trishkin:
Vous n'avez pas à le supprimer, vous devez vérifier s'il existe. Si elle n'existe pas, créez-la. Et ensuite, définir des paramètres.

D'accord

trouver en premier.

Mais si l'objet est supprimé et recréé à chaque tic avec le même nom, la recherche d'un objet connu et existant est inutile.
 
5211845:
Alors, pourquoi le remplissage n'écoute-t-il pas ?

et si oui (faux --> vrai) :

   ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, true); // не задается сразу
 

Cela ne fonctionne pas. J'ai déjà essayé la fonction suivante

ObjectSet (nom_objet1, OBJPROP_FILL, true | false) ;

 
Ce code doit-il fonctionner ? C'est peut-être un problème dans mon terminal ?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false) ;

 
5211845:
En général, ce code devrait fonctionner ? Peut-être que c'est un problème dans mon terminal ?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false) ;

Bien sûr.

Comparez ce code avec votre propre code en détail et placez-le dans OnTimer(), car il n'y a pas de ticks de sortie, ou exécutez-le temporairement dans OnInit() :

https://www.mql5.com/ru/docs/constants/objectconstants/enum_object/obj_rectangle

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
  • www.mql5.com
//| Cоздает прямоугольник по заданным координатам                    |               time1=0,                            price1=0,                         time2=0,                            price2=0,                        width=1,            //| Перемещает точку привязки прямоугольника                         |...
 

J'ai basé mon code sur cet exemple. Je n'arrive pas à comprendre quelle est la différence. Seulement qu'il y a une fenêtre pour les paramètres d'entrée.

Et si je n'ai pas besoin de cette fenêtre ? Si je veux juste créer un objet avec les paramètres que je veux. Est-ce possible ?