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

 
Aleksey Mavrin:

Кто подскажет в чём дело и как ускорить обновление графика? Функцию ChartRedraw вызываю из советника, но всё равно пару минут задержка возникает.

ChartRedraw нужна только для прорисовки (обновления) графических обьектов, для нормального индикатора который рисует индикаторными буферами ChartRedraw не нужна

имхо, ищите проблему в индикаторе, возможно не корректный расчет буферов на каждом тике, есть "авторы" у которых считается вся история каждый тик

ЗЫ: не могу утверждать, но возможно ChartRedraw обновляет весь чарт с синхронизацией истории, если так, то Вы вообще каждый раз заново перезапускаете индикатор с полным расчетом всей истории

UPD: попробуйте ограничить истрию на чарте меньшим количеством баров 10 000 достаточно, в МТ4 был случай, когда тяжелый индикатор "сожрал" всю память и потом искал почему ЕА не правильно работал (то работал то нет). Хотя в МТ5 маловероятно, что память всю использовали....ну всяко бывает

 
Igor Makanu:

ChartRedraw нужна только для прорисовки (обновления) графических обьектов, для нормального индикатора который рисует индикаторными буферами ChartRedraw не нужна

имхо, ищите проблему в индикаторе, возможно не корректный расчет буферов на каждом тике, есть "авторы" у которых считается вся история каждый тик

ЗЫ: не могу утверждать, но возможно ChartRedraw обновляет весь чарт с синхронизацией истории, если так, то Вы вообще каждый раз заново перезапускаете индикатор с полным расчетом всей истории

UPD: попробуйте ограничить истрию на чарте меньшим количеством баров 10 000 достаточно, в МТ4 был случай, когда тяжелый индикатор "сожрал" всю память и потом искал почему ЕА не правильно работал (то работал то нет). Хотя в МТ5 маловероятно, что память всю использовали....ну всяко бывает

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

Если из-за этого, всё равно стоит сильно удивится. 1к баров не очень сильных расчётов тормозят прорисовку графика на 2 минуты? ..

 
Aleksey Mavrin:

Если из-за этого, всё равно стоит сильно удивится. 1к баров не очень сильных расчётов тормозят прорисовку графика на 2 минуты? ..

не может такого быть, по моему терминал выгрузит такой индикатор с сообщением мол "слишком долгий расчет в индикаторе ххх removed" 

скорость работы МТ (4/5) очень большая, можно конечно по нескольку раз одни и те же данные считать, но имхо, это еще постараться нужно

думаю, что автор индикатора просто с экономным расчетом индикаторных буферов  не знаком, да и забывает последние бары обсчитывать правильно...срочно в КБ, на изучение как индикаторы пишутся ;)

 
Slava :

Эти две программы в одном терминале или в двух разных?

Здесь размещен код для воспроизведения проблемы. https://www.mql5.com/en/forum/332849

Чтобы воспроизвести его, вам нужно запустить код как минимум 2 раза.

File-Sharing ... my next "Sometimes-Bug" in MT5?
File-Sharing ... my next "Sometimes-Bug" in MT5?
  • 2020.02.16
  • www.mql5.com
FILE_SHARE_READ and FILE_SHARE_WRITE do not work proper. MQL creates buffers with different contents for the same file. Please watch the example...
 
Alexey Navoykov:

Совсем необязательно. Почему именно сишные?  Как насчёт C# ? - к нему как-раз таки ближе по смыслу.  

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

Все разговоры о пассивности структур - это всё архаические представления, имхо. 

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

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

Никакого зла там нет, вам кажется. Вон в стандарт протянули даже: чтение неинициализированного unsigned char и std::byte не undefinded behavior. Можно агрегатную инициализацию для POD. И не забывайте - вся эта инициализация не бесплатна, эта реальные расходы ресурсов (цпу, память, размер экзешника). Если вам класть на это со своей числодробилкой, то в случае какого-нибудь микроконтроллера это может быть важно. Ведь С/С++ это не только виндовое формошлёпство вроде шарпа.

unsigned char fn() {unsigned char q; return q + 2;}
int main() {
    fn();
}
0000000000001119 <fn>:
    1119:       55                      push   %rbp
    111a:       48 89 e5                mov    %rsp,%rbp
    111d:       0f b6 45 ff             movzbl -0x1(%rbp),%eax
    1121:       83 c0 02                add    $0x2,%eax
    1124:       5d                      pop    %rbp
    1125:       c3                      retq           

unsigned char fn2() {unsigned char q = 5; return q + 2;}
int main() {
    fn();
}
0000000000001119 <fn2>:
    1119:       55                      push   %rbp
    111a:       48 89 e5                mov    %rsp,%rbp
    111d:       c6 45 ff 05             movb   $0x5,-0x1(%rbp)
    1121:       0f b6 45 ff             movzbl -0x1(%rbp),%eax
    1125:       83 c0 02                add    $0x2,%eax
    1128:       5d                      pop    %rbp
    1129:       c3                      retq
Одна лишь инициализация одной переменной увеличила размер инструкций на 30%.
 
Stanislav Korotky:

В одном терминале. Пишет данные эксперт, читает индикатор. Висели на разных чартах, но очевидно, что могут быть и на одном (если это важно). Билд 2380.

Эксперт, который читает файл, должен держать этот файл закрытым.

Особенность реализации файлов в MQL5 такова, что они по максимуму держат данные из файлов в собственных буферах. Если объём информации настолько велик, что не помещается в буфер, тогда Ваш трюк с перестановкой указателя в начало потом в конец файла может сработать.

Поэтому на данный момент открывайте файл, проверяйте содержимое, потом снова закрывайте

 
Slava :

Эксперт, который читает файл, должен держать этот файл закрытым.

Особенность реализации файлов в MQL5 такова, что они по максимуму держат данные из файлов в собственных буферах. Если объём информации настолько велик, что не помещается в буфер, тогда Ваш трюк с перестановкой указателя в начало потом в конец файла может сработать.

Поэтому на данный момент открывайте файл , проверяйте содержимое, потом снова закрывайте

Так что FileFlush () бесполезен?
 
Alain Verleyen:
Так что FileFlush () бесполезен?

Нет. FileFlush надо делать обязательно, если хотите, чтобы кто-то ещё смог прочитать изменённый файл

Проблема в том, что MQL5 программа при открытии читает файл в собственный буфер. И ничего не узнает о том, что в файле что-то изменилось, пока снова не прочитает файл. Снова прочитать файл можно только при закрытии и последующем открытии этого файла

 
Slava:
Нет. FileFlush надо делать обязательно, если хотите, чтобы кто-то ещё смог прочитать изменённый файл

Даже если закрывать файл?

 
Andrey Barinov:

Даже если закрывать файл?

Я как раз об этом и говорю. Закрыть, потом снова открыть

Или Вы имеете в виду FileFlush перед закрытием файла?