Здравия желаю. Имеется терминал, скачанный у Альпари, но подключенный к счёту на РобоФорексе. Есть некий советник (самописный). При попытке запуска этого советника происходит мгновенное зависание терминала. В логах терминала и советников - ничего, пусто. В коде функции OnInit ничего особенного, создаётся строковый массив с названиями пар из "Обзора рынка", проверяется наличие минимальной истории по ним, замер волатильности по ATR - никаких "тяжёлых" расчётов нет. Такого ранее я не встречал.
Самое забавное, что иногда этот же советник (не будучи никак изменён) на этом же терминале спокойно запускается и успешно проходит инициализацию. Всё нормально, к работе готов. Закрываю терминал, через некоторое время открываю, снова пытаюсь запустить советника - опять зависание. Бред какой-то. Может, это как-то связано с тем, что скачан у одного брокера, а подключен к другому? Но это не должно никак влиять, насколько мне известно...
Глюк терминала?
Фрагмент (начало) функции привожу. Я расставил Print-маячки в тексте функции OnInit, первый - сразу после входа в цикл. Зависание происходит ещё ДО первого маячка - в журнале советника пусто. Маячки здесь закомментированы.
Не правильно проверять историю в OnInit(). Вся история будет подгружена только после выхода из OnInit().
Плюс ко всему два цикла do while да ещё и один вложен в другой………… А зачем такие проверки? Разве не проще в расчёте индикатора поставить условие, что если не хватает истории — продолжим на следующем тике?
Нужен код хотя бы до конца цикла, чтобы полностью проверить. Но даже по видимой части кода можно сделать вполне уверенное предположение, что дело во вложенных циклах, из которых не предусмотрено выхода до тех пор, пока не выполнятся все необходимые действия.
К примеру:
do Success = ChartSetSymbolPeriod(0,Symbols[i],PERIOD_CURRENT); while (!Success);
Вот тут уже первое зависание, если по какой-то причине не получилось сменить символ и период графика. Откуда уверенность в том, что это это сработает абсолютно всегда? Если уверены, то зачем проверять результат? Если не уверены, то нужна обработка ошибки с продолжением выполнения, а не продолжение попыток, которые не приводят к нужному результату.
do { } while (iTime(Symbols[i],PERIOD_CURRENT,0) < Time[0]);
Здесь точно алгоритмическая ошибка. Берется время открытия бара текущего символа и сравнивается со временем открытия бара другого символа. До тех пор, пока время бара другого символа не догонит время текущего бара, цикл не завершится. Время открытия баров на разных символах не обязано совпадать.
Общая же стратегия для обновления истории по символу в МТ4 заключается всего лишь в обращении к любой таймсерии. И делать это можно только с возвращением исполнения терминалу. В OnInit() возврата исполнения не происходит, ни о каких изменениях советник не узнает. Перенесите логику обновления в OnTick(). Причем не нужно мучать терминал за счет
ChartSetSymbolPeriod(0,Symbols[i],PERIOD_CURRENT);
Достаточно обращения к iTime. Функция проверки обновления графика выглядит так:
bool IsTFDataReady(const string sSymbol, const ENUM_TIMEFRAMES eTF) { ResetLastError(); iTime(sSymbol, eTF, 1); return GetLastError() == ERR_NO_ERROR; }
Здравия желаю. Имеется терминал, скачанный у Альпари, но подключенный к счёту на РобоФорексе. Есть некий советник (самописный). При попытке запуска этого советника происходит мгновенное зависание терминала. В логах терминала и советников - ничего, пусто. В коде функции OnInit ничего особенного, создаётся строковый массив с названиями пар из "Обзора рынка", проверяется наличие минимальной истории по ним, замер волатильности по ATR - никаких "тяжёлых" расчётов нет. Такого ранее я не встречал.
Самое забавное, что иногда этот же советник (не будучи никак изменён) на этом же терминале спокойно запускается и успешно проходит инициализацию. Всё нормально, к работе готов. Закрываю терминал, через некоторое время открываю, снова пытаюсь запустить советника - опять зависание. Бред какой-то. Может, это как-то связано с тем, что скачан у одного брокера, а подключен к другому? Но это не должно никак влиять, насколько мне известно...
Глюк терминала?
Фрагмент (начало) функции привожу. Я расставил Print-маячки в тексте функции OnInit, первый - сразу после входа в цикл. Зависание происходит ещё ДО первого маячка - в журнале советника пусто. Маячки здесь закомментированы.
дай бог памяти...в Roboforex инструменты точно с такими именованиями, без префиксов/суффиксов ? если есть префикс/суффикс то это не "зависает", а просто пар без суффиксов нет и ничего не находится. В нужное условие не попадёт никогда
То есть в советнике инициализация 28 мажоров с кроссами неправильно сделана.
Надо перебирать все инструменты, и выбирать те которые "форекс" и у которых и базовая и котировочная валюта мажоры (USD,EUR,GBP,CHF,CAD,AUD,NZD,JPY).
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравия желаю. Имеется терминал, скачанный у Альпари, но подключенный к счёту на РобоФорексе. Есть некий советник (самописный). При попытке запуска этого советника происходит мгновенное зависание терминала. В логах терминала и советников - ничего, пусто. В коде функции OnInit ничего особенного, создаётся строковый массив с названиями пар из "Обзора рынка", проверяется наличие минимальной истории по ним, замер волатильности по ATR - никаких "тяжёлых" расчётов нет. Такого ранее я не встречал.
Самое забавное, что иногда этот же советник (не будучи никак изменён) на этом же терминале спокойно запускается и успешно проходит инициализацию. Всё нормально, к работе готов. Закрываю терминал, через некоторое время открываю, снова пытаюсь запустить советника - опять зависание. Бред какой-то. Может, это как-то связано с тем, что скачан у одного брокера, а подключен к другому? Но это не должно никак влиять, насколько мне известно...
Глюк терминала?
Фрагмент (начало) функции привожу. Я расставил Print-маячки в тексте функции OnInit, первый - сразу после входа в цикл. Зависание происходит ещё ДО первого маячка - в журнале советника пусто. Маячки здесь закомментированы.