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

 

Quelques autres questions sont apparues en cours de route :

1. Il y a une chaîne :

datetime ProvTimeX1=ObjectGetInteger(0, "Y="+IntegerToString(y,0,''),OBJPROP_TIME) ;

Le compilateur le désapprouve en écrivant"perte possible de données due à la conversion de type". Qu'est-ce qui ne va pas ici ?

2. Comment mql5 met-il les données dans des tableaux et les distribue-t-il, dans quelle direction ?

 
WindSW:

Quelques autres questions sont apparues en cours de route :

1. Il y a une chaîne :

datetime ProvTimeX1=ObjectGetInteger(0, "Y="+IntegerToString(y,0,''),OBJPROP_TIME) ;

Le compilateur le désapprouve en écrivant"perte possible de données due à la conversion de type". Qu'est-ce qui ne va pas ici ?

Eh bien, c'est vrai, vous essayez d'écrire dans la variable datetime une valeur longue retournée par ObjectGetInteger. Faites la conversion de type.

datetime ProvTimeX1=(datetime)ObjectGetInteger(0,"Y="+IntegerToString(y,0,' '),OBJPROP_TIME);
2. Comment les données dans mql5 sont-elles placées dans des tableaux et allouées, dans quelle direction ?

La direction est toujours la même - du début (l'index est zéro) à la fin, MAIS si vous ne spécifiez pas l'indexation avec la fonction ArraySetAsSeries. Si la question porte sur l'indexation.

 

Bonjour, je n'arrive pas à diviser les chiffres, le résultat est 0.0

Pourquoi ?

   double res =  8000/16000 * 100;
   Print(res);
 
ryzhak.vladimir:

Bonjour, je n'arrive pas à diviser les chiffres, le résultat est 0.0

Pourquoi ?



   double res=((double)8000/16000)*100;
   Print(res);
Documentation >>> Conversion de type
 

C'est stupide, bien sûr, de devoir ajouter quelque chose pour changer quelque chose, une calculatrice sans points est très bien et il n'est pas nécessaire de spécifier quel type de données, mais ok, la deuxième façon est d'ajouter ".0" à la fin de l'entier.

donc l'expression correcte serait la suivante.

double res =8000.0/16000.0*100;
Print(res);
À propos, dans un certain langage de programmation a vu une variable de sorte que le terminal sélectionne son type, peut-être qu'il était seulement pour les données numériques, mais encore confortable, il n'est pas mis en œuvre ici, j'ai essayé de le trouver dans la documentation - ne pouvait pas trouver ?
 
Merci à tous)
 

Dans la version 4 : datetime TimeX2=Time[0]+18000 ; - augmente la valeur du temps de 5 bougies en avant

Maintenant en 5 quand on écrit :

datetime Topen[];
ArraySetAsSeries(Topen,true);
CopyTime(_Symbol,_Period,0,3,Topen);
datetime TimeX2=Topen[0]+18000;

Lors du débogage, une erreur de dépassement de tableau est signalée et la ligne detemps TimeX2=Topen[0]+18000 est indiquée ;

Comment obtenir le même résultat en 5 qu'en 4 ?

Addendum : C'est écrit correctement, j'ai juste fait une erreur - dans OnInit le tableau était vide.

 
WindSW:

Dans la version 4 : datetime TimeX2=Time[0]+18000 ; - augmente la valeur du temps de 5 bougies en avant

Maintenant en 5 quand on écrit :

Lors du débogage, une erreur de dépassement de tableau est signalée et la ligne detemps TimeX2=Topen[0]+18000 est indiquée ;

Comment obtenir le même résultat en 5 qu'en 4 ?

datetime b=TimeTradeServer()+60*min; //min - кол-во минут от текущего времени
 

J'ai rencontré un problème avec le dessin des niveaux.

void OnInit()
  {
   ObjectCreate(0,oPP,OBJ_TREND,0,0,0,0,0);
   ObjectSetInteger(0,oPP,OBJPROP_COLOR,clrDeepSkyBlue);
   ObjectSetInteger(0,oPP,OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,oPP,OBJPROP_WIDTH,2);
   ObjectSetInteger(0,oPP,OBJPROP_RAY,false);
   ObjectCreate(0,oRes1,OBJ_TREND,0,0,0,0,0);
   ObjectSetInteger(0,oRes1,OBJPROP_COLOR,clrDeepSkyBlue);
   ObjectSetInteger(0,oRes1,OBJPROP_STYLE,STYLE_DASH);
   ObjectSetInteger(0,oRes1,OBJPROP_WIDTH,1);
   ObjectSetInteger(0,oRes1,OBJPROP_RAY,false);
   ObjectCreate(0,oSup1,OBJ_TREND,0,0,0,0,0);
   ObjectSetInteger(0,oSup1,OBJPROP_COLOR,clrDeepSkyBlue);
   ObjectSetInteger(0,oSup1,OBJPROP_STYLE,STYLE_DASH);
   ObjectSetInteger(0,oSup1,OBJPROP_WIDTH,1);
   ObjectSetInteger(0,oSup1,OBJPROP_RAY,false);
   PPlevel();
  }
//+------------------------------------------------+
//| Пивот поинт                                    |
//+------------------------------------------------+
void PPlevel()
   {
    double iH=iHigh(Symbol(),PERIOD_D1,1);
    double iL=iLow(Symbol(),PERIOD_D1,1);
    double iC=iClose(Symbol(),PERIOD_D1,1);
    double iO=iOpen(Symbol(),PERIOD_D1,1);
    int New_candle=0;
    New_candle=NBar(); // функция появления новой свечи
    if(New_candle==1)
      {
       double range=NormalizeDouble(iH-iL,_Digits);
       double PP=NormalizeDouble((iH+iL+iC)/3,_Digits);
       double R1=NormalizeDouble((2*PP)-iL,_Digits);
       double S1=NormalizeDouble((2*PP)-iH,_Digits);
       TimeStart=iTime(Symbol(),PERIOD_D1,0)-7200;
       TimeFinish=Topen[0]+64000;
       ObjectSetInteger(0,oPP,OBJPROP_TIME,TimeStart);                 // отрисовка PP
       ObjectSetDouble(0,oPP,OBJPROP_PRICE,PP);
       ObjectSetInteger(0,oPP,OBJPROP_TIME,1,TimeFinish);
       ObjectSetDouble(0,oPP,OBJPROP_PRICE,1,PP);
       ObjectSetInteger(0,oRes1,OBJPROP_TIME,TimeStart);               // отрисовка сопротивления
       ObjectSetDouble(0,oRes1,OBJPROP_PRICE,R1);
       ObjectSetInteger(0,oRes1,OBJPROP_TIME,1,TimeFinish);
       ObjectSetDouble(0,oRes1,OBJPROP_PRICE,1,R1);
       ObjectSetInteger(0,oSup1,OBJPROP_TIME,TimeStart);               // отрисовка поддержки
       ObjectSetDouble(0,oSup1,OBJPROP_PRICE,S1);
       ObjectSetInteger(0,oSup1,OBJPROP_TIME,1,TimeFinish);
       ObjectSetDouble(0,oSup1,OBJPROP_PRICE,1,S1);
      }
   }
J'ai vérifié avec Print() et j'ai obtenu des résultats de calcul normaux "Exemple : (GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40" mais il ne dessine pas ces niveaux. En vérifiant dans le terminal via"Liste des objets", ils n'y sont pas. Veuillez me dire quel est le problème. Où ai-je tort ?
 
WindSW:

J'ai du mal à dessiner les niveaux.

J'ai vérifié avec Print() et j'ai obtenu des résultats de calcul normaux "Exemple : (GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40" mais il ne dessine pas ces niveaux. En vérifiant dans le terminal via"Liste des objets", ils n'y sont pas. Veuillez me dire quel est le problème ? Où ai-je tort ?
Imprimez les résultats de ObjectCreate, peut-être y a-t-il une erreur.
Raison: