Скачать MetaTrader 5

enum

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Dmitiry Ananiev
6750
Dmitiry Ananiev  
void OnDeinit(const int reason)
  {
 
   int name;
   enum EANAME
     {
      FletcherCCI,
      Fletcher,
      Flatcherma,
      HLClightCCI,
      HLClight,
      HLClightma
     };
     
   double profit[6]= {0.0};
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         profit[OrderMagicNumber()]+=OrderProfit()+OrderCommission()+OrderSwap();
        }
     }
        for (int i=0;i<6;i++) Alert (EANAME ," Profit = ", profit[i]);
                
  }

 выдает ошибки 

 ',' - unexpected token eurgbp.mq4 35 39

'EANAME' - syntax error eurgbp.mq4 35 32

 Так и не нашел в справке как сделать чтобы выводился в Алерт имя советника ? 

 
Vladimir Karputov
Модератор
52957
Vladimir Karputov  

__FILE__

Имя текущего компилируемого файла

 

Alert(__FILE__);
Dmitiry Ananiev
6750
Dmitiry Ananiev  
barabashkakvn:

__FILE__

Имя текущего компилируемого файла

 

Сами эксперты вынесены в функции. Такой вариант не подойдет. 

Yury Kulikov
31679
Yury Kulikov  
dimeon:

 выдает ошибки 

 ',' - unexpected token eurgbp.mq4 35 39

'EANAME' - syntax error eurgbp.mq4 35 32

 Так и не нашел в справке как сделать чтобы выводился в Алерт имя советника ? 

 
EnumToString() в помощь.
Документация по MQL5: Преобразование данных / EnumToString
Документация по MQL5: Преобразование данных / EnumToString
  • www.mql5.com
Преобразование данных / EnumToString - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Ihor Herasko
9653
Ihor Herasko  

Вот так:

for (int i = 0; i < 6; i++) 
   Alert (EnumToString((EANAME)i), " Profit = ", profit[i]); 

P. S. Сорри, код не вставляется. 

Andrey Khatimlianskii
56809
Andrey Khatimlianskii  
dimeon:
profit[OrderMagicNumber()]
Стремная это конструкция. Чуть что - выход за пределы массива и краш советника.
Dmitiry Ananiev
6750
Dmitiry Ananiev  
komposter:
Стремная это конструкция. Чуть что - выход за пределы массива и краш советника.
А как бы вы сделали?
Andrey Khatimlianskii
56809
Andrey Khatimlianskii  
dimeon:
А как бы вы сделали?

Если конкретно по этому коду, то так:

   double profit[6]= {0.0};
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         int m = OrderMagicNumber();
         if ( m >= 0 && m < 6 )
           profit[m]+=OrderProfit()+OrderCommission()+OrderSwap();
         else
           Alert("Здесь не должно было быть ордеров с мейджиком ", m, "!!!");
        }
     }
     for (int i=0;i<6;i++) Alert (EANAME ," Profit = ", profit[i]);

Но если сформулировать задачу полностью, возможно, есть более элегантное решение. 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий