определяется факт свершения первого события. Стандартная функция NormalizeDouble()
позволяет производить вычисления со значениями действительных переменных с
заданной точностью (соответствующей точности цены финансового инструмента). Если
цена оказалась равной или выше заданного уровня, то факт первого события считается
свершившимся, поэтому глобальной переменной Fact_1 присваивается значение истина.
Программа составлена так, что переменная Fact_1, получив однажды значение истина,
никогда не изменит его на ложь - для этого в программе нет соответствующего кода.
В строках:
if (Fact_1 == true && NormalizeDouble(Price,Digits)<=
NormalizeDouble(Level-n*Point,Digits))
My_Alert(); // Вызов польз. ф-ии
определяется необходимость выдачи сообщения. Если уже свершилось первое событие и
цена опустилась на n пунктов ниже (меньше или равно) заданного уровня, то необходимо
выдать сообщение - осуществляется вызов на исполнение пользовательской функции
My_Alert(). В пользовательской функции, после собственно сообщения, отмечается факт
того, что сообщение уже выдано, путём присвоения глобальной переменной Fact_2
значения true. После этого заканчивает работу пользовательская функция и вслед за ней и
специальная функция start().
После того, как переменная Fact_2 получает значение истина, программа всякий раз будет
завешать свою работу, поэтому сообщение, однажды сделанное, больше никогда в
течение этого сеанса работы программы не повторится:
if (Fact_2==true) //Если сообщение уже..
return; //..было, то выходим
Показательным в этой программе является то, что значения глобальных переменных
могут быть изменены в любом месте (и в специальной функции и в пользовательской) и
сохраняются в течение всего периода работы программы - в период между тиками, после
изменения значений внешних переменных или в результате переключения таймфрейма.
В общем случае значения глобальных переменных могут быть изменены в любой
специальной функции. Поэтому нужно быть особенно внимательным, указывая
операторы, изменяющие значения глобальных переменных в функциях init() и deinit().
Например, если в функции init() обнулить значение глобальной переменной, то при
первом исполнении функции start() значение этой переменной будет нулевым, т.е.
значение этой переменной, достигнутое в период предыдущего исполнения start(), будет
потеряно (т.е. после изменения внешних настроек программы).
213