Questions des débutants MQL5 MT5 MetaTrader 5 - page 1484

 
Novichokkk #:

Le 14 est binaire. C'est 1110.

Décalez d'un bit vers la gauche pour obtenir 0111,

nous avons des "gauches" différentes :-)

1110<<1 := 11100

 
Maxim Kuznetsov #:

vous et moi avons des "gauches" différentes :-)

1110<<1 := 11100

Je l'ai lu sur internet. C'est pour 32 bits je comprends, pour 16 c'est pareil, rien ne saute d'un bit. Mais je ne fais qu'apprendre, vous avez probablement raison.

Ce n'est pas la question, c'est juste une remarque secondaire. J'ai été surpris par une telle construction dans le terminal. Cet indicateur ne provient même pas de la base de code, il provient du terminal du dossier Examples.

Dossiers :
8888.jpg  49 kb
 

Comment modifier un ancien design ?

ObjectSetText("Maximum",DoubleToString(ChartGetDouble(0,CHART_PRICE_MAX,0),5),8,"Arial",Red);

Ici, tout est clair : tel objet, telle description, telle taille de police, tel type de police, telle couleur.

Mais cela vient de l'ancien.

Je lis ce qui est remplacé

ObjectSetText

En

ObjectGetInteger,ObjectSetString,ObjectSetIntegerStringLen.

Mais dans toutes ces fonctions, il n'y a pas de paramètres comme dans ObjectSetText.

Документация по MQL5: Графические объекты / ObjectGetInteger
Документация по MQL5: Графические объекты / ObjectGetInteger
  • www.mql5.com
ObjectGetInteger - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

J'avais ce code sur µl4

int OnInit()
  {
   SetIndexBuffer(0,H);
   SetIndexStyle(0,2);
   SetIndexBuffer(1,L);
   SetIndexStyle(1,2);

   if(ObjectCreate("Maximum",OBJ_LABEL,0,0,0))
     {
      ObjectSet("Maximum",OBJPROP_XDISTANCE,1);
      ObjectSet("Maximum",OBJPROP_YDISTANCE,1);
      ObjectSet("Maximum",OBJPROP_CORNER,1);
     }
   ObjectSetText("Maximum",DoubleToStr(WindowPriceMax(),4),8,"Arial",Red);

   if(ObjectCreate("Minimum",OBJ_LABEL,0,0,0))
     {
      ObjectSet("Minimum",OBJPROP_XDISTANCE,1);
      ObjectSet("Minimum",OBJPROP_YDISTANCE,1);
      ObjectSet("Minimum",OBJPROP_CORNER,3);
     }
   ObjectSetText("Minimum",DoubleToStr(WindowPriceMin(),4),8,"Arial",Blue);

   return(0);
  }



Je l'ai changé pour µl5, seulement ObjectSetText je n'ai pas compris comment le changer.


int OnInit()
  {
   SetIndexBuffer(0, H, INDICATOR_DATA);
   PlotIndexSetInteger(1,5,0);
   SetIndexBuffer(1, L, INDICATOR_DATA);
   PlotIndexSetInteger(2,5,0);

   if(ObjectCreate(0,"Maximum",OBJ_LABEL,0,0,0))
     {
      ObjectSetInteger(0,"Maximum",OBJPROP_XDISTANCE,1);
      ObjectSetInteger(0,"Maximum",OBJPROP_YDISTANCE,1);
      ObjectSetInteger(0,"Maximum",OBJPROP_CORNER,1);
     }
   ObjectSetText("Maximum",DoubleToString(ChartGetDouble(0,CHART_PRICE_MAX,0),5),8,"Arial",Red);

   if(ObjectCreate(0,"Minimum",OBJ_LABEL,0,0,0))
     {
      ObjectSetInteger(0,"Minimum",OBJPROP_XDISTANCE,1);
      ObjectSetInteger(0,"Minimum",OBJPROP_YDISTANCE,1);
      ObjectSetInteger(0,"Minimum",OBJPROP_CORNER,3);
     }
   ObjectSetText("Minimum",DoubleToString(ChartGetDouble(0,CHART_PRICE_MIN,0),5),8,"Arial",Blue);

   return(0);
  }
 
Novichokkk #:

Comment modifier un ancien modèle ?

Nous décrivons tel ou tel objet dans telle ou telle taille de police, tel ou tel type de police, telle ou telle couleur.

Mais cela provient de l'ancien modèle.

Je lis ce qui est remplacé

Pour

ObjectGetInteger,ObjectSetString,ObjectSetIntegerStringLen

Mais dans toutes ces fonctions, il n'y a pas de paramètres comme dans ObjectSetText.

