Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
sToken - библиотека для MetaTrader 5
- Просмотров:
- 2250
- Рейтинг:
- Опубликован:
- 2011.02.28 11:39
- Обновлен:
- 2016.11.22 07:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Скрипт с классом для решения математических и логических выражений, задаваемых строкой.
В скрипте два класса cTokenBase и cToken, являющийся членом класса cTokenBase. Классы не вынесены в отдельный файл, поскольку для практического их применения в класс cTokenBase необходимо вносить некоторые изменения (об этом ниже).
Поддерживаются все математические функции языка MQL5: abs, arccos, arcsin, arctan, ceil, cos, exp, floor, log, log10, max, min, mod, pow, rand, round, sin, sqrt, tan.
Поддерживаются арифметические и логические действия: ;/, %, *, +, -, >, <, >=, <=, ==, !=, &&, ||.
Аргументами выражения могут быть числа, в том числе с десятичным разделителем (с точкой), пользовательские переменные и пользовательские массивы. При использовании пользовательских переменных и массивов необходимо дописать функции получения значений этих переменных и массивов.
Функции получения значений пользовательских переменных и массивов добавляются в класс cTokenBase, собственно с этой целью выполнено разделение на два класса - класс cToken используется без изменений, а в классе cTokenBase находятся функции для получения значения переменных и массивов.
Имена переменных и массивов состоят из букв (регистр не имеет значения, так же и регистр всего выражения не имеет значения), элементы массивов определяются числом в квадратных скобках, например - e[0], e[1], f[0], f[1].
Пример:
Порядок редактирования класса cTokenBase
1. Зарегистрировать имя переменной или массива. Регистрация выполняется в функции UsersVariables(). В функции выполняется присваивание значений переменным UserVariables и UserArrays, присваиваются строковые значения - списки переменных через разделитель ";".
void UsersVariables() { UserVariables="a;b;c;d"; // список пользовательских переменных UserArrays="e;f"; // список пользовательских массивов }
2. В функцию UserFunc(string FuncName) дописать вызов определенной функции при соответствущем аргументе функции.
string UserFunc(string FuncName) { if(FuncName=="a")return(a()); if(FuncName=="b")return(b()); if(FuncName=="c")return(c()); if(FuncName=="d")return(d()); Alert("Функция для переменной "+FuncName+" не определена"); return("0"); }
3. Написать функции для каждой из пользовательских переменных:
string a() { return("1"); } string b() { return("2"); } string c() { return("3"); } string d() { return("4"); }
4. В функцию UserArray(string ArrName,int aIndex) дописать вызов определенной функции при соответствующем первом аргументе функции (переменной ArrName).
Переменная aIndex будет определять индекс элемента пользовательского массива.
string UserArray(string ArrName,int aIndex) { if(ArrName=="e")return(e(aIndex)); if(ArrName=="f")return(f(aIndex)); Alert("Функция для массива "+ArrName+" не определена"); return("0"); }
5. Написать функции для каждого из пользовательских массивов:
string e(int Index) { string v[]={"1","2","3","4","5","6","7","8","9"}; return(v[Index]); } string f(int Index) { string v[]={"10","20","30","40","50","60","70","80","90"}; return(v[Index]); }
Порядок использования класса
1. Объявить внешнюю переменную в которую пользователь будет вводить выражение.
input string Expression="введите выражение";
2. В общей секции модуля объявить переменную указатель на класс:
cToken token;
3. Выполнить инициализацию класса заданным в переменной Expression выражением.
token.Init(Expression);
4. По мере необходимости вызывать метод SolveExpression()
double Value=token.SolveExpression();
Класс может использоваться для решения нескольких выражений, для каждого из них объявляется свой указатель на класс.
cToken token1; cToken token2; cToken token3; cToken token4;
В этом случае все экземпляры классов будут пользоваться одними и теми же пользовательскими переменными и массивами из класса cTokenBase.
Класс может быть доработан для использование каких-либо других функций.
Добавление новых функций в класс cToken
- Зарегистрировать новую функцию. Регистрация выполняется в функции Init() в переменной "as" (аналогично регистрации пользовательских переменных и массивов).
- В функцию SolveFunc(string Func,string & aRes[]) добавить код вычисления новой функции. Аргументы для вычисления функции будут находиться в массиве aRes[]. Функции могут иметь любое количество аргументов.
Скрипт производит загрузку доступной истории по текущему символу.
Мастер MQL5 - Торговые сигналы свечных паттернов Dark Cloud Cover/Piercing Line + RSIТорговые сигналы свечных моделей "Dark Cloud Cover/Piercing Line" (Завеса из темных облаков/Просвет в облаках) с подтверждением от индикатора RSI.
Используется для организации загрузки истории в программах на MQL5.
Мастер MQL5 - Торговые сигналы свечных паттернов Bullish Engulfing/Bearish Engulfing + StochasticТорговые сигналы свечных моделей "Bullish Engulfing/Bearish Engulfing" (Бычье поглощение/Медвежье поглощение) с подтверждением от индикатора Stochastic.