Ошибки, баги, вопросы - страница 2722
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть две программы, работающие одновременно с одним и тем же файлом. Та, что записывает, использует флаги FILE_READ|FILE_WRITE|FILE_BIN|FILE_SHARE_READ. Та, что читает - FILE_READ|FILE_BIN|FILE_SHARE_WRITE|FILE_SHARE_READ. Несмотря на то, что первая программа периодически сохраняет файл с помощью FileFlush, вторая видит длину файла только на момент открытия. Пробовал делать FileSeek взад-вперед - не помогает.
Вопрос: как сделать, чтобы программа, читающая файл, подхватывала дозаписываемые данные?
Эти две программы в одном терминале или в двух разных?
Методы объекта из массива объектов, переданного по ссылке не отрабатывают.
Пример:
Эти две программы в одном терминале или в двух разных?
В одном терминале. Пишет данные эксперт, читает индикатор. Висели на разных чартах, но очевидно, что могут быть и на одном (если это важно). Билд 2380.
VS2019
x = 12345
a.a = 12345
хм, все работает как в MQL5
ОК, забираю свои слова обратно, в Шарпе это не скомпилируется
Ну вам же ещё и конструктор всунули. Сами решайте, конечно, но структуры - сишные сущности, модель там другая - пассивные сущности с внешней логикой (фцнкции).
Совсем необязательно. Почему именно сишные? Как насчёт C# ? - к нему как-раз таки ближе по смыслу. Все разговоры о пассивности структур - это всё архаические представления, имхо. Считаю, что, как минимум, конструктор обязан быть у каждого типа. Неинициализированные поля - это зло, от которого нужно уходить.
fxsaber
В вашем случае нужно делать фабричный метод по созданию массива структур, т.е. примерно так:
И там уже одним из предложенных ранее способов заполнять элементы массива.
столкнулся со следующей незадачей. Индикатор рисует свечи
Он накинут на график. Также работает советник, читающий буфера этого индикатора
Так вот залогировав и заскринив этапы, обнаружил что частенько индикатор отрисовывает свечи с запаздыванием.
Т.е. уже несколько тиков назад (до пары минут точно) он просчитал и обновил буфера, и советник данные из них читает
(и сов и индюк пишут это в лог). Но на графике видим старую картину. Вот например, скрин сделан в тот момент, когда образовался красный столбик вниз, пробивший лоу предыдущего. Но на графике видим только предыдущий красный, и недорисованный зеленый, (он уже по факту больше на два бокса).
а вот какая фактически картинка, она дорисовалась позже. Видим пробитие лоу, оно и инициировало запись скриншота. По логам все чётко.
Кто подскажет в чём дело и как ускорить обновление графика? Функцию ChartRedraw вызываю из советника, но всё равно пару минут задержка возникает.
Две минуты как-то многовато, даже не представлю причины. Расчёты не настолько космические чтобы так тормозить.
Кто подскажет в чём дело и как ускорить обновление графика? Функцию ChartRedraw вызываю из советника, но всё равно пару минут задержка возникает.
ChartRedraw нужна только для прорисовки (обновления) графических обьектов, для нормального индикатора который рисует индикаторными буферами ChartRedraw не нужна
имхо, ищите проблему в индикаторе, возможно не корректный расчет буферов на каждом тике, есть "авторы" у которых считается вся история каждый тик
ЗЫ: не могу утверждать, но возможно ChartRedraw обновляет весь чарт с синхронизацией истории, если так, то Вы вообще каждый раз заново перезапускаете индикатор с полным расчетом всей истории
UPD: попробуйте ограничить истрию на чарте меньшим количеством баров 10 000 достаточно, в МТ4 был случай, когда тяжелый индикатор "сожрал" всю память и потом искал почему ЕА не правильно работал (то работал то нет). Хотя в МТ5 маловероятно, что память всю использовали....ну всяко бывает
ChartRedraw нужна только для прорисовки (обновления) графических обьектов, для нормального индикатора который рисует индикаторными буферами ChartRedraw не нужна
имхо, ищите проблему в индикаторе, возможно не корректный расчет буферов на каждом тике, есть "авторы" у которых считается вся история каждый тик
ЗЫ: не могу утверждать, но возможно ChartRedraw обновляет весь чарт с синхронизацией истории, если так, то Вы вообще каждый раз заново перезапускаете индикатор с полным расчетом всей истории
UPD: попробуйте ограничить истрию на чарте меньшим количеством баров 10 000 достаточно, в МТ4 был случай, когда тяжелый индикатор "сожрал" всю память и потом искал почему ЕА не правильно работал (то работал то нет). Хотя в МТ5 маловероятно, что память всю использовали....ну всяко бывает
Тоже сразу полез оптимизировать расчёт и поставил на тест дошлифованую версию индюка. До этого считал каждый тик 1000 баров, теперь жду открытия нового бара.
Если из-за этого, всё равно стоит сильно удивится. 1к баров не очень сильных расчётов тормозят прорисовку графика на 2 минуты? ..
Если из-за этого, всё равно стоит сильно удивится. 1к баров не очень сильных расчётов тормозят прорисовку графика на 2 минуты? ..
не может такого быть, по моему терминал выгрузит такой индикатор с сообщением мол "слишком долгий расчет в индикаторе ххх removed"
скорость работы МТ (4/5) очень большая, можно конечно по нескольку раз одни и те же данные считать, но имхо, это еще постараться нужно
думаю, что автор индикатора просто с экономным расчетом индикаторных буферов не знаком, да и забывает последние бары обсчитывать правильно...срочно в КБ, на изучение как индикаторы пишутся ;)
Эти две программы в одном терминале или в двух разных?
Здесь размещен код для воспроизведения проблемы. https://www.mql5.com/en/forum/332849
Чтобы воспроизвести его, вам нужно запустить код как минимум 2 раза.