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

 
Alexey Navoykov:
Давно замечаю, что подсветка имён пользовательских макросов в большом проекте работает далеко не всегда.  Многие макросы, определённые в других файлах, почему-то не подсвечиваются.  Пока не могу выяснить закономерности.  Вижу лишь, что все макросы, определённые в некотором файле после некоторой строчки, перестают подсвечиваться в других файлах.  Кто-нибудь ещё наблюдает у себя подобное?
Да
 
Alexey Navoykov:
Давно замечаю, что подсветка имён пользовательских макросов в большом проекте работает далеко не всегда.  Многие макросы, определённые в других файлах, почему-то не подсвечиваются.  Пока не могу выяснить закономерности.  Вижу лишь, что все макросы, определённые в некотором файле после некоторой строчки перестают подсвечиваться в других файлах.  Кто-нибудь ещё наблюдает у себя подобное?

Подмечал что-то подобное. За точность ситуации не ручаюсь.

 
Alexey Navoykov:
Давно замечаю, что подсветка имён пользовательских макросов в большом проекте работает далеко не всегда.  Многие макросы, определённые в других файлах, почему-то не подсвечиваются.  Пока не могу выяснить закономерности.  Вижу лишь, что все макросы, определённые в некотором файле после некоторой строчки, перестают подсвечиваться в других файлах.  Кто-нибудь ещё наблюдает у себя подобное?

да, и еще бывает на новые переменные или поля класса не работает автоподстановка, лечится обычно перекомпиляцией проекта 

насколько я понимаю, в МЕ в фоне работает процесс который занимается подсветкой define и автоподстановкой, в какие то моменты он не всю инфу успевает (или не хочет) обновлять

 
Раз речь зашла про rates_total, тогда спрошу у сообщества, какая конструкция в OnCalculate изящнее и оптимальнее?
Раньше я в OnCalculate использовал конструкцию типа такой:
if (rates_total==prev_calculated) {}        // новый тик, перерисовываем последний бар, все бары на своих местах
else if (rates_total-prev_calculated==1) {} // момент формирования нового бара 
else {}                                     // пересчитываем последние(rates_total-prev_calculated) бар


но после того, как понял, что могут возникать ситуации, когда prev_calculated>rates_total, понял, что ничего не понимаю, махнул рукой и, если пересчет всех баров занимает не больше пару секунд, то стал использовать такую конструкцию:

if (rates_total==prev_calculated) {}        // новый тик, перерисовываем последний бар, все бары на своих местах
else if (rates_total-prev_calculated==1) {} // момент формирования нового бара 
else {}                                     // пересчитываем все бары

как кто делает и как, вообще, грамотно?

 
Nikolai Semko:
Раз речь зашла про rates_total, тогда спрошу у сообщества, какая конструкция в OnCalculate изящнее и оптимальнее?
Раньше я в OnCalculate использовал конструкцию типа такой:


но после того, как понял, что могут возникать ситуации, когда prev_calculated>rates_total, понял, что ничего не понимаю, махнул рукой и, если пересчет всех баров занимает не больше пару секунд, то стал использовать такую конструкцию:

как кто делает и как, вообще, грамотно?

Грамотно так как сам понимаешь что происходит. Замечание по поводу вашей конструкции: Вместо  ==1 я-бы написал >=1 или просто if(rates_total > prev_calculated) для того, чтобы если подкачались пропущенные бары их пересчитать.

Плюс ко всему, в mql5 и с директивой strict в mql4 чтобы не выскочить за пределы массива надо учитывать сколько баров могут быть задействованы в расчётах от крайнего левого бара. Вот и получается, что шаблона как такового на все случаи жизни лично у меня нет.

 
Nikolai Semko:
Раз речь зашла про rates_total, тогда спрошу у сообщества, какая конструкция в OnCalculate изящнее и оптимальнее?
Раньше я в OnCalculate использовал конструкцию типа такой:


но после того, как понял, что могут возникать ситуации, когда prev_calculated>rates_total, понял, что ничего не понимаю, махнул рукой и, если пересчет всех баров занимает не больше пару секунд, то стал использовать такую конструкцию:

как кто делает и как, вообще, грамотно?

Я рассчитываю limit = rates_total - prev_calculated.
Затем, если limit > 1, то limit = rates_total - 1 (или необходимое для первого расчета кол-во баров-1) и инициализация.
А далее цикл от limit до >=0
С мобилы код не могу ...
 
Nikolai Semko:
Раз речь зашла про rates_total, тогда спрошу у сообщества, какая конструкция в OnCalculate изящнее и оптимальнее?
Раньше я в OnCalculate использовал конструкцию типа такой:


но после того, как понял, что могут возникать ситуации, когда prev_calculated>rates_total, понял, что ничего не понимаю, махнул рукой и, если пересчет всех баров занимает не больше пару секунд, то стал использовать такую конструкцию:

как кто делает и как, вообще, грамотно?

в принципе вопрос актуальный, в примерах от разработчиков (поставка МТ) разные способы подсчета, даже BarsCalculated() в Bears.mql5  используется

недавно под МТ4 обсуждали, я пока на таком шаблоне остановился: https://www.mql5.com/ru/forum/314931/page2#comment_11946579

под МТ5 нужно проверить, но чарты по разному себя ведут (МТ4 / МТ5), в МТ5 если прокрутить колесиком мыши к началу истории, кажется будет сбрасываться в ноль prev_calculated - в прошлом году писал индикатор под МТ5 был удивлен такому поведению

ЗЫ: кастомный график нужно сделать и по таймеру быстро историю пробрасывать - так сказать испытательный стенд нужен, чтобы поведение rates_total и prev_calculated  отследить, я пару страниц назад тут писал, про несоответствие  rates_total и  iBars() - это тоже нужно учитывать

ЗЫЗЫ: как вариант коды Младена по изучать, мне нравится его стиль написания индикаторов - все продумано до мелочей, единтсвенная проблема в его кодах - очень своеобразный стиль форматирования исходника 

 
Igor Makanu:

...........................

очень своеобразный стиль форматирования исходника 


 
Сергей Таболин:


я умею пользоваться стилизатором, но стилизатор не работает если в одну строку записать несколько операторов

;)

пример https://www.mql5.com/ru/code/22766
 

Просто вопрос.

ulong  имеет максимальное значение 18.........

Я получил значение 61........

А IntegerToString() этого значения выдаёт вообще выдаёт 90.............

Пришлось попотеть, пока нашёл проблему.

Можно ли как-то локализовать это?

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