Подскажите какие бывают разделители префикса и суффикса валютных пар

 

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

Подскажите какие бывают разделители префикса и суффикса валютных пар.

Я встречал только "."  и "_"  (EURUSD.m и  EURUSD_m)

Может кто знает еще какие есть, или как получить чистое название символа по другому

На данный момент использую функцию

string GET_SYMBOL(string TO_SPLIT)
  {
   string RESULT[];
   string SYMBOL="";

   int _NAME_1=StringSplit(TO_SPLIT,StringGetCharacter(".",0),RESULT);
   int _NAME_2=StringSplit(TO_SPLIT,StringGetCharacter("_",0),RESULT);
   
   int I;
   if(_NAME_1>0)
     {
      for(I=0;I<_NAME_1;I++)
        {
         if(StringLen(RESULT[I])>1)SYMBOL=RESULT[I];
        }
     }
   if(_NAME_2>0)
     {
      for(I=0;I<_NAME_2;I++)
        {
         if(StringLen(RESULT[I])>1)SYMBOL=RESULT[I];
        }
     }  
   return(SYMBOL);
  }
 
Vladimir Gribachev:

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

Подскажите какие бывают разделители префикса и суффикса валютных пар.

Я встречал только "."  и "_"  (EURUSD.m и  EURUSD_m)

Может кто знает еще какие есть, или как получить чистое название символа по другому

На данный момент использую функцию

string NameSymb="EURCAD,USDCAD,EURUSD,AUDCAD,EURNZD,NZDUSD,AUDUSD,#CAT";

int OnInit() {
// Создадим массив символов для работы SymbTrade[]. Добавление в данном случае по лоту
 string FillSymb[];
 StringReplace(NameSymb," ",""); // Удаляем случайно вставленные пробелы в строку с символами
 CountSymbol=StringSplit(NameSymb,StringGetCharacter(",",0),FillSymb);
 int k=-1;
 for(int d=0;d<CountSymbol;d++) {
  string tSymb=FillSymb[d];
  string rSymb="";
  if(RealSymbol(tSymb,rSymb)) {
   double minlot=SymbolInfoDouble(rSymb,SYMBOL_VOLUME_MIN);
   if(minlot>0 && minlot<=Lots) { // Проверка на минимальный лот для правильной работы советника
     k++;
     ArrayResize(SymbTrade,k+1);
     SymbTrade[k]=rSymb; // Создадим массив торговых символов
     if(!SymbolInfoInteger(rSymb,SYMBOL_SELECT)) SymbolSelect(rSymb,true); // Покажем символы в "Обзор рынка"
     Print(k+1,": Trade: ",tSymb," = ",rSymb,", MinLot: ",minlot);
   } else Print("-: Trade not allowed: ",rSymb,", MinLot: ",minlot); // Лот не подходит для торговли
  } else Print("-: No symbol on server: ",tSymb); // Нет такого символа на сервере
 }
}


//===============================================================================================
//------------------------ Преобразование символа к терминальному виду -------------------------+
//===============================================================================================
bool RealSymbol(string temp,string& real) {
 int cn=SymbolsTotal(false);
  for(int i=0;i<cn;i++) {
   string symb=SymbolName(i,false);
   if(StringFind(symb,temp,0)>-1) {
    real=symb;
    return(true);
  }}
  return(false);
 }
 
Не проще использовать StringFind. И пусть там будет любой разделитель, или даже без него. Есть основа символа, значит наш.
 
Vitaly Muzichenko:

Спасибо, но немного не то. 

Ваша функция возвращает есть ли символ с таким названием в обзоре рынка или нет, а мне нужно получить чистое название символа без префиксов и суффиксов. 

Konstantin Nikitin:
Не проще использовать StringFind. И пусть там будет любой разделитель, или даже без него. Есть основа символа, значит наш.

StringFind не представляю как использовать

например: в одном терминале EURUSD_m, на другом терминале i.EURUSD, мне нужно чтобы они друг друга поняли что это один и тот-же символ.

задавать префиксы/суффиксы, название символа через внешние переменные можно конечно, но хочется сделать это все на автомате.

 
Vladimir Gribachev:

Спасибо, но немного не то. 

Ваша функция возвращает есть ли символ с таким названием в обзоре рынка или нет, а мне нужно получить чистое название символа без префиксов и суффиксов. 

