- www.mql5.com
У каждого тестер-агента свои копия глобальных переменных, которая никак не связана с клиентским терминалом.
Спасибо за разъяснение, в купе с экспериментами в тестере прояснилось, как контролировать глобальные переменные терминала, но хотелось бы узнавать об этом из документации, ибо таких как я интересующихся будет много.
В особенности это касается таких моментов, которые отличаются от MQL4.
Дополнительно в описаниях функций хочется видеть особенности их поведения в тестере.
Например в MQL4
datetime TimeCurrent( ) Возвращает последнее известное время сервера (время прихода последней котировки) в виде количества секунд, прошедших после 00:00 1 января 1970 года. Замечание: при тестировании последнее известное время сервера моделируется. Пример: if(TimeCurrent()-OrderOpenTime()<360) return(0);
А в MQL5
TimeCurrent Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это – время прихода последней котировки по любому символу, доступного в окне "Обзор рынка", то самое время, которое показано в заголовке этого окна. Значение времени формируется на торговом сервере и не зависит от настроек времени на компьютере пользователя. Существует 2 варианта функции. Вызов без параметров datetime TimeCurrent(); Вызов с параметром типа MqlDateTime datetime TimeCurrent( MqlDateTime& dt_struct // переменная типа структуры ); Параметры dt_struct [out] Переменная типа структуры MqlDateTime. Возвращаемое значение Значение типа datetime Примечание Если в качестве параметра была передана переменная типа структуры MqlDateTime, то она заполняется соответствующим образом.
Про поведение в тестере ничего. Познавать приходится импирически.
Спасибо.
Вот еще
SymbolsTotal Возвращает количество доступных (выбранных в MarketWatch или всех) символов. int SymbolsTotal( bool selected // true – только символы в MarketWatch ); Параметры selected [in] Режим запроса. Может принимать значения true или false. Возвращаемое значение Если параметр selected равно true, то возвращается количество выбранных в MarketWatch символов. Если значение false, то возвращается общее количество всех символов.
В тестере всегда возвращает либо 1 либо 49.
Может я не туда смотрю и не там читаю?
- www.mql5.com
интересно, а сколько он вам должен символов возвращать если их постоянное количество
Ровно столько, сколько я выберу в окне обзор рынка
Если параметр selected равно true, то возвращается количество выбранных в MarketWatch символов
Ровно столько, сколько я выберу в окне обзор рынка
- www.mql5.com
Вот еще
В тестере всегда возвращает либо 1 либо 49.
Может я не туда смотрю и не там читаю?
выберите в тестере режим Все символы, выбранные в окне "Обзор рынка" и будет вам счастье
Обзор рынка терминала (MarketWatch) не имеет никогоко отношения к тестеру стратегий при работе с функцией SymbolsTotal и подобными!
Тут дело такое - Если идет тестирование, то активным становится только тот символ на который был настроен тестер стратегий (если идет оптимизация по всем символам, то тут просто символ будет изменяться, на основании списка который активен в ОБЗОРЕ РЫНКА терминала). В этом случае возвращается 1. Следовательно все данные подгружаются только по этому символу.
Если при этом SymbolsTotal вызвана с параметром FALSE вернется, как и положено, количество символов торгуемых в конкретном ДЦ (в нашем случае 49).
Чтобы корректно начать торговать в мультивалютном режиме, необходимо в блоке инициализации узнать полное число символов, а потом в цикле определить какой символ сделать доступным в MarketWatch тестера.
Но это Вы наверно и без меня знаете. А вот о наличии в справке нормальных примеров разработчикам думаю стоит подумать, даже в тех местах где по их мнению должно быть все просто, легко и понятно...
PS
Кстати, для разработчиков - Тут выяснилось, что во всей справке нет раздела целиком посвященного MarketWatch (есть только отдельное упоминание о нем в отдельных функциях).
Вот еще
В тестере всегда возвращает либо 1 либо 49.
Может я не туда смотрю и не там читаю?
Проблема, не проблема, а так сложность, в том, что в моем советнике есть блок, который отвечает дополнительно за вывод различной информации, в том числе по всем открытым позициям на одном графике.
На демке все работает нормально и выглядит это примерно так см. в левом углу
Для корректной работы нужно постоянно обновлять эту информацию, и чтоб оптимизировать процесс перебора, эксперт делает это только с символами, выбранными в окне обзор рынка, т.к. если его там нет, то и открытых позиций быть не может.
Вот участок кода
//+------------------------------------------------------------------+ int cObjectDL::iSmblsIndx(string& sSmblNm) // определение имеющихся и подготовка новых инструментов {int ii; bool bfls=false; iSmblsTtlT=SymbolsTotal(true);// только символы в MarketWatch всего for(ii=0; ii<iSmblsTtlT; ii++) // пробегаемся по всем символам в MarketWatch {if(sSmblNm==sArSmbls[ii]) // сравниваем по порядку все с переданым {bfls=true;break;}} // если он есть в списке, то прерываем цикл if(bfls) return(ii); // и выходим со значением номера в списке if(iSmblsTtl>=iSmblsTtlT) // если кол-во символов превысит из MarketWatch return(-1); // то выйдем с ошибкой // если символа нет в списке, то добавим его ii=iSmblsTtl; // присваиваем индексу новое последнее значение iSmblsTtl++; // а общее количество инструментов увеличивается sArSmbls[ii]=sSmblNm; // вносим в массив новое имя инструмента for(int ik=0;ik<=7-1;ik++) // и обнуляем все его количественные значения {dArItgDt[ii][ik]=0;} return(ii); } // и выходим со значением нового номера в списке //+------------------------------------------------------------------+
Если поставить false, то все работает, тестируется, но медленнее, да и не оптимально это.
Пока нет визуального режима при тестировании, это не проблема, просто работа этого блока при инициализации отключается, он в тестере нужен мне был только для отладки через PRINT )))
Остается дебагер и визуальный режим. Как обойти данный момент тестера?
Можно наверное два варианта кода сделать и выбирать в зависимости от MQL5InfoInteger.
Есть у кого какие идеи.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Интересует работа функций управления глобальными переменными терминала в тестере !!!
По началу все работало. Сейчас отклики функций сообщают, что все отлично, а в списке по F3 ничего не происходит.
Например следующий код.
сообщает об успешности выполнения, а окно с глобальными переменными остается пустым.
При навешивании на чарт, все работает.
Изменились правила игры или что-то не так ?