简介

这是“面向初学者的 MQL4 语言”系列的第三篇文章。在前两篇文章中, 我们学习了 MQL4 的基础知识,它们是进一步开发的基石。现在我们将学习使用内置 函数和用于技术指标的函数。后者对于以后开发你自己的 Expert Advisor 和指标至 关重要。另外,我们将通过一个简答的例子,解释如何追踪进入市场的交易信号, 以及如何正确使用指标。在文章的末尾,你将学到一些关于语言本身的新鲜有趣的内容。

数学函数

让我们从最简单但仍在使用且有帮助的数学函数开始。

MathAbs

函数原型:

double MathAbs(double value)

这是非常简单的函数,返回绝对值(数字模块)。它的意思是,如果你使用了负数,则会得到一个正数结果。使用示例:

int a=-10;
double b=-20.0;
double c=7.0;a=MathAbs(a); // now a is equal to 10
b=MathAbs(b); // now b is equal to 20.0
c=MathAbs(c); // the value of c will not change, for it was positive

MathCeil、MathFloor 和 MathRound

函数的原型:

double MathCeil(double x)
double MathFloor(double x)
double MathRound(double value)

这三个函数非常类似:它们均将数字圆整为整数。 但每个都有其独特性:MathCeil 的圆整方式为: 即使我们有一个整数的千分之一(例如,1.001),它依然被视为一个整数。 即数字被向上圆整为更大的值。例如:

double a;
a=MathCeil(1.001);  // a=2.0, even one thousandth is rounded off to a whole number
a=MathCeil(1.999);  // a=2.0
a=MathCeil(-1.001); // a=-1.0, it is correct, because -1.0 is more than -1.001
a=MathCeil(-1.999); // a=-1.0, it is correct, -1.0 is more than -1.999

MathFloor 跟 MathCeil 类似,但正好相反。即如果需要向下圆整一个正数,则会损失小数部分:

double a;
a=MathFloor(1.999); // a=1.0, no matter how large the fractional part is, it will be taken away
a=MathFloor(1.001); // a=1.0
a=MathFloor(-1.001); // a=-2.0, correct, because -2.0 is less than -1.001
a=MathFloor(-1.999); // a=-2.0, correct, -2.0 is less than -1.999

我们对MathRound 圆整数字的方式较为熟悉。即如果小数部分较大( 0.5 或以上),则圆整为 1。如果小数部分较小(小于 0.5),则圆整为 0,即直接忽略。示例:

double a;
a=MathRound(1.1);   // a=1.0, the fractional part is too small (0.1)
a=MathRound(1.57);  // a=2.0, the fractional part is enough to be rounded off to 1
a=MathRound(-3.1);  // a=-3.0 not enough
a=MathRound(-6.99); // a=-7.0 enough

MathMin

函数的原型:

double MathMax(double value1, double value2)
double MathMin(double value1, double value2)

这两个函数非常类似。它们接受 2 个参数,相应的返回最大值和最小值。示例:

double a;
a=MathMax(50.0,1.0);  // a=50.0
a=MathMin(10.0,12.0); // a=10.0

函数原型:

double MathPow(double base, double exponent)

该函数允许取底数的幂次方。示例:

double a;
a=MathPow(5.0,2.0);  // a=25.0, 5 to the power 2
a=MathPow(2.0,8.0);  // a=256.0, 2 to the power 8
a=MathPow(25.0,0.5); // a=5.0, you know, a number to the power 0.5 is its square root

函数原型:

double MathSqrt(double x)

使用该函数求平方根。但不要尝试求负数的平方根。这样的话,会返回零。示例:

double a;
a=MathSqrt(9.0);    // a=3.0
a=MathSqrt(25.0);   // a=5.0
a=MathSqrt(-256.0); // a=0.0, I explained

函数原型:

double MathLog(double x)

还有人记得什么是对数吗?以 b 为底 a 的对数等于以 b 为底获得 a 所需要的幂次方。 广泛使用的对数是以 e 为底(欧拉数)的自然对数(lna)和以 10 为底的常用(布氏)对数(lg a)。 关于对数的更多信息可见于:http://en.wikipedia.org/wiki/Logarithm, 因此,MathLog 用于求数字 x 的自然对数。不要对负数或零求自然对数。这种情况下,会得到 -1。使用函数的示例:

double a;
a=MathLog(10.0);  // a=2.30258509
a=MathLog(0.0);   // a=-1.0, incorrect
a=MathLog(-10.0); // a=-1.0, incorrect

函数原型:

double MathExp(double d)

该函数返回数字 e,取 d次幂。很多人一定已经忘记了这个数字。 e 是数字常数,自然对数的底,无理数和超越数。e = 2,718281828459045…有时候 e 被称为欧拉数纳皮尔数。 在微分和积分学中起着重要作用。关于欧拉数的更多信息可见于:http://en.wikipedia.org/wiki/Eulerian_number 如果指定一个非常大的度数,则会发生溢出,从而返回零。多大才会导致错误呢?为了找出答案,我们来做一个小实验:

double exponent=1.0; // here the degree value will be stored
double result=1.0;   // result, returned by the function
int i=0;             // number of cycle iterationswhile(result!=0.0)   // while the result is not equal to zero (while there is no overflowing)
{result=MathExp(exponent); // remember the resultexponent*=10.0;           // increase the degreei++;                      // the next iteration is over
}
MessageBox("i="+i); // result of the experiment

发生以下情形:每次尝试调用 MathExp 函数,以及每次循环时度数增长了 10 倍,直到最后出现溢出,返回零。我得到以下结果:i=310。这意味着你可以使用 1*10 度数对 309 的乘方运算(想一下长达 309 位的数字!!)。所以,我认为不需要担心溢出。

MathMod

函数原型:

double MathMod(double value,double value2)

该函数用来找到除法的余数。例如,5 除以 2 得 2 余 1。第一个参数value – 被除数,value2 – 除数。返回余数。示例:

double a;a=MathExp(5,2); // a=1.0
a=MathExp(10,3); // a=1.0, correct
a=MathExp(50,10); // a=0.0, divided without residue

函数的原型:

int MathRand() void MathSrand(int seed)

MathRand 返回介于 0 和 32767 范围内的伪随机整数。这里你可能会有些疑惑:“伪”是什么意思? 这个范围很奇怪,如果我需要 5 到 10 的范围怎么办?为什么非得是 32767?答案是:“伪” 意味着数字并非完全随机,而是取决于某些事情。假设,你已经编写了一个脚本,返回了 5 个伪随机数字。例如:

int a=0;while(a<5)
{MessageBox(“random=”+MathRand());a++;
}

这些数字确实是随机的,但如果你再次运行脚本,序列始终是相同的。原因在于,存在函数 MathRand 开始排斥的数字。 让我们称该数字为起始数字。为了改变它,使用另一个函数 – MathSrand。 该函数接受单个参数——起始数字,它决定所有的伪随机数。假设起始数字为一粒果实, 则随机数字就是从中生长的大树。默认的起始数字为 1。为了获得真正的随机序列,我们先要给起始数字分配唯一的值。 如何去做呢?还有一个函数 – TimeLocal,它没有参数,返回自 1970 年 1 月 1 日 00:00 起的秒数。 该函数非常适合,因为在大多数情况下我们将获得唯一的数字。是不是开始糊涂了?它看起来如下所示:

int a=0;
MathSrand(TimeLocal()); // assign a unique value to the beginning numberwhile(a<5)
{MessageBox(“random=”+MathRand());a++;
}

现在每次我们都会得到一个新的序列。让我们继续。从 0 到 32767。为什么是 32767? 原因在于:int 能够接受的最大值是 2 的 16 次方(因为在不考虑符号时,int 变量值在计算机内存中占了 16 位),即 32768,因为我们从零计数,所以需要减去 1。这样就得到 32767 。为了得到任意的必要范围,使用运算符 % – 除法中的余数。例如,如果需要得到 0 到 5 范围的随机数字:

int a=0;
MathSrand(TimeLocal());
while(a<5)
{MessageBox(“random=”+MathRand()%6);a++;
}

请注意,我们写入 MathRand()%6 而非 MathRand()%5 – 我们的范围从开始,需要加 1。现在假设我们需要得到 5 到 10 范围内的随机数字:

MessageBox(“random=”+MathRand()%6+5); // just add the necessary shift

当需要包括负数的范围时,例如 -5 到 5,方法一样。

MessageBox(“random=”+MathRand()%11-5);

如果只需要负数,将结果乘以 -1。例如,我们需要 -10 到 -20 的范围:

MessageBox(“random=”+(MathRand()%11+10)*(-1));

如果需要得到非整数,例如在 0.0 到 1.0 范围内,且精确到千分位,使用以下代码:

MessageBox(“random=”+MathRand()%1001/1000.0);

我们先创建一个 0 到 1000 范围的随机数字,然后除以 1000.0。注意,必须除以 1000.0(带一个浮点),而不是 1000(整数)。 否则会得到零,因为会被圆整。

三角函数和反三角函数

三角函数是基于角度的数学函数。它们在分析周期性过程时非常重要。与之密切相关的是反三角函数。 更多信息可见于:http://en.wikipedia.org/wiki/Trigonometric_function http://en.wikipedia.org/wiki/ArcSin在 MQL4 中,所有这些函数接受以弧度而非度数表示的参数。即,如果要求 20 度的正弦,必须先将 20 度转换为弧度。例如:

MathSin(20.0*3.14159/180.0);

即 1 度 = pi / 180。如果你经常使用三角函数,则在程序开始时声明并使用该常数较为方便。

#define PI 3.1415926535897

MathSin、MathCos、MathTan、MathArcsin、MathArccos 和 MathArctan

函数的原型:

double MathSin(double value) double MathCos(double value) double MathTan(double x) double MathArcsin(double x) double MathArccos(double x) double MathArctan(double x)

让我们对部分函数的特性深入探讨一下。MathTan 接受 -263 到 263 范围内的值,如果超过限值,数字将变为不确定。MathArcsin 和 MathArccos 接受 -1 到 1 范围内的值,否则会得到 0 和 EA 日志内的相应信息。MathArctan 如果接受 0 则返回 0。

显示信息的新函数

目前你仅知道一个显示信息的函数 – MessageBox。现在你将学习另外三个非常相似但各具特性的函数。

Alert

函数原型:

void Alert(...)

显示包含你的信号(信息)的对话框。调用该函数时,会听到特殊的信号,可以在终端设置中更改或禁用:Service -> Settings -> tab Events.窗口外观如下:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

可以更改窗口的尺寸,以便于查看大量信息。另外,可以始终查看函数的最新调用,因为他们不会被删除。还可以进行连续多次调用,将会得到具有活动的最新信号的窗口,不需要每次都点击“确定”。可以使用类似 MessageBox 的函数:

Alert(“signal type:”+signalType); Alert(“random=”+MathRand()%1001);

尽管目的不同。你应该直接列举输入的参数,用逗号分隔。即类似于上例,但使用 “,”代替“+”。我建议使用第二种。

Alert(“signal type:”,signalType); Alert(“random=”,MathRand()%1001);

Comment

函数原型:

void Comment(...)

相似的函数,用法一致,在图表左上角显示信息。这里你不需要点击任何区域即可执行代码。使用该函数以显示当前状态等。示例:

Comment(“some usefull information”);

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网 

Print

函数原型:

void Print( ...)

又一个类似的函数,在 Expert Advisor 的日志中显示信息:

Print(“processing...”);

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

另外,日志在电脑上 MetaTrader 4\experts\logs 文件夹内的相应文件(文件名称跟日期对应)中保存所有的信息:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

还应该对三个函数进行注释。无法显示数组,只能像参数一样指示。它们应该按元素逐个进行显示,例如:

for(int a=0;a<100;a++) Alert("Close[",a,"]=",Close[a]);

每个函数最多可以显示 64 个参数。每次调用 Alert 函数也会写入 Expert Advisor 日志。double 类型将显示精确到小数点后 4 位数字。

技术指标

几乎所有的 Expert Advisor 都使用技术指标。如果看一下安装文件(MACD Sample)中包含的简单 EA,可以看到它使用了技术指标。现在你将学习如何获取所有可用技术指标的值。每一个技术指标都有一个对应的函数,可以计算任何可用证券和时间范围上的数值。不必担心指标是否已在图表上打开。这无所谓。

现在让我们查看技术指标的函数的参数细节。实际上其中大多数是重复的。例如,我们要讲解的所有函数都有相似的 2 个第一参数1 个最后参数以计算技术指标的值。

  • 交易品种 – 定义应该用于计算技术指标值的金融证券(货币对)的第一个参数。即技术指标应该用于什么图表。要在当前图表上使用指标,使用常量 NULL(或 0)。此处的当前图表指的是将运行脚本(Expert Advisor,指标)的图表。如果需要另一个证券,可以使用其名称作为字符串(“EURUSD”、“GBPUSD”等等)。
  • 时间范围 – 第二个参数,定义应使用指标的时间范围。如果需要当前图表上使用的时间范围,使用 0(零)。如果需要其他时间范围,使用预定义的常量之一:
    • PERIOD_M1 – 1 分钟
    • PERIOD_M5 – 5 分钟
    • PERIOD_M15 – 15 分钟
    • PERIOD_M30 – 30 分钟
    • PERIOD_H1 – 1 小时
    • PERIOD_H4 – 4 小时
    • PERIOD_D1 – 1 天
    • PERIOD_W1 – 1 周
    • PERIOD_MN1 – 1 月
  • 偏移 – 定义应该使用指标的柱的最后一个参数。记住第一篇文章:要找到最后一根柱的收盘价,我们使用了从零开始的指数。即 Close [0] – 最后一根柱的收盘价,Close[1] – 倒数第二根柱,以此类推。该参数跟数组中的索引工作方式类似。要找到最后一根柱上的指标数值,偏移必须等于 0,倒数第二个柱为 1,以此类推。

技术指标通常用于计算多个柱上的平均值。即它们取多个柱上的不同价格(开盘价、收盘价等),使用确定的方法找到平均值。也经常使用偏移。在参数当中,可以发现以下:

  • applied_price – 定义应该使用什么价格类型以获取平均值。对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • ma_method – 定义一种用于接收平均值的方法。对于选择一种方法,有以下预定义的常量:
    • MODE_SMA – 简单移动平均线
    • MODE_EMA – 指数移动平均线
    • MODE_SMMA – 平滑移动平均线
    • MODE_LWMA – 线性加权移动平均线
  • period – 定义将使用多少柱获取平均值。
  • ma_shift – 柱内中线的偏移。如果偏移为正,则线右移。相反,如果偏移为负,则线左移。

以上描述的参数会经常出现。所以,当你看到这种参数,应该了解该函数使用平均值进行数值计算。为了了解数值究竟如何计算以及平均值到底扮演了什么角色,使用每个函数的简短描述后面的链接。还有一个重要的注意事项:所有这些指标(函数)可以分为两类:

  • 简单 – 一个指标只有一个值。例如:加速/减速(AC)指标、累积/派发(A/D)指标、DeMarker(DeM)指标等等,即指标只有一条线/一个柱形图,其数值在调用适当的函数时返回。以下是一个图表上使用多个简单指标的示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

  • 复杂 – 一个指标有多个值(线)。例如:鳄鱼指标、平均方向性运动指标(ADX)、布林带指标(BB)、指数平滑移动平均线指标(MACD)等等。此时需要指明指标应该返回什么值(线)。为此,在所有复杂指标的函数中均使用 mode 参数。使用某些常量需要指明应该返回什么。以下是一个图表上使用多个复杂指标的示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

每个函数描述配以描述性图片、使用示例(使用不同的颜色以更好的查看哪部分对应哪部分)和带有指标描述的链接(如何在交易中使用、指标的含义)。你应该熟悉指标并在实践中使用。我建议阅读本文中对函数的描述,以理解如何使用并查看示例。但为了日后记住每个参数的分配,使用 MetaEditor 中的“帮助”。使用热键 Ctrl+T 打开工具箱 窗口,前往帮助选项卡。在这里,你会发现对每个参数的描述,以及所有函数的快捷列表,可以轻松找到所需要的函数。“帮助”中的语言可以使用查看 ->语言菜单更改。之后重启 MetaEditor

加速/减速(AC)指标

加速/减速(AC)指标用于更改价格变动的速度(加速、减速)。http://ta.mql4.com/indicators/bills/acceleration_deceleration

函数原型:

double iAC(string symbol, int timeframe, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double ac;ac=iAC(0,0,0);
// acceleration of the last bar on the active chart and timeframe ac=iAC(0,0,1);
// acceleration of the last but one bar on the active chart and timeframe ac=iAC("GBPUSD",PERIOD_M30,0);
// acceleration of the last bar on the chart GBPUSD, timeframe - 30 minutes

累积/派发(A/D)指标

累积/派发(A/D)指标通过交易量计算确认价格变动。http://ta.mql4.com/indicators/volumes/accumulation_distribution 函数原型:

double iAD(string symbol, int timeframe, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double ad;ad=iAD(0,0,0);
// accumulation on the last bar on the current chart and period ad=iAD(0,0,Bars-1);
// accumulation on the first available bar, active chart and period ad=iAD("GBPUSD",PERIOD_M5,5);
// accumulation on the 6th last bar on GBPUSD, period - 5 minutes

鳄鱼指标

鳄鱼指标是三根移动平均线的组合,使用分形几何和非线性动力学。http://ta.mql4.com/indicators/bills/alligator 函数原型:

double iAlligator( string symbol, int timeframe, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int ma_method, int applied_price, int mode, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • jaw_period – 鳄鱼下颚平均周期(蓝线)
  • jaw_shift – 蓝线相对偏移量
  • teeth_period – 鳄鱼牙齿平均周期(红线)
  • teeth_shift – 红线相对偏移量
  • lips_period – 鳄鱼嘴唇平均周期(绿线)
  • lips_shift – 绿线相对偏移量
  • ma_method – 定义一种用于接收平均值的方法。对于选择一种方法,有以下预定义的常量:
    • MODE_SMA – 简单移动平均线
    • MODE_EMA – 指数移动平均线
    • MODE_SMMA – 平滑移动平均线
    • MODE_LWMA – 线性加权移动平均线
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • mode – 定义要返回的数据(下颚、牙齿或嘴唇)。对于选择使用常量之一:
    • MODE_GATORJAW – 鳄鱼的下颚线(蓝色)
    • MODE_GATORTEETH – 鳄鱼的牙齿线(红色)
    • MODE_GATORLIPS – 鳄鱼的嘴唇线(绿色)
  • shift – 定义应该使用指标的柱。

在图表上使用鳄鱼指标时,注意函数参数代表的功能。这种类比将帮助你:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

使用模式参数,定义应返回内容:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

使用示例:

double jaw;
double teeth;
double lips;jaw=iAlligator(0,0,13,8,8,5,5,3,MODE_SMA,PRICE_MEDIAN,MODE_GATORJAW,0);
// find the values of "jaws" (blue line) on the current chart and period.  
// Here simple moving average is used, price – average. Periods 
// of averaging for jaws, teeth and lips – 13, 8 and 8 accordingly. Shift: 
// 5, 5 and 3 accordingly. The value is taken for the last bar.teeth=iAlligator(EURUSD,PERIOD_H1,128,96,64,0,0,0,MODE_EMA,PRICE_TYPICAL,MODE_GATORTEETH,1);
// find the values of "teeth" (red line) on an hour chart EURUSD. 
// Exponential moving average and typical price are used. 
// Periods of averaging: 128, 96 and 64. Shift is not used. The value
// is taken for the last but one bar.lips=iAlligator(GBPUSD,PERIOD_D1,21,18,13,5,3,0,MODE_SMMA,PRICE_WEIGHTED,MODE_GATORLIPS,5);
// find the values of "lips" (green line) on a daily chart GBPUSD. 
// Uses smoothed moving average and weighted close price.
// Periods of averaging: 21, 18 and 13. Shift: 5, 3 and 0. The value 
// is taken for the 5th last bar.

平均方向性运动指标(ADX)

平均方向性运动(ADX)指标用于确定价格趋势的出现。http://ta.mql4.com/indicators/trends/average_directional_movement 函数原型:

double iADX(string symbol,int timeframe,int period,int applied_price,int mode,int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • 周期 – 柱的数量,用于得出平均值。
  • 模式 – 选择一条线,其数值将会被接收。使用以下预定义的常量:
    • MODE_MAIN – 主线
    • MODE_PLUSDI – +DI 线
    • MODE_MINUSDI – –DI 线
  • shift – 定义应该使用指标的柱。

使用 mode 参数,定义应返回的内容:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

使用示例:

double main;    // main line
double plusDi;  // line +DI
double minusDi; // line -DImain=iADX(0,0,3,PRICE_CLOSE,MODE_MAIN,0);
// find the value of the main line on the active chart and period on the last bar. 
// Uses averaging on 3 bars, uses close price.plusDi=iADX(USDCAD,PERIOD_M1,6,PRICE_OPEN,MODE_PLUSDI,1);
// find the value of line +DI on the minute chart USDCAD on the second last bar. 
// Uses averaging on 6 bars, uses open price.minusDi=iADX(AUDUSD,PERIOD_H1,10,PRICE_HIGH,MODE_MINUSDI,5);
// find the value of line -DI on the hour chart AUDUSD on the 6th last bar. 
// Uses averaging on 10 bars, uses maximal price.

平均真实波动范围指标(ATR)

平均真实波动范围(ATR)指标用于确定市场波动性。http://ta.mql4.com/indicators/oscillators/average_true_range 函数原型:

double iATR(string symbol,int timeframe,int period,int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • 周期 – 柱的数量,用于得出平均值。
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double atr;atr=iATR(0,0,15,0);
// volatility of the last bar on the active chart and period. 
// Uses 15 bars to get the mean value. atr=iATR(EURUSD,PERIOD_M15,5,1);
// volatility of the last but one bar on a 15 minute chart EURUSD. 
// Uses 5 bars to get the mean value.atr=iATR(USDCAD,PERIOD_H1,32,0);
// volatility of the last bar on an hour chart USDCAD. 
// Uses 32 bars to get the mean value.

比尔·威廉姆的动量震荡指标(AO)

比尔·威廉姆动量震荡(AO)指标用于确定市场动力。http://ta.mql4.com/indicators/bills/awesome 函数原型:

double iAO( string symbol, int timeframe, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double ao;ao=iAO(0,0,0);
// moving force of the last bar on the active chart and period ao=iAO(EURUSD,PERIOD_M5,0);
// moving force of the last bar on 5-minute chart EURUSD ao=iAO(EURAUD,PERIOD_W1,1);
// moving force of the last but one bar on a weekly chart EURAUD

熊市力量

熊市力量指标用于评估“熊市”力量的平衡。http://www.fibo-forex.ru/pages.php?page=1799 函数原型:

double iBearsPower(string symbol,int timeframe,int period,int applied_price,int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • period – 柱的数量,用于获取平均值。
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double bp;bp=iBearsPower(0,0,5,PRICE_OPEN,0);
// balance of the last bar on the active chart and period. Use 5 bars for averaging and opening prpice. bp=iBearsPower("EURUSD",PERIOD_M5,32,PRICE_CLOSE,1);
// balance of the last but one bar on 5-minute chart EURUSD. Use 32 bars for averaging and close price. bp=iBearsPower("EURGBP",PERIOD_D1,51,PRICE_MEDIAN,0);
// balance of the last bar on a daily chart EURGBP. Use 51 bars for averaging and average price.

保力加通道技术指标(BB)

保力加通道技术(BB)指标用于确定价格波动正常范围的上限和下限。http://ta.mql4.com/indicators/trends/bollinger_bands 函数原型:

double iBands( string symbol, int timeframe, int period, int deviation, int bands_shift, int applied_price, int mode, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • period – 柱的数量,用于获取平均值。
  • deviation – 与主线的偏差。
  • bands_shift – 价格偏移量。
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • mode – 选择一条线,将会找到它的值。使用以下预定义的常量:
    • MODE_UPPER – 上面线
    • MODE_LOWER – 下面线
  • shift – 定义应该使用指标的柱。

使用 mode 参数,定义应返回的内容:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

使用示例:

double bb;bb=iBands
(0,0,20,2,0,PRICE_LOW,MODE_LOWER,0);
// lower limit of the last bar on the active chart and period. 
// Use 20 bars for averaging, and the minimal price.
// Deviation from the main line is 2, shift is not used.bb=iBands("EURUSD",PERIOD_H1,13,2,3,PRICE_HIGH,MODE_UPPER,1);
// upper limit of the last but one bar on an hour chart EURUSD. 
// Use 13 bars for averaging, and the maximal price.
// Deviation from the main line is 2, shift is 3 bars. bb=iBands("EURGBP",PERIOD_D1,21,3,4,PRICE_HIGH,MODE_UPPER,0);
// upper limit of the last bar on a daily chart EURGBP. 
// Use 21 bars for averaging, and the maximal price.
// Deviation from the main line is 2, shift is 4 bars.

牛市力量

牛市力量指标用于评估“牛市”力量的平衡。http://www.forexdealer.net/help/bul_hlp.htm 函数原型:

double iBullsPower(string symbol, int timeframe, int period, int applied_price, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • period – 柱的数量,用于获取平均值。
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double bp;bp=iBullsPower(0,0,10,PRICE_CLOSE,1);
// balance of the last but one bar on the active chart and period. Use 10 bars for averaging
// and close price. bp=iBullsPower("EURGBP",PERIOD_M1,21,PRICE_HIGH,1);
// balance of the last bar on a minute chart EURGBP. Use 21 bars for averaging and the maximal price. bp=iBullsPower("EURUSD",PERIOD_H1,33,PRICE_MEDIAN,0);
// balance of the last bar on an hour chart EURUSD. Use 33 bars for averaging and the average price.

顺势指标(CCI)

顺势指标(CCI)用于测量价格偏离其平均统计价格的水平。http://ta.mql4.com/indicators/trends/commodity_channel_index 函数原型:

double iCCI( string symbol, int timeframe, int period, int applied_price, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • period – 柱的数量,用于获取平均值。
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double cci;cci=iCCI(0,0,14,PRICE_TYPICAL,0);
// index of the last bar on the active chart and period.
// Use 14 bars for finding the mean value and
// typical price. cci=("EURUSD",PERIOD_M1,21,PRICE_HIGH,1);
// index of the last but one bar on a minute chart EURUSD.
// Use 21 bars for finding the mean value and
// maximal price.cci=iCCI("EURGBP",PERIOD_D1,7,PRICE_CLOSE,0);
// index of the last bar on a daily chart EURGBP.
// Use 7 bars for finding the mean value and
// close price.

DeMarker (DeM)

DeMarker(DeM)指标是根据历史柱的价格差异预测价格拐点。http://ta.mql4.com/indicators/oscillators/DeMarker 函数原型:

double iDeMarker( string symbol, int timeframe, int period, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • period – 柱的数量,用于获取平均值。
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double dm;dm=iDeMarker(0,0,13,0);
// DeMarker value of the last bar on the current chart and period.
// Use 13 bars to find the mean value. dm=iDeMarker("EURJPY",PERIOD_H4,51,1);
// DeMarker value of the last but one bar on 4-hour chart EURJPY.
// Use 51 bars to find the mean value. dm=iDeMarker("USDCAD",PERIOD_M30,21,0);
// DeMarker value of the last bar on 30-minutes chart USDCAD.
// Use 21 bars to find the mean value.

包络线

包络线是基于两条移动平均线确定价格波动的极限值。http://ta.mql4.com/indicators/oscillators/envelopes 函数原型:

double iEnvelopes( string symbol, int timeframe, int ma_period, int ma_method, int ma_shift, int applied_price, double deviation, int mode, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • ma_period – 柱的数量,用于获取主线。
  • ma_method – 定义用于找到平均值的方法。以下预定义的常量用于选择方法:
    • MODE_SMA – 简单移动平均线
    • MODE_EMA – 指数移动平均线
    • MODE_SMMA – 平滑移动平均线
    • MODE_LWMA – 线性加权移动平均线
  • ma_shift – 柱内指标线的偏移。如果偏移为正,则指标线右移。相反,如果偏移为负,则线左移。
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • deviation – 与主线的偏差,以百分比表示。例如,如果写入 0.1,则表示 10%,0.25 则表示 25%,以此类推。
  • mode – 选择一条线,将会找到它的值。使用以下预定义的常量:
    • MODE_UPPER – 上面线
    • MODE_LOWER – 下面线
  • shift – 定义应该使用指标的柱。

使用 mode 参数,定义应返回的内容:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

使用示例:

double e;e=iEnvelopes(0,0,21,MODE_SMA,0,PRICE_CLOSE,0.05,MODE_LOWER,0);
// lower limit of the last bar on the active chart and period.
// Use 21 bars and close price for finding the value of simple moving 
// average. Shift is not used. Deviation from the main 
// line: 5%.e=iEnvelopes("EURUSD",PERIOD_H1,13,MODE_SMMA,3,PRICE_MEDIAN,0.15,MODE_UPPER,1);
// upper limit of the last but one bar on an hour chart EURUSD.
// Use 13 bars and average price for finding the value of smoothed moving 
// average. Shift: 3 bars. Deviation from the main line: 15%. e=iEnvelopes("EURAUD",PERIOD_D1,7,MODE_EMA,2,PRICE_CLOSE,0.20,MODE_LOWER,0);
// lower limit of the last bar on a daily chart EURAUD.
// Use 7 bars and close price for finding the value of exponential 
// moving average. Shift: 2 bars. Deviation from the main 
// line: 20%.

强力指数(FRC)

强力指数(FRC)指标用于测量每次上涨时的“牛市”力量以及每次下跌时的“熊市”力量。http://ta.mql4.com/indicators/oscillators/force_index 函数原型:

double iForce( string symbol, int timeframe, int period, int ma_method, int applied_price, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • period – 柱的数量,用于获取平均值。
  • ma_period – 柱的数量,用于获取主线。
  • ma_method – 定义一种用于获取平均值的方法。选择一种方法有以下预定义的常量:
    • MODE_SMA – 简单移动平均线
    • MODE_EMA – 指数移动平均线
    • MODE_SMMA – 平滑移动平均线
    • MODE_LWMA – 线性加权移动平均线
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double f;f=iForce(0,0,13,MODE_SMA,PRICE_CLOSE,0);
// force index of the last bar on the active chart and period. Period
// of averaging: 13 bars. Method of averaging: simple moving average.
// Use close price.f=iForce("EURGBP",PERIOD_M5,21,MODE_LWMA,PRICE_HIGH,1);
// force index of the last but one bar on 5-minute chart EURGBP. Period
// of averaging: 21 bars. Method of averaging: linearly-weighted moving average.
// Use maximal price. f=iForce("EURUSD",PERIOD_M1,32,MODE_SMMA,PRICE_MEDIAN,0);
// force index of the last bar on a minute chart EURUSD. Period
// of averaging: 32 bars. Method of averaging: smoothed moving average.
// Use average price.

分形指标

分形指标是比尔·威廉姆交易系统的五大指标之一,用于检测价格图的底部和顶部。分形并不出现在所有柱上。如果分形未出现在柱上,函数返回零。http://ta.mql4.com/indicators/bills/fractal 函数原型:

double iFractals( string symbol, int timeframe, int mode, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • mode – 选择一条线,将会收到它的值。会使用以下预定义的常量:
    • MODE_UPPER – 上分形
    • MODE_LOWER – 下分形
  • shift – 定义应该使用指标的柱。

使用 mode 参数,定义应返回的内容:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

使用示例:

double f;f=iFractals(0,0,MODE_UPPER,0);
// upper fractal of the last bar on the active chart and
// period.f=iFractals("USDCAD",PERIOD_M5,MODE_LOWER,1);
// lower fractal of the last but one bar on 5-minute chart
// USDCAD. f=iFractals("USDJPY",PERIOD_D1,MODE_UPPER,0);
// upper fractal of the last bar on a daily chart USDJPY.

加多摆动指标

加多摆动指标基于鳄鱼指标之上构建,用于测量平衡线的收敛或发散程度。http://ta.mql4.com/indicators/bills/gator 函数原型:

double iGator( string symbol, int timeframe, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int ma_method, int applied_price, int mode, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • jaw_period – 鳄鱼下颚平均周期(蓝线)
  • jaw_shift – 蓝线相对偏移量
  • teeth_period – 鳄鱼牙齿平均周期(红线)
  • teeth_shift – 红线相对偏移量
  • lips_period – 鳄鱼嘴唇平均周期(绿线)
  • lips_shift – 绿线相对偏移量
  • ma_method – 定义一种用于获取平均值的方法。选择一种方法有以下预定义的常量:
    • MODE_SMA – 简单移动平均线
    • MODE_EMA – 指数移动平均线
    • MODE_SMMA – 平滑移动平均线
    • MODE_LWMA – 线性加权移动平均线
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • mode – 定义要返回的数据(下颚、牙齿或嘴唇)。对于选择使用常量之一:
    • MODE_UPPER – 上柱形图
    • MODE_LOWER – 下柱形图
  • shift – 定义应该使用指标的柱。

使用 mode 参数,定义应返回的内容:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

使用示例:

double g;g=iGator(0,0,13,8,8,0,0,0,MODE_SMA,PRICE_CLOSE,MODE_UPPER,0);
// upper histogram of the last bar on the active chart and period. Periods of 
// averaging for jaw, teeth and lips accordingly: 13,8,8. Shift is not used. 
// For averaging use close price and the method of a simple moving average. g=iGator("EURGBP",PERIOD_M1,21,13,9,4,3,2,MODE_SMMA,PRICE_OPEN,MODE_LOWER,1);
// lower histogram of the last but one bar on a minute chart EURGBP. Periods of 
// averaging for jaw, teeth and lips accordingly: 21,13,9. Shifts accordingly:
// 4,3 and 2. For averaging use open price and the method of smoothed 
// moving average.g=iGator("USDCAD",PERIOD_D1,51,21,13,8,5,4,MODE_EMA,PRICE_MEDIAN,MODE_UPPER,0);
// upper histogram of the last bar on a daily chart USDCAD. Periods of
// averaging for jaw, teeth and lips accordingly: 51,21,13. Shifts accordingly: 8,5 and 4.
// For averaging use average price and the method of exponential moving average.

一目平衡表指标

一目平衡表指标用于定义趋势、支撑和阻力位,以及买卖信号。http://ta.mql4.com/indicators/oscillators/ichimoku 函数原型:

double iIchimoku( string symbol, int timeframe, int tenkan_sen, int kijun_sen, int senkou_span_b, int mode, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • tenkan_sen – 转折线平均周期。
  • kijun_sen – 基准线平均周期。
  • senkou_span_b – 先行下线平均周期。
  • mode – 定义要寻找的值。对于选择使用常量之一:
    • MODE_TENKANSEN – 转折线
    • MODE_KIJUNSEN – 基准线
    • MODE_SENKOUSPANA – 先行上线
    • MODE_SENKOUSPANB – 先行下线
    • MODE_CHINKOUSPAN – 延迟线
  • shift – 定义应该使用指标的柱。

使用 mode 参数,定义应返回的内容:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

使用示例:

double i;i=iIchimoku(0,0,13,21,53,MODE_KIJUNSEN,0);
// the value of the line Kijun-sen on the last bar on the current security and period.
// Periods for finding mean values for Tenkan Sen, Kijun Sen and Senkou Span B
// accordingly: 13,21 and 53.
 
i=iIchimoku("EURUSD",PERIOD_M5,21,53,96,MODE_TENKANSEN,1);
// the value of the line Tenkan-sen on the last but one bar on 5-minute chart EURUSD.
// Periods for finding mean values for Tenkan Sen, Kijun Sen and Senkou Span B
// accordingly: 21,53 and 96.i=iIchimoku("USDCAD",PERIOD_D1,3,5,9,MODE_CHINKOUSPAN,0);
// the value of the line Chinkou Span on the last bar on a daily chart USDCAD.
// Periods for finding mean values for Tenkan Sen, Kijun Sen and Senkou Span B
// accordingly: 3,5 and 9.

市场促进指数(BW MFI)

市场促进指数(BW MFI)指标用于测量一次价格变动的价格。http://ta.mql4.com/indicators/bills/market_facilitation_index 函数原型:

double iBWMFI( string symbol, int timeframe, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double mfi;mfi=iBWMFI(0,0,0);
// index of market facilitation of the last bar on the active chart and period. mfi=iBWMFI("EURUSD",PERIOD_H1,1);
// index of market facilitation of the last but one bar on an hour chart EURUSD. mfi=iBWMFI("EURGBP",PERIOD_D1,0);
// index of market facilitation of the last bar on a daily chart EURGBP.

动量索引指标

动量索引指标用于测量一段时期内价格的变动量。http://ta.mql4.com/indicators/oscillators/momentum 函数原型:

double iMomentum( string symbol, int timeframe, int period, int applied_price, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • period – 柱的数量,用于获取平均值。
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 开盘价格
    • PRICE_OPEN – 收盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double m;m=iMomentum(0,0,12,PRICE_CLOSE,1);
// momentum of the last but one bar on the active chart and period. Use 
// 12 bars and close price for finding a mean value. m=iMomentum("EURUSD",PERIOD_D1,21,PRICE_OPEN,0);
// momentum of the last bar on a daily chart EURUSD. Use 
// 21 bars and open price for finding a mean value. m=iMomentum("USDCAD",PERIOD_H1,7,PRICE_MEDIAN,1);
// momentum of the last but one bar on an hour chart USDCAD. Use 
// 7 bars and average price for finding a mean value.

资金流量指数(MFI)

资金流量指数(MFI)指标用于测量投资强度。http://ta.mql4.com/indicators/volumes/money_flow_index 函数原型:

double iMFI( string symbol, int timeframe, int period, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • period – 柱的数量,用于获取平均值。
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double mfi;iMFI(0,0,14,1);
// intensity of investments of the last but one bar on the current chart and period.
// Use 14 bars to find the mean value. iMFI("EURGBP",PERIOD_H4,32,0);
// intensity of investments of the last bar on 4-hour chart EURGBP.
// Use 32 bars to find the mean value. iMFI("EURUSD",PERIOD_W1,9,1);
// intensity of investments of the last but one bar on a weekly chart EURUSD.
// Use 9 bars to find the mean value.

移动平均线(MA)

移动平均线(MA)指标显示一段时期内的平均价格。http://ta.mql4.com/indicators/trends/moving_average 函数原型:

double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • period – 柱的数量,用于获取平均值。
  • ma_shift – 柱内线的偏移。如果偏移为正,则线右移。相反,如果偏移为负,则线左移。
  • ma_method – 定义一种用于获取平均值的方法。选择一种方法有以下预定义的常量:
    • MODE_SMA – 简单移动平均线
    • MODE_EMA – 指数移动平均线
    • MODE_SMMA – 平滑移动平均线
    • MODE_LWMA – 线性加权移动平均线
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double ma;ma=iMA(
0,0,13,0,MODE_SMA,PRICE_CLOSE,0);
// moving average of the last bar on the active chart and period.
// Use 13 bars and close price for finding simple moving average.
// Shift is not used. ma=iMA("GOLD",PERIOD_M15,21,6,MODE_LWMA,PRICE_LOW,1);
// moving average of the last but one bar on 15-minute chart GOLD.
// Use 21 bars and minimal price for finding linearly-weighted moving average.
// Shift: 6 bars.ma=iMA("EURCHF",PERIOD_D1,18,4,MODE_SMMA,PRICE_TYPICAL,0);
// moving average of the last bar on a daily chart EURCHF.
// Use 18 bars and typical price for finding smoothed moving average.
// Shift: 4 bars.

指数平滑移动平均线(MACD)

指数平滑移动平均线(MACD)指标用于根据两条移动平均线的关联追踪趋势。http://ta.mql4.com/indicators/oscillators/macd 函数原型:

double iMACD( string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int mode, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • fast_ema_period – 柱的数量,用于计算快速移动平均线。
  • slow_ema_period – 柱的数量,用于计算慢速移动平均线。
  • signal_period – 柱的数量,用于计算信号线。
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • mode – 定义要寻找的值。要进行选择,使用以下常量之一:
    • MODE_MAIN – 主线
    • MODE_SIGNAL – 信号线
  • shift – 定义应该使用指标的柱。

使用 mode 参数,定义应返回的内容:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

使用示例:

double ma;ma=iMACD(0,0,9,21,9,PRICE_CLOSE,MODE_MAIN,0);
// value of the main line for the last bar on the active chart and period.
// Bars, used to find mean values of a fast, slow and signal 
// moving average accordingly: 9,21 and 9. Use close price. ma=iMACD("EURUSD",PERIOD_H1,21,52,18,PRICE_HIGH,MODE_SIGNAL,1);
// value of the signal line for the last but one bar on an hour chart EURUSD.
// Bars, used to find mean values of a fast, slow and signal 
// moving average accordingly: 21,52 and 18. Use maximal price. ma=iMACD("USDCAD",PERIOD_D1,7,13,7,PRICE_MEDIAN,MODE_MAIN,1);
// value of the main line for the last but one bar on a daily chart USDCAD.
// Bars, used to find mean values of a fast, slow and signal 
// moving average accordingly: 7,13 and 7. Use average price.

移动平均震荡指标(OsMA)

移动平均震荡指标(OsMA)用于测量指数平滑移动平均线指标(MACD)的主线和信号线之间的差异。http://ta.mql4.com/indicators/oscillators/macd_oscillator 函数原型:

double iOsMA( string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • fast_ema_period – 柱的数量,用于计算快速移动平均线。
  • slow_ema_period – 柱的数量,用于计算慢速移动平均线。
  • signal_period – 柱的数量,用于计算信号线。
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double osma;osma=iOsMA(0,0,12,26,9,PRICE_CLOSE,0);
// difference of the last bar on the active chart and period. Bars, used 
// to find mean values for the fast, slow and signal 
// moving average accordingly: 12,26 and 9. Use close price. osma=iOsMA("EURUSD",PERIOD_M1,7,13,6,PRICE_OPEN,1);
// difference of the last but one bar on a minute chart EURUSD. Bars, used 
// to find mean values for the fast, slow and signal 
// moving average accordingly: 7,13 and 6. Use open price. osma=iOsMA("EURAUD",PERIOD_H1,21,48,18,PRICE_TYPICAL,0);
// difference of the last bar on an hour chart EURAUD. Bars, used 
// to find mean values for the fast, slow and signal 
// moving average accordingly: 21,48 and 18. Use typical price.

能量潮指标(OBV)

能量潮指标(OBV)将交易量跟伴随该交易量的价格变动相关联。http://ta.mql4.com/indicators/volumes/on_balance_volume 函数原型:

double iOBV( string symbol, int timeframe, int applied_price, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double obv;obv=iOBV(0,0,PRICE_OPEN,0);
// Balance volume of the last bar on the current chart and period. Use open price obv=iOBV("GBPCHF",PERIOD_M30,PRICE_CLOSE,1);
// Balance volume of the last but one bar on 30-minutes chart GBPCHF. Use close price. obv=iOBV("GBPJPY",PERIOD_H4,PRICE_MEDIAN,0);
// Balance volume of the last bar on 4-hour chart GBPJPY. Use average price.

抛物线状止损和反转指标(Parabolic SAR)

抛物线状止损和反转指标(Parabolic SAR)用于分析趋势市场和定义退出点。http://ta.mql4.com/indicators/trends/parabolic_sar 函数原型:

double iSAR( string symbol, int timeframe, double step, double maximum, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • step – 止损水平的增量,通常为 0.02。
  • maximum – 最大止损水平,通常为 0.2。
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double sar;sar=iSAR(0,0,0.02,0.2,0);
// indicator value for the last bar on the current chart and period.
// Step of stop level increment: 0.02. Maximal stop level: 0.2. sar=iSAR("EURUSD",PERIOD_M1,0.03,0.18,1);
// indicator value for the last but one bar on a minute chart EURUSD.
// Step of stop level increment: 0.03. Maximal stop level: 0.18. sar=iSAR("EURCHF",PERIOD_H1,0.01,0.15,0);
// indicator value for the last bar on an hour chart EURCHF.
// Step of stop level increment: 0.01. Maximal stop level: 0.15.

相对强弱指标(RSI)

相对强弱指标(RSI)用于预测价格拐点。http://ta.mql4.com/indicators/oscillators/relative_strength_index 函数原型:

double iRSI( string symbol, int timeframe, int period, int applied_price, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • period – 柱的数量,用于获取平均值。
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double rsi;rsi=iRSI(0,0,14,PRICE_CLOSE,0);
// indicator value for the last bar on the active chart and period. 
// Use 14 bars and close price to find the mean value. rsi=iRSI("USDCAD",PERIOD_M1,9,PRICE_OPEN,1);
// indicator value for the last but one bar on a minute chart USDCAD. 
// Use 9 bars and close price to find the mean value. rsi=iRSI("EURAUD",PERIOD_H1,25,PRICE_TYPICAL,0);
// indicator value for the last bar on an hour chart EURAUD. 
// Use 25 bars and typical price to find the mean value.

相对活力指数指标(RVI)

相对活力指数指标(RVI)用于确定买卖信号。建议结合上一个指标使用以评估不确定性。http://ta.mql4.com/indicators/oscillators/relative_vigor_index 函数原型:

double iRVI( string symbol, int timeframe, int period, int mode, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • period – 柱的数量,用于获取平均值。
  • mode – 定义要寻找的值。对于选择使用常量之一:
    • MODE_MAIN – 主线
    • MODE_SIGNAL – 信号线
  • shift – 定义应该使用指标的柱。

使用 mode 参数,定义应返回的内容:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

使用示例:

double rvi;rvi=iRVI(0,0,12,MODE_MAIN,1);
// value of the main line of the last but one bar on the active chart and period. 
// Use 12 bars to find the mean value.rvi=iRVI("EURUSD",PERIOD_D1,21,MODE_SIGNAL,0);
// value of the signal line on the last bar on a daily chart EURUSD. 
// Use 21 bars to find the mean value.rvi=iRVI("GBPJPY",PERIOD_H1,19,MODE_MAIN,1);
// value of the main line on the last but one bar on an hour chart GBPJPY. 
// Use 19 bars to find the mean value.

标准离差指标

标准离差指标用于测量市场波动性。http://ta.mql4.com/indicators/trends/standard_deviation 函数原型:

double iStdDev( string symbol, int timeframe, int ma_period, int ma_shift, int ma_method, int applied_price, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • ma_period – 柱的数量,用于获取指标线。
  • ma_shift – 柱内指标线的偏移。如果偏移为正,则线右移。相反,如果偏移为负,则线左移。
  • ma_method – 定义一种用于获取平均值的方法。选择一种方法有以下预定义的常量:
    • MODE_SMA – 简单移动平均线
    • MODE_EMA – 指数移动平均线
    • MODE_SMMA – 平滑移动平均线
    • MODE_LWMA – 线性加权移动平均线
  • applied_price – 定义要使用的价格(要进行平均的价格)对于选择使用的价格,有以下预定义的常量:
    • PRICE_CLOSE – 收盘价格
    • PRICE_OPEN – 开盘价格
    • PRICE_HIGH – 最高价格
    • PRICE_LOW – 最低价格
    • PRICE_MEDIAN – 平均价格,(最高价+最低价)/2
    • PRICE_TYPICAL – 典型价格,(最高价+最低价+收盘价)/3
    • PRICE_WEIGHTED – 加权收盘价格,(最高价+最低价+收盘价+收盘价)/4
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double sd;sd=iStdDev(0,0,10,0,MODE_SMA,PRICE_CLOSE,1);
// deviation of the last but one bar on the active chart and period. 
// Use 10 bars and close price to find simple 
// moving average. Shift is not used.sd=iStdDev("EURUSD",PERIOD_D1,21,3,MODE_SMMA,PRICE_MEDIAN,0);
// deviation of the last bar on a daily chart EURUSD. 
// Use 21 bars and average price to find smoothed 
// moving average. Shift: 3 bars.sd=iStdDev("USDCAD",PERIOD_H4,17,2,MODE_EMA,PRICE_OPEN,1);
// deviation of the last but one bar on 4-hour chart USDCAD. 
// Use 17 bars and open price to find exponential
// moving average. Shift: 2 bars.

随机震荡指标

随机震荡指标用于确定买卖信号。http://ta.mql4.com/indicators/oscillators/stochastic 函数原型:

double iStochastic( string symbol, int timeframe, int %Kperiod, int %Dperiod, int slowing, int method, int price_field, int mode, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • %K period – 柱的数量,用于生成 %K 线。
  • %D period – 柱的数量,用于生成 %D 线。
  • slowing – 滚动值。
  • method – 定义一种用于获取平均值的方法。选择一种方法有以下预定义的常量:
    • MODE_SMA – 简单移动平均线
    • MODE_EMA – 指数移动平均线
    • MODE_SMMA – 平滑移动平均线
    • MODE_LWMA – 线性加权移动平均线
  • price_field – 定义什么价格应该用于计算。价格选择有以下预定义的值:
    • 0 – 最低价/最高价
    • 1 – 收盘价/收盘价
  • mode – 定义要寻找的值。要进行选择,使用以下常量之一:
    • MODE_MAIN – 主线
    • MODE_SIGNAL– 信号线
  • shift – 定义应该使用指标的柱。

使用 mode 参数,定义应返回的内容:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

使用示例:

double s;s=iStochastic(0,0,10,6,6,MODE_SMA,0,MODE_MAIN,0);
// value of the main line for the last bar on the current chart and period. 
// Bars used to calculate lines %K, %D and slowing 
// accordingly: 10, 6 and 6. Method of averaging: simple moving average. 
// Use prices: Low/High.s=iStochastic("EURUSD",PERIOD_M1,6,3,3,MODE_SMMA,1,MODE_SIGNAL,1);
// value of the signal line for the last but one bar on a minute chart EURUSD.
// Bars used to calculate lines %K, %D and slowing 
// accordingly: 6, 3 and 3. Method of averaging: smoothed moving average. 
// Use prices: Close/Close.s=iStochastic("EURGBP",PERIOD_M5,9,7,7,MODE_EMA,0,MODE_MAIN,0);
// value of the main line for the last bar on 5-minute chart EURGBP.
// Bars used to calculate lines %K, %D and slowing 
// accordingly: 9, 7 and 7. Method of averaging: exponential moving average.
// Use prices: Low/High.

威廉指标(%R)

威廉指标(%R)用于确定市场是否超买/超卖。http://ta.mql4.com/indicators/oscillators/williams_percent 函数原型:

double iWPR( string symbol, int timeframe, int period, int shift)

参数:

  • 交易品种 – 定义应该用于技术指标值计算的金融证券(货币对)。如果你需要当前(活动)的证券(图表),则使用 NULL(或 0)。
  • 时间范围 – 定义应该使用指标的时间范围(时长)。对当前时期使用 0 或以下常量之一(PERIOD_M1、PERIOD_M5、PERIOD_M15、PERIOD_M30、PERIOD_H1、PERIOD_H4、PERIOD_D1、PERIOD_W1、PERIOD_MN1)。
  • period – 柱的数量,用于获取平均值。
  • shift – 定义应该使用指标的柱。

使用示例:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

double wpr;wpr=iWPR(0,0,14,1);
// overbought: the last but one bar on the active chart and period.
// Use 14 bars to get the mean value.wpr=iWPR("USDCHF",PERIOD_D1,9,0);
// overbought: The last bar on a daily chart USDCHF.
// Use 9 bars to get the mean value.wpr=iWPR("GBPJPY",PERIOD_H1,23,1);
// overbought: the last but one bar on an hour chart GBPJPY.
// Use 23 bars to get the mean value.

技术指标函数的正确使用

为了正确使用这些函数,你必须确切了解指标是如何工作的以及如何使用它(交易信号)。当然,它们应该用于你自己的 Expert Advisor 或指标。作为家庭作业,你应该尝试编写一个脚本,可以根据任一指标(自行选择)信号通知进场点。作为示例,我们来编写一个家庭作业示例,将基于随机震荡指标的交易信号显示进场点。我们使用以下规则进入市场:如果主线上升高于信号线,则买进。如果主线下跌低于信号线,则卖出。图片中圈出了进入点。

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

首先,我们来声明几个变量,用于存储信号值和当前以及之前柱的主线。

double mainLine;
double prevMainLine;
double signalLine;
double prevSignalLine;

现在让我们找到这几个变量的值:

mainLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
prevMainLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);
signalLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);
prevSignalLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);

可以看出,我们将自己限于最后和倒数第二个柱。现在来检查是否有买卖信号:

if(prevMainLine<prevSignalLine && mainLine>signalLine)Alert("Signal to buy");
// if the main line was under the signal one and rised over it,
// this is a signal to buyif(prevMainLine>prevSignalLine && mainLine<signalLine)Alert("Signal to sell");         
// if the main line was over the signal one and fell bellow it,
// this is a signal to sell

我们使用比较运算符逻辑运算符 &&。尝试对其适当了解。现在我们将其置入循环,检查上百个最后的柱。

for(int a=0;a<100;a++)
{mainLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_MAIN,a);prevMainLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_MAIN,a+1);signalLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,a);prevSignalLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,a+1);if(prevMainLine<prevSignalLine && mainLine>signalLine)Alert("Signal to buy");if(prevMainLine>prevSignalLine && mainLine<signalLine)Alert("Signal to sell");         
}

看到了吗?我们直接从循环添加了计数器,可以检验柱。为了简便,我们不用一百,而是声明一个常量 BARS_TO_ANALYSE,来定义要分析的最后柱的个数。以下是脚本的最终版本:

//+------------------------------------------------------------------+
//|                                        showStochasticSignals.mq4 |
//|                                    Antonuk Oleg Copyright © 2007 |
//|                                                   banderass@i.ua |
//+------------------------------------------------------------------+
#property copyright "Antonuk Oleg Copyright © 2007"
#property link      "banderass@i.ua"#define BARS_TO_ANALYSE 100//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{double mainLine;double prevMainLine;double signalLine;double prevSignalLine;for(int a=0;a<BARS_TO_ANALYSE;a++){mainLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_MAIN,a);prevMainLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_MAIN,a+1);signalLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,a);prevSignalLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,a+1);if(prevMainLine<prevSignalLine && mainLine>signalLine)Alert("Signal to buy. Time: ",TimeToStr(Time[a]));if(prevMainLine>prevSignalLine && mainLine<signalLine)Alert("Signal to sell. Time: ",TimeToStr(Time[a]));}return(0);
}

在脚本中,以下小段代码一定看起来很陌生(如果是的话,说明你一定是个成功的学生):

TimeToStr(Time[a])

该函数接受自 1970 年 1 月 1 日起的秒数,返回带有该日期的字符串。预定义数组 Time[] 返回跟应用至所选柱相同的秒数。这是一个理想的配对。作为子任务,尝试添加一个长期移动平均线(200-500 的周期),按照以下方法过滤掉不必要的信号:如果价格高于中线,则不卖。如果价格低于中线,则不买。好了,你是否完成了呢?没有?那么,再给你提供一些信息。

关于变量声明的新内容

通常我们这样声明变量:

double maxPrice;
double minPrice;
double lastPrices[100];int maxIndex;
int minIndex;
int levels[10];

不要再那样做了。而是这样做:

double maxPrice,minPrice,lastPrices[100];int maxIndex,minIndex,levels[10];

也就是说,先指示类型,然后逗号分隔变量(数组)名称。尽管我们避免了不必要的操作,其实没有区别。初始化也一样:

int value1=10,value2=12,matrix[2][2]={1,2,3,4};

返回多个值的函数

是否有这种函数?当然,你可以自己编写。让我们看看你的能耐吧。最简单的函数返回一个值:

int func()
{return(100);
}

如果我们需要同时返回多个不同类型的值,该怎么办?请看以下:

void SuperFunc(int& valueForReturn1,double& valueForReturn2,string& valueForReturn3)
{valueForReturn1=100;valueForReturn2=300.0;valueForReturn3="it works!!";
}

现在我们来试着调用“amazing”函数:

int value1=0;
double value2=0.0;
string value3="";SuperFunc(value1,value2,value3);
MessageBox("value1="+value1+" value2="+value2+" value3="+value3);

结果如下:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

该函数跟简单的函数有一个普遍的差异:当我们声明时,在参数后面放置 ampersand 字符(&)。如果对参数如此处理,可以更改它在函数内的值,且在调用后结果保持不变。这种对参数的处理被称为按引用传递参数。这样可以返回足够多的不同类型的变量。尝试忽略以上代码中的 & 字符并查看结果:

面向初学者的 MQL4 语言系列之3——技术指标和内置函数-编程知识网

注释的新类型

你知道如何对一个命令行注释:

// it is a one string comment

但有时候为了将其暂时禁用,注释一个代码块更加有用。上述方法不便于对 20-30 个字符串进行注释。这里我们可使用多行注释:

/*it is a multi-line comment.Very convenient, try it.
*/

总结

今天你学习了很多新内容。我们已经分析了数学和三角函数,以及使用技术指标运算的函数。通过简单的例子你看到了如何正确的追踪交易信号。尽管在脚本中使用它们不太方便,而且它们也并非为此而生,在后续课程你很快就会看到如何在你自己的指标和 Expert Advisor 中使用它们。那时你将看到它们是多么有用。

原文链接:https://www.mql5.com/zh/articles/1496