Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1377

 
Fast235 #:

как говорит один из участников, на завод.

в связи с невозможностью восприятия

Нужно присвоить объекту уникальный номер, этот номер нужно собрать из параметров:

- Время открытия объекта

- Период объекта

- тайм фрейм объекта

Например:

int Num= TimeOpen+Period*0.0001

Ну не уверен , что этот номер будет эксклюзивным , и тип данных под int не подходит, а желательно int 

 
Mikhail Toptunov #:

Нужно присвоить объекту уникальный номер, этот номер нужно собрать из параметров:

- Время открытия объекта

- Период объекта

- тайм фрейм объекта

Например:

Ну не уверен , что этот номер будет эксклюзивным , и тип данных под int не подходит, а желательно int 

уникальный номер присваивается автоматом - tr_Deal73772984

не понятно в чем вопрос

 

посмотрите этот простой код

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

Здравствуйте.

Как сделать уровни Фибоначчи видимыми/невидимыми? Вообще, надо убрать некоторые уровни. Если использовать свойство OBJPROP_LEVELS, то он просто делает доступными первые N уровней. Как для каждого из уровней установить свойство видимости, либо вовсе убрать его?

 
leonerd #:

Здравствуйте.

Как сделать уровни Фибоначчи видимыми/невидимыми? Вообще, надо убрать некоторые уровни. Если использовать свойство OBJPROP_LEVELS, то он просто делает доступными первые N уровней. Как для каждого из уровней установить свойство видимости, либо вовсе убрать его?

Примерно так.

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

Это вырезано из советника, некоторые переменные здесь не определены. Этот код не скомпилируется.

 

Здравствуйте, есть ли возможность удалить из структуры элемент массива со смещением стандартными средствами


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

Сделал так, можно же сделать более профессионально?

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

Сделал так, можно же сделать более профессионально?

Привет, для удаления элементов массива начинайте перебор с конца массива, тогда не нужно менять индекс. Он сам идёт по порядку.

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

Привет, для удаления элементов массива начинайте перебор с конца массива, тогда не нужно менять индекс. Он сам идёт по порядку.

Точно, Круто, Спасибо!

 
Mikhail Toptunov #:

Нужно присвоить объекту уникальный номер, этот номер нужно собрать из параметров:

- Время открытия объекта

- Период объекта

- тайм фрейм объекта

Например:

Ну не уверен , что этот номер будет эксклюзивным , и тип данных под int не подходит, а желательно int 

Если потом дешифровать нужно, то лучше имя объекта шифровать, а не номер. Т.е. собираем имя из цифр и цифры в стринг, а потом строковые цифры в инт. Единственно, либо поля делить разделителями либо учитывать количество символов каждого поля. 

Причина обращения: