Названия валютных пар, какие варианты бывают? - страница 2

 
Alexey:
А для чего префикс нужен?
Для возможности иметь  разнонаправленные позиции по одному и тому же инструменту. Например, по

mEURUSD - бай.

cEURUSD - селл.

На одном счете.

 
Scriptong:

Находить в имени пары соответствующую подстроку. Ведь очевидно, что во всех перечисленных вариантах один и тот же корень, например, EURUSD. Ведь бывают пары с префиксом:

mEURUSD

cEURUSD 

Спасибо за подсказку. Решение найдено.

if(StringFind(Symbol(),"EURUSD", 0) != -1 )

 
FastInvestments:

Спасибо за подсказку. Решение найдено.

if(StringFind(Symbol(),"EURUSD", 0) != -1 )

префиксы зло

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

без префикса можно брать первые символы а с префиксом беда... 

 
Langouste:
Для возможности иметь  разнонаправленные позиции по одному и тому же инструменту. Например, по

mEURUSD - бай.

cEURUSD - селл.

На одном счете.

Это для мт5
 
transcendreamer:

префиксы зло

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

без префикса можно брать первые символы а с префиксом беда... 

Можно в функцию с анализом строк сделать, где заранее будут прописаны, индыксы префиксы и прочее. И не парится по этому поводу
 
Alexey:
Можно в функцию с анализом строк сделать, где заранее будут прописаны, индыксы префиксы и прочее. И не парится по этому поводу
Все индексы/префиксы/прочее каждого поголовно брокера заранее неизвестны, в отличие от корня (EURUSD напр). Поэтому лучше делать функцию, которая будет текущий символ разбирать на запчасти split'ом по корню и записывать актуальные для этого брокера суффиксы/префиксы в глобальные переменные или файл. Если, конечно, оно надо для последующего использования в др скриптах
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey:
Можно в функцию с анализом строк сделать, где заранее будут прописаны, индыксы префиксы и прочее. И не парится по этому поводу

придется

а в мт5 есть функции валюты прибыли и валюты маржи, можно ими воспользоваться 

 
FastInvestments:

Спасибо за подсказку. Решение найдено.

if(StringFind(Symbol(),"EURUSD", 0) != -1 )

Да, это работает с валютными парами. Но вот, к примеру, с металлами труднее. В одних конторах золото - GOLD,  в других - XAUUSD, в третьих - GLD. То же самое с серебром - SILVER, XAGUSD, SLV. В итоге приходится идти тем методом, который Вы использовали с самого начала - созданием таблиц различных наименования финансовых инструментов.
 
Alexey:
А для чего префикс нужен?

Ума не приложу ))) Ведь вполне достаточно было бы суффикса.

Но раз есть, значит, это кому-то нужно. Узнать бы, зачем.

 

Вот функция, написал на скорую руку для автокорректировки префиксов, может кому пригодиться)  

Возвращает истинное наименование символа, без префиксов.

   //+------------------------------------------------------------------+

   //|    SymbolCorrect                                                       |
   //+------------------------------------------------------------------+      
   string SymbolCorrect(string para="EURUSDm")// to EURUSD, GOLD, SILVER
     {
      if(StringLen(para)==6){if(para!="SILVER"){return(para);}}
      //---
      if(StringLen(para)>6)
        {
         string pars[9]={"AUD","CAD","CHF","EUR","GBP","JPY","NZD","USD","SILVER"};
         for(int u=0;u<9;u++)
           {
            int k=StringFind(para,pars[u],0);
            if(k<0){continue;}
            //---
            if(k>=3 && u!=8){k=k-3;}
            para=StringSubstr(para,k,6);
            if(para=="XAGUSD"){para="GOLD";}
           }
         return(para);
        }
      //---
      if(StringLen(para)<=6)
        {
         string pars[5]={"GOLD","GLD","SILVER","AG","SLV"};
         for(int u=0;u<5;u++)
           {
            int k=StringFind(para,pars[u],0);
            if(k<0){continue;}
            //---
            para=StringSubstr(para,k,StringLen(pars[u]));
            if(u==1){para="GOLD";}
            if(u==3||u==4){para="SILVER";}
           }
        }
      return(para);
     }
Причина обращения: