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

 
Slava:

Вы внимательно прочитали мою цитату постом ниже?

Такое поведение было всегда с момента введения настройки «максимальное количество баров на графике», то есть с начала MT4. И мы многократно объясняли за эти 15 лет, почему мы не урезаем каждый раз количество баров в соответствии с этой настройкой. И теперь не каждый раз урезаем.

Никто не читает документацию. Но ведь парадокс. Все равно просят, чтобы мы написали что-то ещё в документацию, которую они не читают

Slava, я без претензий. Прочёл внимательно и не только Вашу цитату и эту

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Slava, 2019.06.29 18:25

rates_total всегда показывает количество баров, доступных на текущем графике.

я не понял смысла вашего высказывания

и эту

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Slava, 2019.06.29 18:42

У меня сейчас нет под рукой клиентского терминала, чтобы процитировать справку. С мобильного устройства в два клика https://www.metatrader5.com/ru/terminal/help/startworking/settings#max_bars

Специально выделенный абзац

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

и документацию читал неоднократно. Но картинки я делал на только-что запущенном терминале. В окне было всего 5000 баров, новые ещё не успели подгрузиться.

Я конечно что-то недопонимаю, потому и переспрашиваю, чтобы попытаться понять. И догадываюсь что изменений не будет. Пожалуйста не воспринимайте мои высказывания как претензии.

 
Igor Makanu:

спрака не корректная, в заблуждение вводит, вот писал https://www.mql5.com/ru/forum/304239/page57#comment_11519307

а буффера в MQL5 вообще работают как обычные массивы, в МТ4 буферами еще как то занимался терминал - то в EMPTY_VALUE их сбрасывал, то ... не помню где то писал отличие работы индикаторов МТ5 и МТ4

а в МТ5 все делаете сами - нужно очистить буфера - очистили как обычный массив, терминал только размер массива-буфера сам устанавливает

Игорь, можете простым русским языком объяснить: если каждая дырочка индикаторного буфера будет заполняться какими-то значениями, которые заменят содержащийся там мусор, с какой целью эти дырочки принудительно очищать перед заполнением нужными значениями? Для потери скорости выполнения?

 
Alexey Viktorov:

Игорь, можете простым русским языком объяснить: если каждая дырочка индикаторного буфера будет заполняться какими-то значениями, которые заменят содержащийся там мусор, с какой целью эти дырочки принудительно очищать перед заполнением нужными значениями? Для потери скорости выполнения?

заполнение "дырочек"  критично только в индикатора со "стрелками", в МТ4 при инициализации индикатора эти "дырочки" будут заполнены значением EMPTY_VALUE автоматически

в МТ5 это должен сделать программист

или в МТ5 программист должен заполнять индикаторные буфера через конструкцию if() else

т.е. в МТ4 так будет работать:

if(...) Buf[i] = high[i];

в МТ5 нужно обязательно писать:

if(...) Buf[i] = high[i]; else Buf[i] = EMPTY_VALUE;

или в МТ5 нужно очистить индикаторные буфера иначе индикатор будет при переключении ТФ рисовать "мусор" из массива который привязан индикаторным буфером .... в общем дело вкуса как писать и что учитывать


ЗЫ: скорость? ну замерьте скорость, в 99% случаях встроенные функции выполняются быстрее, но тут вообще не тот вариант чтобы найти расхождение в производительности, что заполнять каждый бар в цикле EMPTY_VALUE, что один раз проинициализировать через ArrayInitialize(Buf,EMPTY_VALUE)

 
Igor Makanu:

заполнение "дырочек"  критично только в индикатора со "стрелками", в МТ4 при инициализации индикатора эти "дырочки" будут заполнены значением EMPTY_VALUE автоматически

в МТ5 это должен сделать программист

или в МТ5 программист должен заполнять индикаторные буфера через конструкцию if() else

т.е. в МТ4 так будет работать:

в МТ5 нужно обязательно писать:

или в МТ5 нужно очистить индикаторные буфера иначе индикатор будет при переключении ТФ рисовать "мусор" из массива который привязан индикаторным буфером .... в общем дело вкуса как писать и что учитывать


ЗЫ: скорость? ну замерьте скорость, в 99% случаях встроенные функции выполняются быстрее, но тут вообще не тот вариант чтобы найти расхождение в производительности, что заполнять каждый бар в цикле EMPTY_VALUE, что один раз проинициализировать через ArrayInitialize(Buf,EMPTY_VALUE)

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

Конструкцию if else легко заменить на

Buf[i] = условие ? high[i] : EMPTY_VALUE;
 
Alexey Viktorov:

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

Конструкцию if else легко заменить на

ну если быть придирчивым, то в советах по увеличению быстродействия на С++ или C# как раз и рекомендуют не использовать "условный оператор ? : " , кажется на Хабре статью когда то читал (не тестировал, сам пишу как удобнее )

;)

 
Igor Makanu:

ну если быть придирчивым, то в советах по увеличению быстродействия на С++ или C# как раз и рекомендуют не использовать "условный оператор ? : " , кажется на Хабре статью когда то читал (не тестировал, сам пишу как удобнее )

;)

Ну тут компилятор не идиот же, и оптимизирует получше, чем "гуру" на хабре
 
Artyom Trishkin:
Ну тут компилятор не идиот же, и оптимизирует получше, чем "гуру" на хабре

в таких случаях я всегда повторяю: "утром солнце всходит, а вечером заходит..." - Вы видите тут логику? - да это логично, а информация есть в моей фразе? - ее нет

я не буду тестировать ? : , компилятор машина.... Хабр, хороший...

 
Igor Makanu:

я не буду тестировать ? : 

протестировал МТ5:

2019.06.30 13:37:04.230 tst (EURUSD,H1) Testing if()  циклов=9999999999 время=10859 мс

2019.06.30 13:37:15.116 tst (EURUSD,H1) Testing ? :  циклов=9999999999 время=10891 мс

2019.06.30 13:38:05.348 tst (EURUSD,H1) Testing if()  циклов=9999999999 время=10843 мс

2019.06.30 13:38:16.190 tst (EURUSD,H1) Testing ? :  циклов=9999999999 время=10844 мс

2019.06.30 13:38:32.111 tst (EURUSD,H1) Testing if()  циклов=9999999999 время=10860 мс

2019.06.30 13:38:42.955 tst (EURUSD,H1) Testing ? :  циклов=9999999999 время=10843 мс

протестировал МТ4:

2019.06.30 13:46:09.087 tst EURUSD,H1: Testing ? :  циклов=9999999999 время=33234 мс

2019.06.30 13:45:35.854 tst EURUSD,H1: Testing if()  циклов=9999999999 время=32953 мс

2019.06.30 13:44:43.421 tst EURUSD,H1: Testing ? :  циклов=9999999999 время=33328 мс

2019.06.30 13:44:10.094 tst EURUSD,H1: Testing if()  циклов=9999999999 время=33016 мс

2019.06.30 13:42:56.925 tst EURUSD,H1: Testing ? :  циклов=9999999999 время=33344 мс

2019.06.30 13:42:23.584 tst EURUSD,H1: Testing if()  циклов=9999999999 время=32953 мс

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

Я замечал что если писать в качестве параметра какой-либо функции, то не подсвечивает. Думаю что это от не полного соответствия типа. Или как это назвать точней не знаю.