Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1377

 
Fast235 #:

como diz um dos participantes, para a fábrica.

devido à impossibilidade de percepção

Tem de atribuir um número único ao objecto, este número tem de ser recolhido a partir dos parâmetros:

-Tempo de abertura do objecto

- período objecto

- período de tempo do objecto

Por exemplo:

int Num= TimeOpen+Period*0.0001

Bem, não tenho a certeza se este número será exclusivo, e o tipo de dados sob int não se encaixa, mas de preferência int

 
Mikhail Toptunov #:

Deve ser atribuído um número único ao objecto, e este número deve ser recolhido a partir dos parâmetros:

-Tempo de aberturado objecto

- período objecto

- calendário do objecto

Por exemplo:

Bem, não estou certo de que este número seja exclusivo, e o tipo de dados sob int não se encaixa, mas de preferência int

número único é atribuído automaticamente - tr_Deal73772984

não está claro qual é a questão

 

olhar para este código simples

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

Olá.

Como tornar os níveis de Fibonacci visíveis/invisíveis? Geralmente, precisamos de remover alguns níveis. Se eu utilizar a propriedade OBJPROP_LEVELS, ela apenas torna disponíveis os primeiros níveis N. Como definir a propriedade de visibilidade para cada um dos níveis, ou removê-la por completo?

 
leonerd #:

Olá.

Como tornar os níveis de Fibonacci visíveis/invisíveis? Geralmente, precisamos de remover alguns níveis. Se eu utilizar a propriedade OBJPROP_LEVELS, ela apenas torna disponíveis os primeiros níveis N. Como posso definir a propriedade de visibilidade para cada um dos níveis, ou removê-la por completo?

É assim.

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

Isto é extraído da EA, algumas variáveis não são aqui definidas. Este código não será compilado.

 

Olá, há alguma forma de remover um elemento de matriz com um offset da estrutura utilizando meios padrão


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

Feito assim, poderia fazê-lo de forma mais profissional, não poderia?

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

Feito isto, poderia ser feito de uma forma mais profissional?

Olá, para eliminar elementos da matriz, comece pelo fim da matriz, depois não precisa de alterar o índice. Vai em ordem por si só.

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

Olá, para eliminar elementos da matriz, comece no fim da matriz, depois não precisa de alterar o índice. Vai em ordem por si só.

Certo, fixe, obrigado!

 
Mikhail Toptunov #:

Deve ser atribuído um número único ao objecto, e este número deve ser recolhido a partir dos parâmetros:

-Tempo de aberturado objecto

- período objecto

- calendário do objecto

Por exemplo:

Bem, não tenho a certeza de que este número seja exclusivo, e o tipo de dados sob int não se encaixa, mas de preferência int

Se quisermos decifrar mais tarde, é melhor decifrar o nome do objecto em vez do número. Isto é, reunimos o nome desde os dígitos e os dígitos até à corda e depois os dígitos da corda até à int. A única coisa a fazer é dividir os campos com delimitadores ou ter em conta o número de caracteres em cada campo.