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

 
Fast235 #:

comme le dit l'un des participants, à l'usine.

en raison de l'impossibilité de la perception

Vous devez attribuer un numéro unique à l'objet, ce numéro doit être collecté à partir des paramètres :

-Heure d'ouverture de l'objet

- période d'objet

- le délai de l'objet

Par exemple :

int Num= TimeOpen+Period*0.0001

Je ne suis pas sûr que ce nombre soit exclusif, et le type de données sous int ne convient pas, mais de préférence int.

 
Mikhail Toptunov #:

Un numéro unique doit être attribué à l'objet, et ce numéro doit être collecté à partir des paramètres :

-Heure d'ouverturede l' objet

- période d'objet

- l'horizon temporel de l'objet

Par exemple :

Je ne suis pas sûr que ce nombre soit exclusif, et le type de données sous int ne convient pas, mais de préférence int.

un numéro unique est attribué automatiquement - tr_Deal73772984

la question n'est pas claire

 

Regardez ce code simple

   for(uint i=0; i<total; i++)
     {
      //--- try to get deals ticket
      if((ticket=HistoryDealGetTicket(i))>0)
        {
         symbol=HistoryDealGetString(ticket,DEAL_SYMBOL);
         if(symbol!=Symbol())
            continue;
         //--- get deals properties
         price =HistoryDealGetDouble(ticket,DEAL_PRICE);
         time  =(datetime)HistoryDealGetInteger(ticket,DEAL_TIME);
         type  =HistoryDealGetInteger(ticket,DEAL_TYPE);
         entry =HistoryDealGetInteger(ticket,DEAL_ENTRY);
         profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
         id    =HistoryDealGetInteger(ticket, DEAL_POSITION_ID);
         //---
         text  =DoubleToString(profit,2);
         //---
         //+------------------------------------------------------------------+
         //|                                                                  |
         //+------------------------------------------------------------------+
         if(price && time && symbol==Symbol())
           {
            //--- create price object
            name=prefix+"Deal"+string(ticket);
            name2=prefix+"Price"+string(ticket);
            if(entry==DEAL_ENTRY_IN)
              {
               ObjectCreate(0,name,OBJ_ARROW_LEFT_PRICE,0,time,price,0,0);
                 {
                  timeOpen=time;
                  priceOpen=price;
                 }
              }
            if(entry==DEAL_ENTRY_OUT)
              {
               // if(ShowRightTabTab)
               //---создадим метку на закрытии
               ObjectCreate(0,name,OBJ_ARROW_RIGHT_PRICE,0,time,price,0,0);
               //--- нарисуем линию  сделки
               ObjectCreate(0,name+"_trend",OBJ_TREND,0,timeOpen,priceOpen,time,price);
               //--- добавим на график результат сделки
               ObjectCreate(0,name2,OBJ_TEXT,0,time,price+offset*_Point);
               if(profit>0.0)
                  clr=inpColorTP;
               else
                  clr=inpColorSL;
              }
 

Bonjour.

Comment rendre les niveaux de Fibonacci visibles/invisibles ? En général, nous devons supprimer certains niveaux. Si j'utilise la propriété OBJPROP_LEVELS, elle ne rend disponibles que les N premiers niveaux. Comment définir la propriété de visibilité pour chacun des niveaux, ou la supprimer complètement ?

 
leonerd #:

Bonjour.

Comment rendre les niveaux de Fibonacci visibles/invisibles ? En général, nous devons supprimer certains niveaux. Si j'utilise la propriété OBJPROP_LEVELS, elle ne rend disponibles que les N premiers niveaux. Comment puis-je définir la propriété de visibilité pour chacun des niveaux, ou la supprimer complètement ?

C'est comme ça.

double fiboLev[] = {0.0, 0.236, 0.382, 0.5, 0.618, 0.764, 0.882, 1.0, 1.236, 1.382, 1.618, 2.0, 2.236, 2.618, 3.236, 3.618, 4.236};
/************************fiboCreate function*************************/
void fiboCreate(datetime t0, double p0, datetime t1, double p1)
 {
  long chartID = ChartID();
  if(ObjectFind(chartID, fiboName) < 0)
   {
    ObjectCreate(chartID, fiboName, OBJ_FIBO, 0, t1, p1, t0, p0);
    ObjectSetInteger(chartID, fiboName, OBJPROP_WIDTH, 2);
    ObjectSetInteger(chartID, fiboName, OBJPROP_COLOR, clrFibo);
    ObjectSetInteger(chartID, fiboName, OBJPROP_LEVELS, 23);
    ObjectSetInteger(chartID, fiboName, OBJPROP_LEVELCOLOR, clrFibo);
    for(int i = 0; i < 17; i++)
     {
      ObjectSetDouble(chartID, fiboName, OBJPROP_LEVELVALUE, i, fiboLev[i]);
      ObjectSetString(chartID, fiboName, OBJPROP_LEVELTEXT, i, "%$ ("+DoubleToString(fiboLev[i]*100, 1)+")");
     }
   }
  else
    if(ObjectFind(chartID, fiboName) == 0)
     {
      ObjectSetInteger(chartID, fiboName, OBJPROP_TIME, 0, t0);
      ObjectSetDouble(chartID, fiboName, OBJPROP_PRICE, 0, p0);
      ObjectSetInteger(chartID, fiboName, OBJPROP_TIME, 1, t1);
      ObjectSetDouble(chartID, fiboName, OBJPROP_PRICE, 1, p1);
     }
  ChartRedraw();
 }/******************************************************************/

Ceci est extrait de l'EA, certaines variables ne sont pas définies ici. Ce code ne sera pas compilé.

 

Bonjour, existe-t-il un moyen de supprimer un élément d'un tableau avec un décalage de la structure en utilisant les moyens standards.


struct OrderFib
  {
   double            id;
   double            Price[Umax];            
   int               type;
   int               PeriodUr50;  // № Периода
  } trade_buff[];

1) trade_buff[0]...
   trade_buff[1]... deleted
   trade_buff[2]...

2) trade_buff[0]...
   trade_buff[1]... 
 

Fait comme ça, vous pourriez le faire de manière plus professionnelle, n'est-ce pas ?

//+----------Удаляем старый сигнал-----------------------------------+
void filterDeal_1(int tf)
  {
   for(int i= 0; i<CountTrade; i++)
      if(trade_buff[i].tf == tf)
        {
         ArrayRemove(trade_buff,i,1);
         CountTrade--;
         i= 0;
        }
  }
 
Mikhail Toptunov #:

Cela a été fait, mais pourrait-on le faire de manière plus professionnelle ?

Bonjour, pour supprimer les éléments d'un tableau, commencez par la fin du tableau, vous n'avez donc pas besoin de changer l'index. Il se met en ordre tout seul.

for(int i=CountTrade-1; i>=0; i--)
   {
   if(trade_buff[i].tf == tf)
      {
      ArrayRemove(trade_buff,i,1);
      }
   }
 
Aleksei Stepanenko #:

Bonjour, pour supprimer les éléments d'un tableau, il faut commencer à la fin du tableau, puis il n'est pas nécessaire de modifier l'index. Il se met en ordre tout seul.

Bien, cool, merci !

 
Mikhail Toptunov #:

Un numéro unique doit être attribué à l'objet, et ce numéro doit être collecté à partir des paramètres :

-Heure d'ouverturede l' objet

- période d'objet

- l'horizon temporel de l'objet

Par exemple :

Je ne suis pas sûr que ce nombre sera exclusif, et le type de données sous int ne convient pas, mais de préférence int.

Si nous voulons décrypter plus tard, il est préférable de crypter le nom de l'objet au lieu du numéro. C'est-à-dire que nous assemblons le nom à partir des chiffres et les chiffres en chaîne, puis les chiffres en chaîne en int. La seule chose à faire est soit de diviser les champs par des séparateurs, soit de prendre en compte le nombre de caractères de chaque champ.