# 面向初学者的 MQL4 语言。技术指标和内置函数

16 三月 2016, 13:26
0
2 724

### 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)

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

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)

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)

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)

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 iterations

while(result!=0.0)   // while the result is not equal to zero (while there is no overflowing)
{
result=MathExp(exponent); // remember the result
exponent*=10.0;           // increase the degree
i++;                      // the next iteration is over
}
MessageBox("i="+i); // result of the experiment

### MathMod

double MathMod(double value,double 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++;
}

int a=0;
MathSrand(TimeLocal()); // assign a unique value to the beginning number

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

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

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

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

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

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

### 三角函数和反三角函数

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)

### Comment

void Comment(...)

Comment(“some usefull information”);

### Print

void Print( ...)

Print(“processing...”);

### 技术指标

• 交易品种 – 定义应该用于计算技术指标值的金融证券（货币对）的第一个参数。即技术指标应该用于什么图表。要在当前图表上使用指标，使用常量 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）指标等等，即指标只有一条线/一个柱形图，其数值在调用适当的函数时返回。以下是一个图表上使用多个简单指标的示例：

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

### 加速/减速（AC）指标

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 – 定义应该使用指标的柱。

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）指标

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 – 定义应该使用指标的柱。

// accumulation on the last bar on the current chart and period

// accumulation on the first available bar, active chart and period

// accumulation on the 6th last bar on GBPUSD, period - 5 minutes

### 鳄鱼指标

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 – 定义应该使用指标的柱。

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.

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 – 定义应该使用指标的柱。

double main;    // main line
double plusDi;  // line +DI
double minusDi; // line -DI

// 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.

// find the value of line +DI on the minute chart USDCAD on the second last bar.
// Uses averaging on 6 bars, uses open price.

// 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）

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 – 定义应该使用指标的柱。

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.

// volatility of the last bar on an hour chart USDCAD.
// Uses 32 bars to get the mean value.

### 比尔·威廉姆的动量震荡指标（AO）

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 – 定义应该使用指标的柱。

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

### 熊市力量

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 – 定义应该使用指标的柱。

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）

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 – 定义应该使用指标的柱。

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.

### 牛市力量

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 – 定义应该使用指标的柱。

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）

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 – 定义应该使用指标的柱。

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）

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 – 定义应该使用指标的柱。

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.

// DeMarker value of the last bar on 30-minutes chart USDCAD.
// Use 21 bars to find the mean value.

### 包络线

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 – 定义应该使用指标的柱。

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）

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 – 定义应该使用指标的柱。

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.

### 分形指标

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 – 定义应该使用指标的柱。

double f;

f=iFractals(0,0,MODE_UPPER,0);
// upper fractal of the last bar on the active chart and
// period.

// lower fractal of the last but one bar on 5-minute chart

f=iFractals("USDJPY",PERIOD_D1,MODE_UPPER,0);
// upper fractal of the last bar on a daily chart USDJPY.

### 加多摆动指标

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 – 定义应该使用指标的柱。

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.

// 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.

### 一目平衡表指标

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 – 定义应该使用指标的柱。

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.

// 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）

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 – 定义应该使用指标的柱。

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.

### 动量索引指标

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 – 定义应该使用指标的柱。

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.

// momentum of the last but one bar on an hour chart USDCAD. Use
// 7 bars and average price for finding a mean value.

### 资金流量指数（MFI）

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 – 定义应该使用指标的柱。

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）

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 – 定义应该使用指标的柱。

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）

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 – 定义应该使用指标的柱。

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.

// 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）

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 – 定义应该使用指标的柱。

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）

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 – 定义应该使用指标的柱。

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）

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 – 定义应该使用指标的柱。

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）

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 – 定义应该使用指标的柱。

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.

// 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）

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 – 定义应该使用指标的柱。

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.

### 标准离差指标

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 – 定义应该使用指标的柱。

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.

// 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.

### 随机震荡指标

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 – 定义应该使用指标的柱。

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）

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 – 定义应该使用指标的柱。

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.

### 技术指标函数的正确使用

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)
// if the main line was under the signal one and rised over it,
// this is a signal to buy

if(prevMainLine>prevSignalLine && mainLine<signalLine)
// 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)

if(prevMainLine>prevSignalLine && mainLine<signalLine)
}

//+------------------------------------------------------------------+
//|                                        showStochasticSignals.mq4 |
//|                                                   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)

if(prevMainLine>prevSignalLine && mainLine<signalLine)
}
return(0);
}

TimeToStr(Time[a])

### 关于变量声明的新内容

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!!";
}

int value1=0;
double value2=0.0;
string value3="";

SuperFunc(value1,value2,value3);
MessageBox("value1="+value1+" value2="+value2+" value3="+value3);

### 注释的新类型

// it is a one string comment

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

### 总结

superFunction.mq4 (1.14 KB)