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

 
Ilya Malev:

...

В общем тут по-кривому показано, что вызов OnCalculate из OnTimer работает)

Нужно добавить передачу правильных значений в таймсериях 

В статье, как раз этот пример и показан. )

Вот ещё пример для тестов с таким же методом: Рецепты MQL5 - Разработка мультивалютного индикатора для анализа расхождения цен >>>

 
Karputov Vladimir:

Увеличение переменной count нужно делать перед выходом из OnCalculate() -  в таком случае эта переменная будет правильно считать все заходы в OnCalculate.

Там нужно было считать не все, а только до расчета Ишимоку. Все это время count было больше либо равно 0, а потом -1. Вообще это не имеет значения. Важно, что

1) При первом запуске индикатор запускался 1 раз (OnCalculate) и больше не запускается до следующего тика (на выходных и праздниках до нескольких суток), если не нажимать кнопку "Обновить"

2) При этом первом вызове индикатор Ишимоку не успел рассчитаться (что уж говорить о более сложных индикаторах)

3) Если использовать вместо OnCalculate OnTimer (либо вызывать OnCalculate из OnTimer), то пользователь может запустить индикатор, который построится сам, иначе ему придется нажимать на Обновить (возможно, несколько раз) либо ждать следующих тиков. Что является очевидным неудобством по сравнению с тем же МТ4.

Anatoli Kazharski:
В простых индикаторах вполне нормально. А вот в более сложных, почему-то иногда буксует. )
По-моему, проще всего вообще вместо OnCalculate использовать OnTimer.
 
Ilya Malev:

Там нужно было считать не все, а только до расчета Ишимоку. Все это время count было больше либо равно 0, а потом -1. Вообще это не имеет значения. Важно, что

...

Идея в том, чтобы пользователь видел количество входов в OnCalculate. При этом в самой OnCalculate, при результате работы CopyBuffer более нуля выводятся сообщения об удачном получении в буфер значений. В итоге визуально видно количество удачных заходов в OnCalculatе.
 
Karputov Vladimir:
Идея в том, чтобы пользователь видел количество входов в OnCalculate. При этом в самой OnCalculate, при результате работы CopyBuffer более нуля выводятся сообщения об удачном получении в буфер значений. В итоге визуально видно количество удачных заходов в OnCalculatе.

Я понимаю, просто уже уехали чуть дальше этого примера. Его использовали, разобрались и вернулись к основной проблематике. Пример подтвердил, что с первого запуска расчета не происходит в выходные. У меня подтвердил, во всяком случае. Приходилось бы постоянно нажимать на "Обновить". Мне лично кажется, что для пользователей это неприемлемо. Поэтому буду пытаться сделать через OnTimer.

 

Дождаться готовности таймсерий в OnCalculate нельзя, т.к. все подвиснет. Поэтому, если не готово, то делаем EventTimer на милисекунду, а в OnTimer проверяем готовность. Как только готовы таймсерии, вызываем OnCalculate и убиваем таймер через KillTimer.

У меня вопрос в другом, как убедиться на 100%, что сейчас все нужные таймсерии готовы или нет? 

 

Похоже OnTimer в индикаторах, которые вызываются из других индикаторов, вообще не запускается. Поэтому через OnTimer обновлять их не получится. Похоже придется смириться с десятками лишних нажатий на "Обновить" график в процессе работы, по сравнению с МТ4.

И как на зло придется каждый раз это делать мышкой из меню, потому что ни на панели инструментов нет этой опции, ни горячей клавиши у неё нет. А индикаторы бывают "тяжелые", которые строятся значительно дольше 1 секунды.

 
Ilya Malev:

... А индикаторы бывают "тяжелые", которые строятся значительно дольше 1 секунды.

Сталкивался с проблемой "тяжелых" индикаторов. Посмотрите ссылки по порядку - Вам будет интересно. 

1. Видео с иллюстрацией проблемы тяжелого индикатора. Ключевой момент - один тяжелый индикатор по символу тормозит работу всех советников на этом символе. Даже на другом чате!!! Тяжелые индикаторы это зло :)

2. Тема с описанием и вариантами решения проблемы

3. Решение проблемы в рамках маркета

 
Andrey Miguzov:

Сталкивался с проблемой "тяжелых" индикаторов. Посмотрите ссылки по порядку - Вам будет интересно. 

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

Проблема у меня сейчас в том, что обсчета всех используемых в данном индикаторе других индикаторов невозможно дождаться при первом же запуске OnCalculate, само же OnCalculate вызывается повторно только при следующем тике, которых в выходные к примеру нет совсем. OnTimer вместо (или вместе с) OnCalculate использовать не получится, потому что OnTimer вообще не вызывается в индикаторах которые были вызваны не пользователем, а например вызваны из другого индикатора с помощью iCustom (пока по моим тестам выходит именно так). Хотелось бы найти решение чтобы индикатор мог в автоматическом режиме после запуска дожидаться расчета всех используемых в нем индикаторов и выдать информацию без вмешательства пользователя (без регулярных нажатий им кнопки "Обновить" из ниспадающего меню графика, если частоты прихода новых тиков для этого недостаточно).

 
Ilya Malev:

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

Проблема у меня сейчас в том, что обсчета всех используемых в данном индикаторе других индикаторов невозможно дождаться при первом же запуске OnCalculate, само же OnCalculate вызывается повторно только при следующем тике, которых в выходные к примеру нет совсем. OnTimer вместо (или вместе с) OnCalculate использовать не получится, потому что OnTimer вообще не вызывается в индикаторах которые были вызваны не пользователем, а например вызваны из другого индикатора с помощью iCustom (пока по моим тестам выходит именно так). Хотелось бы найти решение чтобы индикатор мог в автоматическом режиме после запуска дожидаться расчета всех используемых в нем индикаторов и выдать информацию без вмешательства пользователя (без регулярных нажатий им кнопки "Обновить" из ниспадающего меню графика, если частоты прихода новых тиков для этого недостаточно).

Если ставить задачу таким образом - то действительно такой необходимости нет.

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

Решение не очень красивое, но от описанных проблем помогает избавиться.  

 

ЗДРАВСТВУЙТЕ, ПОДСКАЖИТЕ КОГДА ОТКРЫВАЕШЬ РЕАЛЬНЫЙ СЧЕТ НА МТ5, ТО В ТЕЧЕНИИ КАКОГО ВРЕМЕНИ ДОЛЖЕН ПОЗВОНИТЬ СОТРУДНИК КОМПАНИИ И ЗАВЕРШИТЬ ПРОЦЕДУРУ ОТКРЫТИЯ СЧЕТА?

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