ввести в функцию несколько строк кода для случая, если значение Error равно 0 (блок 2-
3).
Какой должна быть реакция функции Errors() на нулевое значение переменной Error,
зависит от того, какой алгоритм используется для обработки значения, возвращаемого
функцией. В рассматриваемом эксперте значение, возвращаемое функцией, принимается
во внимание в исполнительных торговых функциях. Если функция Errors() возвращает
значение true (ошибка преодолимая), то предпринимается повторная попытка осуществить
торговую операцию. Если же возвращено значение false, то исполнение торговой функции
прекращается и управление последовательно возвращается в вызывающую функцию,
затем в функцию start() и клиентскому терминалу. Если выбирать между двумя этими
вариантами, то случай, когда ошибки нет (Error = 0) соответствует второму варианту, а
именно возвращаемому значению false. Этим гарантируется, что однажды исполненный
приказ не будет повторён.
После вывода с помощью функции Inform() сообщения об ошибке управление передаётся
в блок 3-4, оператору switch. Для каждого из рассматриваемых кодов ошибок в функции
предусмотрен свой вариант case. Например, если возникла ошибка 136, то это значит, что
на текущий момент у брокера нет цен, на основании которых он может принять
правильное решение. Это значит также, что в период до ближайшего тика ситуация не
изменится, т.е. нет необходимости многократно повторять один и тот же торговый приказ,
он всё равно не будет исполнен. Правильным решением в этом случае является пауза -
отсутствие какой-либо инициативы со стороны эксперта. Для этой цели используется
простой способ определения нового тика - анализ значения, возвращаемого функцией
RefreshRates(). Как только новый тик появляется, управление возвращается в вызвавшую
функцию, в которой торговый приказ (при необходимости, после соответствующего
анализа) повторяется.
При возникновении любой ошибки, которая, по мнению программиста, является
критической, функция возвращает значение false. В этом случае в торговых функциях не
будет осуществляться повтор торгового приказа, поэтому нет смысла и предпринимать
какие-либо действия в функции Errors(). Все ошибки, рассмотрение которых не
предусмотрено, также расцениваются как критические (вариант default). В общем случае
список обрабатываемых кодов ошибок может быть расширен (см. Коды ошибок).
583