Математические функции
В составе MQL4 имеются математические и тригонометрические функции. Использование
большинства из них не вызывает никаких затруднений. Например, функция MathMax()
возвращает максимальное из двух числовых значений, указанных в списке параметров
вызова функции. Использование других функций требует определённой внимательности
и вдумчивости. Рассмотрим одну из таких функций.
Функция MathFloor()
double MathFloor(double x)
Функция возвращает числовое значение, представляющее наибольшее целое число, которое
меньше или равно x.
Параметры:
x - числовое значение.
Обратите внимание, значение, возвращаемое функцией, является действительным числом
(типа double), в то же время в назначении функции указано, что функция возвращает
целое число. Это нужно понимать так, что функция возвращает действительное число,
у которого во всех разрядах после разделительной точки указаны нули. Например,
функция MathFloor() может вернуть 37.0 (положительное число типа double) или -4.0 (отрицательное число типа double).
В описании также указано, что функция возвращает максимальное из возможных чисел,
которое меньше заданного. Например, если значение передаваемого параметра х равно
13.5, то максимальное действительное число, имеющее после разделительной только
нули, равно 13.0. Если же в вызове функции указано отрицательное число -13.5,
то максимальное меньшее целое число равно -14.0. Таким образом, изменение знака
передаваемого параметра приводит к разным результатам, а именно, получаемые значения
не равны по модулю.
В некоторых случаях использование подобных функций оказывается очень удобным. Для
примера рассмотрим фрагмент расчёта количества лотов для новых ордеров:
int Percent =30;
double Free =AccountFreeMargin();
double One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);
double Step =MarketInfo(Symb,MODE_LOTSTEP);
double Lots_New=MathFloor(Free*Percent/100/One_Lot/Step)*Step;
Значение переменной Percent задаётся пользователем. В данном случае пользователь
выделил для новых ордеров 30% свободных средств. В соответствии с правилами, установленными
дилинговым центром, правильно вычисленное количество лотов должно быть кратно минимальному
шагу изменения размера лотов (Step). Для расчёта необходимы также значения свободных
средств на счёте (Free) и стоимости одного лота (One_Lot).
Рассмотрим логику рассуждений программиста, составившего формулу для расчёта искомого
количества лотов Lots_New для новых ордеров. Используем для наглядности численные
значения переменных. Пусть Free = 5000.0, One_Lot = 1360.0 (в большинстве ДЦ стоимость
1 лота для валютной пары, в знаменателе которой USD, пропорциональна цене по валютному
инструменту), Step = 0.1. В этом случае программную строку для вычисления Lots_New
можно переписать так:
Lots_New = MathFloor(5000.0*30/100/1360.0/0.1)*0.1;
Значением выражения 5000.0*30/100 является количество средств, выделенных пользователем
для открытия нового ордера. В данном случае стоимость нового ордера может достигать
1500.0. Потратив все эти средства можно открыть один ордер, количество лотов у
которого равно 1500.0 / 1360.0 = 1.102941. Однако дилинговый центр не примет
заявку на такое количество лотов, т.к. минимальный шаг (в большинстве дилинговых
центров) Step = 0.1. Для вычисления
искомого количества лотов необходимо отбросить "лишние" цифры в дробной
части и заменить их нулями.
Для этого можно воспользоваться рассматриваемой математической функцией:
Lots_New = MathFloor(1.102941/0.1)*0.1;
Результатом вычисления MathFloor(1.102941/0.1) будет число 11.0, а вычисленным значением
переменной Lots_New - число 1.1 лота. Это значение соответствует правилам, установленным
дилинговым центром, поэтому его можно использовать как заявляемое количество лотов
для новых ордеров.
Математические функции
Функция |
Краткое описание |
MathAbs |
Функция возвращает абсолютное значение (значение по модулю) переданного ей числа.
|
MathArccos |
Функция возвращает значение арккосинуса x в диапазоне 0 к π в радианах. Если x меньше -1 или больше 1, функция возвращает NaN (неопределенное значение) |
MathArcsin |
Функция возвращает арксинус x в диапазоне от -π/2 до π/2 радианов. Если x-, меньше -1 или больше 1, функция возвращает NaN (неопределенное значение). |
MathArctan |
Функция возвращает арктангенс x. Если x равен 0, функция возвращает 0. MathArctan возвращает значение в диапазоне от -π/2
до π/2 радианов. |
MathCeil |
Функция возвращает числовое значение, представляющую наименьшее целое число, которое
больше или равно x. |
MathCos |
Функция возвращает косинус угла. |
MathExp |
Функция возвращает значение числа e в степени d. При переполнении функция возвращает INF (бесконечность), в случае потери порядка
MathExp возвращает 0. |
MathFloor |
Функция возвращает числовое значение, представляющее наибольшее целое число, которое
меньше или равно x. |
MathLog |
Функции возвращают натуральный логарифм x в случае успеха. Если x отрицателен, функция возвращает NaN (неопределенное значение). Если x равен 0, функция возвращает INF (бесконечность). |
MathMax |
Функция возвращает максимальное из двух числовых значений. |
MathMin |
Функция возвращает минимальное из двух числовых значений. |
MathMod |
Функция возвращает вещественный остаток от деления двух чисел. Функция MathMod рассчитывает
вещественный остаток f от x / y таким образом, что x = i * y + f , где i является целым числом, f имеет тот же знак, что и x, и абсолютное значение f меньше, чем абсолютное значение y. |
MathPow |
Функция возвращает значение основания, возведенного в указанную степень. |
MathRand |
Функция возвращает псевдослучайное целое число в дипазоне от 0 до 32767. Перед первым
вызовом функции необходимо использовать функцию MathSrand, чтобы перевести генератор псевдослучайных чисел в начальное состояние |
MathRound |
Функция возвращает значение, округленное до ближайшего целого числа указанного числового
значения. |
MathSin |
Функция возвращает синус указанного угла. |
MathSqrt |
Функция возвращает квадратный корень x. Если x отрицателен, MathSqrt возвращает NaN (неопределенное значение). |
MathSrand |
Функция устанавливает начальное состояние для генерации ряда псевдослучайных целых
чисел. |
MathTan |
Функция возвращает тангенс x. Если x больше или равен 263 или меньше или равен -263, то происходит потеря значения и
функция возвращает неопределенное число. |
Для получения подробного описания этих и других функций необходимо обратиться к
справочной документации на MQL4.community, сайте MetaQuotes Ltd. или к разделу "Справка" в редакторе MetaEditor.