Canvas - это круто! - страница 81

 
Dmitry Fedoseev #:

Есть вот такие люди, которым нравится жить в проблемах. У них такое самомнение особенное... что их проблемы такие уникальные и удивительные, неповторимые... А они такие страдальце вселенские. 

Проблема возникает о попытки любой работы с объектами в деините советника. 

Решение проблемы в советнике:

Может, ObjectFind() и не нужен. 

Приложил бы код с проблемой, еще вчера бы проблема решилась

вообще не в этом проблема.
Эта проблема(подвисание  OnChartEvent) существует только в MT4, и она совсем не очевидная. Сам очень долго мучался. Но в этой ветке она уже обсуждалось около года назад.

 
Nikolai Semko #:

вообще не в этом проблема.
Эта проблема существует только в MT4, и она совсем не очевидная. Сам очень долго мучался. Но в этой ветке она уже обсуждалось околого года назад.

А я вообще не знаю в чем проблема, просто написал от чего она возникает и как решается. Но можете продолжать страдать...

 
Dmitry Fedoseev #:

А я вообще не знаю в чем проблема, просто написал от чего она возникает и как решается. Но можете продолжать страдать...

Эти слова должны быть высечены в камне! :))
 
Dmitry Fedoseev #:

А я вообще не знаю в чем проблема, просто написал от чего она возникает и как решается. Но можете продолжать страдать...

Проблема деюнита здесь ни причем. Эта проблема возникает только в MT5. А здесь речь про МТ4.

 
Nikolai Semko #:

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

Ладно. Упрощу жизнь.
Переведите весь код из OnChartEvent в OnTimer. Таймер установите на 30 миллисекунд. Нужно будет ввести только глобальные переменные (не терминала), которые должны обновляться в  OnChartEvent, а сбрасываться(которые bool) в  OnTimer.
Переменные могут быть такие 

Для меня всё было совсем не так очевидно. По той ссылке, что я ранее давал, узнал, что проблема старая и её решение искали даже авторы с 10 000+ продажами на маркете не один раз.

И это касается всех советников МТ4 с объектами, а значит и огромное количество пользователей с таким сталкивались. Пишут авторам на маркет, а те не знают решения. Поэтому так важно было решить эту проблему.

Глядя на GIF (доказательство работоспособности) преисполнен решимости внедрения такого подхода в свои продукты. Наверное посижу, поэкспериментирую и отпишусь завтра.
 
Vitaliy Kuznetsov #:

Для меня всё было совсем не так очевидно. По той ссылке, что я ранее давал, узнал, что проблема старая и её решение искали даже авторы с 10 000+ продажами на маркете не один раз.

И это касается всех советников МТ4 с объектами, а значит и огромное количество пользователей с таким сталкивались. Пишут авторам на маркет, а те не знают решения. Поэтому так важно было решить эту проблему.

Глядя на GIF преисполнен решимости внедрения такого подхода в свои продукты. Наверное посижу, поэкспериментирую и отпишусь завтра.

возможно тоже самое можно сделать в советнике. 
Но и так работает без лагов

 
Nikolai Semko #:

возможно тоже самое можно сделать в советнике. 
Но и так работает без лагов

Во-первых, Спасибо!

Хм, вроде в рамках заданного кода работает. Но по прежнему конфликт с советниками. Например с этим - https://www.mql5.com/ru/code/35440

С другими проверял, также. Надо попробовать код советника улучшить. Всё ещё актуальна проблема.
cm partial closing position
cm partial closing position
  • www.mql5.com
Советник закрывает позиции частями и переводит их в безубыток.
 
Vitaliy Kuznetsov #:

Во-первых, Спасибо!

Хм, вроде в рамках заданного кода работает. Но по прежнему конфликт с советниками. Например с этим - https://www.mql5.com/ru/code/35440

С другими проверял, также. Надо попробовать код советника улучшить. Всё ещё актуальна проблема.

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

Повторюсь - это баг заморозки OnChartEvent только в MT4

ЗЫ Прикол в том, что если MQ все же исправят этот баг, который судя по всему элементарный ( OnChartEvent замораживается если внутри него происходит вычислений около 10 миллисекунд) и так просто исправляется с помощью таймера, то многие заметят после перекомпиляции своих индикаторов или советников, в которых активно используется  OnChartEvent, что у них все стало просто летать :))
А может это искуственный баг, чтоб на MT5 переходили ;))

 
Nikolai Semko #:

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

Повторюсь - это баг заморозки OnChartEvent только в MT4

ЗЫ Прикол в том, что если MQ все же исправят этот баг, который судя по всему элементарный ( OnChartEvent замораживается если внутри него происходит вычислений около 10 миллисекунд) и так просто исправляется с помощью таймера, то многие заметят после перекомпиляции своих индикаторов или советников, в которых активно используется  OnChartEvent, что у них все стало просто летать :))
А может это искуственный баг, чтоб на MT5 переходили ;))

Получается, что методом обычного улучшения кода индикатора глобально не решить конфликтность с советниками в закрытом коде, использующие объекты.

Надеюсь, что улучшение советника решит глобально конфликтность со всеми индикаторами дэшбордами (в чём моя задача и состоит).

Написал в ветке билда МТ4 1353, может программисты терминала обратят внимание.

P.S. Внёс правки в сов и что-то лыжи не поехали...

 
Vitaliy Kuznetsov #:


P.S. Внёс правки в сов и что-то лыжи не поехали...

точно в  OnChartEvent не осталось ничего рассчетного с циклами и вызов других функций?
Замерте с помощью 
GetMicrosecondCount() время расчета того что происходит в OnTimer (или в  OnChartEvent ). 

Причина обращения: