Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1377

 
Fast235 #:

como dice uno de los participantes, a la fábrica.

debido a la imposibilidad de percepción

Hay que asignar un número único al objeto, este número tiene que ser recogido de los parámetros:

-Hora de apertura del objeto

- período del objeto

- marco temporal del objeto

Por ejemplo:

int Num= TimeOpen+Period*0.0001

Bueno, no estoy seguro de si este número será exclusivo, y el tipo de datos bajo int no encaja, pero preferiblemente int

 
Mikhail Toptunov #:

Se debe asignar un número único al objeto, y este número debe ser recogido de los parámetros:

-Hora de apertura del objeto

- período del objeto

- el marco temporal del objeto

Por ejemplo:

Bueno, no estoy seguro de que este número será exclusivo, y el tipo de datos bajo int no encaja, pero es deseable int

el número único se asigna automáticamente - tr_Deal73772984

no está claro cuál es la pregunta

 

mira este sencillo código

   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;
              }
 

Hola.

¿Cómo puedo hacer visibles/invisibles los niveles de Fibonacci? En general, hay que eliminar algunos niveles. Si utilizo la propiedad OBJPROP_LEVELS, sólo hace disponibles los primeros N niveles. ¿Cómo establecer la propiedad de visibilidad para cada uno de los niveles, o eliminarla por completo?

 
leonerd #:

Hola.

¿Cómo puedo hacer visibles/invisibles los niveles de Fibonacci? En general, hay que eliminar algunos niveles. Si utilizo la propiedad OBJPROP_LEVELS, sólo hace disponibles los primeros N niveles. ¿Cómo puedo establecer la propiedad de visibilidad para cada uno de los niveles, o eliminarla por completo?

Es así.

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();
 }/******************************************************************/

Esto es un extracto de la EA, algunas variables no están definidas aquí. Este código no se compilará.

 

Hola, ¿hay alguna manera de eliminar un elemento de la matriz con un desplazamiento de la estructura utilizando medios estándar


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]... 
 

Hecho así, se podría hacer más profesionalmente, ¿no?

//+----------Удаляем старый сигнал-----------------------------------+
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 #:

Hecho esto, ¿podría hacerse de forma más profesional?

Hola, para borrar elementos del array, empieza por el final del array, luego no necesitas cambiar el índice. Va en orden por sí mismo.

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

Hola, para eliminar elementos del array, empieza por el final del array, entonces no necesitas cambiar el índice. Va en orden por sí mismo.

Correcto, genial, ¡gracias!

 
Mikhail Toptunov #:

Se debe asignar un número único al objeto, y este número debe ser recogido de los parámetros:

-Hora de apertura del objeto

- período del objeto

- el marco temporal del objeto

Por ejemplo:

Bueno, no estoy seguro de que este número sea exclusivo, y el tipo de datos bajo int no encaja, pero preferiblemente int

Si queremos descifrar más tarde, es mejor cifrar el nombre del objeto en lugar del número. Es decir, ensamblamos el nombre a partir de los dígitos y los dígitos a la cadena y luego los dígitos de la cadena a los int. Lo único que hay que hacer es dividir los campos por separadores o tener en cuenta el número de caracteres de cada campo.

Razón de la queja: