Как получать названия всех инструментов?

 
Есть ли такие функции, чтобы получать все названия инструментов? Например есть ДЦ, у которых таких инструментов болше 100, а то 200. Как получать данные по ним для анализа? Нужно ли непосредственно в советник вписывать конкретные названия, или возможно в ходе работы советника узнать это?
 
Уважаемые разработчики, подобная тема всплывает уже который раз, может быть стоит добавить такие функции, для определения набора торгуемых инструментов :)
 
Пожалуй, только вести свой собственный реестр. Мне это понадобилось для генерации уникальных Magic_Number'ов. Собрал и перенумеровал все разные инструменты с различных ДЦ. Всего получилось около 200. Найду больше - добавлю в перечень.
 
alexjou:
"Всего получилось около 200. Найду больше - добавлю в перечень."

Можете ли поделиться?
 
Сделал так:
По правой кнопке в окне "Обзор рынка" нажать "Показать все символы".
Далее там же "Набор символов - Сохранить как". Файл переместить в папку "Эксперты\файлы".
И зачитывать программно из этого файла:
string title="all_syms";
string symbols[];
int syms_cnt = 283;
...
   ArrayResize( symbols, syms_cnt);
   int handle=FileOpen("all.csv", FILE_CSV|FILE_READ);
   if (handle<=0)
   {
      MessageBox("handle<=0",title,MB_OK|MB_ICONINFORMATION);
      return(0);
   }
   for (int i=0; i<syms_cnt; i++)
   {
      symbols[i] = FileReadString(handle);
      if (symbols[i] == "") break;
   }
   FileClose(handle);


