Предложение добавить функцию определения суффикса-префикса финансового инструмента - страница 6

 
Alexey Viktorov #:

Так флуда больше чем от вас ни от кого нет. Если вы игнорируете просьбы, какой ответ вы хотите услышать?

Извините, не увидел.


 

Как вариант с суффиксом

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string data="EURUSD.i";
   string real="";
  // int pos=StringFind(data,".");
   string res[];
   // разобьем строку
   StringSplit(data,'.',res);
   RealSymbol(res[0],real);
   // Нашли символ в нашем терминале
   Print(real); // 2021.10.10 11:41:08.914	ET (NZDJPY.e,M30)	EURUSD.e
  }
//+------------------------------------------------------------------+
//---------------------- Преобразование символа к терминальному виду
//+------------------------------------------------------------------+
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);
 }
//+------------------------------------------------------------------+
 

Возможно кому-то пригодиться. Ручной ввод префиксов из настроек программы.

//***********************************************************************************************//
// aSymbol - Финансовый инструмент                                                               //
// aPrefix - Список префиксов через разделитель (,)  ".x,.m,_i,.e,_x,c"                          //
// Вернет имя финансового инструмента без префикса                                               //
//***********************************************************************************************//
string Prefix(string aSymbol, string aPrefix)
  {
   string sep = ",", m_prefix_mass[];
   ushort u_sep;
   int    lines;
   if(aPrefix != "")
      if((u_sep = StringGetCharacter(sep, 0)) > 0)
         if((lines = StringSplit(aPrefix, u_sep, m_prefix_mass)) > 0)
            for(int i = 0; i < lines; i++)
               if(StringReplace(aSymbol, m_prefix_mass[i], "") > 0)
                  break;
   return (aSymbol);
  }
//************************************************************************************************/
//                                                                                               */
//************************************************************************************************/
 
Vladimir Pastushak #:

Извините, не увидел.


1. Валюта маржи+валюта прибыли

2. ISIN

3. Ищите сами. С криптой я не работал.

 
Alexey Viktorov #:

1. Валюта маржи+валюта прибыли

2. ISIN

3. Ищите сами. С криптой я не работал.

1 - Только форекс
2 - Не у всех фин. инструментов
3 - Спасибо, все ясно...

 
Vladimir Pastushak #:

1 - Только форекс
2 - Не у всех фин. инструментов
3 - Спасибо, все ясно...

Это ваши проблемы. Я вам показал простейшие варианты. Окончательный, рабочий вариант пишите сами.

 
Alexey Viktorov #:

Это ваши проблемы. Я вам показал простейшие варианты. Окончательный, рабочий вариант пишите сами.

нормально ) ляпнуть языком, при малейшей трудности в кусты

Vladimir Pastushak #:

Функция будет возвращать из  EURUSD.m префикс .m, из  EURUSD _i префикс _i

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

С криптой все еще хуже - я например не знаю как нормально отделить USD пары от USDT, у последней к тому же еще и два разных именования (USDT и UST), т.е. для крипты простой форекс способ с первыми 6 символами не канает.

 
Andrei Trukhanovich #:

нормально ) ляпнуть языком, при малейшей трудности в кусты


Если для вас это трудности обращайтесь по адресу

 

Для валютных пар (для форекс):

#property copyright "Maxim A.Kuznetsov"
#property link      "https://www.luxtrade.tk"
#property version   "1.00"

string Currency[];
void AddCurrency(string currency)
{
   StringToUpper(currency);
   for(int pos=ArraySize(Currency)-1;pos>=0;pos--) {
      if (Currency[pos]==currency) return;
   }
   int pos=ArraySize(Currency);
   ArrayResize(Currency,pos+1);
   Currency[pos]=currency;
}
string StringArrayJoin(string &arr[],string separator=",")
{
   int count=ArraySize(arr);
   if (count==0) return "";
   string ret=arr[0];
   for(int pos=1;pos<count;pos++) {
      ret+=separator;
      ret+=arr[pos];
   }
   return ret;
}
string MakeReg()
{
   // получаем список валют
   for(int i=SymbolsTotal(false);i>=0;i--) {
      string symbol=SymbolName(i,false);
      if (symbol=="") continue;
      string base=SymbolInfoString(symbol,SYMBOL_CURRENCY_BASE);
      string quote=SymbolInfoString(symbol,SYMBOL_CURRENCY_PROFIT);
      if (base=="" || quote == "") continue;
      AddCurrency(base);
      AddCurrency(quote);
   }
   string list=StringArrayJoin(Currency,"|");
   // -------
   // РАЗ В НЕДЕЛЮ, чаще символы не добавляются, генерим новую регулярку
   // -------
   // регулярка в виде ((EUR|USD|GBP)разделитель?(EUR|USD|GBP))
   // её натравить на любое имя "якобы валютной пары" то получим prefix,base,quote,suffix
   // если они вообще различимы по нашей базе
   // ещё добавить синонимы - например некоторые кухни используют GOLD GLD вместо XAU
   string reg=StringFormat("((%s)[._:/\\-]?(%s))",list,list);
   // реализацию регулярных выражений в MQL ищите в кодобейз или требуйте от разработчиков
   // (у меня это на уровне dll, то есть не проблема)   
   return reg;
}
void OnStart()
{
   string reg=MakeReg();
   PrintFormat("Regular expression length %d",StringLen(reg));
}

полученную регулярку применяйте с форекс используя например https://www.mql5.com/ru/articles/2432

Для других рынков (фючи, цфд) - используйте ISIN или поговорите с экспертами по тем рынкам про сложившуюся практику именований и что должно быть в базе. 

А вообще чехорда с именами (префиксы/суфиксы) это почти только форекс, это у нас любой обладатель сервера начинает делает собственные символы.

Регулярные выражения для трейдеров
Регулярные выражения для трейдеров
  • www.mql5.com
Регулярные выражения (англ. regular expressions) — специальный язык для обработки текстов по заданному правилу, которое также называют шаблоном или маской регулярного выражения. В этой статье мы покажем, как обработать торговый отчет с помощью библиотеки RegularExpressions для MQL5, а также продемонстрируем результаты оптимизации с ее использованием.
 
Vladimir Pastushak #:

Извините, не увидел.

"A" и "A.us" у одного брокера на одном счету? Если да, киньте в личку ссылку плиз.

По остальным инструментам проблем не вижу, криптовый индекс не торгуется.