нужна помощь с switch - страница 2

 
dualbit:
Два массива? один под пару второй под id ?)  

Нет, там совсем остроумно было сделано. 

Вот еще посмотрите: https://www.mql5.com/ru/forum/126925/page14 Пост зверски забаненого hrenfx в конце страницы. 

 

Передаете в функцию чистый массив, получаете в нем список символов из панели "обзор рынка"

//+------------------------------------------------------------------+
//|          Description:                                            |
//+------------------------------------------------------------------+
int SymbolsList(string &Symbols[], bool Selected)
{
   string SymbolsFileName;
   int Offset, SymbolsNumber;
   
   if(Selected) SymbolsFileName = "symbols.sel";
   else         SymbolsFileName = "symbols.raw";
   int hFile = FileOpenHistory(SymbolsFileName, FILE_BIN|FILE_READ);
   if(hFile < 0) return(-1);
   if(Selected) { SymbolsNumber = (FileSize(hFile) - 4) / 128; Offset = 116;  }
   else         { SymbolsNumber = FileSize(hFile) / 1936;      Offset = 1924; } 
   ArrayResize(Symbols, SymbolsNumber);
   if(Selected) FileSeek(hFile, 4, SEEK_SET);   
   for(int i = 0; i < SymbolsNumber; i++){
      Symbols[i] = FileReadString(hFile, 12);
      FileSeek(hFile, Offset, SEEK_CUR);
   }
   FileClose(hFile);
   return(SymbolsNumber);
}
//+------------------------------------------------------------------+
 

Класс! Коротко, ясно, по-существу.  

 

Насколько я понял автору темы надо сопоставление его парам к мейджикам, поэтому и предложил использовать два массива, одно из самого простого в реализации ) 

 
dualbit:

Насколько я понял автору темы надо сопоставление его парам к мейджикам, поэтому и предложил использовать два массива, одно из самого простого в реализации ) 

Я согласен: это действительно простой, понятный, обратимый алгоритм. 

А у Рустама - радикальное решение:) Заметьте - инвариантное к конкретному терминалу (ДЦ), у которого Gold, например,  вполне может называться как-нибудь иначе. 

 
pasha5282:
ага читал справку значит придется все так только прописывать ?так не ругается, но что больше другого способа нет упростить задачку?


В чем собственно проблема? Чем if не нравится? 

Если много if, то конечно может тормозить. Можно на запуске эксперта сделать глобальные переменные, в именах символ, в значении индекс.

GlobalVariableSet("...EURUSD",0);
GlobalVariableSet("...GBPUSD",1);

Дальше можно switch использовать:

switch(GlobalVariableGet(...Symbol()))...

Лучше второй массив подготовить на запуске, со значениями, будет еще проще, можно без switch обойтись.

* * *

Если через switch выбирается магик для символа, то этого вообще не нужно, можно по самому символу отличать ордера. 

 

автор, ну как реализовал?

меня эта тема тоже интересует.

 

А в чем проблема собственно ?

Соберите меджик из номеров символов имени инструмента. 

 
dualbit:

Насколько я понял автору темы надо сопоставление его парам к мейджикам, поэтому и предложил использовать два массива, одно из самого простого в реализации ) 


С массивом не прокатит. Даже если и 2 массива, то перебор символов и сопоставление с массивом магиков очень трудоемко выйдет.
 
static string sy[28]={"AUDCAD","AUDCHF","EURAUD","GBPAUD","AUDJPY","AUDNZD","AUDUSD",
                      "CADCHF","EURCAD","GBPCAD","CADJPY","NZDCAD","USDCAD","EURCHF",
                      "GBPCHF","CHFJPY","NZDCHF","USDCHF","EURGBP","EURJPY","EURNZD",
                      "EURUSD","GBPJPY","GBPNZD","GBPUSD","NZDJPY","USDJPY","NZDUSD",};
int mag[28]={50,23,67,34,16,8..........................};
int Magic_num(string symbol)
  {
  for(int i=0;i<28;i++)if(sy[i]==symbol)return{mag(i));
  return(-1);
  }
Причина обращения: