Русский

Учебник по MQL4  Стандартные функции  Математические функции

Математические функции


В составе 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);//Стоим. 1 лота
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 Software Corp. или к разделу "Справка" в редакторе MetaEditor.