Ошибки, баги, вопросы - страница 454

 
Interesting:
Как мне представляется придется переводить каждый элемент массива по отдельности.

Мне помощь бы а не разглагольствования. Уточню, пробовал переводить функцией CharArrayToString с CP_UTF16, но такое ощущение, что она не поддерживается. Может другую кодовую страницу надоть?

Вопрос к разработчикам -- в справке написано, что те страницы, которых нет в стандартных константах, можно добавлять ручками. Поддерживаются все или таки нет?

 
TheXpert:

Мне помощь бы а не разглагольствования. Уточню, пробовал переводить функцией CharArrayToString с CP_UTF16? но такое ощущение, что она не поддерживается. Может другую кодовую страницу надоть?

Вопрос к разработчикам -- в справке написано, что те страницы, которых нет в стандартных константах, можно добавлять ручками. Поддерживаются все или таки нет?

Не так понял вопрос. Если я правильно понял документацию для CP_UTF16 нужно указать необходимый числовой код (осталось выяснить какой именно).

Короче, это скорей всего к разработчикам.

 
В дополнение к вопросу - https://www.mql5.com/ru/forum/1111/page455#comment_80246 - на который все же хотелось бы получить ответ, конкретизирую ситуацию. Есть мультивалютный индюк, тестирую его на деме МетаКвотов и Альпари. На Альпари работает, на МетаКвотах очень часто получаю возврат ошибок из BarsCalculated для разных символов, в частности ошибка 4806 или просто 0 посчитанных баров. Плиз, укажите, где можно поподробнее почитать, в чем могут быть причины 4806 и как их исправлять. Для синхронизации данных использую код метаквотов - функцию CheckLoadHistory со страницы https://www.mql5.com/ru/docs/series/timeseries_access. Ошибки из BarsCalculated происходят после того, как эта функция отработала на ноль (т.е. данные для расчета вроде бы должны быть на месте). Ей вообще можно доверять или требуется что-то еще? На всякий случай уточню, что индюк использует для расчета стандартные машки, и именно их готовность проверяется вызовом BarsCalculated.
 
marketeer:
В дополнение к вопросу - https://www.mql5.com/ru/forum/1111/page455#comment_80246 - на который все же хотелось бы получить ответ, конкретизирую ситуацию. Есть мультивалютный индюк, тестирую его на деме МетаКвотов и Альпари. На Альпари работает, на МетаКвотах очень часто получаю возврат ошибок из BarsCalculated для разных символов, в частности ошибка 4806 или просто 0 посчитанных баров. Плиз, укажите, где можно поподробнее почитать, в чем могут быть причины 4806 и как их исправлять. Для синхронизации данных использую код метаквотов - функцию CheckLoadHistory со страницы https://www.mql5.com/ru/docs/series/timeseries_access. Ошибки из BarsCalculated происходят после того, как эта функция отработала на ноль (т.е. данные для расчета вроде бы должны быть на месте). Ей вообще можно доверять или требуется что-то еще? На всякий случай уточню, что индюк использует для расчета стандартные машки, и именно их готовность проверяется вызовом BarsCalculated.

Если устроит отвект не от Самих, то данные синхронизируются через хз какой промежуток времени. Попали на момент cинхронизации, BarsCalculate=0.
 
Swan:
Если устроит отвект не от Самих, то данные синхронизируются через хз какой промежуток времени. Попали на момент cинхронизации, BarsCalculate=0.

Спасибо за инфу, хотя в адрес "самих" могу сказать, что меня не очень устраивает подобное поведение - оно накладывает существенную неопределенность в работоспособность софта. Например, уже больше часа назад навесил индюк, в котором указал пару новых тикеров - в обзоре рынка они есть - если обращение к данным указанными выше функциями должно было инициировать закачку и обсчет, то все давно было уже завершиться, но это не так. Как минимум было бы желательно видеть в системном журнале каждый чих терминала по поводу закачки и прочих "подпольных" действий, а то вообще не понятно, по какой причине он "заткнулся" - последняя запись в "экспертном" с ошибкой 4806, а в системном - мол терминал засинхронизирован. Учитывая, что тиков в выходные нет, несколько раз передергивал настройки, но данных все равно нет.

