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

 
Vitaly Muzichenko:

Вообще, по СFD и металлам один и тот-же символ может у каждого называться по-разному, с ними проблема

подскажите, символьные коды они и в Африке символьные коды? 

То есть они везде одинаковые?

может в эту сторону мне начать копать и просто преобразовать имя символа в код на выходе и входе?

 
Для форекса складываем валюту маржи и валюту прибыли. Для CFD всё индивидуально.
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string symbol,str="";
   for(int i=SymbolsTotal(false);i>0;i--)
   {
    symbol=SymbolName(i,false);
    str=str+((SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE)==0)?SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+SymbolInfoString(symbol,SYMBOL_CURRENCY_PROFIT):symbol)+"\n";
   }
   Alert(str);
  }
//+------------------------------------------------------------------+
 
Igor Korepin:
Для форекса складываем валюту маржи и валюту прибыли. Для CFD всё индивидуально.

Ну да, работает. Мне такое даже не приходило в мысли)

 
Стояла такая задача. В конце концов просто создал файл "брокерИнфо.тхт" и туда загнал префикс и суффикс, которые брокер использует. Любой индюк, или советник может прочитать этот файл. Самое надежное, как мне думается. А то как то мучался с брокером, у которого  были доступны EURUSD, EURUSD.m и EURUSD.ch. Плюнул на автоматизацию и теперь использую только способ с файлом.
 
Igor Korepin:
Для форекса складываем валюту маржи и валюту прибыли. Для CFD всё индивидуально.

Спасибо! Итс воркинг

 
думаю что сегодня с погодой не то.. а это еще один арбитражер родился
 
Vladimir Gribachev:

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

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

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

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

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

Как-то так
input string BaseSymbols = ""; // Базовые символы, через запятую "EURUSD, gbpusd, EURjpy"

string base_symbols[];
int num_symbols = 0;
//+------------------------------------------------------------------+
void OnInit()
  {
//---
   string _BaseSymbols = BaseSymbols;
   if( !StringToUpper( _BaseSymbols ) ) // приведем к большому регистру
     ExpertRemove();
   num_symbols = StringSplit(_BaseSymbols, StringGetCharacter(",", 0), base_symbols);
   // удалим пробелы
   for(int i=0; i<num_symbols; i++)
    #ifdef __MQL5__
      StringTrimRight(base_symbols[i]);
      StringTrimLeft(base_symbols[i]);
    #else
      base_symbols[i] = StringTrimRight ( StringTrimLeft( base_symbols[i] ) );
    #endif
//---
  }
//+------------------------------------------------------------------+
string GET_SYMBOL(const string TO_SPLIT)
  {
//---
   string to_split = TO_SPLIT;
   if( !StringToUpper( to_split ) )
     return NULL;
//---
   for(int i=0; i<num_symbols; i++)
    {
      if(StringFind(to_split, base_symbols[i], 0) < 0)
         continue;
      return base_symbols[i];
    }
   return NULL;
  }
И плевать на каком боку у символа тюбетейка, и как она одета
 
Konstantin Nikitin:
Как-то так

Прикол.

Вот только только написал

string OUT;
   int CHAR,i;
   for(i=0;i<StringLen(_Symbol);i++)
     {
      CHAR=StringGetCharacter(_Symbol,i);
      if((CHAR>=65 && CHAR<=90)||(CHAR>=48 && CHAR<=57))OUT=OUT+CharToString(CHAR);
 }
Comment(OUT);  

Спасибо. 

Но я не понял что делает ваша функция, из маленьких символов делает большие?

PS

string SYM = "gjk..#EURUSD.jhy";
   string OUT;
   int CHAR,i;
   for(i=0;i<StringLen(SYM);i++)
     {
      CHAR=StringGetCharacter(SYM,i);
      if((CHAR>=65 && CHAR<=90)||(CHAR>=48&& CHAR<=57))OUT=OUT+CharToString(CHAR);
     }

   Comment(OUT);

теперь не страшны не префиксы не суффиксы и не какие маленькие буквы и символы :)

 
Как-то что-то такое делал и сделал универсально. Но пользователь сам должен составить файл замен, в каждой строке файла паттерн замены типа: ******_m... примерно так, деталей не помню, надо вспоминать или снова думать))
 
Можно так простенько... Добавка к имени символа бывает слева, бывает справа. Так что нужно две строковых переменных, в одной список разделителей которые могут быть слева, во второй те, которые могут быть справа... не сложно догадаться что делать дальше.