GlobalVariableCheck(): проверка существования глобальной переменной
В этом и последующих выпусках я хочу рассказать о глобальных переменных и о функциях, с ними связанных.
Для человека, имеющего уже опыт написания экспертов, выражение "глобальные переменные" может внести небольшую путанницу. Дело в том, что на самом деле существует два вида "глобальных переменных":
- переменные, которые видны из любой функции ОДНОГО эксперта (т.е. являются глобальными в пределах этого эксперта); и
- переменные, которые являются общими для ВСЕХ экспертов.
О глобальных переменных первого типа - тех, которые являются общими для всех функций ОДНОГО эксперта, - я рассказывал ранее, в выпуске "Глобальные переменные".
Сейчас же речь пойдет именно о глобальных переменных второго типа - общих для ВСЕХ экспертов.
Глобальная переменная второго типа - это переменная, к которой можно обратиться из любого эксперта. Если в течение четырех недель не было сделано попытки прочесть значение глобальной переменной или записать в нее новое значение, то глобальная переменная автоматически удаляется клиентским терминалом.
Для работы с глобальными переменными используются следующие функции:
- GlobalVariableCheck()
- GlobalVariableDel()
- GlobalVariableGet()
- GlobalVariableName()
- GlobalVariableSet()
- GlobalVariableSetOnCondition()
- GlobalVariablesDeleteAll()
- GlobalVariablesTotal()
Вначале я хотел бы рассказать о функции GlobalVariableCheck().
bool GlobalVariableCheck(string name)
Эта функция возвращает true, если глобальная переменная с именем name существует, и false, если такой переменной нет.
В нашей функции WaitBeforeTransaction() мы храним время и дату совершения последней торговой операции в глобальной переменной "LastTradeTime".
Перед тем, как узнать время последней операции, прочитав значение этой переменной, мы проверяем, существует ли она вообще:
// если глобальная переменная LastTradeTime не существует, // то создать ее if (!GlobalVariableCheck("LastTradeTime")) { ... создаем переменную ... }
Проверять существование глобальной переменной и создавать ее в случае отсутствия можно в двух местах: при инициализации эксперта - в функции init() - или на каждом тике - в функции start().
Несмотря на то, что на первый взгляд напрашивается осуществлять эти действия в функции init(), я бы советовал Вам делать это все-таки в функции start(). Дело в том, что если пользователь при работающем эксперте удалит глобальную переменную, а проверка на ее существование делается только при инициализации эксперта, то дальнейшее поведение такого советника сложно спрогнозировать. Скорее всего, такой советник просто перестанет торговать и начнет выдавать ошибки при обращении к удаленной глобальной переменной.
В следующем выпуске я расскажу о том, как установить новое значение глобальной переменной или создать ее с помощью функции GlobalVariableSet().
Все статьи по теме "Пишем советников для MetaTrader 4".
- Механическая торговая система - миф или реальность?
- С чего начать при написании советника:
- Создаем нового советника - Настраиваем параметры. - Язык MetaQuotes Language 4:
Комментарии по теме "GlobalVariableCheck(): проверка существования глобальной переменной"
Уважаемый Андрей!
Публикуемые Вами материалы просто замечательны и делают проблему создания советника вполне решаемой задачей программистом средней руки.
Не могли бы Вы рассмотреть вопрос, как убрать с графика дневные, 4-х часовые, часовые, 15-ти минутные и 5 минутные свечи при создании советника.
Проблема в том, что MetaTrader от FIBO Group, Ltd. рисует дневную, 4-х часовую, две часовых и все более мелкие свечи в воскресенье.
Все бы ничего, но пользовательские индикаторы построенные для определения уровней сопротивления и поддержки рисуются в понедельник по «урезанной» дневной свече воскресенья (в которой всего-то два часа). Можно конечно просто не обращать внимания на эти линии и пользоваться в понедельник уровнями воскресенья, но это не красиво и вносит не нужную путаницу.
С уважением, Владимир Гугнин.
20.11.06.
Автор: Владимир Гугнин | 21.11.2006 00:47
Самый простой способ - скачать и установить терминал от Альпари. Там такого не будет.
http://www.alpari-idc.ru/files/mt4setup.exe
Автор: Андрей Ведихин | 24.11.2006 17:16