Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
init() индикатора и советника работают по разному. Индикатор будет проходить переинициализацию каждый раз, а советник - только при запуске.
Нет.
Возможно данные еще не подгрузились, а инит выполнился. От этого был произведен поиск на неполных данных. В старте надо это делать и еще проверку сделать, что данные не в процессе обновления находятся.
Проверку делать примерно так:
Большое спасибо. Завтра буду разбираться и пробовать.
как угодно. опытным путём. нет так нет. у меня вообще уже без индюков. может и подзабыл
Integer ответил.
Integer ответил.
Да. Integer ответил круто и близко к решению проблемы. Я (ещё не успел) сейчас проверю такой вариант, но!!! Если поставить сов на график, (он сделает всё согласно алгоритма без ошибок), потом переключить ТФ (выполнено с ошибкой), а потом сколько не вызывай свойства советника ничего не получается, ошибка остаётся... Хотя данные уже должны-бы подгрузиться. Только если сов удалить с графика, а потом заново поставить. Тогда алгоритм будет выполнен безошибочно и на новом ТФ. Вернуть ТФ обратно... Та-же самая процедура.
Вот думаю, не в переменных-ли глобального уровня проблема??? Ведь они инициализируются до выполнения init() а в случаях изменения свойств советника или изменении ТФ остаются... Но и это у меня под сомнением... Ведь первое что делается это находится фрактал на текущем ТФ и это значение пишется в переменную. Поэтому обнуление переменных не приводит к положительному результату. Это проверил. Даже пробовал вместо переменных использовать массивы и первой строкой в init() ArrayInitialize(массив, 0).
Возможно данные еще не подгрузились, а инит выполнился. От этого был произведен поиск на неполных данных. В старте надо это делать и еще проверку сделать, что данные не в процессе обновления находятся.
Проверку делать примерно так:
К сожалению как я и предположил это не помогло. Вот что я добавил в init()
datetime d[]; int err;
for(int i = 0; i <=5; i++)
{
ArrayCopySeries(d, MODE_TIME, Symbol(), Period());
err = GetLastError();
if(err > 0)
{
Print("GetLastError() == ", err);
continue;
}
else
{
Print(Period());
break;
}
}
Печатает только период.
Может я что-то не так сделал в этой проверке?
Повторюсь по другому.
Без кода можно говорить только об общем.
Частное решение найти не удастся
Хотя, если нужно общее, то в статьях все это есть
Vinin, меня и интересует общее. Код выполняется без ошибок на любом ТФ. Проблема при переключении ТФ. Ну повторяю специально для Вас. Если сов ставить на график выполняется безошибочно. Проблема в переинициализации. Какие данные могут быть не обновлены??? Все переменные обнулял, не помогает. Почему-то начинает искать фрактал не с 3-го бара, а не понятно с какого и какого ТФ.
Или вы хототе найти ошибку в такой строке
frUp = iFractals(NULL, 0, MODE_UPPER, i+3);
Проблема в i? Вы хотите считать данные которые еще не загрузились. Если откроете другой график. Сперва на нем переключитесь на нужный тайм-фрейм, потом на основном (сделав паузу в несколько секунд), проблема исчезнет.
А так Вы обращаетесь к данным, а они пока только загружаются. И естественно будут проблемы.
Хотя можно сделать цикл по обработке ошибки 4066, может и поможет