第八章 数学函数

数学函数和三角函数

函数 功能
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 返回双曲正切

# 8.1 MathAbs

此函数返回指定数值的绝对值(求绝对值)

double  MathAbs( 
   double  value      // 数值 
   );
1
2
3

参数

value

[in] 数值

返回值

大于 或 等于 0 的双精度类型数值

注意

代替MathAbs()函数,可以使用 fabs()。

# 8.2 MathArccos

该函数返回x的反余弦弧度值,返回值的范围从0到π弧度。

double  MathArccos( 
   double  val     // -1 < val < 1
   );
1
2
3

参数

val

[in] val的取值范围在 -1到1之间,用来计算反余弦

返回值

以弧度表示的数字的余弦。 如果val小于 -1或大于1,则函数返回NaN(不确定值)。

注意

代替MathArccos()函数,可以使用 acos()。

相关参考 真实型(双精度double,浮点float)

# 8.3 MathArcsin

该函数返回x的反正弦弧度值,返回值的范围从 -π/ 2 到 π/ 2。

double  MathArcsin( 
   double  val      // -1<值< 1
   );
1
2
3

参数

val

[in] val的取值范围在 -1到1之间,计算余弦值

返回值

以弧度表示的数字的反正弦,范围在 -π/ 2 到 π/ 2 之间。如果参数 val小于 -1 或 大于 1,则函数返回NaN(不确定值)。

注意

代替MathArcsin()函数,可以使用 asin()。

相关参考 真实型(双精度double,浮点float)

# 8.4 MathArctan

该函数返回x的反正切弧度值,如果x等于0,函数返回0。

double  MathArctan( 
   double  value      // 正切 
   );
1
2
3

参数

value

[in] 用于求反正切的数字

返回值

MathArctan返回以弧度表示的数字的反正切值,范围在 -π/ 2 到 π/ 2 之间。

注意

代替MathArctan()函数,可以使用 atan()。

# 8.5 MathCeil

该函数返回 等于 指定数值的一个整数,或 大于 指定数值的一个最小整数。

double  MathCeil( 
   double  val      // 数字 
   );
1
2
3

参数

val

[in] 数字值

返回值

如果参数 val是一个整数,则返回值 等于 val,

如果参数 val是一个小数,则截断小数部分,然后把整数部分 +1,返回。

注意

代替MathCeil()函数,可以使用 ceil()。

# 8.6 MathCos

该函数返回一个角度的余弦值。

double  MathCos( 
   double  value      // 数字 
   );
1
2
3

参数

value

[in] 以弧度表示的角度。

返回值

双精度(double)类型的值,取值范围在 -1到1之间。

注意

代替MathCos()函数,可以使用 cos()。

# 8.7 MathExp

函数返回以e为底的指定次幂。e就是自然对数,大约等于2.71828

double  MathExp( 
   double  value      // 指定次冥的数字 
   );
1
2
3

参量

value

[in] 指定次冥的数字。

返回值

一些双精度函数。在溢出的情况下,函数返回INF(无穷大),如果发生下溢,MathExp返回0。

注意

取代MathExp() 可以使用 exp().

相关参考

真实型(双精度double,浮点float)

# 8.8 MathFloor

该函数返回 等于 指定数值的一个整数。或 小于 指定数值的一个最大整数。

double  MathFloor( 
   double  val     // 数字 
   );
1
2
3

参数

val

[in] 数值。

返回值

如果参数 val是一个整数,则返回值 等于 val,

如果参数 val是一个小数,则截断小数部分,然后把整数部分 -1,返回。

注意

代替MathFloor(),可以使用 floor()。

# 8.9 MathLog

函数返回一个以 自然对数(e) 为底数,以 指定参数 的对数值。e大约等于2.71828

double  MathLog( 
   double  val      // 取对数的数值 
   );
1
2
3

参数

val

[in] 用来求 对数 的数值。

返回值

在成功的情况下返回以 自然对数(e) 为底数, val的自然对数值。

如果val为 负值,则函数返回NaN(未定值)。

如果val等于0,则函数返回INF(无穷大)。

注意

代替MathLog(),可以使用 log()。

相关参考 真实型(双精度double,浮点float)

# 8.10 MathLog10

函数返回一个以 10 为底数,以 指定参数 的对数值。

double  MathLog10( 
   double  val      // 取对数的数值 
   );
1
2
3

参数

val [in] 要计算其 常用对数 的数值。

返回值

在成功的情况下,返回一个以 10 为底数,val的常用对数值。

如果val为 负值,则函数返回NaN(未定值)。

如果val等于0,则函数返回INF(无穷大)。

注意 代替MathLog10(),可以使用 log10()。

相关参考 真实型(双精度double,浮点float)

# 8.11 MathMax

该函数返回两个数值中的最大值。(两数取其大)

double  MathMax( 
   double  value1,     // 第一值 
   double  value2      // 第二值 
   );
1
2
3
4

参数

value1

[in] 第一个数字值。

value2

[in] 第二个数字值。

返回值

两个数值中的最大值。

注意

代替MathMax()可以使用 fmax()。 函数 fmax(), fmin(),MathMax(),MathMin() 可以使用整数型的参数,而不需要转换成双精度类型。

如果两个参数的类型不同,则较小类型的参数会自动转换为较大类型。返回值的类型对应于较大的类型。

如果传递的参数类型相同,则不执行转换。

# 8.12 MathMin

该函数返回两个数值中的最小值。(两数取其小)

double  MathMin( 
   double  value1,     // 第一值 
   double  value2      // 第二值 
   );
1
2
3
4

参数

value1

[in] 第一个数字值。

value2

[in] 第二个数字值。

返回值

两个数值中的最小值。

注意

代替MathMin()可以使用 fmin()。 函数 fmax(), fmin(),MathMax(),MathMin() 可以使用整数型的参数,而不需要转换成双精度类型。

如果两个参数的类型不同,则较小类型的参数会自动转换为较大类型。返回值的类型对应于较大的类型。

如果传递的参数类型相同,则不执行转换。

# 8.13 MathMod

函数返回两个数值相除之后的余数。(相除取余)

double  MathMod( 
   double  value,      // 被除数 
   double  value2      // 除数 
   );
1
2
3
4

参数

value

[in] 被除数。

Value2

[in] 除数。

返回值

MathMod函数根据表达式val / y计算实数余数f,使得val = i * y + f,其中i是整数,f与val的符号相同,且f的绝对值小于绝对值 y。

注意

代替MathMod(),可以使用 fmod()。

# 8.14 MathPow

此函数返回一个底数的次冥。

double  MathPow( 
   double  base,         // 底数  
   double  exponent      // 次方值 
   );
1
2
3
4

参数 base [in] 底数。 exponent [in] 次方指数值 返回值 以底数值求次方后的冥数。 注意 代替MathPow(),可以使用pow()。

# 8.15 MathRand

在0到32767之间返回一个随机整数。

int  MathRand();
1

返回值 一个整数值,在0到32767之间。 注意 有必要调用MathSrand()函数,将伪随机数的生成器设置为初始状态。 代替MathRand(),可以使用rand()。

# 8.16 MathRound

函数四舍五入返回最接近的整数值。

double  MathRound( 
   double  value      // 全值 
   );
1
2
3

参数

value

[in] 四舍五入前的数值。

返回值

四舍五入到最接近的整数值。

注意 代替MathRound(),可以使用 round()。

# 8.17 MathSin

返回指定角度的正弦值。

double  MathSin( 
   double  value      // 角度的弧度值 
   );
1
2
3

参数

value

[in] 角的弧度。

返回值

返回角度的正弦值,取值范围在 -1到1之间的值。

注意 代替MathSin(),可以使用sin()。

# 8.18 MathSqrt

返回数值的平方根。

double  MathSqrt( 
   double  value      // 正值 
   );
1
2
3

参数

value

[in] 一个正数值

返回值

平方根值。如果传递的参数值是负数的,MathSqrt返回NaN(待定值)

。 注意 代替MathSqrt(),可以使用sqrt()。

相关参考 真实型(双精度double,浮点float)

# 8.19 MathSrand

设置生成一系列伪随机整数的起始点。

void  MathSrand( 
   int  seed      // 初始化数字 
   );
1
2
3

参数 seed

[in] 随机数序列的起始数字。

返回值 没有返回值。

注意

MathRand()函数用于生成一个伪随机数序列。使用某个初始化数字调用MathSrand()可以始终生成相同的伪随机数序列。 为了确保接收非重复序列,请使用MathSrand(GetTickCount()),因为GetTickCount()的值从操作系统开始的时刻开始增加,并且在49天内不会重复,直到内嵌的计数器在毫秒内溢出。使用MathSrand(TimeCurrent())是不合适的,因为TimeCurrent()函数返回最后一个跳价的时间,这可以在很长时间内保持不变,例如在周末。 在OnInit()处理程序中,使用MathSrand()用于指标和EA程序的随机数生成器的初始化效果更好;它可以有助于您防止在OnTick() 和 OnCalculate()中多次重启生成程序。 代替MathSrand(),可以使用srand()。

例如:

#property description "The indicator shows the central limit theorem, which states:" 
#property description "The sum of a sufficiently large number of weakly dependent random variables, " 
#property description "having approximately equal magnitude (none of the summands dominates," 
#property description "or makes a determining contribution to the sum), has a distribution close to normal."
//  该指标显示了中心极限定理,即:
一个数量足够大的相互依赖关系弱的随机变量的和,具有大致相等的幅度(没有被加数的支配,或使所述总和判断贡献),它的分布接近于正常。

#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 int      sample_number=10; 
//--- 用于绘制分布图的指标缓冲区 
double         LabelBuffer[]; 
//--- 订单号计数器 
double         ticks_counter; 
//+------------------------------------------------------------------+ 
//| 自定义指标初始化函数                                                | 
//+------------------------------------------------------------------+ 
void OnInit() 
  { 
//--- 绑定数组和指标缓冲区 
   SetIndexBuffer(0,LabelBuffer,INDICATOR_DATA); 
//--- 从现在到过去转移指标缓冲区 
   ArraySetAsSeries(LabelBuffer,true); 
//--- 初始化随机数生成程序 
   MathSrand(GetTickCount()); 
//--- 初始化订单号计数器 
   ticks_counter=0; 
  } 
//+------------------------------------------------------------------+ 
//| 自定义指标迭代函数                                                 | 
//+------------------------------------------------------------------+ 
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("We've reset the indicator values, let's start filling the cells once again"); 
      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单元数的值为1 
      LabelBuffer[rand_index]++; 
     } 
//--- 退出OnCalculate() 处理程序 
   return(rates_total); 
  }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

# 8.20 MathTan

返回指定角度的正切值。

double  MathTan( 
   double  rad      // 弧度参数 
   );
1
2
3

参数 rad

[in] 角的弧度。

返回值

参数 rad的正切值。如果传递的参数rad 大于或等于263,或 小于或等于 -263,则无意义,在这种情况下函数返回值不确定。

注意 代替MathTan(),可以使用 tan()。

相关参考 真实型(双精度double,浮点float)

# 8.21 MathIsValidNumber

检测实数的正确性。

bool  MathIsValidNumber( 
   double  number      // 检测数 
   );
1
2
3

参数 number

[in] 检测数值。

返回值 返回TRUE,表示检测的数值是可以接受的实数。如果检测的数值是 正无穷 或者 负无穷大,或者没有数字(NaN),函数返回FLASE。

示例:

double abnormal=MathArcsin(2.0); 
   if(!MathIsValidNumber(abnormal)) Print("Attention! MathArcsin(2.0) = ",abnormal); 
1
2

相关参考 真实型(双精度double,浮点float)

# 8.22 MathExp1

