попробуйте написать
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); } }
Возникла проблема, месейджбокс появляется только у трех символов - AUDUSD GBPUSD NZDUSD, остальные с US ненаходит(ненаходит в них подстроку "US"), например EURUSD USDCAD и т.д. В чем может быть причина?
Смысл кода в том что бы выбрать только пары с USD.
Есть два варианта решения этой проблемы:
1. Искать подобным образом. Только я вот понять не могу почему ищем "US", логичней было бы искать "USD";
При этом внимательно читаем справку по функции поиска и обращаем внимание на параметры и комментарий после них
Параметры
string_value - [in] Строка, в которой производится поиск.
match_substring - [in] Искомая подстрока.
start_pos=0 - [in] Позиция в строке, с которой должен быть начат поиск.
Возвращаемое значение
Возвращает номер позиции в строке, с которой начинается искомая подстрока, либо -1, если подстрока не найдена.
Вас в коде ничего не смущает?
2. Во второй варианте все проще.
Читаем справку по информации о символе, и видим в ней следующее
Для функции SymbolInfoString()
Идентификатор |
Описание |
Тип свойства |
SYMBOL_CURRENCY_BASE |
Базовая валюта инструмента |
string |
SYMBOL_CURRENCY_PROFIT |
Валюта прибыли |
string |
SYMBOL_CURRENCY_MARGIN |
Валюта в которой вычисляется залоговые средства |
string |
Ни на какие мысли не наталкивает?
исправьте во втором варианте
string symbol= SymbolName(i,true);
Возникла проблема, месейджбокс появляется только у трех символов - 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); } } //----------------------------------------------------------------------------//
Возникла проблема, месейджбокс появляется только у трех символов - 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 ************************************************
Держи 100% рабочий код
Результат проверки
Код то рабочий, цикл проверки там излишен...
Какой цикл излишен?
// а теперь проверим в окне обзор рынка 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); } }

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