Брейкпойнт в тестері - це можливо! Статті з MQL4
Виведення налагоджувальних даних можливе і зараз завдяки функціям типу Print, Comment і так далі, але ще хочеться в якийсь момент тимчасово зупинити програму в певному місці, щоб проаналізувати ситуацію. Тут є ще й додатковий аспект: зазвичай програма запускається для торгівлі або в режимі Demo, або в режимі Real. Це означає, що на результати можна буде подивитися лише через кілька місяців… Таким чином, режим налагодження має сенс тільки в режимі тестування радників.
Принцип дії
З появою в тестері "Візуального режиму тестування" можна було стежити за реакціями нашого радника під час швидкого прогону програми. Якщо ми захочемо тимчасово зупинити виконання, то можемо натиснути на клавішу "Pause" або клацнути мишкою на однойменній кнопці на панелі тестера. Розробники терміналу надали бібліотеку WinUser32.mqh, яка містить деякі цікаві функції. Одна з них – keybd_event. Вона дозволяє здійснювати натискання довільної кнопки.
Тут і народжується ідея - написати функцію, яка натискала б на паузу програмним чином і друкувала необхідну налагоджувальну інформацію. Так як наш радник використовуватиме DLL, то спочатку потрібно це дозволити. Натискаємо Ctrl+O і ставимо/знімаємо галочки:

Потім, десь на початку тексту програми, потрібно оголосити про використання бібліотеки WinUser32:
Функція повинна спрацьовувати тільки в режимі візуального тестування, тому ставимо перевірку: якщо тестер не перебуває в режимі візуального тестування, то йдемо:
Потім необхідно візуалізувати деякі дані. По-моєму, найнаочніший спосіб – це Comment(). Припустимо, що поки що нам потрібні тільки Bid і Ask.
Тут "\n"означає, що дані, що йдуть потім, будуть відображені на наступному рядку. Під кінець натискаємо клавішу Pause.
Перший рядок натискає на клавішу, останній – віджимає її. Пауза (Sleep) потрібна, оскільки надто швидке натискання/віджатие може й не обробитись. 19 – це віртуальний код клавіші паузи, 2 в останньому рядку показує, що потрібно емулювати віджаті.
Все, що залишилося, - підставити брейкпойнт у коді радника, наприклад, одразу після моменту відкриття довгої позиції у прикладі статті "Приклад створення експерта".
Ось і весь код, що вставляється:
Що робити, якщо нам потрібно подивитися на локальні змінні
Умовні точки перерви
Іноді хочеться, щоб програма зупинялася не завжди (по досягненні конкретного рядка), а лише за виконання якихось додаткових умов. Зазвичай таке буває в циклах - наприклад, нам потрібна зупинка, коли лічильник досяг якогось заздалегідь відомого значення. Для цього потрібно передавати додаткову умову:
Викликаємо так:
Висновок
так чому все-таки не зробити бібліотеку, яку можна підключити і потім використовувати? Справа в тому, що є багато варіантів, для яких найкраще змінювати вміст функції BreakPoint. Насправді все сказане вище - тільки основна ідея. Існує безліч варіантів її використання.
І нарешті, хочу подякуватиKlot'а – він першим здогадався про програмну реалізацію натискання клавіші паузи.