GlobalVariableName(): имя глобальной переменной
В этом выпуске я расскажу о функции GlobalVariableName():
string GlobalVariableName(int index)
Функция GlobalVariableName() возвращает имя глобальной переменной с номером index. Порядковый номер переменной должен быть большим или равным нулю, но меньше, чем значение, возвращаемое функцией GlobalVariablesTotal().
Например, мы можем вывести имена всех глобальных переменных:
int index; string gv_name; Print("Всего глобальных переменных: ", GlobalVariablesTotal()); for (index=0; index<GlobalVariablesTotal();index++) { gv_name = GlobalVariableName(index); if (GetLastError()==0) Print("Переменная с номером ", index, " имеет имя ", gv_name); else Print("Ошибка при получении имени глобальной переменной с номером ", index); }
Предположим, что мы храним какую-то нестандартную информацию о конкретной позиции или ордере в глобальных переменных. В качестве имени глобальной переменной мы используем тикер ордера. Т.е. если нам надо сохранить информацию (например, баланс торгового счета в момент открытия этого ордера) об ордере #156777, то мы создаем глобальную переменную с именем #156777 и присваиваем ей значение текущего баланса.
Предположим, нам надо вывести список ордеров, которые были открыты, когда баланс был меньше 10000.
int index; string name;
// пробежимся по всем глобальным переменным for (index=0; index<GlobalVariablesTotal();index++) { name = GlobalVariableName(index); if (GetLastError()!=0) { Print("Ошибка при получении имени глобальной переменной с номером ", index); continue; }
// убедимся, что имя глобальной переменной начинается с # if (StringSubstr(name, 0, 1)!="#") continue;
// убедимся, что после # идут одни цифры int i; bool is_numeric; is_numeric = true;
for (i=1; i<StringLen(name);i++) { if ((StringGetChar(name, i)<48) // 48 - код '0' ||(StringGetChar(name, i)>57)) // 57 - код '9' { is_numeric = false; break; } } if (!is_numeric) continue;
// проверим значение баланса if (GlobalVariableGet(name)<10000) { Print("Ордер ", name, " был открыт, когда баланс был меньше 10000"); } }
В этом коде есть несколько незнакомых функций для работы со строками:
- string StringSubstr(string text, int start, int length=0) - возвращает подстроку строки text начиная с позиции start и длиной length.
- int StringLen(string text) - возвращает число символов в строке text.
- int StringGetChar(string text, int pos) - возращает код символа, расположенного в позиции pos строки text.
Все эти функции я подробно рассмотрю в следующих выпусках, но сначала я расскажу о функции GlobalVariablesDeleteAll().
Все статьи по теме "Пишем советников для MetaTrader 4".
- Механическая торговая система - миф или реальность?
- С чего начать при написании советника:
- Создаем нового советника - Настраиваем параметры. - Язык MetaQuotes Language 4: