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

[Удален]  
Ilyas:

Если меньше ничего страшного, как правило, буфер строки всегда немного больше чем сама строка (но это не факт!)

А вот в случае, если записать больше, то практически наверняка гарантировано аварийное завершение терминала.
И аварийное завершение скорее всего произойдёт не сразу, а только при следующей работе с динамической памятью (перераспределение массивов или буферов строк) или на завершении работы, когда использованная память MQL программ возвращается в систему

Тогда почему Вы советуете новичку использовать функцию wcscpy?

Есть же более безопасные функции: wcscpy_s, wmemcpy_s.

 

Объясните пожалуйста, почему в обработчике OnCalculate время каждого вновь образованного бара time[0] опережает время тика, которое мы запрашиваем с помощью функции SymbolInfoTick? По идее, если уже есть бар time[0], то должен существовать тик, его породивший, а функция SymbolInfoTick яко-бы должна всегда возвращать последний известный тик.

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

2019.10.12 16:51:53.667 2019.01.02 06:00:00   Time 2019.01.02 06:00:00 = 1546408800000 is ahead of tick:  1546297199572
2019.10.12 16:51:53.753 2019.01.02 06:01:00   Time 2019.01.02 06:01:00 = 1546408860000 is ahead of tick:  1546408830000
2019.10.12 16:51:54.315 2019.01.02 06:02:00   Time 2019.01.02 06:02:00 = 1546408920000 is ahead of tick:  1546408919000
2019.10.12 16:51:54.617 2019.01.02 06:03:00   Time 2019.01.02 06:03:00 = 1546408980000 is ahead of tick:  1546408979000

На каждой границе баров есть такая проблема.

PS. Также в данном индикаторе демонстрируется другая проблема: там ведется подсчет тиков, и судя по утверждению документации, что OnCalculate вызывается для всех тиков без пропуска, тиковый объем должен всегда совпадать со счетчиком тиков, однако это не всегда так.
Файлы:
fake.mq5  2 kb
 
Stanislav Korotky:

Объясните пожалуйста, почему в обработчике OnCalculate время каждого вновь образованного бара time[0] опережает время тика, которое мы запрашиваем с помощью функции SymbolInfoTick? По идее, если уже есть бар time[0], то должен существовать тик, его породивший, а функция SymbolInfoTick яко-бы должна всегда возвращать последний известный тик.

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

На каждой границе баров есть такая проблема.

PS. Также в данном индикаторе демонстрируется другая проблема: там ведется подсчет тиков, и судя по утверждению документации, что OnCalculate вызывается для всех тиков без пропуска, тиковый объем должен всегда совпадать со счетчиком тиков, однако это не всегда так.

Номер билда сообщите пожалуйста

 
Slava:

Номер билда сообщите пожалуйста

2093

 
Stanislav Korotky:

2093

Описанная Вами проблема была исправлена в билде 2155

 

Обнаружил в редакторе подсвечиваемую константу SYMBOL_CHART_MODE_OLD.

В ENUM_SYMBOL_CHART_MODE её, естественно, нету.

Что это?

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Для получения текущей рыночной информации служат функции SymbolInfoInteger(), SymbolInfoDouble() и SymbolInfoString(). В качестве второго параметра этих функций допустимо передавать один из идентификаторов из перечислений ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE и ENUM_SYMBOL_INFO_STRING соответственно. Некоторые символы (как...
 
Artyom Trishkin:

Обнаружил в редакторе подсвечиваемую константу SYMBOL_CHART_MODE_OLD.

В ENUM_SYMBOL_CHART_MODE её, естественно, нету.

Что это?

Доисторический режим формирования чартов.

Давно не применяется

 
Slava:

Доисторический режим формирования чартов.

Давно не применяется

Понял, спасибо.

 
Лучше бы вместо баннера вверху страницы показывалось время через которое будет обновляться сайт ....  Час потраченный на оформление просто пропал из за обновления сайта...
[Удален]  

Столкнулся с такой проблемой:

условие

         if(a4 > upper_channel_line_a4 && a4 < upper_channel_line_a4 + indent_channel_line_a4 &&
            a0 < lower_channel_line_a0 && a0 > lower_channel_line_a0 - indent_channel_line_a0 && a3 < a2)
         {
            Print("*-* "+string(a4)+" > "+string(upper_channel_line_a4)+" && "+string(a4)+" < "+string(upper_channel_line_a4 - indent_channel_line_a4));
            Print("*-* "+string(a0)+" < "+string(lower_channel_line_a0)+" && "+string(a0)+" > "+string(lower_channel_line_a0 + indent_channel_line_a0));
            Print("*-* "+string(a3)+" < "+string(a2));

принт

*-* 0.1151219 > -0.5 && 0.1151219 < -5.5
*-* 1.78309976 < 3.5 && 1.78309976 > 7.5
*-* -0.06357424 < 0.12727985

Что за ...? Как такое возможно? Почему условие выполняется?

П.С.

input    double            lower_channel_line_a0   = 0.0;                  // Порог принятия решения для А0 (низ канала)
input    double            indent_channel_line_a0  = 0.0;                  // Отступ для верхней границы канала А0 (0 - канал не использовать)
input    double            upper_channel_line_a4   = 1.0;                  // Порог принятия решения для А4 (верх канала)
input    double            indent_channel_line_a4  = 0.0;                  // Отступ для нижней границы канала А4 (0 - канал не использовать)
..........
   double            a0=0.0,a1=0.0,a2=0.0,a3=0.0,a4=0.0;