‘‘ 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 напоминает слабый щелчок,
наилучшим образом отражающий факт нового тика. Решение об использовании звуков в
программе программист принимает по своему выбору. В ряде случаев применение звуков
оказывается полезным. Например, по звуку тиков можно судить о факте исполнения
эксперта. Другие звуки могут соответствовать иным событиям, например, срабатыванию
торгового критерия, закрытию ордера и т.д.
Значение действительной переменной Time_cur соответствует текущему серверному
времени. В эксперте анализируются условия, при которых необходимо вывести
диалоговое окно. Если в торговле имеется один или более ордеров, диалоговое окно ранее
не выводилось и при этом серверное время отличается от времени важных новостей
менее, чем на 5 минут, то в программе выполняются определённые действия. Прежде
всего исполняется функция PlaySound(), воспроизводимый звук привлекает пользователя
763