Из предыдущей статьи мы узнали о функции WaitBeforeTransaction(), которая выдерживает паузу между двумя последовательными торговыми операциями. В коде этой функции встречается очень много незнакомых функций. В этом и последующих выпусках я планирую очень кратко о них рассказать.
Сам исходный код функции обладает достаточным количеством комментариев, и я уверен, что логика реализации этой функции Вам станет абсолютно понятна после изучения следующих функций:
Начнем с рассмотрения функции IsTesting().
bool IsTesting()
Функция IsTesting() возвращает true, если эксперт работает в режиме тестирования на исторических данных, и false - если работа ведется на демо - или реальном счете.
Дело в том, что необязательно сразу заставлять эксперта торговать на демо - или реальном счете. Гораздо эффективнее вначале оттестировать эксперта на исторических данных, которые есть в клиентском терминале. После этого с определенной точностью станет понятно, на что способен этот эксперт.
Основное преимущество тестов на истории - быстрота. Вам не надо ждать месяцы или годы, чтобы оттестировать своего эксперта на реальных котировках. Вы просто "прогоняете" советника по истории. На это у Вас уходит лишь несколько минут. Тем не менее если Вы будете каждый раз ждать 10 секунд между торговыми операциями, то Вы потеряете это преимущество. Именно поэтому в коде нашей функции присутствует строка:
if (IsTesting()) return(1);
Т. е. мы выходим из функции, если эксперт находится в режиме тестирования на историчексих данных.
В следующей статье будет рассказано о глобальных переменных и о функции GlobalVariableCheck().
В прошлых выпусках мы узнали о различных торговых функциях, с помощью которых можно открывать/закрывать позиции, выставлять/модифицировать/удалять ордера: OrderSend(), OrderModify(), OrderDelete(), OrderClose() и OrderClosyBy().
В каждом случае мы исходили из того, что советнику разрешено торговать. Но в реальности это не всегда так.
В данной статье будет рассказано о трех функциях: IsExpertEnabled(), IsTradeContextBusy() и IsTradeAllowed().
Функция IsExpertEnabled()
bool IsExpertEnabled()
Функция IsExpertEnabled() возвращает true, если экспертам разрешено совершать сделки и управлять ордерами. Дело в том, что на уровне настроек клиентского терминала можно запретить ВСЕМ экспертам торговать. Это можно сделать, например, с помощью команды главного меню: Сервис -> Настройки. В появившемся окне выбираем вкладку "Советники", в которой ставим или убираем галочку напротив "Включить советники...".
Более простой способ отключать/включать советников - кнопка .
Если же на уровне настроек терминала работа экспертов запрещена, то функция IsExpertEnabled() вернет false.
Функция IsTradeContextBusy()
В каждый момент времени только один эксперт может торговать. Если в этот момент второй эксперт попытается совершить торговую операцию, то торговая функция вернет ошибку ERR_TRADE_CONTEXT_BUSY (146).
bool IsTradeContextBusy()
Функция IsTradeContextBusy() позволит Вам заблаговременно выявить ситуацию, когда другой эксперт уже пытается торговать (она вернет в этом случае значение true), и избежать нерезультативного вызова торговой функции (которая все равно завершиться с ошибкой). Обычно в таких случаях лучше подождать немного до того момента, когда другой эксперт закончит торговать (тогда функция IsTradeContextBusy() вернет значение false) и только после этого вызывать Вашу торговую функцию.
Функция IsTradeAllowed()
Функция IsTradeAllowed() объединяет все обе предыдущие функции. Она вернет true только в том случае, если торговля экспертов разрешена и торговый поток свободен для торговли, т. е. никакой другой эксперт не совершает в данный момент торговых операций.
bool IsTradeAllowed()
В следующей статье будет рассказано о том, как нужно использовать описанные выше функции на практике.
Есть что сказать? Не стесняйтесь!
Последние статьи:
Видео по теме:
УГОЛОК АДМИНИСТРАТОРА