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

 

О, да, тогда точно можно не беспокоиться за перегруз диска.
Меня только вот удивляет использование глобальных переменных терминала (если о них речь) для сохрания больших массивов данных. 
Это ведь жуткий костыль. 

Ладно сами переменные, но ведь существуют же их string имена, который нужно тоже хранить и еще делать каждый раз string поиск для доступа к этой переменной, не говоря даже о единственном типе double, который можно сохранять. Понятно, что можно использовать union, но ведь его использование тоже не бесплатное.

Гораздо правильнее реализовать сохрание самостоятельно через ресурсы любых массивов данных с переодическим автосохранением на диск или при наступления события deinit

 
Nikolai Semko:

Ладно сами переменные, но ведь существуют же их string имена, который нужно тоже хранить и еще делать каждый раз string поиск для доступа к этой переменной, не говоря даже о единственном типе double, который можно сохранять. Понятно, что можно использовать union, но ведь его использование тоже не бесплатное.

была у меня идея и желание глобальные переменные использовать, но что то решил по старинке на диск сохранять, тем более сейчас стал писать коды максимально правильно - данные в структурах храню, а сбрасывать структуры на диск можно в один клик - FileWriteStruct()



так вот, глобальные переменные "нужно использовать с точностью до наоборот"  - данные нужно хранить в имени глобальной переменной. а контрольную сумму в double с помощью Base64 - все готово в CryptEncode(), а в идеале вообще  Base85  ( Ascii85 ) или видел где то исходники на гитхабе Base128

и если не ошибаюсь, то имя глобальной переменной терминала 256 символов? эффективность Base64 чуть более 60% ( размер ), у остальных методов кодирования выше - итог в одной глобальной переменной 160-180 байт можно хранить

правда определять данные по префиксу придется, но в целом будет работать все это - тем более глобальные переменные редко кто использует - все имена свободные по сути

 
Igor Makanu:

была у меня идея и желание глобальные переменные использовать, но что то решил по старинке на диск сохранять, тем более сейчас стал писать коды максимально правильно - данные в структурах храню, а сбрасывать структуры на диск можно в один клик - FileWriteStruct()



так вот, глобальные переменные "нужно использовать с точностью до наоборот"  - данные нужно хранить в имени глобальной переменной. а контрольную сумму в double с помощью Base64 - все готово в CryptEncode(), а в идеале вообще  Base85  ( Ascii85 ) или видел где то исходники на гитхабе Base128

и если не ошибаюсь, то имя глобальной переменной терминала 256 символов? эффективность Base64 чуть более 60% ( размер ), у остальных методов кодирования выше - итог в одной глобальной переменной 160-180 байт можно хранить

правда определять данные по префиксу придется, но в целом будет работать все это - тем более глобальные переменные редко кто использует - все имена свободные по сути

Все равно, чтобы добраться до переменной, нужно перебирать контрольные суммы, пока не встретиться нужная. А если переменных гугильён ?
Или отслеживать последовательность переменных и присваивать им индексы. Но это уже точно ни к чему, т.к. проще написать класс сохранения данных
 
Nikolai Semko:
проще написать класс сохранения данных

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

Глобальные переменные использую для флагов. Так же удобна возможность всегда увидеть их значения - F3.

 
fxsaber:

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

Глобальные переменные использую для флагов. Так же удобна возможность всегда увидеть их значения - F3.

Да, видел. Поэтому и удивился.
Для контроля значений согласен, тогда оправданно.
 
Georgiy Merts:

Обнаружил, что у меня в режиме визуального тестирования функция SymbolInfoTick() возвращает одно значение, а таймсерия Close[0] имеет другое.

Это ошибка моя ? Я что-то делаю не так ?

Вроде как должны быть одинаковые значения:

Как правило, разница составляет 1-2 пункта, но на резких движениях бывает и больше. 

Это только у меня так ?

Пока что принял таймсерию за "более правильную", если выясняется, что SymbolInfoTick() дает значение, отличающееся от Close[0], считаю, что правильное значение - именно Close[0], спред оставляю тот же, что вернуло SymbolInfoTick().

Но, все же интересно понять, какая цена правильна, на какую цену "смотрит" ДЦ - на SymbolInfoTick() или на Close[0]

Какой номер билда?

В билде 2155 уже должно быть исправлено - на прошлой неделе эту ошибку правили

 
Slava:

Какой номер билда?

В билде 2155 уже должно быть исправлено - на прошлой неделе эту ошибку правили

Ога. А у меня 2085.

Понятно, обновляюсь.

P.S. Да, сейчас значения одинаковы.
 
Slava:

Какой номер билда?

В билде 2155 уже должно быть исправлено - на прошлой неделе эту ошибку правили

А про это что-нибудь известно?
https://www.mql5.com/ru/forum/1111/page2571#comment_13285021
 
Aleksei Beliakov:
А про это что-нибудь известно?
https://www.mql5.com/ru/forum/1111/page2571#comment_13285021

Вы не привели никаких подробностей для воспроизведения

 
Slava:

Вы не привели никаких подробностей для воспроизведения

Банально если в ontick распечатать результаты этих функций то это для времени 1970.01.01 для цены 0
Раньше было время бара или цена.
Тоесть сейчас так
iHigh(NULL,PERIOD_W1,0) в журнале будет 0
iTime(NULL,PERIOD_W1,0) в журнале будет 1970.01.01
Причина обращения: