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

Набор математических и тригонометрических функций.

Функция

Действие

MathAbs

Возвращает абсолютное значение (значение по модулю) переданного ей числа

MathArccos

Возвращает значение арккосинуса x в радианах

MathArcsin

Возвращает значение арксинуса x в радианах

MathArctan

Возвращает арктангенс x в радианах

MathCeil

Возвращает ближайшее сверху целое числовое значение

MathCos

Возвращает косинус числа

MathExp

Возвращает экспоненту числа

MathFloor

Возвращает ближайшее снизу целое числовое значение

MathLog

Возвращает натуральный логарифм

MathLog10

Возвращает логарифм числа по основанию 10

MathMax

Возвращает максимальное из двух числовых значений

MathMin

Возвращает минимальное из двух числовых значений

MathMod

Возвращает вещественный остаток от деления двух чисел

MathPow

Возводит основание в указанную степень

MathRand

Возвращает псевдослучайное целое число в диапазоне от 0 до 32767

MathRound

Округляет число до ближайшего целого

MathSin

Возвращает синус числа

MathSqrt

Возвращает квадратный корень

MathSrand

Устанавливает начальное состояние генератора псевдослучайных целых чисел

MathTan

Возвращает тангенс числа

MathIsValidNumber

Проверяет корректность действительного числа

MathExpm1

Возвращает значение выражения MathExp(x)-1

MathLog1p

Возвращает значение выражения MathLog(1+x)

MathArccosh

Возвращает значение гиперболического арккосинуса

MathArcsinh

Возвращает значение гиперболического арксинуса

MathArctanh

Возвращает значение гиперболического арктангенса

MathCosh

Возвращает гиперболический косинус

MathSinh

Возвращает гиперболический синус

MathTanh

Возвращает гиперболический тангенс

 

MathAbs

Возвращает абсолютное значение (значение по модулю) переданного ей числа.

double MathAbs(
 double value // число
 );

Параметры

value — [in] Числовая величина.

Возвращаемое значение

Значение типа double, больше или равно нулю.

Примечание

Вместо функции MathAbs() можно использовать функцию fabs().

 

MathArccos

Возвращает значение арккосинуса x в диапазоне 0 к π в радианах.

double MathArccos(
 double value // -1<val<1
 );

Параметры

value — [in] Значение value между -1 и 1, арккосинус которого должен быть вычислен.

Возвращаемое значение

Арккосинус числа в радианах. Если value меньше -1 или больше 1, функция возвращает NaN (неопределенное значение).

Примечание

Вместо функции MathArccos() можно использовать функцию acos().

 

MathArcsin

Возвращает арксинус x в диапазоне от -π/2 до π/2 радианов.

double MathArcsin(
 double value // -1<value<1
 );

Параметры

value — [in] Значение value между -1 и 1, арксинус которого должен быть вычислен.

Возвращаемое значение

Арксинус числа value в радианах в диапазоне от -π/2 до π/2 радианов. Если value меньше -1 или больше 1, функция возвращает NaN (неопределенное значение).

Примечание

Вместо функции MathArcsin() можно использовать функцию asin().

 

MathArctan

Возвращает арктангенс x. Если x равен 0, функция возвращает 0.

double MathArctan(
 double value // тангенс
 );

Параметры

value — [in] Число, представляющее тангенс.

Возвращаемое значение

MathArctan возвращает значение в диапазоне от -π/2 до π/2 радианов.

Примечание

Вместо функции MathArctan() можно использовать функцию atan().

 

MathCeil

Возвращает ближайшее сверху целое числовое значение.

double MathCeil(
 double val // число
 );

Параметры

val — [in] Числовая величина.

Возвращаемое значение

Числовое значение, представляющую наименьшее целое число, которое больше или равно val.

Примечание

Вместо функции MathCeil() можно использовать функцию ceil().

 

MathCos

Функция возвращает косинус угла.

double MathCos(
 double value // число
 );

Параметры

value — [in] Угол в радианах.

Возвращаемое значение

Значение типа double в диапазоне от -1 до 1.

Примечание

Вместо функции MathCos() можно использовать функцию cos().

 

MathExp

Возвращает значение числа e в степени d.

double MathExp(
 double value // степень для числа e
 );

Параметры

value — [in] Число, определяющее степень.

Возвращаемое значение

Число типа double. При переполнении функция возвращает INF (бесконечность), в случае потери порядка точности MathExp возвращает 0.

Примечание

Вместо функции MathExp() можно использовать функцию exp().

 

MathFloor

Возвращает ближайшее снизу целое числовое значение.

double MathFloor(
 double value // число
 );

Параметры

val — [in] Числовое значение.

Возвращаемое значение

Числовое значение, представляющее наибольшее целое число, которое меньше или равно value.

Примечание

Вместо функции MathFloor() можно использовать функцию floor().

 

MathLog

Возвращает натуральный логарифм.

double MathLog(
 double value // число для взятия логарифма
 );

Параметры

val — [in] Значение, логарифм которого должен быть вычислен.

Возвращаемое значение

Натуральный логарифм value в случае успеха. Если значение val отрицательно, функция возвращает NaN (неопределенное значение). Если value равно 0, функция возвращает INF (бесконечность) .

Примечание

Вместо функции MathLog() можно использовать функцию log().

 

MathLog

Возвращает логарифм числа по основанию 10.

double MathLog10(
 double val // число для взятия логарифма
 );

Параметры

val — [in] Значение, десятичный логарифм которого должен быть вычислен.

Возвращаемое значение

Десятичный логарифм val в случае успеха. Если значение val отрицательно, функция возвращает NaN (неопределенное значение). Если val равно 0, функция возвращает INF (бесконечность) .

Примечание

Вместо функции MathLog10() можно использовать функцию log10().

 

MathMax

Функция возвращает максимальное из двух числовых значений.

double MathMax(
 double value1, // первое число
 double value2 // второе число
 );

Параметры

value1 — [in] Первое числовое значение.

value2 — [in] Второе числовое значение.

Возвращаемое значение

Большее из двух чисел.

Примечание

Вместо функции MathMax() можно использовать функцию fmax(). Функции fmax(), fmin(), MathMax(), MathMin() могут работать с целыми типами без преобразования к типу double.

Если в функцию передаются параметры разных типов, то параметр младшего типа автоматически приводится к старшему типу. Тип возвращаемого значения соответствует старшему типу.

Если передаются данные одного типа, то никакого преобразования не производится.

 

MathMin

Функция возвращает минимальное из двух числовых значений.

double MathMin(
 double value1, // первое число
 double value2 // второе число
 );

Параметры

value1 — [in] Первое числовое значение.

value2 — [in] Второе числовое значение.

Возвращаемое значение

Меньшее из двух чисел.

Примечание

Вместо функции MathMin() можно использовать функцию fmin(). Функции fmax(), fmin(), MathMax(), MathMin() могут работать с целыми типами без преобразования к типу double.

Если в функцию передаются параметры разных типов, то параметр младшего типа автоматически приводится к старшему типу. Тип возвращаемого значения соответствует старшему типу.

Если передаются данные одного типа, то никакого преобразования не производится.

 

MathMod

Возвращает вещественный остаток от деления двух чисел.

double MathMod(
 double value, // делимое
 double value2 // делитель
 );

Параметры

value — [in] Значение делимого.

value2 — [in] Значение делителя.

Возвращаемое значение

Функция MathMod рассчитывает вещественный остаток f от val / y таким образом, что val = i * y + f , где i является целым числом, f имеет тот же знак, что и val, и абсолютное значение f меньше, чем абсолютное значение y.

Примечание

Вместо функции MathMod() можно использовать функцию fmod().

 

MathPow

Возводит основание в указанную степень.

double MathPow(
 double base, // основание 
 double exponent // показатель степени
 );

Параметры

base — [in] Основание.

exponent — [in] Значение степени.

Возвращаемое значение

Значение основания, возведенного в указанную степень.

Примечание

Вместо функции MathPow() можно использовать функцию pow().

 

MathRand

Возвращает псевдослучайное целое число в диапазоне от 0 до 32767.

int MathRand();

Возвращаемое значение

Целое число в диапазоне от 0 до 32767.

Примечание

Перед первым вызовом функции необходимо использовать функцию MathSrand, чтобы перевести генератор псевдослучайных чисел в начальное состояние.

Примечание

Вместо функции MathRand() можно использовать функцию rand().

 

MathRound

Возвращает значение, округленное до ближайшего целого числа указанного числового значения.

double MathRound(
 double value // округляемое значение
 );

Параметры

value — [in] Числовая величина для округления.

Возвращаемое значение

Значение, округленное до ближайшего целого числа.

Примечание

Вместо функции MathRound() можно использовать функцию round().

 

MathSin

Возвращает синус указанного угла.

double MathSin(
 double value // число
 );

Параметры

value — [in] Угол в радианах.

Возвращаемое значение

Синус угла, указанного в радианах. Возвращает значение в диапазоне от -1 до 1.

Примечание

Вместо функции MathSin() можно использовать функцию sin().

 

MathSqrt

Возвращает квадратный корень числа.

double MathSqrt(
 double value // положительное число
 );

Параметры

value — [in] Положительная числовая величина.

Возвращаемое значение

Квадратный корень числа value. Если value отрицательно, MathSqrt возвращает NaN (неопределенное значение).

Примечание

Вместо функции MathSqrt() можно использовать функцию sqrt().

 

MathSrand

Устанавливает начальное состояние для генерации ряда псевдослучайных целых чисел.

void MathSrand(
 int seed // инициализирующее число
 );

Параметры

seed — [in] Начальное число для ряда случайных чисел.

Возвращаемое значение

Нет возвращаемого значения.

Примечание

Функция MathRand() предназначена для генерации последовательности псевдослучайных чисел. Вызов MathSrand() с определенным инициализирующим числом позволяет получать всегда одну и ту же последовательность псевдослучайных чисел.

Для гарантированного получения неповторяющейся последовательности используйте вызов MathSrand(GetTickCount()), так как значение GetTickCount() увеличивается с момента запуска операционной системы и не повторяется в течение 49 дней, пока не переполнится встроенный счетчик миллисекунд. Использование MathSrand(TimeCurrent()) не подходит по той причине, что функция TimeCurrent() возвращает время прихода последнего тика, которое может не меняться долгое время, например, в выходные дни.

Инициализацию генератора псевдослучайных чисел с помощью MathSrand() для индикаторов и экспертов лучше всего делать в обработчике OnInit(), это избавит от последующих многократных перезапусков генератора в OnTick() и OnCalculate().

Вместо функции MathSrand() можно использовать функцию srand().

Пример:

#property description "Индикатор демонстрирует центральную предельную  теорему, которая гласит:"
#property description "Сумма достаточно большого количества слабо зависимых случайных величин, "
#property description "имеющих примерно одинаковые масштабы (ни одно из слагаемых не доминирует,"
#property description "не вносит в сумму определяющего вклада), имеет распределение, близкое к нормальному."
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

//--- свойства графического построения
#property indicator_label1  "Label"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRoyalBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  5

//--- input переменная
input int      sample_number=10;

//--- индикаторный буфер для отрисовки распределения
double         LabelBuffer[];

//--- счетчик тиков
double         ticks_counter;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
{
   //--- связывание массива и индикаторного буфера
   SetIndexBuffer(0,LabelBuffer,INDICATOR_DATA);

   //--- развернем индикаторный буфер из настоящего в прошлое
   ArraySetAsSeries(LabelBuffer,true);

   //--- инициализируем генератор случайных чисел
   MathSrand(GetTickCount());

   //--- инициализируем счетчик тиков
   ticks_counter=0;
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   //--- при нулевом счетчике обнулим буфер индикатора
   if(ticks_counter==0) ArrayInitialize(LabelBuffer,0);

   //--- увеличим счетчик
   ticks_counter++;

   //--- нужно периодически сбрасывать счетчик тиков, чтобы оживлять распределение
   if(ticks_counter>100)
   {
      Print("Обнулили значения индикатора, начнем заполнять ячейки снова");
      ticks_counter=0;
   }

   //--- получим выборку случайных значений, как сумму трех чисел от 0 до 7
   for(int i=0;i<sample_number;i++)
   {
      //--- вычисление индекса ячейки, куда выпадет случайное число как сумма трех других
      int rand_index=0;

      //--- получим три случайных числа от 0 до 7
      for(int k=0;k<3;k++)
      {
         //--- остаток от деления на 7 вернет значение от 0 до 6
         rand_index+=MathRand()%7;
      }

      //--- увеличим на единицу значение в ячейке с номером rand_index
      LabelBuffer[rand_index]++;
   }

   //--- выход из обработчика OnCalculate()
   return(rates_total);
}

 

MathTan

Возвращает тангенс числа.

double MathTan(
 double rad // аргумент в радианах
 );

Параметры

rad — [in] Угол в радианах.

Возвращаемое значение

Тангенс числа rad. Если rad больше или равен 263 или меньше или равен -263, то происходит потеря значения и функция возвращает неопределенное число.

Примечание

Вместо функции MathTan() можно использовать функцию tan().

 

MathIsValidNumber

Проверяет корректность действительного числа

bool MathIsValidNumber(
 double number // число для проверки
 );

Параметры

number — [in] Проверяемое число.

Возвращаемое значение

Возвращает true, если проверяемое значение является допустимым вещественным числом. Если проверяемое значение является плюс или минус бесконечностью, либо «не числом» (NaN — not a number), функция возвращает false.

Пример:

double abnormal=MathArcsin(2.0);

if(!MathIsValidNumber(abnormal))
   Print("Внимание! MathArcsin(2.0) = ",abnormal);

 

MathExp1

Возвращает значение выражения MathExp(x)-1.

double MathExp1(
 double value // степень для числа e
 );

Параметры

value — [in] Число, определяющее степень.

Возвращаемое значение

Число типа double. При переполнении функция возвращает INF (бесконечность), в случае потери порядка точности MathExp1 возвращает 0.

Примечание

При значениях x близком к 0, функция MathExp1(x) даёт гораздо более точные значения, чем MathExp(x)-1.

Вместо функции MathExp1() можно использовать функцию expm1().

 

MathLog1p

Возвращает значение выражения MathLog(1+x).

double MathLog1p(
 double value // число для взятия логарифма
 );

Параметры

val — [in] Значение, логарифм которого должен быть вычислен.

Возвращаемое значение

Натуральный логарифм значения (value+1) в случае успеха. Если value < -1, то функция возвращает NaN (неопределенное значение). Если value равно -1, функция возвращает INF (бесконечность) .

Примечание

При значениях x близком к 0, функция MathLog1p(x) даёт гораздо более точные значения, чем MathLog(1+x).

Вместо функции MathLog1p() можно использовать функцию log1p().

 

MathArccosh

Возвращает значение гиперболического арккосинуса.

double MathArccosh(
 double value // 1 <= value < ∞
 );

Параметры

val — [in] Значение value, гиперболический арккосинус которого должен быть вычислен.

Возвращаемое значение

Гиперболический арккосинус числа. Если value меньше +1, функция возвращает NaN (неопределенное значение).

Примечание

Вместо функции MathArccosh() можно использовать функцию acosh().

 

MathArcsinh

Возвращает значение гиперболического арксинуса.

double MathArcsinh(
 double value // -∞ < value < +∞
 );

Параметры

val — [in] Значение value, арксинус которого должен быть вычислен.

Возвращаемое значение

Гиперболический арксинус числа.

Примечание

Вместо функции MathArcsinh() можно использовать функцию asinh().

 

MathArctanh

Возвращает значение гиперболического арктангенса.

double MathArctanh(
 double value // значение в дипазоне -1 < value < 1
 );

Параметры

value — [in] Число в дипазоне -1 < value < 1, представляющее тангенс.

Возвращаемое значение

Гиперболический арктангенс числа.

Примечание

Вместо функции MathArctanh() можно использовать функцию atanh().

 

MathCosh

Возвращает гиперболический косинус числа.

double MathCosh(
 double value // число
 );

Параметры

value — [in] Значение.

Возвращаемое значение

Гиперболический косинус числа, значение в диапазоне от +1 до плюс бесконечности.

Примечание

Вместо функции MathCosh() можно использовать функцию cosh().

 

MathSinh

Возвращает гиперболический синус числа.

double MathSinh(
 double value // число
 );

Параметры

value — [in] Значение.

Возвращаемое значение

Гиперболический синус числа.

Примечание

Вместо функции MathSinh() можно использовать функцию sinh().

 

MathTanh

Возвращает гиперболический тангенс числа.

double MathTanh(
 double value // число
 );

Параметры

value — [in] Значение.

Возвращаемое значение

Гиперболический тангенс числа, значение в диапазоне от -1 до +1.

Примечание

Вместо функции MathTanh() можно использовать функцию tanh().