Как заработать деньги. Проект сам себе финансист.
июль 2011
пн вт ср чт пт сб вс
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Главная » » »

Хранение данных в переменных

Любой эксперт оперирует с некоторыми данными - ценами, значениями индикаторов, объемами, количеством открытых позиций и пр. Те, места, где эти данные хранятся в эксперте, называются переменными. В качестве имен переменных можно использовать цифры (0-9), латинские прописные и строчные буквы (а - z и А - Z, следует помнить, что буквы 'a' и 'A' - совершенно разные символы), символ подчеркивания (_). Первый символ не может быть цифрой. Также имя переменной не должно совпадать с зарезервированным словом (т. е. словом, которое имеет особый смысл в языке MetaQuotes Language 4 - но об этом позже).

Желательно в качестве имени переменной использовать такое, из которого сразу становится понятным предназначение переменной. Например, переменная, содержащая количество открытых позиций, может иметь такое имя: OpenPositionsNumber.

Можно создавать переменные разных типов:

  • Int - целое число (от -2147483648 до 2147483647);
  • Bool - логический тип (или ложь - false, или истина - true);
  • Datetime - дата и время (в формате D'YYYY. MM. DD HH:MM:SS');
  • Color - цвет (о формате будет рассказано в следующих выпусках);
  • Double - вещественное число (-1.7 * 10-308 до 1.7 * 10308, точность - 15 значащих цифр);
  • String - заключенная в двойные кавычки строка (например, "это строка").

Перед использованием переменной ее надо объявить. Это можно сделать несколькими способами:

 тип имя; или тип имя = начальное_значение; 

Примеры объявлений переменных:

 int Count; datetime InitialDate = D'2006.07.12 00:00'; string ip_address = "127.0.0.1"; 

В дальнейшем для того, чтобы обратиться к значению переменной, надо будет просто указать ее имя:

 i = 5 + Count; 

Иногда требуется сохранить не одно значение, а определенное количество взаимосвязанных значений. Например, значение индикатора на текущем баре, на предыдущем баре, ... , N-баров назад. Для таких целей существуют массивы. Массив - это индексированная совокупность однотипных данных.

Предположим, что у нас в эксперте есть такое описание массива Prices:

 double Prices[50]; 

Это означает, что массив-переменная Prices предоставляет доступ к 50 элементам типа double. Для доступа к i-му элементу надо указать Prices[i]. Нумерация элементов начинается с нуля и заканчивается 49-м элементов (в нашем случае).

Если Вы попробуете обратиться к элементу вне этого диапазона, то будет зафиксирована ошибка ERR_ARRAY_INDEX_OUT_OF_RANGE (4002), которую можно получить при помощи функции GetLastError().

В случае необходимости можно использовать не только одномерные массивы (у которых только один индекс), но и многомерные массивы.

Пример описания двухмерного массива, состоящего из шести массивов, каждый из которых состоит из 50 элементов:

 int mas[6] [50]; 

При описании массива можно в фигурных скобках задать начальные значения для каждого элемента:

 int a[4][4] = { 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4 }; 

Начальные значения элементов массивов могут быть только константами. Если Вы в фигурных скобках при инициализации массива указали меньшее количество начальных значений, чем размерность массива, то недостающие элементы инициализируются нулями.

Существует несколько видов переменных: локальные, статические, внешние, глобальные переменные и формальные параметры функций. В следующей статье мы подробнее рассмотрим использование локальных и статических переменных.



Автор статьи: Андрей Ведихин

Хомячковый рай. Уйти и потеряться:

GlobalVariableSetOnCondition() - установка нового значения глобальной переменной, если текущее ее значение равно заданному значению

В предыдущей статье мы узнали о функции GlobalVariableSet(). с помощью которой можно присвоить новое значение глобальной переменной.

К счастью, создатели языка MetaQuotes Language 4 являются профессиональными программистами и заранее могут предугадать, что может понадобиться трейдеру при написании экспертов. Я им очень благодарен, что они включили в список функций языка MetaQuotes Language 4 функцию GlobalVariableSetOnCondition().

Давайте же рассмотрим, чем так полезна эта функция.

 bool GlobalVariableSetOnCondition(string name, double value, double check_value) 

Прежде всего эта функция проверяет, существует ли глобальная переменная с именем name. В документации по MetaQuotes Language 4 написано, что если такой глобальной переменной нет, то функция возвращает false и генерит ошибку ERR_GLOBAL_VARIABLE_NOT_FOUND (4058), которую можно получить с помощью функции GetLastError().

Тем не менее при экспериментах с функцией GlobalVariableSetOnCondition() мне не удалось добиться того, чтобы функция вернула ошибку ERR_GLOBAL_VARIABLE_NOT_FOUND (4058). Почему-то даже в случае отсутствия глобальной переменной функция возвращает false и код ошибки ERR_NO_ERROR (т. е. 0). Вот кусок кода, который я использовал для этой цели:

 

string name = "MyGlobalVariable"; double value = 1; double check_value = 2;
if (GlobalVariableSetOnCondition(name, value, check_value)) 
{ Print("Глобальная переменная ", name, " существует.", " Ее значение изменено с ", check_value, " на ", value); }
else { int Err=0; Err = GetLastError(); Print(Err); switch (Err) 
{ 
case 0: Print("Глобальная переменная ", name," изменена не была", " т. к. ее значение не равно ", check_value); 
break; 
case 4058: Print("Глобальной переменной ", name, " не существует"); break; 
default: Print("Неизвестная ошибка: ", Err); } } 

Будем надеяться, что если это баг программы, то в следующих версиях MetaTrader 4 его исправят.

Вернемся к описанию функции GlobalVariableSetOnCondition(). Если же глобальная переменная name существует, то функция не изменит ее текущего значения и вернет false, если текущее значение этой глобальной переменной не равно check_value. Если потом запросить код последней ошибки, то функция GetLastError() вернет ERR_NO_ERROR (т. е. 0), т. к. реально никакой ошибки не было.

Если же текущее значение глобальной переменной name равно значению check_value, то функция GlobalVariableSetOnCondition() присвоит этой глобальной переменной новое значение: value.

В следующей статье будет рассказано о примере использования функции GlobalVariableSetOnCondition().



Автор статьи: Андрей Ведихин

Хомячковый рай. Уйти и потеряться:


Есть что сказать? Не стесняйтесь!






Последние статьи:

Выгодные «исламские счета» для трейдеров Форекс Выгодные «исламские счета» для трейдеров Форекс Таким образом, вне зависимости от стиля работы стоит использовать «исламские счета» и сотрудничать с компаниями, которые не берут с трейдеров swap-комиссии. ..
2014-09-29
Стоит ли покупать чужие торговые сигналы и прогнозы? Стоит ли покупать чужие торговые сигналы и прогнозы? И все же основным нашим советом станет отказ от покупки торговых сигналов и прогнозов. Куда лучше научиться анализировать валютный рынок и думать всегда только своей головой. ..
2015-02-12

Видео по теме:




В мире больших денег

  • Самые богатые люди
    планеты. Ежегодные рейтинги FORBS. Истории успеха признаных финансовых гуру
  • Самые дорогие вещи:
    Часы, автомобили, ноутбуки стоимотью в десятки и сотни тысяч долларов. Рубрика "Чтоб я так жил"
  • Денежные прогнозы
    Что покупать и что продавать? Периодические прогнозы цен на иностранные валюты, акции крупнейших компаний и драгоценные металлы

ВКонтакте с деньгами

УГОЛОК АДМИНИСТРАТОРА