783
Эксперт, поддерживающий диалог с пользователем (dialogue.mq4), может быть, например,
таким:
//--------------------------------------------------------------------
// dialogue.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
#include <WinUser32.mqh> // Нужно для MessageBox
extern double Time_News=15.30; // Время важных новостей
bool Question=false; // Флажок (вопрос ещё не задан)
//--------------------------------------------------------------- 2 --
int start() // Спец. функция start
{
PlaySound("tick.wav"); // На каждом тике
double Time_cur=Hour()+ Minute()/100.0;// Текущее время (double)
if (OrdersTotal()>0 && Question==false && Time_cur>=Time_News-0.05)
{ // При некоторых условиях
PlaySound("news.wav"); // На каждом тике
Question=true; // Флажок (вопрос уже задан)
int ret=MessageBox("Время важных новостей. Закрыть все ордера?",
"Вопрос", MB_YESNO|MB_ICONQUESTION|MB_TOPMOST); // Диалог. окно
//--------------------------------------------------------- 3 --
if(ret==IDYES) // Если получен ответ ДА
Close_Orders(); // То закрываем все ордера
}
return; // Выход
}
//--------------------------------------------------------------- 4 --
void Close_Orders() // Польз. ф-ия закрытия ордеров
{
Alert("Работает функция закрытия всех ордеров.");// Для иллюстрации
return; // Выход
}
//--------------------------------------------------------------- 5 --
В блоке 1-2 в программу включён файл WinUser32.mqh, в котором определены коды
возврата функции MessageBox(). В этом блоке также задана внешняя переменная
Time_News - время выхода важных новостей. В течение всего периода исполнения
эксперта вопрос о закрытии ордеров должен быть задан пользователю всего один раз. Для
того, чтобы учитывать в эксперте был ли задан вопрос, объявлена переменная Question.
При каждом запуске на исполнение функции start() (блок 2-3) исполняется функция
PlaySound(). Воспроизводимый при этом звук tick.wav напоминает слабый щелчок,