Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1377

 
Fast235 #:

come dice uno dei partecipanti, alla fabbrica.

a causa dell'impossibilità della percezione

Dovete assegnare un numero unico all'oggetto, questo numero deve essere raccolto dai parametri:

-Tempo di apertura dell'oggetto

- periodo dell'oggetto

- l'arco di tempo dell'oggetto

Per esempio:

int Num= TimeOpen+Period*0.0001

Beh, non sono sicuro se questo numero sarà esclusivo, e il tipo di dati sotto int non va bene, ma preferibilmente int

 
Mikhail Toptunov #:

Un numero unico deve essere assegnato all'oggetto, e questo numero deve essere raccolto dai parametri:

-Tempo di aperturadell' oggetto

- periodo dell'oggetto

- l'arco di tempo dell'oggetto

Per esempio:

Beh, non sono sicuro che questo numero sarà esclusivo, e il tipo di dati sotto int non va bene, ma preferibilmente int

il numero unico viene assegnato automaticamente - tr_Deal73772984

non è chiaro quale sia la domanda

 

guardate questo semplice codice

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

Salve.

Come posso rendere visibili/invisibili i livelli di Fibonacci? In generale, abbiamo bisogno di rimuovere alcuni livelli. Se uso la proprietà OBJPROP_LEVELS, rende disponibili solo i primi N livelli. Come impostare la proprietà di visibilità per ogni livello, o rimuoverla del tutto?

 
leonerd #:

Salve.

Come faccio a rendere visibili/invisibili i livelli di Fibonacci? In generale, abbiamo bisogno di rimuovere alcuni livelli. Se uso la proprietà OBJPROP_LEVELS, rende disponibili solo i primi N livelli. Come posso impostare la proprietà di visibilità per ogni livello, o rimuoverla del tutto?

Funziona così.

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

Questo è un estratto dall'EA, alcune variabili non sono definite qui. Questo codice non verrà compilato.

 

Ciao, c'è un modo per rimuovere un elemento dell'array con un offset dalla struttura usando mezzi standard


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

Fatto così, si potrebbe fare in modo più professionale, 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 #:

Fatto questo, potrebbe essere fatto in modo più professionale?

Ciao, per cancellare gli elementi dell'array, parti dalla fine dell'array, quindi non hai bisogno di cambiare l'indice. Va in ordine da solo.

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

Ciao, per cancellare gli elementi dell'array, inizia dalla fine dell'array, poi non hai bisogno di cambiare l'indice. Va in ordine da solo.

Giusto, bene, grazie!

 
Mikhail Toptunov #:

Un numero unico deve essere assegnato all'oggetto, e questo numero deve essere raccolto dai parametri:

-Tempo di aperturadell' oggetto

- periodo dell'oggetto

- l'arco di tempo dell'oggetto

Per esempio:

Beh, non sono sicuro che questo numero sarà esclusivo, e il tipo di dati sotto int non va bene, ma preferibilmente int

Se vogliamo decifrare in seguito, è meglio criptare il nome dell'oggetto invece del numero. Cioè assembliamo il nome dalle cifre e le cifre alla stringa e poi le cifre della stringa all'int. L'unica cosa da fare è dividere i campi con delimitatori o tenere conto del numero di caratteri in ogni campo.