Ну так вот же оно:

string NameSymb="EURCAD,USDCAD,EURUSD,AUDCAD,EURNZD,NZDUSD,AUDUSD,#CAT";

Или чистый - это что-то другое?

StringFind не представляю как использовать

В функции RealSymbol как раз показано, как использовать.

например: в одном терминале EURUSD_m, на другом терминале i.EURUSD, мне нужно чтобы они друг друга поняли что это один и тот-же символ.

задавать префиксы/суффиксы, название символа через внешние переменные можно конечно, но хочется сделать это все на автомате.

Да, именно это и было дано во втором посте. Осталось только расширить набор имен символов в строке NameSymb, если требуется.

 
Ihor Herasko:

Ну так вот же оно:

Или чистый - это что-то другое?

В функции RealSymbol как раз показано, как использовать.

Да, именно это и было дано во втором посте. Осталось только расширить набор имен символов в строке NameSymb, если требуется.

Там видимо копировщик, и нужно с мастера получать к примеру EURUSD_m, а применять уже к EURUSD

 
Ihor Herasko:

Ну так вот же оно:

Или чистый - это что-то другое?

В функции RealSymbol как раз показано, как использовать.

Да, именно это и было дано во втором посте. Осталось только расширить набор имен символов в строке NameSymb, если требуется.

Например:

Я устанавливаю советник №1, который записывает тики/котировки в файл по символу, на который он установлен.

название файла должно содержать имя символа, но это имя символа не должно содержать ни префиксов ни суффиксов.

на второй терминал я ставлю советник №2, который читает тики/котировки из файла по символу, на который он установлен.

- хранение файла в общей папке, название содержит имя символа, который передал советник №1.

- советник №2 ищет файл с названием символа на который он сам установлен.

так вот, у советника №1 символ называется EURUSD_m, а у советника №2 символ называется i.EURUSD

задача состоит в том, чтобы советник №1 писал название символа EURUSD, а советник №2 искал файл с названием символа EURUSD

 
Vitaly Muzichenko:

Там видимо копировщик, и нужно с мастера получать к примеру EURUSD_m, а применять уже к EURUSD.е

да, типа того - хочется это дело все на автомате, без лишних движений

 
Vladimir Gribachev:

Например:

Я устанавливаю советник №1, который записывает тики/котировки в файл по символу, на который он установлен.

название файла должно содержать имя символа, но это имя символа не должно содержать ни префиксов ни суффиксов.

на второй терминал я ставлю советник №2, который читает тики/котировки из файла по символу, на который он установлен.

- хранение файла в общей папке, название содержит имя символа, который передал советник №1.

- советник №2 ищет файл с названием символа на который он сам установлен.

так вот, у советника №1 символ называется EURUSD_m, а у советника №2 символ называется i.EURUSD

задача состоит в том, чтобы советник №1 писал название символа EURUSD, а советник №2 искал файл с названием символа EURUSD

Используй StringFind . Только так.

if(StringFind(Symbol(),"USDCAD",0)!=-1)
{
Alert("USDCAD");
}
else
{
Alert(" не USDCAD");
}
 
Evgeny Belyaev:

Используй StringFind . Только так.

не. название "USDCAD", может быть и "ххх.USDCAD" а на другом сервере "yyy.USDCAD" 

задавать руками не хочется.

наверное проще всего в функции которую я привел в первом посте, сделать перебор разделителей.

только вот какие еще могут быть разделители кроме как "."  и "_" ?

 
Посмотрите на функцию SymbolInfoString.

ENUM_SYMBOL_INFO_STRING

Идентификатор

Описание

Тип свойства

SYMBOL_BASIS

Имя базового актива для производного инструмента

string

SYMBOL_CURRENCY_BASE

Базовая валюта инструмента

string

SYMBOL_CURRENCY_PROFIT

Валюта прибыли

string

SYMBOL_CURRENCY_MARGIN

Валюта в которой вычисляется залоговые средства

string

SYMBOL_BANK

Источник текущей котировки

string

SYMBOL_DESCRIPTION

Строковое описание символа

string

Документация по MQL5: Получение рыночной информации / SymbolInfoString
Документация по MQL5: Получение рыночной информации / SymbolInfoString
  • www.mql5.com
2. Возвращает true или false в зависимости от успешности выполнения функции. В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с...