返回MathExp(x) -1表达式的值。

double  MathExp1( 
   double  value      // 数值e的次方 
   );
1
2
3

参数 值

[in] 指定 自然对数 e 的次方指数值。

返回值 双精度类型值。溢出的情况下,函数返回INF(无穷大∞),如果发生下溢的情况下MathExp返回0。

注意 在传递的参数值 x 接近0时,MathExp1(x)函数比MathExp(x) - 1函数生成更精确的值。

代替MathExp1(),可以使用expm1()函数。

相关参考 真实型(双精度double,浮点float)

# 8.23 MathLog1p

返回MathLog(1+x)表达式的值。

double  MathLog1p( 
   double  value      // 对数值 
   );
1
2
3

参数 值

[in] 将被计算的对数值。

返回值 如果成功,则返回自然对数(值+ 1)。如果传递的参数值 < -1,函数返回NaN(未定义)。如果值等于 -1,函数返回INF(无穷大∞)。

注意 在传递的参数值 x 接近0时,MathLog1p(x)函数比MathLog(1+x)函数生成更精确的值。

代替MathLog1p(),可以使用log1p()。

相关参考 真实型(双精度double,浮点float)

# 8.24 MathArccosh

返回双曲反余弦。

double  MathArccosh( 
   double  value     // 1 <= 值 < ∞ 
   );
1
2
3

参数 value

[in] 用来计算双曲反余弦的值。

返回值 数值的双曲反余弦。如果该值小于 +1,则该函数返回NaN(未定义值)。

注意 代替MathArccosh(),可以使用acosh()。

相关参考 真实型(双精度double,浮点float)

# 8.25 MathArcsinh

返回双曲反正弦。

double  MathArcsinh( 
   double  value      // -∞ < 值 < +∞ 
   );
1
2
3

参数 value

[in] 用来计算双曲反正弦的值。

返回值

数值的双曲反正弦。

注意 代替MathArcsinh(),可以使用asinh()。

相关参考 真实型(双精度double,浮点float)

# 8.26 MathArctanh

返回双曲反正切。

double  MathArctanh( 
   double  value      // 值的范围 -1<值 < 1 
   );
1
2
3

参数 value [in] 用来计算双曲反正切的值。取值范围 -1 < 值 < 1 。 返回值 数值的双曲反正弦。 注意 代替MathArctanh(),可以使用atanh()。

# 8.27 MathCosh

返回数值的双曲余弦。

double  MathCosh( 
   double  value      // 数值 
   );
1
2
3

参数 value

[in] 值。

返回值 数值的双曲余弦,其值范围在 +1到 +∞ 之间。

注意 代替MathCosh(),可以使用cosh()函数。

# 8.28 MathSinh

返回数值的双曲正弦。

double  MathSinh( 
   double  value      // 数值 
   );
1
2
3

参数 value

[in] 值。

返回值 数值的双曲正弦。

注意 代替MathSinh(),可以使用sinh()函数。

# 8.29 MathTanh

返回数值的双曲正切。

double  MathTanh( 
   double  value      // 数值 
   );
1
2
3

参数 value

[in] 值。

返回值 数值的双曲正切。其值范围在 -1 到 +1之间。

注意 代替MathTanh(),可以使用tanh()函数。

# 8.30 MathSwap

在ushort类型值中改变字节的顺序

ushort  MathSwap( 
   ushort  value      //值 
   );
1
2
3

参数 值

[in] 用于改变字节顺序的值。

返回值 具有相反字节顺序的ushort值。

MathSwap

在uint类型值中改变字节的顺序。

uint  MathSwap( 
   uint   value      // 值 
   );
1
2
3

参数 值

[in] 用于改变字节顺序的值。

返回值 具有相反字节顺序的uint值。

MathSwap

在ulong类型值中改变字节的顺序。

ulong  MathSwap( 
   ulong  value      //值 
   );
1
2
3

参数 值

[in] 用于改变字节顺序的值。

返回值 具有相反字节顺序的ulong值。