StringFind глюк

 
int countsymbol=SymbolsTotal(false);
   for(int i=countsymbol;i>0;i--)
   {
      string symbol=  SymbolName(i,false);
      if(StringFind(symbol,"US",0)>0){

      MessageBox("Hello "+symbol);

      }
   }

Возникла проблема, месейджбокс появляется только у трех символов - AUDUSD GBPUSD NZDUSD, остальные с US ненаходит(ненаходит в них подстроку "US"), например EURUSD USDCAD и т.д. В чем может быть причина?


Смысл кода в том что бы выбрать только пары с USD.

 

попробуйте написать

int countsymbol=SymbolsTotal(false)-1;
   for(int i=countsymbol;i>=0;i--)
   {
      string symbol=  SymbolName(i,false);
      if(StringFind(symbol,"US",0)>0){

      MessageBox("Hello "+symbol);

      }
   }
//  а теперь проверим в окне обзор рынка
   countsymbol=SymbolsTotal(true)-1;
   for(int i=countsymbol;i>=0;i--)
   {
      string symbol=  SymbolName(i,false);
      if(StringFind(symbol,"US",0)>0){

      MessageBox("Hello2 "+symbol);

      }
   }

 

 
IgorM:

попробуйте написать

 

Тоже выбрал всего три варианта, не выбрал например USDCHF , хотя в маркете все символы отображены.
 
neftegaz:

Возникла проблема, месейджбокс появляется только у трех символов - AUDUSD GBPUSD NZDUSD, остальные с US ненаходит(ненаходит в них подстроку "US"), например EURUSD USDCAD и т.д. В чем может быть причина?


Смысл кода в том что бы выбрать только пары с USD.

Есть два варианта решения этой проблемы:

1. Искать подобным образом. Только я вот понять не могу почему ищем "US", логичней было бы искать "USD";

При этом внимательно читаем справку по функции поиска и обращаем внимание на параметры и комментарий после них

Параметры

string_value - [in]  Строка, в которой производится поиск.

match_substring - [in]  Искомая подстрока.

start_pos=0 - [in]  Позиция в строке, с которой должен быть начат поиск.

Возвращаемое значение

Возвращает номер позиции в строке, с которой начинается искомая подстрока, либо -1, если подстрока не найдена.

Вас в коде ничего не смущает?

2. Во второй варианте все проще.

Читаем справку по информации о символе, и видим в ней следующее

Для функции SymbolInfoString()

ENUM_SYMBOL_INFO_STRING

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

Описание

Тип свойства

SYMBOL_CURRENCY_BASE

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

string

SYMBOL_CURRENCY_PROFIT

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

string

SYMBOL_CURRENCY_MARGIN

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

string


Ни на какие мысли не наталкивает?

 

исправьте во втором варианте

string symbol= SymbolName(i,true); 

 
neftegaz:

Возникла проблема, месейджбокс появляется только у трех символов - AUDUSD GBPUSD NZDUSD, остальные с US ненаходит(ненаходит в них подстроку "US"), например EURUSD USDCAD и т.д. В чем может быть причина?

int countsymbol=SymbolsTotal(false);
   for(int i=countsymbol;i>0;i--)
   {
      string symbol=  SymbolName(i,false);
      if(StringFind(symbol,"US",0)>0){

      MessageBox("Hello "+symbol);

      }
   }

Смысл кода в том что бы выбрать только пары с USD.

Так попробуйте, все должно работать

