Пользовательские символы. Ошибки, баги, вопросы, предложения. - страница 28

 

Буквально несколько дней назад встречал эту ошибку при создании кастомного символа. Руками перепроверял много что. Замечал и крайне странный баг, что после ArrayCopy некоторые тики получали рандомные значения. Поскольку повторить её было на чистой машине достаточно муторно, генерировался из кастомов другой синтетический кастом, и отношение к репортам тут в последнее время специфическое, а именно полный игнор, репортить не стал. Но для себя решил вопрос единым вызовом CustomTicksAdd. Т.е. все тики сначала заливаются в один массив, причём копирование вручную, а уже он одним вызовом в кастом символ. Так ошибок никаких не вываливается. Попробуйте.

P.S. Ещё добавлю, что налетал на всякие странные баги с CopyTicks, перешёл на CopyTicksRange.

 
fxsaber:

Посмотрел код внимательнее. Вы пропускаете тики при получении порциями. Возможна ситуация Ticks[Limit - 1].time_msc == Ticks[Limit + k], k >= 0.

Соответственно, когда дописываете с пропуском, то флаги могут не соответствовать.


Пропускаю уже намеренно в данном тесте, чтобы гарантировать отсутствие нахлеста, потому что пока не понятна этиология проблемы, и она могла возникать из-за дублирования тиков (по аналогии с Андреем я решил исключить саму возможность методом "quick and dirty").

По поводу флагов, пожалуйста, поподробнее. Содержимое тиков (включая флаги) никто ведь не меняет, и про какое-то влияние флагов на последовательность тиков я не вычитал. Как минимум, описание кода ошибки ничего про флаги не говорит.

 
Stanislav Korotky:

По поводу флагов, пожалуйста, поподробнее. Содержимое тиков (включая флаги) никто ведь не меняет, и про какое-то влияние флагов на последовательность тиков я не вычитал. Как минимум, описание кода ошибки ничего про флаги не говорит.

По флагам - гипотеза. Когда-то была проблема с ними, поэтому для сторонних тиков сам формировал флаги перед отправкой.


Например, после пропуска первый тик имеет иную bid-цену, но при этом флаг об этом отсутствует.

 

Не понятно зачем эта строчка, если переменная _start с увеличенной ms на единицу, не где дальше не используется.
И при выходе из функции она уничтожается.
Как я вижу сдвиг времени не где не используется и не запоминается.   
И зачем вы в эту переменную _start которая служит как входящая, присваиваете что то.
Она ведь тогда вернёт обратно в функцию while это значение, а там тупик её использования.
В общем код какой то запутанный и не явный. Или я не догоняю эту конструкцию ))                 

_start = array[size - 1].time_msc + 1;
 
Roman:

Не понятно зачем эта строчка, если переменная _start с увеличенной ms на единицу, не где дальше не используется.
И при выходе из функции она уничтожается.
Как я вижу сдвиг времени не где не используется и не запоминается.   
И зачем вы в эту переменную _start которая служит как входящая, присваиваете что то.
Она ведь тогда вернёт обратно в функцию while это значение, а там тупик её использования.
В общем код какой то запутанный и не явный. Или я не догоняю эту конструкцию ))                 

Эта переменная ссылка - пробрасывается в параметре функции "по месту" из вызывающего кода, постоянно меняется и используется в итерациях.

 
fxsaber:

По флагам - гипотеза. Когда-то была проблема с ними, поэтому для сторонних тиков сам формировал флаги перед отправкой.


Например, после пропуска первый тик имеет иную bid-цену, но при этом флаг об этом отсутствует.

Идея понятна. Но без разъяснений MQ это все останется на уровне наших домыслов (в плане возможного влияния на появление той или иной ошибки).

 
Stanislav Korotky:

Эта переменная ссылка - пробрасывается в параметре функции "по месту" из вызывающего кода, постоянно меняется и используется в итерациях.

Да на ссылку не обратил внимания, и хотел предложит за неё, а она там стоит.
Попробуйте всё таки явно выделить переменную, под сохранение увеличенного времени.

 

Новая загадка. Проблема с CopyTicks на билде 2507, на более старых (в частности 2374) работало нормально.

Свел все к простому тестовому скрипту в приложении. Он запрашивает новые тики с момента предыдущего опроса.

Вскоре после первого правильного прохода цикла скрипт начинает копировать в массив тики с временем заведомо более ранним, чем указано в параметре from, а точнее - с начала текущего дня.

В чем косяк?

Файлы:
CopyTicks.mq5  1 kb
 
Stanislav Korotky:

Новая загадка. Проблема с CopyTicks на билде 2507, на более старых (в частности 2374) работало нормально.

Свел все к простому тестовому скрипту в приложении. Он запрашивает новые тики с момента предыдущего опроса.

Вскоре после первого правильного прохода цикла скрипт начинает копировать в массив тики с временем заведомо более ранним, чем указано в параметре from, а точнее - с начала текущего дня.

В чем косяк?

Подтверждаю баг в 2509.

Такой вариант, вроде, не сбоит.

int size = CopyTicksRange(_Symbol, array, COPY_TICKS_ALL, cursor);
 
Засада с пользовательскими символами. Можно создать два символа, различающиеся только регистром в буквах (например, "xEURUSD" и "XEURUSD"), но добавление котировок в "дубликат" не проходит - CustomRatesUpdate возвращает 0, без ошибки. Нужно либо разрешить регистрозависимость имен (чтобы такие символы полноценно работали), либо не давать создавать такие "похожие" имена.
Причина обращения: