Вопрос, собственно , почему? Хотя тут: https://www.mql5.com/ru/articles/239 сказано, что при первом же обращении история загрузится и начнется моделирование тиков по выбранному алгоритму. В терминале все работает, а в тестере нет, почему?
В статье что-нибудь говорится о том, что история загружается сразу для всех символов?
А причем здесь "все"? В статье говорится "Кроме того, можно явно запросить историю для нужных символов с помощью вызова функции SymbolSelect() в обработчике OnInit()", что я и делаю...
for(int i=0;i<SymbolsTotal(false);i++) { string name = SymbolName(i,false); SymbolSelect(name,true); }
А причем здесь "все"?
При том, что первоначально Вы сослались только на то, что в статье "...сказано, что при первом же обращении история загрузится и начнется моделирование тиков по выбранному алгоритму". Уточняющий вопрос ещё никому не повредил.
В статье говорится "Кроме того, можно явно запросить историю для нужных символов с помощью вызова функции SymbolSelect() в обработчике OnInit()", что я и делаю...
В первоначально выложенном коде
int OnInit() { //--- create timer EventSetTimer(60); for(int i=0;i<SymbolsTotal(false);i++) { SymbolSelect(name,true); }непонятно, что за переменную name использует SymbolSelect(). Поэтому Вы делали не совсем то, о чём написали во втором сообщении :)
При том, что первоначально Вы сослались только на то, что в статье "...сказано, что при первом же обращении история загрузится и начнется моделирование тиков по выбранному алгоритму". Уточняющий вопрос ещё никому не повредил.
В первоначально выложенном коде
непонятно, что за переменную name использует SymbolSelect(). Поэтому Вы делали не совсем то, о чём написали во втором сообщении :)Собственно, весь код я вычистил от всяких там побочных вещей, чтобы акцентировать внимание именно на процессе получения и синхронизации данных истории. Поэтому случайно в первом примере потерялась строка
string name = SymbolName(i,false);
Именно эта переменная и используется в выборе инструментов:
SymbolSelect(name,true);
Однако, почему-то не работает... В статье, также говорится что в окне тестера вроде как в обзоре рынка должны появляться котировки, однако и этого у меня не происходит...
- www.mql5.com
ОК. У себя пока запустить не могу - тестеры заняты.
Запустил - результаты аналогичные. При этом никакой новой истории не закачивается, а история по имеющимся инструментам не используется. Если интересно, посмотрите поиском по форуму проблемы, связанные с функцией SymbolInfoTick() в тестере. Может, там уже есть решение.
Запустил - результаты аналогичные. При этом никакой новой истории не закачивается, а история по имеющимся инструментам не используется. Если интересно, посмотрите поиском по форуму проблемы, связанные с функцией SymbolInfoTick() в тестере. Может, там уже есть решение.
А в указанном диапазоне тестирования в терминале история есть по всем инструментам?
Нет, не по всем: "При этом никакой новой истории не закачивается, а история по имеющимся инструментам не используется"
По поводу данного вопроса.
1. Разработчикам - С каких пор пор использование SymbolName(i,false) формирует MarketWatch? Когда-то уже ругался по этому поводу, придется снова!!!
С какого это паровоза тестер решил что при обращении SymbolName нужно символ выставлять в обзор? Я еще вообще-то не решил хочу или нет данный символ выставить в обзор.
Также и многие другие функции с инфой по символу по идеи не должны добавлять символ в обзор (для начала нужно определиться что за символ и нужен ли он мне).
Как минимум использование SymbolName обзор рынка (MarketWatch) затрагивать не должно.
Результат можно на скрине выше посмотреть.
2. По поводу SymbolSelect
//Так работает SymbolSelect("EURUSD",true); SymbolSelect("GBPUSD",true); //Так нет (верней сиволы в обзор попадают, а вот цены и другая инфа нет). //Такое впечатление что SymbolName добавляет символ в список, а выбор после этого не происходит for(int i=0;i<SymbolsTotal(false);i++) { name = SymbolName(i,false); SymbolSelect(name,true); }
3. По поводу примера - Блок инициализации
На мой взгляд если тчоно известно какие символы нужны легче из файла или масиива сформировать список. Блок инициализации на первый взгляд должен выглядеть так
int OnInit() { //+------------------------------------------------------------------+ string name = ""; //+------------------------------------------------------------------+ //Select for(int i=0;i<SymbolsTotal(false);i++) { name = SymbolName(i,false); //Тут можно проверку сделать дополнительную SymbolSelect(name,true); } //Сreate timer EventSetTimer(60); //+------------------------------------------------------------------+ return(0); //+------------------------------------------------------------------+ }
4. По поводу примера - таймер
Зачем обрабатывать символы которые не выбраны в MarketWatch? немного переделанный пример обработчика таймера выглядит так (можно добавить дополнительных проверок).
void OnTimer() { //+------------------------------------------------------------------+ string name = ""; //Переменную можно вывести на уровень модуля, чтобы была доступна везде. //+------------------------------------------------------------------+ for(int i=0;i<SymbolsTotal(true);i++) { name = SymbolName(i,true); if(SymbolInfoTick(name,last_tick)) { Print("Symbol ",name," - ",last_tick.time,": Bid = ",last_tick.bid, " Ask = ",last_tick.ask," Volume = ",last_tick.volume," Symbol = ",SymbolName(i,false)); } else Print("SymbolInfoTick() failed, error = ",GetLastError()); } //+------------------------------------------------------------------+ }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
Подскажите новичку в чем проблема!
Пытаюсь одолеть мультивалютный тестинг, но ничего не получается уже в самом начале. Следующий код:
Приводит к следующему результату в режиме тестирования:
Вопрос, собственно , почему? Хотя тут: https://www.mql5.com/ru/articles/239 сказано, что при первом же обращении история загрузится и начнется моделирование тиков по выбранному алгоритму. В терминале все работает, а в тестере нет, почему?