Если в массиве есть повторяющиеся данные то они просто не выводятся в лог.
Хочу спросить.Для чего всё это? И как это отключить?
Они выводятся в лог. Только смотреть надо в файле, а не в окне лога, в окно на попадают некоторые данные при частом принте.
Как известно MT4 не поддерживает полноценный отладчик.
Под полноценной отладкой что подразумевается? Тестер?
Если не тестер, то все остальное в МТ4 доступно при отладке.
Они выводятся в лог. Только смотреть надо в файле, а не в окне лога, в окно на попадают некоторые данные при частом принте.
Это безобразие происходит именно при выводе в файл.В окне получается и то больше информации но она тоже не полная.
если добавить к аргументам Print("buff_",buff[i]," i_",i); показ переменной "i" это безобразие прекращается, но эти грабли уже достали.
В таком виде Print("buff_",buff[i]); если есть повторяющиеся данные в буфере(например какая то цифра постоянно повторяется )
эти данные начинают срезаться или сокращать при выводе в файл.
В таком случае извините.
Но очень долгое время невозможно было изменять ,насколько я помню это годы,
значения переменных на лету в цикле отладки в отладчике MQ4.
Из за его несовершенства я и подсел на функцию Print().
Но главный вопрос так и остался.
Почему функция Print() за меня решает,
что надо выводить в файл а что не надо?
Но главный вопрос так и остался.
Почему функция Print() за меня решает,
что надо выводить в файл а что не надо?
В файл лога выводятся все сообщения от Print. Не замечал сокращений.
А вот во вкладку терминала, действительно, попадают не все сообщения. Связано с тем, что вкладка терминала - это элемент управления, достаточно медленный. Если вывести туда лавину сообщений, то это приведет к подвисанию терминала. Таким образом, разработчики перестраховались. Такой шаг реально спасает, когда не получается рассчитать частоту вывода отладочных сообщений.
В файл лога выводятся все сообщения от Print. Не замечал сокращений.
А вот во вкладку терминала, действительно, попадают не все сообщения. Связано с тем, что вкладка терминала - это элемент управления, достаточно медленный. Если вывести туда лавину сообщений, то это приведет к подвисанию терминала. Таким образом, разработчики перестраховались. Такой шаг реально спасает, когда не получается рассчитать частоту вывода отладочных сообщений.
Вкладкой я вообще не пользуюсь как раз по этой причине что не всё выводится.
Только файлами.
В #3 я описал как именно и в точности это происходит.
Если весь динамический буфер будет например заполнен исключительно цифрами 100.0 и 111.0 то он не будет выведен в файл.
И файл полностью будет выглядеть вот так:
""
0 16:10:07.519 Custom indicator TEST GBPUSD,M1: loaded successfully
0 16:10:07.536 TEST GBPUSD,M1: initialized
0 16:10:07.538 TEST GBPUSD,M1: Signal__100.0
0 16:10:07.538 TEST GBPUSD,M1: Signal__111.0
""
Не больше и не меньше.
При этом вкладка покажет намного больше данных, что доказывает то что буфер заполнен как требовалось.
Но в файл будут выведены по сути только две строки.
Если этот же самый буфер заполнить ценами закрытия например(а они же разные),то в файл он же будет выведен как бы полностью,
можно правда догадываться полностью ли?
Уже уверености нет.
Для тех кому не лень тестовый файл прилагаю.
Если весь динамический буфер будет например заполнен исключительно цифрами 100.0 и 111.0 то он не будет выведен в файл.
И файл полностью будет выглядеть вот так:
""
0 16:10:07.519 Custom indicator TEST GBPUSD,M1: loaded successfully
0 16:10:07.536 TEST GBPUSD,M1: initialized
0 16:10:07.538 TEST GBPUSD,M1: Signal__100.0
0 16:10:07.538 TEST GBPUSD,M1: Signal__111.0
""
Не больше и не меньше.
Проверил. Правда, для наглядности изменил функцию Calculate:
void Calculate(int limit) { int i; Print("Будет записано ", limit, " значений"); for (i=limit; i>=1; i--) { _1D_MA[i]=iMA(NULL,0,10,0,MODE_EMA,PRICE_CLOSE,i); if(_1D_MA[i]<_1D_MA[i+1]) Signal[i]=100.0; if(_1D_MA[i]>_1D_MA[i+1])Signal[i]=111.0; Print("Signal__",Signal[i]); } Print("Конец записи"); }
В итоге получил содержимое файла журнала:
0 09:09:50.017 TEST (1) AUDJPY,H1: Будет записано 2571 значений 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__100.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__100.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__100.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__100.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__100.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__100.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__100.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__100.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__100.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.017 TEST (1) AUDJPY,H1: Signal__111.0 ... 0 09:09:50.023 TEST (1) AUDJPY,H1: Signal__100.0 0 09:09:50.023 TEST (1) AUDJPY,H1: Signal__100.0 0 09:09:50.023 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.023 TEST (1) AUDJPY,H1: Signal__111.0 0 09:09:50.023 TEST (1) AUDJPY,H1: Конец записи
Между начальной и конечной записью ровно 2 571 запись. Все нормально.
Возможно, перед открытием файла, Вы не сбрасываете кэш журнала в файл? Делается это выбором пункта "Открыть" контекстного меню вкладки "Эксперты". Независимо от того, открыта уже папка logs или нет.
В том то и дело что я не открываю файл журнала не иначе как
"Ctrl+T" ""Эксперты" "Открыть" потом открываю файл Notepad2
он очень хорошо и быстро открывает большие логи.
А потом я стираю файл и закрываю его и после опять по новой.
Но то что у вас это работает это хорошо.
Значит и у мня тоже должно.
Если это не какие то настройки терминала значит это какой то глючок.
Возможно в Widows.
Спасибо за помощь.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток!
Как известно MT4 не поддерживает полноценный отладчик.
Приходится делать отладку с помощью функции Print().
Но и тут в тёмных углах кто то расставил грабли.
При выводе в логи с помощью функции Print() массивов.
Если в массиве есть повторяющиеся данные то они просто не выводятся в лог.
Хочу спросить.Для чего всё это? И как это отключить?
При этом писать свой собственный отладчик или код
который будет выводить всё что мне нужно в отдельный файл нехочу.