Например, взял RTS-9.11, по нему вышеуказанная по ссылке функция рефреша от МетаКвотов регулярно возвращает Load failed.

 
Еще вопрос. В четверке можно было писать аргументом функции многомерный массив func(int array[][]). В пятерке компилятор выдает ошибку invalid index value - требует, чтобы была указана размерность. Написал func(int &array[][3]) - так ошибки нет, но это ж не решение. Как тогда писать функции? Их смысл по определению в выделении абстрактного участка кода, применимого к разным данным, разным массивам.
 
marketeer:
Еще вопрос. В четверке можно было писать аргументом функции многомерный массив func(int array[][]). В пятерке компилятор выдает ошибку invalid index value - требует, чтобы была указана размерность. Написал func(int &array[][3]) - так ошибки нет, но это ж не решение. Как тогда писать функции? Их смысл по определению в выделении абстрактного участка кода, применимого к разным данным, разным массивам.

Я делаю так:

class cArray2
  {
   double            _Data[];
   int               _ColumnsCount;
   int               _RowsCount;
   ...
   ...
  }

Объекты этого класса передаю как аргументы.

Другимим словами,  использую одномерный массив как хранилище данных любой размерности, при этом "многомерные" индексы сам пересчитываю в "одномерные" (и обратно).

Работает с вполне приемлемой скоростью.

Метаквотов можно понять. Если не вводить ограничение "только одна размерность неопределена", тогда не удастся генерить скорострельный код доступа к элементу массива на стадии компиляции.

 
marketeer:

Спасибо за инфу, хотя в адрес "самих" могу сказать, что меня не очень устраивает подобное поведение - оно накладывает существенную неопределенность в работоспособность софта. Например, уже больше часа назад навесил индюк, в котором указал пару новых тикеров - в обзоре рынка они есть - если обращение к данным указанными выше функциями должно было инициировать закачку и обсчет, то все давно было уже завершиться, но это не так. Как минимум было бы желательно видеть в системном журнале каждый чих терминала по поводу закачки и прочих "подпольных" действий, а то вообще не понятно, по какой причине он "заткнулся" - последняя запись в "экспертном" с ошибкой 4806, а в системном - мол терминал засинхронизирован. Учитывая, что тиков в выходные нет, несколько раз передергивал настройки, но данных все равно нет.

Например, взял RTS-9.11, по нему вышеуказанная по ссылке функция рефреша от МетаКвотов регулярно возвращает Load failed.

справко:

Доступ к данным индикаторов и таймсерий осуществляется независимо от факта готовности запрашиваемых данных (так называемый асинхронный доступ). Это критически важно для расчета пользовательских индикаторов, поэтому при отсутствии запрашиваемых данных функции типа Copy...() сразу же возвращают ошибку.

в выходные саавсем тиков нет, индикатор запустили, сразу же ошибку получили..

imho пока видится одно решение, запускать дополнительный эксперт загружающий требуемую историю..

т.е. если эксперту доступны данные, то они будут доступны и индикатору. Не проверял, решение выглядит криво.


повторю таки свой вопрос:

В справке:

Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить.

таки совсем-совсем нельзя, или если очень хочется, то можно, но осторожно? :)


Проблема с доступом к данным другого символа из индикатора.

при наличии отсутствия тиков)
т.е. в выходные индикатор никак не может получить данные не своего тф, не своего символа..
 
Swan:
т.е. в выходные индикатор никак не может получить данные не своего тф, не своего символа..
На мой взгляд - все это баги. Тики - тиками, а загрузить данные и просчитать индюки в отсутствие тиков ничто не мешает (терминалу). Более интересно то, что на разных демо-серверах один и тот же код работает по-разному. Например, на Альпари у меня подтянулись и золото, и серебро, и индюк пересчитался. Так что проблема видимо более широкая.
 
MetaDriver:

Метаквотов можно понять. Если не вводить ограничение "только одна размерность неопределена", тогда не удастся генерить скорострельный код доступа к элементу массива на стадии компиляции.

Ну, я этого понять не могу ;-). Давно уже высказывал мысль, что пятерку нужно было делать по максимум совместимой с четверкой (что касается синтаксиса и поддержки прежних функций API, в частности), при этом конечно добавить новые фичи - такие как генерацию быстрого кода, но делать это можно было для новых синтаксических конструкций (ограничений) - например, и с этими параметрами-массивами: кто хочет оптимизации по скорости - укажет размерность, а кто хочет быстро без проблем портировать старый код - оставит как есть, и фиг с тем, что код получится медленнее. Был бы компромисс между скоростью и удобством, а то этак можно было и ассемблер в качестве mql5 предложить. ;-).
Причина обращения: