Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1877
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ну в ENUM_TIMEFRAMES минимальное и максимальное значение известны. Поэтому их можно задать явно.
С остальными enum, достаточно знать их примерный диапазон значений. Если в объявлении enum константы не заданы, то значения там обычно идут от 0. i_max_enum можно задать любым двузначным или трёхзначным числом: 50, 100, 255.
Также можно получить минимальное и максимальное значение enum экспериментальным путём. Записать их и указывать в StringToEnum для наиболее оптимальной скорости:
Результат работы скрипта:
Открываем ENUM_ACCOUNT_INFO_DOUBLE и смотрим. Количество констант равно Count (14). Таким образом при запуске приложения можно обработать все необходимые enum записать их минимальные и максимальные значения и использовать в StringToEnum соответствующие min и max с наиболее оптимальной скоростью.
P.S. Второй вариант enumFindMinMax с INT_MIN и INT_MAX действительно очень медленный. Я попробовал сначала его. А потом мне надоело ждать завершения работы enumFindMinMax и я поставил значения от -500 до 500
Таким образом я пришел к выводу что использовать весь диапазон int совсем необязательно.
Столкнулся со странным поведением терминала.
Ситуация такая: на одном графике работает эксперт, который в определенный момент открывает другой график и устанавливает на новом графике определенный темплет. В этом темплете прописан запуск на новом графике второго эксперта.
Все прекрасно работает посреди недели, но на закрытом рынке, в выходные, новый темплет на новом графике запускается (это видно по изменению внешности графика), а второй эксперт не стартует на нем. Единственный способ "толкнуть" второй эксперт -- это вручную запустить на любом графике какой-угодно скрипт, пусть даже пустой абсолютно. Тогда и второй эксперт на новом графике начинает работать.
Я писал этот код в первом эксперте и с помощью функций ChartOpen и ChartApplyTemplate и с помощью класса CChart -- всегда одно и тоже получается, на закрытом рынке второй эксперт на новом графике не стартует пока вручную не "толкнуть" терминал как-нибудь.
Может кто сталкивался с подобным? Как с этим бороться, в какую сторону "копать"?
Столкнулся со странным поведением терминала.
Ситуация такая: на одном графике работает эксперт, который в определенный момент открывает другой график и устанавливает на новом графике определенный темплет. В этом темплете прописан запуск на новом графике второго эксперта.
Все прекрасно работает посреди недели, но на закрытом рынке, в выходные, новый темплет на новом графике запускается (это видно по изменению внешности графика), а второй эксперт не стартует на нем. Единственный способ "толкнуть" второй эксперт -- это вручную запустить на любом графике какой-угодно скрипт, пусть даже пустой абсолютно. Тогда и второй эксперт на новом графике начинает работать.
Я писал этот код в первом эксперте и с помощью функций ChartOpen и ChartApplyTemplate и с помощью класса CChart -- всегда одно и тоже получается, на закрытом рынке второй эксперт на новом графике не стартует пока вручную не "толкнуть" терминал как-нибудь.
Может кто сталкивался с подобным? Как с этим бороться, в какую сторону "копать"?
Как определили, что не стартует, по чём это видно?
P.S.
Попробуйте вот так
Можно найти константу в enum с помощью функции с перебором (по тому же принципу #18697 ), переводя её с помощью EnumToString и сравнивая с искомой. Останется только вернуть результат.
А можно всё-таки пример (или хотя бы ключевую строчку), а то что-то на ум ничего не идёт? Это тоже будет перебор огромного списка значений с просеиванием нужных среди левых или там перебор только полезных значений? На данный момент мне кажется, что там не из чего просеивать, там же в списке нет левых-то... но уцепиться за идею никак не могу.
А можно всё-таки пример (или хотя бы ключевую строчку), а то что-то на ум ничего не идёт? Это тоже будет перебор огромного списка значений с просеиванием нужных среди левых или там перебор только полезных значений? На данный момент мне кажется, что там не из чего просеивать, там же в списке нет левых-то... но уцепиться за идею никак не могу.
Чтобы не перебирать все возможные значения enum (поскольку это действительно долго) следует произвести следующие приготовления #18771 (что-то вроде кеширования). Далее с помощью данной функции #18763 можно легко перевести строку/строки в enum зная диапазоны всех нужных enum. Или искать enum в сравнительно нешироком диапазоне #18768 .
Как определили, что не стартует, по чём это видно?
P.S.
Попробуйте вот так
Второй эксперт в секции OnInit делает выводы в лог и их нет логе. Нет в логе даже сообщений самого терминала о старте эксперта. И на графике не появляется название эксперта в правом верхнем углу.
А какая функция для этого используется? MqlRates? А если через ObjectGet то там я должен указать свойство объекта, если взять OBJPROP_PRICE то как сделать что бы он получал цену до текущего бара.
Получить это Гет. И есть функция получения цены или времени на баре с объекта по имени или по типу обьекта и имени получить определенное свойство объекта. Не номер бара, а смещение от нулевого используется.
Получить это Гет. И есть функция получения цены или времени на баре с объекта по имени или по типу обьекта и имени получить определенное свойство объекта. Не номер бара, а смещение от нулевого используется.
Можно это сделать с помощью функции ObjectGetValueByTime()
Пример
У меня проблема в следующем- В списке индикаторов в папке Terminal\MQL4\Indicators индикаторы есть, а непосредственно в самом терминале MQL4 в его списке из которого эти индикаторы перетаскиваются на график, этих самых индикаторов нет. Как сделать так, чтобы и на самом терминале в его списках эти индикаторы появились тоже, чтобы ими можно было пользоваться на графике терминала MQL4 ? На скрине правая сторона это те индикаторы , что доступны в терминала MQL4, а на лево от него индикаторы этого же терминала в папке MQL4 4\Indicators (как пример)
Вероятно что это не индикаторы.