//Function OnInit
int OnInit()
{
//----------------------------------------------------------------------------//
//Work variables
string SymbolTitle;
int    SymbolCount;
int f;
//----------------------------------------------------------------------------//

SymbolCount = SymbolsTotal(false);

  for(f=0;f<SymbolCount;f++)
  {
  SymbolTitle = SymbolName(f,false);
  
    if(StringFind(SymbolTitle,"USD",0)!=-1)
    {
    Print("Hello ",SymbolTitle);
    }

  }
//----------------------------------------------------------------------------//

 
neftegaz:

Возникла проблема, месейджбокс появляется только у трех символов - AUDUSD GBPUSD NZDUSD, остальные с US ненаходит(ненаходит в них подстроку "US"), например EURUSD USDCAD и т.д. В чем может быть причина?


Смысл кода в том что бы выбрать только пары с USD.

Держи 100% рабочий код

Print("************************************************");
   Print("Пройдем по всем сиволам");
   int countsymbol=SymbolsTotal(false)-1;
   for(int i=countsymbol;i>=0;i--)
     {
      string symbol=SymbolName(i,false);
      if(StringFind(symbol,"US")>=0)
        {
         Print("Hello "+symbol);
        }
     }
//  а теперь проверим в окне обзор рынка
   Print("************************************************");
   Print("Пройдем по сиволам выбранным в окне обзор рынка");
   countsymbol=SymbolsTotal(true)-1;
   for(int i=countsymbol;i>=0;i--)
     {
      string symbol=SymbolName(i,false);
      if(StringFind(symbol,"US")>=0)
        {
         Print("Hello "+symbol);
        }
     }
   Print("************************************************");

Результат проверки

LL      0       Поиск символа (EURUSD,M30)      23:47:47        ************************************************
RH      0       Поиск символа (EURUSD,M30)      23:47:47        Пройдем по всем сиволам
MP      0       Поиск символа (EURUSD,M30)      23:47:47        Hello USDSEK
GI      0       Поиск символа (EURUSD,M30)      23:47:47        Hello USDRUR
FR      0       Поиск символа (EURUSD,M30)      23:47:47        Hello NZDUSD
PK      0       Поиск символа (EURUSD,M30)      23:47:47        Hello AUDUSD
LE      0       Поиск символа (EURUSD,M30)      23:47:47        Hello USDCAD
ML      0       Поиск символа (EURUSD,M30)      23:47:47        Hello USDJPY
IG      0       Поиск символа (EURUSD,M30)      23:47:47        Hello USDCHF
CP      0       Поиск символа (EURUSD,M30)      23:47:47        Hello GBPUSD
HH      0       Поиск символа (EURUSD,M30)      23:47:47        Hello EURUSD
DM      0       Поиск символа (EURUSD,M30)      23:47:47        ************************************************
II      0       Поиск символа (EURUSD,M30)      23:47:47        Пройдем по сиволам выбранным в окне обзор рынка
EK      0       Поиск символа (EURUSD,M30)      23:47:47        Hello USDSEK
OD      0       Поиск символа (EURUSD,M30)      23:47:47        Hello USDRUR
NM      0       Поиск символа (EURUSD,M30)      23:47:47        Hello NZDUSD
HG      0       Поиск символа (EURUSD,M30)      23:47:47        Hello AUDUSD
DQ      0       Поиск символа (EURUSD,M30)      23:47:47        Hello USDCAD
EH      0       Поиск символа (EURUSD,M30)      23:47:47        Hello USDJPY
QS      0       Поиск символа (EURUSD,M30)      23:47:47        Hello USDCHF
KK      0       Поиск символа (EURUSD,M30)      23:47:47        Hello GBPUSD
PE      0       Поиск символа (EURUSD,M30)      23:47:47        Hello EURUSD
LR      0       Поиск символа (EURUSD,M30)      23:47:47        ************************************************




 
sergey1294:

Держи 100% рабочий код

Результат проверки


Код то рабочий, цикл проверки там излишен...
 
Interesting:
Код то рабочий, цикл проверки там излишен...
Какой цикл излишен?
 
sergey1294:
Какой цикл излишен?
//  а теперь проверим в окне обзор рынка
   Print("************************************************");
   Print("Пройдем по сиволам выбранным в окне обзор рынка");
   countsymbol=SymbolsTotal(true)-1;
   for(int i=countsymbol;i>=0;i--)
     {
      string symbol=SymbolName(i,false);
      if(StringFind(symbol,"US")>=0)
        {
         Print("Hello "+symbol);
        }
     }

 
Interesting:

ну это я так просто скопировал с предыдущего поста, мало ли человек не вкурит, как выбирать среди всех символов в терминале или только из списка в обзоре рынка
Причина обращения: