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

 

Ожидались ошибки при компиляции

class A { public:
        void operator[]( int = 1 ) {} //нормально ???
};
void OnStart()
{
        A a;
        a[]; //нормально ???
}
 
Alexey Viktorov:

Извините, ответ в картинках.

Но в дебагере показывает

И для проверки значения индикатора приходится прокручивать 1268 баров. Только после этого можно проверить какие значения high и/или low равно как open/close бара использованы в расчётах индикатора.

Просто очень неудобно. Но человек быстро привыкает и подстраивается ко всему нехорошему.

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

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

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

[Удален]  
Slava:

1. В каком месте нужно обновить документацию?

2. Однозначным идентификаторам бара всегда было время бара, а никак не его номер.

3. Если вашему графику кто-то вызвал ChartSetSymbolPeriod, то вы запросто словите изменение количества баров. Сюрприз?

4. Да, кстати, в OnCalculate есть такой параметр rates_total

1. Именно в том месте, на которое Вы и указали в последующем посте. Просто добавьте, что будет СБРОС, и этот сброс будет именно через макс баров в окне + 1439.

2. Хорошо, учту. Хотя, Вы же понимаете, что под одним временем не может быть двух баров, верно?

3. Не сюрприз. Я говорю именно про то, что если не менять ни таймфрейм, ни символ, может произойти сброс с 6439 на 5000.

4. Если Вы внимательно читали мой пост выше, то заметили, что:

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

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

Alexey Kozitsyn, 2019.06.28 10:40

Уважаемые разработчики. Уточните пожалуйста, автоматическая переразметка буферов индикатора - это нормально? Под переразметкой я понимаю следующее: макс. баров в окне, например 5000. Размер буфера + rates_total сбрасываются на 5000 по достижении размера 6439. Аналогично происходит в случае, когда макс. баров в окне = 10000. Сброс происходит при 11439.

Из-за этого индикаторы могут крашиться и показывать некорректные данные.

Билд 2085. Подобное поведение заметил где-то с 2000-х билдов.

я указал на rates_total также. Проблема то в том, что при переразметке rates_total и буферы не сбрасывается в 0 (тогда проблем бы не было, просто пересчитали бы весь индикатор и все). А принимает значение макс. баров в окне. Вот именно об этом и напишите просто.

Чтобы облегчить Вам задачу, хотелось бы видеть вот такую запись:

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

Да, кстати, уточните пожалуйста, значение 1439 сохраняется и для других ТФ? Или только М1?

[Удален]  
Slava:

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

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

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

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

Спасибо.

 
Alexey Kozitsyn:

я указал на rates_total также. Проблема то в том, что при переразметке rates_total и буферы не сбрасывается в 0 

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

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

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

Новая версия платформы MetaTrader 5 build 2007: Экономический календарь, MQL5-программы в виде сервисов
Новая версия платформы MetaTrader 5 build 2007: Экономический календарь, MQL5-программы в виде сервисов
  • 2019.04.30
  • www.mql5.com
21 февраля 2019 года будет выпущена обновленная версия платформы MetaTrader 5...
[Удален]  
Igor Makanu:

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

Дак о том и речь, что лучше один раз изменить документацию на правильную, полную и актуальную, чем 15 лет объяснять одно и тоже разным людям, которые что-то не нашли в документации.

 
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;