La police, la taille, la couleur, la couleur de fond, etc. sont définies par des appels distincts de https://www.mql5.com/ru/docs/constants/objectconstants/enum_object_property.

 
JRandomTrader #:

La police, la taille, la couleur, la couleur de fond, etc. sont définies par des appels distincts à https://www.mql5.com/ru/docs/constants/objectconstants/enum_object_property.

Au lieu de

ObjectSetText("Maximum",DoubleToStr(WindowPriceMax(),4),8,"Arial",Red);

Dois-je procéder ainsi ?

    ObjectSetString(0,"Maximum",OBJPROP_TEXT,DoubleToString(ChartGetDouble(0,CHART_PRICE_MAX,0),5)); // описание-что вставляем в объект "Maximum"
    ObjectSetString(0,"Maximum",OBJPROP_FONTSIZE,8);    // размер шрифта описания                                      
    ObjectSetString(0,"Maximum",OBJPROP_FONT,"Arial");  // какой шрифт
    ObjectSetString(0,"Maximum",OBJPROP_COLOR,Red);     // цвет шрифта
 
Novichokkk #:

Ainsi, au lieu de

Vous devez faire ceci ?

OBJPROP_FONTSIZE et OBJPROP_COLOR - via ObjectSetInteger()

Au lieu de DoubleToString(), il est parfois plus pratique d'utiliser StringFormat(), qui permet de contrôler le format de manière plus souple.

 

Pourquoi ce script produit-il 196

//+------------------------------------------------------------------+
//|                                                         0000.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()

  {
//---
   Alert((int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR));
   
  }
//+------------------------------------------------------------------+

et celui-ci 104.

//+------------------------------------------------------------------+
//|                                                         0000.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()

  {
//---
   Alert(CHART_FIRST_VISIBLE_BAR);
   
  }
//+------------------------------------------------------------------+

Le résultat devrait être le même.

 
Novichokkk #:

Pourquoi un tel script produit-il 196

Et celui-ci 104.

Le résultat devrait être le même.

Pourquoi devrait-il être le même ?

Dans le premier cas, il s'agit d'obtenir la valeur de la propriété CHART_FIRST_VISIBLE_BAR du graphique actuel.

Dans le second cas, il s'agit d'obtenir le numéro de cette propriété.

En gros, la différence est la même qu'entre la valeur d'une cellule d'un tableau et l'index de cette cellule.

 


#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 OrangeRed

extern int Ratio=2;
int limit;
int limitBars=0;

double H[];
double L[];
//+------------------------------------------------------------------+ 
int init()
{
   SetIndexBuffer(0,H); SetIndexStyle(0,2);
   SetIndexBuffer(1,L); SetIndexStyle(1,2);

   if(ObjectCreate("Maximum",OBJ_LABEL,0,0,0))  {
      ObjectSet("Maximum",OBJPROP_XDISTANCE,1);
      ObjectSet("Maximum",OBJPROP_YDISTANCE,1);
      ObjectSet("Maximum",OBJPROP_CORNER,1);  }
   ObjectSetText("Maximum",DoubleToStr(WindowPriceMax(),4),8,"Arial",Red);

   if(ObjectCreate("Minimum",OBJ_LABEL,0,0,0))  {
      ObjectSet("Minimum",OBJPROP_XDISTANCE,1);
      ObjectSet("Minimum",OBJPROP_YDISTANCE,1);
      ObjectSet("Minimum",OBJPROP_CORNER,3);  }
   ObjectSetText("Minimum",DoubleToStr(WindowPriceMin(),4),8,"Arial",Blue);

   return(0);
}
//+------------------------------------------------------------------+ 
int start()
{
   double max[256];
   double min[256];

   if(limitBars<Bars) limit=WindowFirstVisibleBar();

   for(int i=0; i<limit; i++)
   {
      for(int shift=0; shift<Ratio; shift++) {
         max[shift]=High[i*Ratio+shift];
         min[shift]=Low[i*Ratio+shift];   }

      H[i]=max[ArrayMaximum(max,Ratio,0)];
      L[i]=min[ArrayMinimum(min,Ratio,0)];
   }

   if(limit>1)
   {
      max[0]=H[ArrayMaximum(H,limit,0)];
      min[0]=L[ArrayMinimum(L,limit,0)];
      ObjectSetText("Maximum",DoubleToStr(max[0],4));
      ObjectSetText("Minimum",DoubleToStr(min[0],4));
   }

   limitBars=Bars;
   limit=1;
   return(0);
}

Un tel indicateur existait sur l'ancien MQL4.