А могла бы быть функция какая.

 
Напомните, как по названию получить массивы данных - цен открытия, закрытия, макс., мин., времени баров?
 
 
int GetUniqueMagicNumber()
 {
  bool unknown_symbol; 
  int  n_pair, acc_num, unique_magicnum;
 //----
  unknown_symbol = false; 
  // нумеруем инструменты, по которым собираемся работать
  // 
  // валютные пары (1 - 79) 
  // основной список валютных пар (1 - 47) 
       if (Symbol() ==     "EURUSD")     { n_pair =   1; }
  else if (Symbol() ==     "USDJPY")     { n_pair =   2; }
  else if (Symbol() ==     "GBPUSD")     { n_pair =   3; }
  else if (Symbol() ==     "USDCHF")     { n_pair =   4; }
  else if (Symbol() ==     "AUDBGN")     { n_pair =   5; }
  else if (Symbol() ==     "AUDCAD")     { n_pair =   6; }
  else if (Symbol() ==     "AUDCHF")     { n_pair =   7; }
  else if (Symbol() ==     "AUDJPY")     { n_pair =   8; }
  else if (Symbol() ==     "AUDNZD")     { n_pair =   9; }
  else if (Symbol() ==     "AUDUSD")     { n_pair =  10; }
  else if (Symbol() ==     "BGNJPY")     { n_pair =  11; }
  else if (Symbol() ==     "CADBGN")     { n_pair =  12; }
  else if (Symbol() ==     "CADCHF")     { n_pair =  13; }
  else if (Symbol() ==     "CADJPY")     { n_pair =  14; }
  else if (Symbol() ==     "CHFBGN")     { n_pair =  15; }
  else if (Symbol() ==     "CHFJPY")     { n_pair =  16; }
  else if (Symbol() ==     "CHFNOK")     { n_pair =  17; }
  else if (Symbol() ==     "CHFSEK")     { n_pair =  18; }
  else if (Symbol() ==     "EURAUD")     { n_pair =  19; }
  else if (Symbol() ==     "EURCAD")     { n_pair =  20; }
  else if (Symbol() ==     "EURCHF")     { n_pair =  21; }
  else if (Symbol() ==     "EURGBP")     { n_pair =  22; }
  else if (Symbol() ==     "EURJPY")     { n_pair =  23; }
  else if (Symbol() ==     "EURNOK")     { n_pair =  24; }
  else if (Symbol() ==     "EURNZD")     { n_pair =  25; }
  else if (Symbol() ==     "EURSEK")     { n_pair =  26; }
  else if (Symbol() ==     "GBPAUD")     { n_pair =  27; }
  else if (Symbol() ==     "GBPBGN")     { n_pair =  28; }
  else if (Symbol() ==     "GBPCAD")     { n_pair =  29; }
  else if (Symbol() ==     "GBPCHF")     { n_pair =  30; }
  else if (Symbol() ==     "GBPJPY")     { n_pair =  31; }
  else if (Symbol() ==     "GBPNOK")     { n_pair =  32; }
  else if (Symbol() ==     "GBPNZD")     { n_pair =  33; }
  else if (Symbol() ==     "GBPSEK")     { n_pair =  34; }
  else if (Symbol() ==     "NZDBGN")     { n_pair =  35; }
  else if (Symbol() ==     "NZDCAD")     { n_pair =  36; }
  else if (Symbol() ==     "NZDCHF")     { n_pair =  37; }
  else if (Symbol() ==     "NZDDKK")     { n_pair =  38; }
  else if (Symbol() ==     "NZDJPY")     { n_pair =  39; }
  else if (Symbol() ==     "NZDSEK")     { n_pair =  40; }
  else if (Symbol() ==     "NZDUSD")     { n_pair =  41; }
  else if (Symbol() ==     "USDBGN")     { n_pair =  42; }
  else if (Symbol() ==     "USDCAD")     { n_pair =  43; }
  else if (Symbol() ==     "USDDKK")     { n_pair =  44; }
  else if (Symbol() ==     "USDNOK")     { n_pair =  45; }
  else if (Symbol() ==     "USDSEK")     { n_pair =  46; }
  else if (Symbol() ==     "USDZAR")     { n_pair =  47; }
  //
  // дополнительный список валютных пар N 1 (48 - 56) 
  else if (Symbol() ==     "CADDKK")     { n_pair =  48; }
  else if (Symbol() ==     "CADNOK")     { n_pair =  49; }
  else if (Symbol() ==     "CHFCAD")     { n_pair =  50; }
  else if (Symbol() ==     "EURRUR")     { n_pair =  51; }
  else if (Symbol() ==     "EURZAR")     { n_pair =  52; }
  else if (Symbol() ==     "GBPILS")     { n_pair =  53; }
  else if (Symbol() ==     "GBPZAR")     { n_pair =  54; }
  else if (Symbol() ==     "USDRUR")     { n_pair =  55; }
  else if (Symbol() ==     "USDSGD")     { n_pair =  56; }
  //
  // дополнительный список валютных пар N 2 (56 - 79) 
  // 
  // futures_Russia (80 - 99)
  // (временно, до переопределения константы N_Pair_Max) 
  else if (Symbol() ==      "fDIZL")     { n_pair =  80; }
  else if (Symbol() ==      "fEERU")     { n_pair =  81; }
  else if (Symbol() ==      "fGAZR")     { n_pair =  82; }
  else if (Symbol() ==      "fGMKR")     { n_pair =  83; }
  else if (Symbol() ==      "fGOLD")     { n_pair =  84; }
  else if (Symbol() ==      "fLKOH")     { n_pair =  85; }
  else if (Symbol() ==      "fROSN")     { n_pair =  86; }
  else if (Symbol() ==      "fRTKM")     { n_pair =  87; }
  else if (Symbol() ==       "fRTS")     { n_pair =  88; }
  else if (Symbol() ==      "fSBER")     { n_pair =  89; }
  else if (Symbol() ==      "fSNGR")     { n_pair =  90; }
  else if (Symbol() ==        "fSi")     { n_pair =  91; }
  else if (Symbol() ==        "fUR")     { n_pair =  92; }
  //
  // драгоценные металлы на споте (100 - 109) 
  else if (Symbol() ==       "GOLD")     { n_pair = 100; }
  else if (Symbol() ==     "SILVER")     { n_pair = 101; }
  else if (Symbol() ==  "PALLADIUM")     { n_pair = 102; }
  else if (Symbol() ==   "PLATINUM")     { n_pair = 103; }
  // 
  // CFD_New York (110 - 149) 
  else if (Symbol() ==        "#AA")     { n_pair = 110; }
  else if (Symbol() ==       "#AIG")     { n_pair = 111; }
  else if (Symbol() ==       "#AXP")     { n_pair = 112; }
  else if (Symbol() ==        "#BA")     { n_pair = 113; }
  else if (Symbol() ==         "#C")     { n_pair = 114; }
  else if (Symbol() ==       "#CAT")     { n_pair = 115; }
  else if (Symbol() ==        "#DD")     { n_pair = 116; }
  else if (Symbol() ==       "#DIA")     { n_pair = 117; }
  else if (Symbol() ==       "#DIS")     { n_pair = 118; }
  else if (Symbol() ==        "#EK")     { n_pair = 119; }
  else if (Symbol() ==        "#GE")     { n_pair = 120; }
  else if (Symbol() ==        "#GM")     { n_pair = 121; }
  else if (Symbol() ==        "#HD")     { n_pair = 122; }
  else if (Symbol() ==       "#HON")     { n_pair = 123; }  
  else if (Symbol() ==       "#HPQ")     { n_pair = 124; }
  else if (Symbol() ==       "#IBM")     { n_pair = 125; }
  else if (Symbol() ==      "#INTC")     { n_pair = 126; }
  else if (Symbol() ==       "#JNJ")     { n_pair = 127; }
  else if (Symbol() ==       "#JPM")     { n_pair = 128; }
  else if (Symbol() ==        "#KO")     { n_pair = 129; }
  else if (Symbol() ==       "#MCD")     { n_pair = 130; }
  else if (Symbol() ==       "#MMM")     { n_pair = 131; }
  else if (Symbol() ==        "#MO")     { n_pair = 132; }
  else if (Symbol() ==       "#MRK")     { n_pair = 133; }
  else if (Symbol() ==      "#MSFT")     { n_pair = 134; }
  else if (Symbol() ==       "#PFE")     { n_pair = 135; }
  else if (Symbol() ==        "#PG")     { n_pair = 136; }
  else if (Symbol() ==       "#QQQ")     { n_pair = 137; }
  else if (Symbol() ==       "#SBC")     { n_pair = 138; }
  else if (Symbol() ==       "#SPY")     { n_pair = 139; }
  else if (Symbol() ==         "#T")     { n_pair = 140; }
  else if (Symbol() ==       "#UTX")     { n_pair = 141; }
  else if (Symbol() ==        "#VZ")     { n_pair = 142; }
  else if (Symbol() ==       "#WMT")     { n_pair = 143; }
  else if (Symbol() ==       "#XOM")     { n_pair = 144; }
  // 
  // CFD_Russia (150 - 179) 
  else if (Symbol() ==       "EESR")     { n_pair = 150; }
  else if (Symbol() ==       "GAZP")     { n_pair = 151; }
  else if (Symbol() ==       "GMKN")     { n_pair = 152; }
  else if (Symbol() ==       "LKOH")     { n_pair = 153; }
  else if (Symbol() ==       "MTSI")     { n_pair = 154; }
  else if (Symbol() ==       "RBCI")     { n_pair = 155; }
  else if (Symbol() ==       "ROSN")     { n_pair = 156; }
  else if (Symbol() ==       "RTKM")     { n_pair = 157; }
  else if (Symbol() ==       "SBER")     { n_pair = 158; }
  else if (Symbol() ==       "SNGZ")     { n_pair = 159; }
  else if (Symbol() ==       "TATN")     { n_pair = 160; }
  else if (Symbol() ==       "URSI")     { n_pair = 161; }
  // 
  // CFD Russia "B"
  else if (Symbol() ==       "CHMF")     { n_pair = 170; }
  else if (Symbol() ==       "NLMK")     { n_pair = 171; }
  else if (Symbol() ==       "OGKE")     { n_pair = 172; }
  else if (Symbol() ==       "PLZL")     { n_pair = 173; }
  else if (Symbol() ==       "SIBN")     { n_pair = 174; }
  else if (Symbol() ==      "SPTLT")     { n_pair = 175; }
  else if (Symbol() ==       "TRNF")     { n_pair = 176; }
  // 
  // CFD Russia_2
  else if (Symbol() ==       "AVAZ")     { n_pair = 177; }
  else if (Symbol() ==       "LSNG")     { n_pair = 178; }
  else if (Symbol() ==       "MSNG")     { n_pair = 179; }
  // 
  // indexes & oil (180 - 199)
  else if (Symbol() ==      "CAC40")     { n_pair = 180; }
  else if (Symbol() ==        "DAX")     { n_pair = 181; }
  else if (Symbol() ==        "DJI")     { n_pair = 182; }
  else if (Symbol() ==      "NQ100")     { n_pair = 183; }
  else if (Symbol() ==     "NQCOMP")     { n_pair = 184; }
  else if (Symbol() ==     "S&P500")     { n_pair = 185; }
  // 
  // indexes Russia
  else if (Symbol() ==      "MICEX")     { n_pair = 190; }
  else if (Symbol() ==       "RTSI")     { n_pair = 191; }
  //
  // oil
  else if (Symbol() ==      "Brent")     { n_pair = 195; }
  else if (Symbol() == "LightSweet")     { n_pair = 196; }
  //
  /*
  // futures_Russia (200 - 220) 
  // (требуется переопределить константу N_Pair_Max > 200) 
  else if (Symbol() ==      "fDIZL")     { n_pair = 200; }
  else if (Symbol() ==      "fEERU")     { n_pair = 201; }
  else if (Symbol() ==      "fGAZR")     { n_pair = 202; }
  else if (Symbol() ==      "fGMKR")     { n_pair = 203; }
  else if (Symbol() ==      "fGOLD")     { n_pair = 204; }
  else if (Symbol() ==      "fLKOH")     { n_pair = 205; }
  else if (Symbol() ==      "fROSN")     { n_pair = 206; }
  else if (Symbol() ==      "fRTKM")     { n_pair = 207; }
  else if (Symbol() ==       "fRTS")     { n_pair = 208; }
  else if (Symbol() ==      "fSBER")     { n_pair = 209; }
  else if (Symbol() ==      "fSNGR")     { n_pair = 210; }
  else if (Symbol() ==        "fSi")     { n_pair = 211; }
  else if (Symbol() ==        "fUR")     { n_pair = 212; }
  //
  */ 
  // неизвестный инструмент
  else 
   { 
    unknown_symbol = true; 
    n_pair = MathRound(MathRand() / 100); 
    Print(Symbol(), ": Неизвестный инструмент. " + 
          "Будет сгенерирован случайный магический номер."); 
   } 
  // ----
  // вычисляем "волшебное число" ордеров на данном символе и тайм-фрейме
  if (!IsTesting()) { acc_num = AccountNumber(); }
  else              { acc_num = 16384; } 
  // 
  // получаем магическое число 
  unique_magicnum = acc_num + n_pair + Period(); 
  //
  // если неизвестный инструмент, возвращаем отрицательное магическое число 
  if (unknown_symbol == true) { unique_magicnum = -unique_magicnum; } 
 //----
  return(unique_magicnum); 
 }



Примечание: Функция была написана тогда, когда оператор switch ... case не вполне коррекктно работал со строками. Этим объясняется его отсутствие. С тех пор я не стал ничего менять.

 
Уважаемые разработчики, подобная тема всплывает уже который раз, может быть стоит добавить такие функции, для определения набора торгуемых инструментов :)

Разрешите полюбопытствовать, как Вы себе представляете такую функцию? Я не в плане подколки, а чисто с практической стороны, как реализовать такое. Будет ли она содержать массив абсолютно всех инструментов, или по группам? Как оттуда доставать элемент? Просто пока что я не вижу больших преимуществ от тотального перебора всех инструментов торговли. Обычно трейдер знает, какие валюты он хочет проанализировать, а это легко решается уже существующими методами.
Спасибо.
Причина обращения: