第八章 数学函数
数学函数和三角函数
函数 | 功能 |
---|---|
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 // 数值
);
2
3
参数
value
[in] 数值
返回值
大于 或 等于 0 的双精度类型数值
注意
代替MathAbs()函数,可以使用 fabs()。
# 8.2 MathArccos
该函数返回x的反余弦弧度值,返回值的范围从0到π弧度。
double MathArccos(
double val // -1 < val < 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
);
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 // 正切
);
2
3
参数
value
[in] 用于求反正切的数字
返回值
MathArctan返回以弧度表示的数字的反正切值,范围在 -π/ 2 到 π/ 2 之间。
注意
代替MathArctan()函数,可以使用 atan()。
# 8.5 MathCeil
该函数返回 等于 指定数值的一个整数,或 大于 指定数值的一个最小整数。
double MathCeil(
double val // 数字
);
2
3
参数
val
[in] 数字值
返回值
如果参数 val是一个整数,则返回值 等于 val,
如果参数 val是一个小数,则截断小数部分,然后把整数部分 +1,返回。
注意
代替MathCeil()函数,可以使用 ceil()。
# 8.6 MathCos
该函数返回一个角度的余弦值。
double MathCos(
double value // 数字
);
2
3
参数
value
[in] 以弧度表示的角度。
返回值
双精度(double)类型的值,取值范围在 -1到1之间。
注意
代替MathCos()函数,可以使用 cos()。
# 8.7 MathExp
函数返回以e为底的指定次幂。e就是自然对数,大约等于2.71828
double MathExp(
double value // 指定次冥的数字
);
2
3
参量
value
[in] 指定次冥的数字。
返回值
一些双精度函数。在溢出的情况下,函数返回INF(无穷大),如果发生下溢,MathExp返回0。
注意
取代MathExp() 可以使用 exp().
相关参考
真实型(双精度double,浮点float)
# 8.8 MathFloor
该函数返回 等于 指定数值的一个整数。或 小于 指定数值的一个最大整数。
double MathFloor(
double val // 数字
);
2
3
参数
val
[in] 数值。
返回值
如果参数 val是一个整数,则返回值 等于 val,
如果参数 val是一个小数,则截断小数部分,然后把整数部分 -1,返回。
注意
代替MathFloor(),可以使用 floor()。
# 8.9 MathLog
函数返回一个以 自然对数(e) 为底数,以 指定参数 的对数值。e大约等于2.71828
double MathLog(
double val // 取对数的数值
);
2
3
参数
val
[in] 用来求 对数 的数值。
返回值
在成功的情况下返回以 自然对数(e) 为底数, val的自然对数值。
如果val为 负值,则函数返回NaN(未定值)。
如果val等于0,则函数返回INF(无穷大)。
注意
代替MathLog(),可以使用 log()。
相关参考 真实型(双精度double,浮点float)
# 8.10 MathLog10
函数返回一个以 10 为底数,以 指定参数 的对数值。
double MathLog10(
double val // 取对数的数值
);
2
3
参数
val [in] 要计算其 常用对数 的数值。
返回值
在成功的情况下,返回一个以 10 为底数,val的常用对数值。
如果val为 负值,则函数返回NaN(未定值)。
如果val等于0,则函数返回INF(无穷大)。
注意 代替MathLog10(),可以使用 log10()。
相关参考 真实型(双精度double,浮点float)
# 8.11 MathMax
该函数返回两个数值中的最大值。(两数取其大)
double MathMax(
double value1, // 第一值
double value2 // 第二值
);
2
3
4
参数
value1
[in] 第一个数字值。
value2
[in] 第二个数字值。
返回值
两个数值中的最大值。
注意
代替MathMax()可以使用 fmax()。 函数 fmax(), fmin(),MathMax(),MathMin() 可以使用整数型的参数,而不需要转换成双精度类型。
如果两个参数的类型不同,则较小类型的参数会自动转换为较大类型。返回值的类型对应于较大的类型。
如果传递的参数类型相同,则不执行转换。
# 8.12 MathMin
该函数返回两个数值中的最小值。(两数取其小)
double MathMin(
double value1, // 第一值
double value2 // 第二值
);
2
3
4
参数
value1
[in] 第一个数字值。
value2
[in] 第二个数字值。
返回值
两个数值中的最小值。
注意
代替MathMin()可以使用 fmin()。 函数 fmax(), fmin(),MathMax(),MathMin() 可以使用整数型的参数,而不需要转换成双精度类型。
如果两个参数的类型不同,则较小类型的参数会自动转换为较大类型。返回值的类型对应于较大的类型。
如果传递的参数类型相同,则不执行转换。
# 8.13 MathMod
函数返回两个数值相除之后的余数。(相除取余)
double MathMod(
double value, // 被除数
double value2 // 除数
);
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 // 次方值
);
2
3
4
参数 base [in] 底数。 exponent [in] 次方指数值 返回值 以底数值求次方后的冥数。 注意 代替MathPow(),可以使用pow()。
# 8.15 MathRand
在0到32767之间返回一个随机整数。
int MathRand();
返回值 一个整数值,在0到32767之间。 注意 有必要调用MathSrand()函数,将伪随机数的生成器设置为初始状态。 代替MathRand(),可以使用rand()。
# 8.16 MathRound
函数四舍五入返回最接近的整数值。
double MathRound(
double value // 全值
);
2
3
参数
value
[in] 四舍五入前的数值。
返回值
四舍五入到最接近的整数值。
注意 代替MathRound(),可以使用 round()。
# 8.17 MathSin
返回指定角度的正弦值。
double MathSin(
double value // 角度的弧度值
);
2
3
参数
value
[in] 角的弧度。
返回值
返回角度的正弦值,取值范围在 -1到1之间的值。
注意 代替MathSin(),可以使用sin()。
# 8.18 MathSqrt
返回数值的平方根。
double MathSqrt(
double value // 正值
);
2
3
参数
value
[in] 一个正数值
返回值
平方根值。如果传递的参数值是负数的,MathSqrt返回NaN(待定值)
。 注意 代替MathSqrt(),可以使用sqrt()。
相关参考 真实型(双精度double,浮点float)
# 8.19 MathSrand
设置生成一系列伪随机整数的起始点。
void MathSrand(
int seed // 初始化数字
);
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);
}
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 // 弧度参数
);
2
3
参数 rad
[in] 角的弧度。
返回值
参数 rad的正切值。如果传递的参数rad 大于或等于263,或 小于或等于 -263,则无意义,在这种情况下函数返回值不确定。
注意 代替MathTan(),可以使用 tan()。
相关参考 真实型(双精度double,浮点float)
# 8.21 MathIsValidNumber
检测实数的正确性。
bool MathIsValidNumber(
double number // 检测数
);
2
3
参数 number
[in] 检测数值。
返回值 返回TRUE,表示检测的数值是可以接受的实数。如果检测的数值是 正无穷 或者 负无穷大,或者没有数字(NaN),函数返回FLASE。
示例:
double abnormal=MathArcsin(2.0);
if(!MathIsValidNumber(abnormal)) Print("Attention! MathArcsin(2.0) = ",abnormal);
2
相关参考 真实型(双精度double,浮点float)
# 8.22 MathExp1
返回MathExp(x) -1表达式的值。
double MathExp1(
double value // 数值e的次方
);
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 // 对数值
);
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 <= 值 < ∞
);
2
3
参数 value
[in] 用来计算双曲反余弦的值。
返回值 数值的双曲反余弦。如果该值小于 +1,则该函数返回NaN(未定义值)。
注意 代替MathArccosh(),可以使用acosh()。
相关参考 真实型(双精度double,浮点float)
# 8.25 MathArcsinh
返回双曲反正弦。
double MathArcsinh(
double value // -∞ < 值 < +∞
);
2
3
参数 value
[in] 用来计算双曲反正弦的值。
返回值
数值的双曲反正弦。
注意 代替MathArcsinh(),可以使用asinh()。
相关参考 真实型(双精度double,浮点float)
# 8.26 MathArctanh
返回双曲反正切。
double MathArctanh(
double value // 值的范围 -1<值 < 1
);
2
3
参数 value [in] 用来计算双曲反正切的值。取值范围 -1 < 值 < 1 。 返回值 数值的双曲反正弦。 注意 代替MathArctanh(),可以使用atanh()。
# 8.27 MathCosh
返回数值的双曲余弦。
double MathCosh(
double value // 数值
);
2
3
参数 value
[in] 值。
返回值 数值的双曲余弦,其值范围在 +1到 +∞ 之间。
注意 代替MathCosh(),可以使用cosh()函数。
# 8.28 MathSinh
返回数值的双曲正弦。
double MathSinh(
double value // 数值
);
2
3
参数 value
[in] 值。
返回值 数值的双曲正弦。
注意 代替MathSinh(),可以使用sinh()函数。
# 8.29 MathTanh
返回数值的双曲正切。
double MathTanh(
double value // 数值
);
2
3
参数 value
[in] 值。
返回值 数值的双曲正切。其值范围在 -1 到 +1之间。
注意 代替MathTanh(),可以使用tanh()函数。
# 8.30 MathSwap
在ushort类型值中改变字节的顺序
ushort MathSwap(
ushort value //值
);
2
3
参数 值
[in] 用于改变字节顺序的值。
返回值 具有相反字节顺序的ushort值。
MathSwap
在uint类型值中改变字节的顺序。
uint MathSwap(
uint value // 值
);
2
3
参数 值
[in] 用于改变字节顺序的值。
返回值 具有相反字节顺序的uint值。
MathSwap
在ulong类型值中改变字节的顺序。
ulong MathSwap(
ulong value //值
);
2
3
参数 值
[in] 用于改变字节顺序的值。
返回值 具有相反字节顺序的ulong值。