Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

sToken - библиотека для MetaTrader 5

Просмотров:
2246
Рейтинг:
(35)
Опубликован:
2011.02.28 11:39
Обновлен:
2016.11.22 07:33
\MQL5\Scripts\
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Скрипт с классом для решения математических и логических выражений, задаваемых строкой.

В скрипте два класса 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

  1. Зарегистрировать новую функцию. Регистрация выполняется в функции Init() в переменной "as" (аналогично регистрации пользовательских переменных и массивов).
  2. В функцию SolveFunc(string Func,string & aRes[]) добавить код вычисления новой функции. Аргументы для вычисления функции будут находиться в массиве aRes[]. Функции могут иметь любое количество аргументов.
downloadhistory.mq5 downloadhistory.mq5

Скрипт производит загрузку доступной истории по текущему символу.

Мастер MQL5 - Торговые сигналы свечных паттернов Dark Cloud Cover/Piercing Line + RSI Мастер MQL5 - Торговые сигналы свечных паттернов Dark Cloud Cover/Piercing Line + RSI

Торговые сигналы свечных моделей "Dark Cloud Cover/Piercing Line" (Завеса из темных облаков/Просвет в облаках) с подтверждением от индикатора RSI.

Класс CDownLoadHistory Класс CDownLoadHistory

Используется для организации загрузки истории в программах на MQL5.

Мастер MQL5 - Торговые сигналы свечных паттернов Bullish Engulfing/Bearish Engulfing + Stochastic Мастер MQL5 - Торговые сигналы свечных паттернов Bullish Engulfing/Bearish Engulfing + Stochastic

Торговые сигналы свечных моделей "Bullish Engulfing/Bearish Engulfing" (Бычье поглощение/Медвежье поглощение) с подтверждением от индикатора Stochastic.