« Предыдущий пост | На главную страницу | Следующий пост »

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".

« Предыдущий пост | На главную страницу | Следующий пост »

Комментарии по теме "GlobalVariableCheck(): проверка существования глобальной переменной"

Уважаемый Андрей!
Публикуемые Вами материалы просто замечательны и делают проблему создания советника вполне решаемой задачей программистом средней руки.
Не могли бы Вы рассмотреть вопрос, как убрать с графика дневные, 4-х часовые, часовые, 15-ти минутные и 5 минутные свечи при создании советника.
Проблема в том, что MetaTrader от FIBO Group, Ltd. рисует дневную, 4-х часовую, две часовых и все более мелкие свечи в воскресенье.
Все бы ничего, но пользовательские индикаторы построенные для определения уровней сопротивления и поддержки рисуются в понедельник по «урезанной» дневной свече воскресенья (в которой всего-то два часа). Можно конечно просто не обращать внимания на эти линии и пользоваться в понедельник уровнями воскресенья, но это не красиво и вносит не нужную путаницу.
С уважением, Владимир Гугнин.
20.11.06.

Самый простой способ - скачать и установить терминал от Альпари. Там такого не будет.

http://www.alpari-idc.ru/files/mt4setup.exe

Подписаться на мою рассылку



Размещение статьи "GlobalVariableCheck(): проверка существования глобальной переменной" на Вашем сайте

Размещение статьи "GlobalVariableCheck(): проверка существования глобальной переменной" на Вашем сайте возможно при условии выполнениия следующих условий:

  • Запрещается изменение оригинального текста без согласия автора - Андрея Ведихина.
  • Должен быть указан первоисточник. В случае публикации в интернете Вы должны разместить следующий код гиперссылки без изменений:
  • Запрещается коммерческое использование материалов, взятых с блога "Интернет-трейдинг на форекс / forex". Доступ к ним должен быть свободным, без взимания какой-либо платы, без обязательной регистрации и/или заполнения опросного листа (анкеты) и т.д.

В случае выполнения данных условий не требуется согласия автора блога "Интернет-трейдинг на форекс / forex" на размещение статьи "GlobalVariableCheck(): проверка существования глобальной переменной" на Вашем сайте.

Журнал FOREX MAGAZINE:



Архив номеров FOREX MAGAZINE
Котировки Forex:

Счетчики:

Авторские права © 2005-2006 Андрей Ведихин

Условия использования материалов блога "Интернет-трейдинг на форекс / forex"

Контакты с автором:


Движок сайта:
Movable Type 5.04