Вы забыли заявить/выбрать символ: https://www.mql5.com/ru/docs/marketinformation/symbolselect
В терминале обычно маркетвотч уже заполнен, но в тестере надо явно активировать символы(кроме автоматически распознаваемых для поддержания базовых перерасчетов в валюту баланса), чтобы тестер начал их моделировать.
Обратите внимание, что выбор десятков и сотен ненужных символов в тестере приведет к детальному моделированию истории всех этих символов и может в разы снизить скорость тестирования.
- www.mql5.com
Вы забыли заявить/выбрать символ: https://www.mql5.com/ru/docs/marketinformation/symbolselect
В терминале обычно маркетвотч уже заполнен, но в тестере надо явно активировать символы(кроме автоматически распознаваемых для поддержания базовых перерасчетов в валюту баланса), чтобы тестер начал их моделировать.
Обратите внимание, что выбор десятков и сотен ненужных символов в тестере приведет к детальному моделированию истории всех этих символов и может в разы снизить скорость тестирования.
Вы забыли заявить/выбрать символ: https://www.mql5.com/ru/docs/marketinformation/symbolselect
В терминале обычно маркетвотч уже заполнен, но в тестере надо явно активировать символы(кроме автоматически распознаваемых для поддержания базовых перерасчетов в валюту баланса), чтобы тестер начал их моделировать.
Обратите внимание, что выбор десятков и сотен ненужных символов в тестере приведет к детальному моделированию истории всех этих символов и может в разы снизить скорость тестирования.
С этой ситуацией разобрался, но не успел порадоваться, как снова наметилась проблема.
Суть в следующем: решил сочинить кусок кода, чтобы в маркетвотче показывались символы, отобранные по некоторым критериям. И первый из критериев отбора - не должно быть ограничений по торговле данным иструментом.
Вот такой фрагмент кода:
for(int i=0; i<=SymbolsTotal(false)-1; i++) { Sym_Bol=SymbolName(i,false); if(SymbolInfoInteger(Sym_Bol,SYMBOL_TRADE_MODE)==SYMBOL_TRADE_MODE_FULL) { SymbolSelect(Sym_Bol,true); if(PRINT==1) Print("Sym_Bol № "+IntegerToString(i)+" ",Sym_Bol); } } PRINT=0;
В терминале работает корректно, сортирует без проблем. Но есть такой торговый инструмент (зачем он нужен непонятно, если торговли по нему нет) XPTUSD. И вот в тестере из-за него происходит остановка тестирования с ошибкой:
Как возможно отсортировать инструменты, подобные XPTUSD, чтобы при этом не проверялась синхронизация данных и не прерывалось тестирование с ошибкой? Прошу вразумления....
Все верно - вы запросили символ, по которому нет истории и тестер не сможет его моделировать. Это приводит к остановке процесса тестирования.
Зачем вы требуете от тестера моделировать символ, о котором сами не имеете представления?
Кроме того, такой код "показать все торговые инструменты" плох в самом терминале, а в тестере просто неприемлем. Моделировать 70[NNN] инструментов - это только для сурового редкого теста для исследователя, который точно знает что он хочет.
Все верно - вы запросили символ, по которому нет истории и тестер не сможет его моделировать. Это приводит к остановке процесса тестирования.
Зачем вы требуете от тестера моделировать символ, о котором сами не имеете представления?
Кроме того, такой код "показать все торговые инструменты" плох в самом терминале, а в тестере просто неприемлем. Моделировать 70[NNN] инструментов - это только для сурового редкого теста для исследователя, который точно знает что он хочет.
В этом и вопрос, как узнать информацию о символе (не визуально в терминале, а советнику автоматически), не вызывая всех этих ненужных процессов? Я не хочу делать никаких операций с этим конкретным символом. И не хочу работать сразу со всеми символами. Я просто хочу выбрать для работы символы удовлетворяющие определённому набору условий и работать впоследствии с выбранными символами.
Командой SymbolSelect вы не "просто хотите выбрать", а прямо приказываете тестеру торговых стратегий заняться моделированием цен этого инструмента. Моделирование даже одного символа - это очень тяжелая работа и для этого обязательно нужна история.
Если вы в тестер загоняете такое количество символов, значит вы вообще не понимаете, что делаете.
Чтобы понять суть процессов, выберите 10 символов через SymbolSelect в тестере на пустом эксперте без логики и запустите визуальный режим. Сразу поймете, о чем я говорю.
Командой SymbolSelect вы не "просто хотите выбрать", а прямо приказываете тестеру торговых стратегий заняться моделированием цен этого инструмента. Моделирование даже одного символа - это очень тяжелая работа.
Если вы в тестер загоняете такое количество символов, значит вы вообще не понимаете, что делаете.
Скорей всего, не я не понимаю, что делаю, а просто не смог донести понятно Вам, чего хочу добиться и что не получается. Команду SymbolSelect я применяю к инструментам, прошедшим отбор по каким-то критериям (в примере по отсутствию ограничений на торговые операции - if(SymbolInfoInteger(Sym_Bol,SYMBOL_TRADE_MODE)==SYMBOL_TRADE_MODE_FULL)) а к инструменту, который таким критериям не соответствует, SymbolSelect не применяется. То есть, мне нужно из числа инструментов, предоставляемых брокером, выбрать подходящие инструменты и с ними уже выполнять определённые действия. Тем не менее, в тестере происходит попытка синхронизировать данные по символу, который не был выбран командой SymbolSelect, поскольку по этому символу не разрешена торговля. По моей логике и пониманию данный кусок кода должен отработать так:if(BEGIN==1) { for(int i=0; i<=SymbolsTotal(false)-1; i++) { Sym_Bol=SymbolName(i,false); if(SymbolInfoInteger(Sym_Bol,SYMBOL_TRADE_MODE)==SYMBOL_TRADE_MODE_FULL) { SymbolSelect(Sym_Bol,true); Print("Sym_Bol № "+IntegerToString(i)+" ",Sym_Bol); SymbolSelect(Sym_Bol,false); } } } BEGIN=0;
- При первом запуске (условие BEGIN==1) определяется количество символов, предоставляемых брокером, но не показанными в маркетвотч (SymbolsTotal(false));
- Далее идёт циклический перебор символов с проверкой, разрешена ли торговля по символу (if(SymbolInfoInteger(Sym_Bol,SYMBOL_TRADE_MODE)==SYMBOL_TRADE_MODE_FULL));
- Только к символам отвечающим заданному условию, применяется команда SymbolSelect(Sym_Bol,true);
- Чисто для визуализации выводится информация о том инструменте, который отвечает заданным условиям и может использоваться для дальнейшей работы;
- После этого проверенный символ удаляется из маркетвотча;
- BEGIN=0 предотвращает повторение процесса.
И опять возвращаюсь к сути возникающего передо мной вопроса - как отсортировать инструменты, не подходящие для торговли, чтобы не возникала подобная ошибка в тестере?
То есть, мне нужно из числа инструментов, предоставляемых брокером, выбрать подходящие инструменты и с ними уже выполнять определённые действия.
Это не нужно делать в тестере.
Запустите на любом графике скрипт, подготавливающий список инструментов, а потом в тестере работайте только с ним.
Это не нужно делать в тестере.
Запустите на любом графике скрипт, подготавливающий список инструментов, а потом в тестере работайте только с ним.
Когда я сказал, что "мне нужно", подразумевал, что хочу реализовать возможность работы в тестере для потенциальных пользователей советника где заложен такой функционал. Я доделываю мультивалютный советник, в нём есть функция автоматического выбора инструментов для торговли по определённым критериям. Главной, и пока похоже не разрешимой проблемой, оказалась невозможность заставить его работать в тестере. Поскольку не известно, к какому брокеру и с каким набором инструментов будет подключаться пользователь, заданный жёстко список инструментов для работы - не вариант.
Сделайте подбор с помощью скрипта или специального режима в самом советнике.
Например, если советник впервые запускается на счете определенного брокера, он сам информирует пользователя о необходимости подобрать инструменты, делает подбор, и сохраняет набор в файл.
После этого файл можно подсунуть тестеру.
Ничего более элегантного в голову не приходит.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Хотелось бы услышать от знающих людей, в чём причина? Допускаю три варианта: 1 - ограничение функционала тестера; 2 - глюк тестера; 3 - делаю чёт не так...
Кусок кода в примере должен показывать значение Ask для первых пяти символов из окна обзора.
Вот приблизительно так выглядит результат запуска кода в терминале и в тестере:
Помогите, пожалуйста, разобраться с ситуацией!