语法 [Syntax]
代码格式
空格建、Tab键、换行键和换页符都可以成为代码排版的分隔符,你能使用各种符号来增加代码的可读性。
注释
多行注释使用 /* 作为开始到 */ 结束,在这之间不能够嵌套。单行注释使用 // 作为开始到新的一行结束,可以被嵌套到多行注释之中。
示例:
// 单行注释
/* 多行
注释 // 嵌套的单行注释
注释结束 */
标识符
标识符用来给变量、函数和数据类型进行命名,长度不能超过31个字节
你可以使用数字0-9、拉丁字母大写A-Z和小写a-z(大小写有区分的)还有下划线(_)。此外首字母不可以是数字,标识符不能和保留字冲突.
示例:
// NAME1 namel Total_5 Paper
保留字
下面列出的是固定的保留字。不能使用以下任何保留字进行命名。
数据类型
|
存储类型
|
操作符
|
其它
|
bool
|
extern
|
break
|
false
|
color
|
static
|
case
|
true
|
datetime
|
|
continue
|
|
double
|
|
default
|
|
int
|
|
else
|
|
string
|
|
for
|
|
void
|
|
if
|
|
|
|
return
|
|
|
|
switch
|
|
|
|
while
|
|
数据类型 [Data types]
数据类型概述
主要数据类型有:
- Integer (int)
- Boolean (bool)
- ëèòåðàëû (char)
- String (string)
- Floating-point number (double)
- Color (color)
- Datetime (datetime)
我们用Integer类型数据来作为DateTime和Color数据的存储。
使用以下方式可以进行类型站换:
int (bool,color,datetime);
double;
string;
Integer 类型
十进制: 数字0-9;0不能作为第一个字母
示例:
十六进制: 数字0-9;拉丁字母a-f或A-F用来表示10-15;使用0x或者0X作为开始。
示例:
0x0A, 0x12, 0X12, 0x2f, 0xA3, 0Xa3, 0X7C7
Integer 变量的取值范围为-2147483648到2147483647。
Literal 类型
任意在单引号中的字符或十六进制的任意ASCII码例如'\x10'都是被看作为一个字符,
一些字符例如单引号('),双引号("),问号(?),反斜杠(\)和一些控制符都需要在之前加一个反斜杠(\)进行转意后表示出来:
line feed NL (LF) \n
horizontal tab HT \t
carriage return CR \r
reverse slash \ \\
single quote ' \'
double quote " \"
hexadecimal ASCII-code hh \xhh
以上字符如果不经过反斜杠进行转意将不能被使用
示例:
int a = 'A';
int b = '$';
int c = '©'; // code 0xA9
int d = '\xAE'; // symbol code ®
Boolean 类型
Boolean 用来表示 是 和 否, 还可以用数字 1 和 0 进行表示。True和Flase可以忽略大小写。
示例:
bool a = true;
bool b = false;
bool c = 1;
Floating-point number 类型
浮点型变量在整数型后面加一个点(.)用来更精确的表示十进制数字。
示例:
double a = 12.111;
double b = -956.1007;
double c = 0.0001;
double d = 16;
浮点型的取值范围从 2.2e-308 到 1.8e308.
String 类型
字符串型是用来表示连续的ASCII码字符的使用连续的两个双引号来包括需要表示的内容如:"Character constant".
示例:
"This is a character string"
"Copyright symbol \t\xA9"
"this line with LF symbol \n"
"A" "1234567890" "0" "$"
Color 类型
颜色类型可以使用以下示例里的几种方式进行定义。
示例:
// symbol constants
C'128,128,128' // gray
C'0x00,0x00,0xFF' // blue
// named color
Red
Yellow
Black
// integer-valued representation
0xFFFFFF // white
16777215 // white
0x008000 // green
32768 // green
Datetime 类型
时间类型使用年、月、日、时、分、秒来进行定义,你可以使用以下示例中的方式来定义变量。
示例:
D'2004.01.01 00:00' // New Year
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12' //equal to D'1980.07.19 12:00:00'
D'01.01.2004' //equal to D'01.01.2004 00:00:00'
D'12:30:27' //equal to D'[compilation date] 12:30:27'
D'' //equal to D'[compilation date] 00:00:00'
运算符和表达式 [Operations & Expressions]
表达式
一个表达式可以拥有多个字符和操作符,一个表达式可以写在几行里面。
示例:
a++; b = 10; x = (y*z)/w;
注:分号(;)是表达式的结束符。
算术运算符
Sum of values i = j + 2;
Difference of values i = j - 3;
Changing the operation sign x = - x;
Product of values z = 3 * x;
Division quotient i = j / 5;
Division remainder minutes = time % 60;
Adding 1 to the variable value i++;
Subtracting 1 from the variable value k--;
加减1的运算符不能被嵌套在表达式中
int a=3;
a++; // 可行的表达式
int b=(a++)*3; // 不可行的表达式
赋值运算符
注:将右侧的结果赋值给左侧的变量
将x的值赋值给y y = x;
将x的值加到y上面 y += x;
在y上面减去x的值 y -= x;
得到y的x倍的值 y *= x;
得到y除以x的值 y /= x;
取y除以x后的余数 y %= x;
y向右位移x位 y >>= x;
y向左位移x位 y <<= x;
得到逻辑AND的值 y &= x;
得到逻辑OR的值 y |= x;
得到逻辑非OR的值 y ^= x;
注:一个表达式只能有一个赋值运算符.
关系运算符
用返回0(False)或1(True)来表示两个量之间的关系。
a是否等于b a == b;
a是否不等于b a != b;
a是否小于b a < b;
a是否大于b a > b;
a是否小于等于b a <= b;
a是否大于等于b a >= b;
真假运算符
否定运算符(!),用来表示真假的反面的结果。
// 如果a不是真的
if(!a)
Print("not 'a'");
逻辑运算符或(||)用来表示两个表达式只要有一个成立即可。
示例:
if(xl)
Print("out of range");
逻辑运算符和(&&)用来表示两个表达式要同时成立才行。
示例:
if(p!=x && p>y)
Print("true");
n++;
位逻辑运算符
~ 运算符对操作数执行按位求补操作。
>> 运算符对操作数执行向右位移操作。
<< 运算符对操作数执行向左位移操作。
一元 & 运算符返回操作数的地址
为整型和 bool 类型预定义了二进制 & 运算符。对于整型,& 计算操作数的按位“与”。对于 bool 操作数,& 计算操作数的逻辑“与”;也就是说,当且仅当两个操作数均为 true 时,其结果才为 true。
二进制 | 运算符是为整型和 bool 类型预定义的。对于整型,| 对操作数进行按位“或”运算。对于 bool 操作数,| 对操作数进行逻辑“或”计算,也就是说,当且仅当两个操作数均为 false 时,其结果才为 false。
为整型和 bool 类型预定义了 ^ 二进制操作数。对于整型,^ 计算操作数的按位“异或”。对于 bool 操作数,^ 计算操作数的逻辑“异或”;也就是说,当且仅当只有一个操作数为 true 时,其结果才为 true。
注:位逻辑运算符只作用于Integers类型
其它运算符
索引。定位在数组中i位置的值。
array[i] = 3;
//将3负值到array数组第i位置上
使用 x1,x2,...,xn 这样的方法将各种值传送到function中进行运算。
示例:
double SL=Ask-25*Point;
double TP=Ask+25*Point;
int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,SL,TP,
"My comment",123,0,Red);
优先级规则
下面是从上到下的运算优先规则,优先级高的将先被运算。
() Function call From left to right
[] Array element selection
! Negation From left to right
~ Bitwise negation
- Sign changing operation
* Multiplication From left to right
/ Division
% Module division
+ Addition From left to right
- Subtraction
<< Left shift From left to right
>> Right shift
< Less than From left to right
<= Less than or equals
> Greater than
>= Greater than or equals
== Equals From left to right
!= Not equal
& Bitwise AND operation From left to right
^ Bitwise exclusive OR From left to right
| Bitwise OR operation From left to right
&& Logical AND From left to right
|| Logical OR From left to right
= Assignment From right to left
+= Assignment addition
-= Assignment subtraction
*= Assignment multiplication
/= Assignment division
%= Assignment module
>>= Assignment right shift
<<= Assignment left shift
&= Assignment bitwise AND
|= Assignment bitwise OR
^= Assignment exclusive OR
, Comma From left to right
操作符 [Operators]
格式和嵌套
格式.一个操作符可以占用一行或者多行,两个或多个操作符可以占用更多的行。
嵌套.执行控制符(if, if-else, switch, while and for)可以进行任意嵌套.
复合操作符
一个复合操作符有一个(一个区段)和由一个或多个任何类型的操作符组成的的附件{}. 每个表达式使用分号作为结束(;)
示例:
if(x==0)
{
x=1; y=2; z=3;
}
表达式操作符
任何以分号(;)结束的表达式都被视为是一个操作符。
Assignment operator.标识符=表达式;
示例:
Identifier=expression;
一个操作符中只能有一个表达式。
调用函数操作符
Function_name(argument1,..., argumentN);
函数名称(参数1,...,参数N);
示例:
空操作符
只有一个分号组成(;).我们用它来表示没有任何表达式的空操作符.
停止操作符
一个break; , 我们将其放在嵌套内的指定位置,用来在指定情况下跳出循环操作.
示例:
// 从0开始搜索数组
for(i=0;i
if((array[i]==0)
break;
继续操作符
一个continue;我们将其放在嵌套内的指定位置,用来在指定情况下跳过接下来的运算,直接跳入下一次的循环。
示例:
// summary of nonzero elements of array
int func(int array[])
{
int array_size=ArraySize(array);
int sum=0;
for(int i=0;i
{
if(a[i]==0) continue;
sum+=a[i];
}
return(sum);
}
返回操作符
一个return;将需要返回的结果放在return后面的()中。
示例:
条件操作符 if
if (expression)
operator;
如果表达式为真那么执行操作。
示例:
if(a==x)
temp*=3;
temp=MathAbs(temp);
条件操作符 if-else
if (expression)
operator1
else
operator2
如果表达式为真那么执行operator1,如果为假执行operator2,else后还可以跟进多个if执行多项选择。详见示例。
示例:
if(x>1)
if(y==2)
z=5;
else
z=6;
if(x>l)
{
if(y==2) z=5;
}
else
{
z=6;
}
// 多项选择
if(x=='a')
{
y=1;
}
else if(x=='b')
{
y=2;
z=3;
}
else if(x=='c')
{
y = 4;
}
else
{
Print("ERROR");
}
选择操作符 switch
switch (expression)
{
case constant1: operators; break;
case constant2: operators; break;
...
default: operators; break;
}
当表达式expression的值等于结果之一时,执行其结果下的操作。不管结果如何都将执行default中的操作。
示例:
case 3+4: //正确的
case X+Y: //错误的
被选择的结果只可以是常数,不可为变量或表达式。
示例:
switch(x)
{
case 'A':
Print("CASE A\n");
break;
case 'B':
case 'C':
Print("CASE B or C\n");
break;
default:
Print("NOT A, B or C\n");
break;
}
循环操作符 while
while (expression)
operator;
只要表达式expression为真就执行操作operator
示例:
循环操作符 for
for (expression1; expression2; expression3)
operator;
用表达式1(expression1)来定义初始变量,当表达式2(expression2)为真的时候执行操作operator,在每次循环结束后执行表达式3(expression3)
用while可以表示为这样:
expression1;
while (expression2)
{
operator;
expression3;
};
示例:
for(x=1;x<=7;x++)
Print(MathPower(x,2));
使用for(;;)可以造成一个死循环如同while(true)一样.
表达式1和表达式3都可以内嵌多个用逗号(,)分割的表达式。
示例:
for(i=0,j=n-l;i a[i]=a[j];
函数 [Function]
函数定义
一个函数是由返回值、输入参数、内嵌操作所组成的。
示例:
double // 返回值类型
linfunc (double x, double a, double b) // 函数名和输入参数
{
// 内嵌的操作
return (a*x + b); // 返回值
}
如果没有返回值那么返回值的类型可以写为void
示例:
void errmesg(string s)
{
Print("error: "+s);
}
函数调用
function_name (x1,x2,...,xn)
示例:
int somefunc()
{
double a=linfunc(0.3, 10.5, 8);
}
double linfunc(double x, double a, double b)
{
return (a*x + b);
}
特殊函数 init()、deinit()和start()
init()在载入时调用,可以用此函数在开始自定义指标或者自动交易之前做初始化操作。
deinit()在卸载时调用,可以用此函数在去处自定义指标或者自动交易之前做初始化操作。
start()当数据变动时触发,对于自定义指标或者自动交易的编程主要依靠此函数进行。
变量 [Variables]
定义变量
定义基本类型
基本类型包括
- string - 字符串型;
- int - 整数型;
- double - 双精度浮点数型;
- bool - 布尔型
示例:
string MessageBox;
int Orders;
double SymbolPrice;
bool bLog;
定义附加类型
附加类型包括
- datetime - 时间型,使用无符号整型数字存储,是1970.1.1 0:0:0开始的秒数
- color - 颜色,使用三色的整型数字编码而成
示例:
extern datetime tBegin_Data = D'2004.01.01 00:00';
extern color cModify_Color = C'0x44,0xB9,0xE6';
定义数组类型
示例:
int a[50]; //一个一维由五十个int组成的数组
double m[7][50]; //一个两维由7x50个double组成的数组
内部变量定义
内部变量顾名思义是在内部使用的,可以理解为在当前嵌套内所使用的变量。
函数参数定义
示例:
void func(int x, double y, bool z)
{
...
}
函数的参数内的变量只能在函数内才生效,在函数外无法使用,而且在函数内对变量进行的修改在函数外无法生效。
调用函数示例:
如果有需要在变量传入由参数传入函数内操作后保留修改在函数外生效的情况的话,可以在参数定义的类型名称后加上修饰符(&)。
示例:
void func(int& x, double& y, double& z[])
{
...
}
静态变量定义
在数据类型前加上static就可以将变量定义成静态变量
示例:
全局变量定义
全局变量是指在整个程序中都能够调用的变量,只需将变量定义卸载所有嵌套之外即可。
示例:
int Global_flag;
int start()
{
...
}
附加变量定义
附加变量可以允许由用户自己输入。
示例:
extern double InputParameter1 = 1.0;
int init()
{
...
}
初始化变量
变量必须经过初始化才可以使用。
基本类型
示例:
int mt = 1; // integer 初始化
// double 初始化
double p = MarketInfo(Symbol(),MODE_POINT);
// string 初始化
string s = "hello";
数组类型
示例:
int mta[6] = {1,4,9,16,25,36};
外部函数引用
示例:
#import "user32.dll"
int MessageBoxA(int hWnd ,string szText,
string szCaption,int nType);
int SendMessageA(int hWnd,int Msg,int wParam,int lParam);
#import "lib.ex4"
double round(double value);
#import
预处理程序 [Preprocessor]
定义常数
#define identifier_value
常数可以是任何类型的,常数在程序中不可更改。
示例:
#define ABC 100
#define PI 0.314
#define COMPANY_NAME "MetaQuotes Software Corp."
编译参数定义
#property identifier_value
示例:
#property link "http://www.metaquotes.net"
#property copyright "MetaQuotes Software Corp."
#property stacksize 1024
以下是所有的参数名称:
参数名称
|
类型
|
说明
|
link
|
string
|
设置一个链接到公司网站
|
copyright
|
string
|
公司名称
|
stacksize
|
int
|
堆栈大小
|
indicator_chart_window
|
void
|
显示在走势图窗口
|
indicator_separate_window
|
void
|
显示在新区块
|
indicator_buffers
|
int
|
显示缓存最高8
|
indicator_minimum
|
int
|
图形区间最低点
|
indicator_maximum
|
int
|
图形区间最高点
|
indicator_colorN
|
color
|
第N根线的颜色,最高8根线
|
indicator_levelN
|
double
|
predefined level N for separate window custom indicator
|
show_confirm
|
void
|
当程序执行之前是否经过确认
|
show_inputs
|
void
|
before script run its property sheet appears; disables show_confirm property
|
嵌入文件
#include
示例:
#include "file_name"
示例:
引入函数或其他模块
#import "file_name"
func1();
func2();
#import
示例:
#import "user32.dll"
int MessageBoxA(int hWnd,string lpText,string lpCaption,
int uType);
int MessageBoxExA(int hWnd,string lpText,string lpCaption,
int uType,int wLanguageId);
#import "melib.ex4"
#import "gdi32.dll"
int GetDC(int hWnd);
int ReleaseDC(int hWnd,int hDC);
#import
账户信息 [Account Information]
double AccountBalance()
返回账户余额
示例:
Print("Account balance = ",AccountBalance());
double AccountCredit()返回账户信用点数
示例:
Print("Account number ", AccountCredit());
string AccountCompany()返回账户公司名
示例:
Print("Account company name ", AccountCompany());
string AccountCurrency()返回账户所用的通货名称
示例:
Print("account currency is ", AccountCurrency());
double AccountEquity()返回资产净值
示例:
Print("Account equity = ",AccountEquity());
double AccountFreeMargin()示例:
Returns free margin value of the current account.
Print("Account free margin = ",AccountFreeMargin());
int AccountLeverage()返回杠杆比率
示例:
Print("Account #",AccountNumber(), " leverage is ", AccountLeverage());
double AccountMargin()示例:
Returns margin value of the current account.
Print("Account margin ", AccountMargin());
string AccountName()返回账户名称
示例:
Print("Account name ", AccountName());
int AccountNumber()返回账户数字
示例:
Print("account number ", AccountNumber());
double AccountProfit()返回账户利润
示例:
Print("Account profit ", AccountProfit());
数组函数 [Array Functions]
int ArrayBsearch( double array[], double value, int count=WHOLE_ARRAY, int start=0, int direction=MODE_ASCEND)
搜索一个值在数组中的位置
此函数不能用在字符型或连续数字的数组上.
:: 输入参数
array[] - 需要搜索的数组
value - 将要搜索的值
count - 搜索的数量,默认搜索所有的数组
start - 搜索的开始点,默认从头开始
direction - 搜索的方向,MODE_ASCEND 顺序搜索 MODE_DESCEND 倒序搜索
示例:
datetime daytimes[];
int shift=10,dayshift;
// All the Time[] timeseries are sorted in descendant mode
ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);
if(Time[shift]>>=daytimes[0]) dayshift=0;
else
{
dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);
if(Period()
dayshift++;
}
Print(TimeToStr(Time[shift])," corresponds to ",dayshift," day bar opened at ",
TimeToStr(daytimes[dayshift]));
int ArrayCopy( object& dest[], object source[], int start_dest=0, int start_source=0, int count=WHOLE_ARRAY) 复制一个数组到另外一个数组。
只有double[], int[], datetime[], color[], 和 bool[] 这些类型的数组可以被复制。
:: 输入参数
dest[] - 目标数组
source[] - 源数组
start_dest - 从目标数组的第几位开始写入,默认为0
start_source - 从源数组的第几位开始读取,默认为0
count - 读取多少位的数组
示例:
double array1[][6];
double array2[10][6];
// fill array with some data
ArrayCopyRates(array1);
ArrayCopy(array2, array1,0,Bars-9,10);
// now array2 has first 10 bars in the history
int ArrayCopyRates( double& dest_array[], string symbol=NULL, int timeframe=0) 复制一段走势图上的数据到一个二维数组,数组的第二维只有6个项目分别是:
0 - 时间,
1 - 开盘价,
2 - 最低价,
3 - 最高价,
4 - 收盘价,
5 - 成交量.
:: 输入参数
dest_array[] - 目标数组
symbol - 标示,当前所需要的通货的标示
timeframe - 图表的时间线
示例:
double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Current bar ",TimeToStr(array1[0][0]),"Open", array1[0][1]);
int ArrayCopySeries( double& array[], int series_index, string symbol=NULL, int timeframe=0) 复制一个系列的走势图数据到数组上
注: 如果series_index是MODE_TIME, 那么第一个参数必须是日期型的数组
:: 输入参数
dest_array[] - 目标数组
series_index - 想要取的系列的名称或编号,0-5
symbol - 标示,当前所需要的通货的标示
timeframe - 图表的时间线
示例:
datetime daytimes[];
int shift=10,dayshift;
// All the Time[] timeseries are sorted in descendant mode
ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);
if(Time[shift]>=daytimes[0]) dayshift=0;
else
{
dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);
if(Period()
}
Print(TimeToStr(Time[shift])," corresponds to ",dayshift," day bar opened at ", TimeToStr(daytimes[dayshift]));
int ArrayDimension( int array[]) 返回数组的维数
:: 输入参数
array[] - 需要检查的数组
示例:
int num_array[10][5];
int dim_size;
dim_size=ArrayDimension(num_array);
// dim_size is 2
bool ArrayGetAsSeries(object array[])检查数组是否是有组织序列的数组(是否从最后到最开始排序过的),如果不是返回否
:: 输入参数
array[] - 需要检查的数组
示例:
if(ArrayGetAsSeries(array1)==true)
Print("array1 is indexed as a series array");
else
Print("array1 is indexed normally (from left to right)");
int ArrayInitialize( double& array[], double value)对数组进行初始化,返回经过初始化的数组项的个数
:: 输入参数
array[] - 需要初始化的数组
value - 新的数组项的值
示例:
//---- 把所有数组项的值设置为2.1
double myarray[10];
ArrayInitialize(myarray,2.1);
bool ArrayIsSeries( object array[]) 检查数组是否连续的(time,open,close,high,low, or volume).
:: 输入参数
array[] - 需要检查的数组
示例:
if(ArrayIsSeries(array1)==false)
ArrayInitialize(array1,0);
else
{
Print("Series array cannot be initialized!");
return(-1);
}
int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0) 找出数组中最大值的定位
:: 输入参数
array[] - 需要检查的数组
count - 搜索数组中项目的个数
start - 搜索的开始点
示例:
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
int maxValueIdx=ArrayMaximum(num_array);
Print("Max value = ", num_array[maxValueIdx]);
int ArrayMinimum( double array[], int count=WHOLE_ARRAY, int start=0) 找出数组中最小值的定位
:: 输入参数
array[] - 需要检查的数组
count - 搜索数组中项目的个数
start - 搜索的开始点
示例:
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
double minValueidx=ArrayMinimum(num_array);
Print("Min value = ", num_array[minValueIdx]);
int ArrayRange( object array[], int range_index) 取数组中指定维数中项目的数量。
:: 输入参数
array[] - 需要检查的数组
range_index - 指定的维数
示例:
int dim_size;
double num_array[10,10,10];
dim_size=ArrayRange(num_array, 1);
int ArrayResize( object& array[], int new_size) 重定义数组大小
:: 输入参数
array[] - 需要检查的数组
new_size - 第一维中数组的新大小
示例:
double array1[][4];
int element_count=ArrayResize(array, 20);
// 数组中总项目数为80
bool ArraySetAsSeries( double& array[], bool set) 设置指数数组为系列数组,数组0位的值是最后的值。返回之前的数组状态
:: 输入参数
array[] - 需要处理的数组
set - 是否是设置为系列数组,true或者false
示例:
double macd_buffer[300];
double signal_buffer[300];
int i,limit=ArraySize(macd_buffer);
ArraySetAsSeries(macd_buffer,true);
for(i=0; i
macd_buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);
for(i=0; i
signal_buffer[i]=iMAOnArray(macd_buffer,limit,9,0,MODE_SMA,i);
int ArraySize( object array[]) 返回数组的项目数
:: 输入参数
array[] - 需要处理的数组
示例:
int count=ArraySize(array1);
for(int i=0; i
{
// do some calculations.
}
int ArraySort( double& array[], int count=WHOLE_ARRAY, int start=0, int sort_dir=MODE_ASCEND) 对数组进行排序,系列数组不可进行排序
:: 输入参数
array[] - 需要处理的数组
count - 对多少个数组项进行排序
start - 排序的开始点
sort_dir - 排序方式,MODE_ASCEND顺序排列 MODE_DESCEND倒序排列
示例:
double num_array[5]={4,1,6,3,9};
// now array contains values 4,1,6,3,9
ArraySort(num_array);
// now array is sorted 1,3,4,6,9
ArraySort(num_array,MODE_DESCEND);
// now array is sorted 9,6,4,3,1
类型转换函数 [Conversion Functions]
string CharToStr( int char_code)
将字符型转换成字符串型结果返回
:: 输入参数
char_code - 字符的ACSII码
示例:
string str="WORL" + CharToStr(44); // 44 is code for 'D'
// resulting string will be WORLD
string DoubleToStr( double value, int digits)将双精度浮点型转换成字符串型结果返回
:: 输入参数
value - 浮点型数字
digits - 小数点后多少位,0-8
示例:
string value=DoubleToStr(1.28473418, 5);
// value is 1.28473
double NormalizeDouble( double value, int digits) 将双精度浮点型格式化后结果返回
:: 输入参数
value - 浮点型数字
digits - 小数点后多少位,0-8
示例:
double var1=0.123456789;
Print(NormalizeDouble(var1,5));
// output: 0.12346
double StrToDouble( string value)将字符串型转换成双精度浮点型结果返回
:: 输入参数
value - 数字的字符串
示例:
double var=StrToDouble("103.2812");
int StrToInteger( string value)将字符串型转换成整型结果返回
:: 输入参数
value - 数字的字符串
示例:
int var1=StrToInteger("1024");
datetime StrToTime( string value) 将字符串型转换成时间型结果返回,输入格式为 yyyy.mm.dd hh:mi
:: 输入参数
value - 时间的字符串
示例:
datetime var1;
var1=StrToTime("2003.8.12 17:35");
var1=StrToTime("17:35"); // returns with current date
var1=StrToTime("2003.8.12"); // returns with midnight time "00:00"
string TimeToStr( datetime value, int mode=TIME_DATE|TIME_MINUTES)将时间型转换成字符串型返回
:: 输入参数
value - 时间的数字,从1970.1.1 0:0:0 到现在的秒数
mode - 返回字符串的格式 TIME_DATE(yyyy.mm.dd),TIME_MINUTES(hh:mi),TIME_SECONDS(hh:mi:ss)
示例:
strign var1=TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS);
公用函数 [Common Functions]
void Alert( ... )
弹出一个显示信息的警告窗口
:: 输入参数
... - 任意值,如有多个可用逗号分割
示例:
if(Close[0]>SignalLevel)
Alert("Close price coming ", Close[0],"!!!");
string ClientTerminalName()返回客户终端名称
示例:
Print("Terminal name is ",ClientTerminalName());
string CompanyName()返回公司名称
示例:
Print("Company name is ",CompanyName());
void Comment( ... )显示信息在走势图左上角
:: 输入参数
... - 任意值,如有多个可用逗号分割
示例:
double free=AccountFreeMargin();
Comment("Account free margin is ",DoubleToStr(free,2),"\n","Current time is ",TimeToStr(CurTime()));
int GetLastError()取最后错误在错误中的索引位置
示例:
int err;
int handle=FileOpen("somefile.dat", FILE_READ|FILE_BIN);
if(handle<1)
{
err=GetLastError();
Print("error(",err,"): ",ErrorDescription(err));
return(0);
}
int GetTickCount()取时间标记,函数取回用毫秒标示的时间标记。
示例:
int start=GetTickCount();
// do some hard calculation...
Print("Calculation time is ", GetTickCount()-start, " milliseconds.");
void HideTestIndicators(bool hide)使用此函数设置一个在Expert Advisor的开关,在测试完成之前指标不回显示在图表上。
:: 输入参数
hide - 是否隐藏 True或者False
示例:
HideTestIndicators(true);
bool IsConnected()返回客户端是否已连接
示例:
if(!IsConnected())
{
Print("Connection is broken!");
return(0);
}
// Expert body that need opened connection
// ...
bool IsDemo()返回是否是模拟账户
示例:
if(IsDemo()) Print("I am working on demo account");
else Print("I am working on real account");
bool IsDllsAllowed()返回是否允许载入Dll文件
示例:
#import "user32.dll"
int MessageBoxA(int hWnd ,string szText, string szCaption,int nType);
...
...
if(IsDllsAllowed()==false)
{
Print("DLL call is not allowed. Experts cannot run.");
return(0);
}
// expert body that calls external DLL functions
MessageBoxA(0,"an message","Message",MB_OK);
bool IsLibrariesAllowed()返回是否允许载入库文件
示例:
#import "somelibrary.ex4"
int somefunc();
...
...
if(IsLibrariesAllowed()==false)
{
Print("Library call is not allowed. Experts cannot run.");
return(0);
}
// expert body that calls external DLL functions
somefunc();
bool IsStopped()返回是否处于停止状态
示例:
while(expr!=false)
{
if(IsStopped()==true) return(0);
// long time procesing cycle
// ...
}
bool IsTesting()返回是否处于测试模式
示例:
if(IsTesting()) Print("I am testing now");
bool IsTradeAllowed()返回是否允许交易
示例:
if(IsTradeAllowed()) Print("Trade allowed");
double MarketInfo( string symbol, int type)返回市场当前情况
:: 输入参数
symbol - 通货代码
type - 返回结果的类型
示例:
double var;
var=MarketInfo("EURUSD",MODE_BID);
int MessageBox( string text=NULL, string caption=NULL, int flags=EMPTY) 弹出消息窗口,返回消息窗口的结果
:: 输入参数
text - 窗口显示的文字
caption - 窗口上显示的标题
flags - 窗口选项开关
示例:
#include
if(ObjectCreate("text_object", OBJ_TEXT, 0, D'2004.02.20 12:30', 1.0045)==false)
{
int ret=MessageBox("ObjectCreate() fails with code "+GetLastError()+"\nContinue?", "Question", MB_YESNO|MB_ICONQUESTION);
if(ret==IDNO) return(false);
}
// continue
int Period()返回图表时间线的类型
示例:
Print("Period is ", Period());
void PlaySound( string filename)播放音乐文件
:: 输入参数
filename - 音频文件名
示例:
if(IsDemo()) PlaySound("alert.wav");
void Print( ... )将文本打印在结果窗口内
:: 输入参数
... - 任意值,复数用逗号分割
示例:
Print("Account free margin is ", AccountFreeMargin());
Print("Current time is ", TimeToStr(CurTime()));
double pi=3.141592653589793;
Print("PI number is ", DoubleToStr(pi,8));
// Output: PI number is 3.14159265
// Array printing
for(int i=0;i<10;i++)
Print(Close[i]);
bool RefreshRates()返回数据是否已经被刷新过了
示例:
int ticket;
while(true)
{
ticket=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"expert comment",255,0,CLR_NONE);
if(ticket<=0)
{
int error=GetLastError();
if(error==134) break; // not enough money
if(error==135) RefreshRates(); // prices changed
break;
}
else { OrderPrint(); break; }
//---- 10 seconds wait
Sleep(10000);
}
void SendMail( string subject, string some_text)发送邮件到指定信箱,需要到菜单 Tools -> Options -> Email 中将邮件打开.
:: 输入参数
subject - 邮件标题
some_text - 邮件内容
示例:
double lastclose=Close[0];
if(lastclose SendMail("from your expert", "Price dropped down to "+DoubleToStr(lastclose));
string ServerAddress()返回服务器地址
示例:
Print("Server address is ", ServerAddress());
void Sleep( int milliseconds)设置线程暂停时间
:: 输入参数
milliseconds - 暂停时间 1000 = 1秒
示例:
void SpeechText( string text, int lang_mode=SPEECH_ENGLISH)使用Speech进行语音输出
:: 输入参数
text - 阅读的文字
lang_mode - 语音模式 SPEECH_ENGLISH (默认的) 或 SPEECH_NATIVE
示例:
double lastclose=Close[0];
SpeechText("Price dropped down to "+DoubleToStr(lastclose));
string Symbol()返回当前当前通货的名称
示例:
int total=OrdersTotal();
for(int pos=0;pos {
// check selection result becouse order may be closed or deleted at this time!
if(OrderSelect(pos, SELECT_BY_POS)==false) continue;
if(OrderType()>OP_SELL || OrderSymbol()!=Symbol()) continue;
// do some orders processing...
}
int UninitializeReason()取得程序末初始化的理由
示例:
// this is example
int deinit()
{
switch(UninitializeReason())
{
case REASON_CHARTCLOSE:
case REASON_REMOVE: CleanUp(); break; // clean up and free all expert's resources.
case REASON_RECOMPILE:
case REASON_CHARTCHANGE:
case REASON_PARAMETERS:
case REASON_ACCOUNT: StoreData(); break; // prepare to restart
}
//...
}
自定义指标函数 [Custom Indicator Functions]
void IndicatorBuffers(int count)
设置自定义指标缓存数
:: 输入参数
count - 缓存数量
示例:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Silver
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- 2 additional buffers are used for counting.
IndicatorBuffers(3);
//---- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);
SetIndexDrawBegin(0,SignalSMA);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);
//---- 3 indicator buffers mapping
SetIndexBuffer(0,ind_buffer1);
SetIndexBuffer(1,ind_buffer2);
SetIndexBuffer(2,ind_buffer3);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//---- initialization done
return(0);
}
int IndicatorCounted()返回缓存数量
示例:
int start()
{
int limit;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- main loop
for(int i=0; i
{
//---- ma_shift set to 0 because SetIndexShift called abowe
ExtBlueBuffer[i]=iMA(NULL,0,JawsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);
ExtRedBuffer[i]=iMA(NULL,0,TeethPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);
ExtLimeBuffer[i]=iMA(NULL,0,LipsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);
}
//---- done
return(0);
}
void IndicatorDigits( int digits)设置指标精确度
:: 输入参数
digits - 小数点后的小数位数
示例:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Silver
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- 2 additional buffers are used for counting.
IndicatorBuffers(3);
//---- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);
SetIndexDrawBegin(0,SignalSMA);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);
//---- 3 indicator buffers mapping
SetIndexBuffer(0,ind_buffer1);
SetIndexBuffer(1,ind_buffer2);
SetIndexBuffer(2,ind_buffer3);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//---- initialization done
return(0);
}
void IndicatorShortName( string name)设置指标的简称
:: 输入参数
name - 新的简称
示例:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Silver
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- 2 additional buffers are used for counting.
IndicatorBuffers(3);
//---- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);
SetIndexDrawBegin(0,SignalSMA);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);
//---- 3 indicator buffers mapping
SetIndexBuffer(0,ind_buffer1);
SetIndexBuffer(1,ind_buffer2);
SetIndexBuffer(2,ind_buffer3);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//---- initialization done
return(0);
}
void SetIndexArrow( int index, int code)在指标上设置一个箭头符号
:: 输入参数
index - 第几根指标线 0-7
code - 符号的编码,参照 Wingdings 字体
示例:
bool SetIndexBuffer( int index, double array[])设置指标线的缓存数组
:: 输入参数
index - 第几根指标线 0-7
array[] - 缓存的数组
示例:
double ExtBufferSilver[];
int init()
{
SetIndexBuffer(0, ExtBufferSilver); // set buffer for first line
// ...
}
void SetIndexDrawBegin( int index, int begin)设置划线的开始点
:: 输入参数
index - 第几根指标线 0-7
begin - 划线的开始点
示例:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Silver
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- 2 additional buffers are used for counting.
IndicatorBuffers(3);
//---- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);
SetIndexDrawBegin(0,SignalSMA);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);
//---- 3 indicator buffers mapping
SetIndexBuffer(0,ind_buffer1);
SetIndexBuffer(1,ind_buffer2);
SetIndexBuffer(2,ind_buffer3);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//---- initialization done
return(0);
}
void SetIndexEmptyValue( int index, double value) 设置划线的空值,空值不划在和出现在数据窗口
:: 输入参数
index - 第几根指标线 0-7
value - 新的空值
示例:
SetIndexEmptyValue(6,0.0001);
void SetIndexLabel( int index, string text) 设置指标线的名称
:: 输入参数
index - 第几根指标线 0-7
text - 线的名称,Null不会显示在数据窗口中
示例:
//+------------------------------------------------------------------+
//| Ichimoku Kinko Hyo initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Tenkan_Buffer);
SetIndexDrawBegin(0,Tenkan-1);
SetIndexLabel(0,"Tenkan Sen");
//----
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,Kijun_Buffer);
SetIndexDrawBegin(1,Kijun-1);
SetIndexLabel(1,"Kijun Sen");
//----
a_begin=Kijun; if(a_begin SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_DOT);
SetIndexBuffer(2,SpanA_Buffer);
SetIndexDrawBegin(2,Kijun+a_begin-1);
SetIndexShift(2,Kijun);
//---- Up Kumo bounding line does not show in the DataWindow
SetIndexLabel(2,NULL);
SetIndexStyle(5,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(5,SpanA2_Buffer);
SetIndexDrawBegin(5,Kijun+a_begin-1);
SetIndexShift(5,Kijun);
SetIndexLabel(5,"Senkou Span A");
//----
SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_DOT);
SetIndexBuffer(3,SpanB_Buffer);
SetIndexDrawBegin(3,Kijun+Senkou-1);
SetIndexShift(3,Kijun);
//---- Down Kumo bounding line does not show in the DataWindow
SetIndexLabel(3,NULL);
//----
SetIndexStyle(6,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(6,SpanB2_Buffer);
SetIndexDrawBegin(6,Kijun+Senkou-1);
SetIndexShift(6,Kijun);
SetIndexLabel(6,"Senkou Span B");
//----
SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4,Chinkou_Buffer);
SetIndexShift(4,-Kijun);
SetIndexLabel(4,"Chinkou Span");
//----
return(0);
}
void SetIndexShift( int index, int shift)设置指标线的位移数
:: 输入参数
index - 第几根指标线 0-7
shift - 位移多少
示例:
//+------------------------------------------------------------------+
//| Alligator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- line shifts when drawing
SetIndexShift(0,JawsShift);
SetIndexShift(1,TeethShift);
SetIndexShift(2,LipsShift);
//---- first positions skipped when drawing
SetIndexDrawBegin(0,JawsShift+JawsPeriod);
SetIndexDrawBegin(1,TeethShift+TeethPeriod);
SetIndexDrawBegin(2,LipsShift+LipsPeriod);
//---- 3 indicator buffers mapping
SetIndexBuffer(0,ExtBlueBuffer);
SetIndexBuffer(1,ExtRedBuffer);
SetIndexBuffer(2,ExtLimeBuffer);
//---- drawing settings
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);
//---- index labels
SetIndexLabel(0,"Gator Jaws");
SetIndexLabel(1,"Gator Teeth");
SetIndexLabel(2,"Gator Lips");
//---- initialization done
return(0);
}
void SetIndexStyle( int index, int type, int style=EMPTY, int width=EMPTY, color clr=CLR_NONE) 设置指标线的样式
:: 输入参数
index - 第几根指标线 0-7
type - 线形状的种类,详见线条种类
style - 划线的样式
width - 显得宽度(1,2,3,4,5)
clr - 线的颜色
示例:
SetIndexStyle(3, DRAW_LINE, EMPTY, 2, Red);
日期时间函数 [Date & Time Functions]
datetime CurTime( )
返回当前时间
示例:
if(CurTime()-OrderOpenTime()<360) return(0);
int Day()返回当前日期
示例:
int DayOfWeek( )返回当前日期是星期几 0-星期天,1,2,3,4,5,6
示例:
// do not work on holidays.
if(DayOfWeek()==0 || DayOfWeek()==6) return(0);
int DayOfYear( )返回当前日期在年内的第几天
示例:
if(DayOfYear()==245)
return(true);
int Hour()返回当前的小时数 0-23
示例:
bool is_siesta=false;
if(Hour()>=12 || Hour()<17)
is_siesta=true;
datetime LocalTime()返回当前电脑时间
示例:
if(LocalTime()-OrderOpenTime()<360) return(0);
int Minute()返回当前分钟
示例:
if(Minute()<=15)
return("first quarter");
int Month()返回当前月份
示例:
if(Month()<=5)
return("first half of year");
int Seconds()返回当前秒数
示例:
if(Seconds()<=15)
return(0);
int TimeDay( datetime date)返回输入日期中的日期
:: 输入参数
date - 输入日期
示例:
int day=TimeDay(D'2003.12.31');
// day is 31
int TimeDayOfWeek( datetime date)返回输入日期中的日期是星期几 (0-6)
:: 输入参数
date - 输入日期
示例:
int weekday=TimeDayOfWeek(D'2004.11.2');
// day is 2 - tuesday
int TimeDayOfYear( datetime date)返回输入日期中的日期在当年中的第几天
:: 输入参数
date - 输入日期
示例:
int day=TimeDayOfYear(CurTime());
int TimeHour( datetime time)返回输入日期中的小时
:: 输入参数
date - 输入日期
示例:
int h=TimeHour(CurTime());
int TimeMinute( datetime time)返回输入日期中的分钟
:: 输入参数
date - 输入日期
示例:
int m=TimeMinute(CurTime());
int TimeMonth( datetime time)返回输入日期中的月份
:: 输入参数
date - 输入日期
示例:
int m=TimeMonth(CurTime());
int TimeSeconds( datetime time)返回输入日期中的秒钟
:: 输入参数
date - 输入日期
示例:
int m=TimeSeconds(CurTime());
int TimeYear( datetime time)返回输入日期中的年份
:: 输入参数
date - 输入日期
示例:
int y=TimeYear(CurTime());
int TimeYear( datetime time)返回当前年份
示例:
// return if date before 1 May 2002
if(Year()==2002 && Month()<5)
return(0);
文件处理函数 [File Functions]
void FileClose(int handle)
关闭正在已经打开的文件.
:: 输入参数
handle - FileOpen()返回的句柄
示例:
int handle=FileOpen("filename", FILE_CSV|FILE_READ);
if(handle>0)
{
// working with file ...
FileClose(handle);
}
void FileDelete(string filename)删除文件,如果发生错误可以通过GetLastError()来查询
注:你只能操作terminal_dir\experts\files目录下的文件
:: 输入参数
filename - 目录和文件名
示例:
// file my_table.csv will be deleted from terminal_dir\experts\files directory
int lastError;
FileDelete("my_table.csv");
lastError=GetLastError();
if(laseError!=ERR_NOERROR)
{
Print("An error ocurred while (",lastError,") deleting file my_table.csv");
return(0);
}
void FileFlush(int handle)将缓存中的数据刷新到磁盘上去
:: 输入参数
handle - FileOpen()返回的句柄
示例:
int bars_count=Bars;
int handle=FileOpen("mydat.csv",FILE_CSV|FILE_WRITE);
if(handle>0)
{
FileWrite(handle, "#","OPEN","CLOSE","HIGH","LOW");
for(int i=0;i FileWrite(handle, i+1,Open[i],Close[i],High[i], Low[i]);
FileFlush(handle);
...
for(int i=0;i FileWrite(handle, i+1,Open[i],Close[i],High[i], Low[i]);
FileClose(handle);
}
bool FileIsEnding(int handle)检查是否到了文件尾.
:: 输入参数
handle - FileOpen()返回的句柄
示例:
if(FileIsEnding(h1))
{
FileClose(h1);
return(false);
}
bool FileIsLineEnding( int handle)检查行是否到了结束
:: 输入参数
handle - FileOpen()返回的句柄
示例:
if(FileIsLineEnding(h1))
{
FileClose(h1);
return(false);
}
int FileOpen( string filename, int mode, int delimiter=';')打开文件,如果失败返回值小于1,可以通过GetLastError()获取错误
注:只能操作terminal_dir\experts\files目录的文件
:: 输入参数
filename - 目录文件名
mode - 打开模式 FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE.
delimiter - CSV型打开模式用的分割符,默认为分号(;).
示例:
int handle;
handle=FileOpen("my_data.csv",FILE_CSV|FILE_READ,';');
if(handle<1)
{
Print("File my_data.dat not found, the last error is ", GetLastError());
return(false);
}
int FileOpenHistory( string filename, int mode, int delimiter=';')打开历史数据文件,如果失败返回值小于1,可以通过GetLastError()获取错误
:: 输入参数
filename - 目录文件名
mode - 打开模式 FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE.
delimiter - CSV型打开模式用的分割符,默认为分号(;).
示例:
int handle=FileOpenHistory("USDX240.HST",FILE_BIN|FILE_WRITE);
if(handle<1)
{
Print("Cannot create file USDX240.HST");
return(false);
}
// work with file
// ...
FileClose(handle);
int FileReadArray( int handle, object& array[], int start, int count)将二进制文件读取到数组中,返回读取的条数,可以通过GetLastError()获取错误
注:在读取之前要调整好数组大小
:: 输入参数
handle - FileOpen()返回的句柄
array[] - 写入的数组
start - 在数组中存储的开始点
count - 读取多少个对象
示例:
int handle;
double varray[10];
handle=FileOpen("filename.dat", FILE_BIN|FILE_READ);
if(handle>0)
{
FileReadArray(handle, varray, 0, 10);
FileClose(handle);
}
double FileReadDouble( int handle, int size=DOUBLE_VALUE)从文件中读取浮点型数据,数字可以是8byte的double型或者是4byte的float型。
:: 输入参数
handle - FileOpen()返回的句柄
size - 数字个是大小,DOUBLE_VALUE(8 bytes) 或者 FLOAT_VALUE(4 bytes).
示例:
int handle;
double value;
handle=FileOpen("mydata.dat",FILE_BIN);
if(handle>0)
{
value=FileReadDouble(handle,DOUBLE_VALUE);
FileClose(handle);
}
int FileReadInteger( int handle, int size=LONG_VALUE)从文件中读取整形型数据,数字可以是1,2,4byte的长度
:: 输入参数
handle - FileOpen()返回的句柄
size - 数字个是大小,CHAR_VALUE(1 byte), SHORT_VALUE(2 bytes) 或者 LONG_VALUE(4 bytes).
示例:
int handle;
int value;
handle=FileOpen("mydata.dat", FILE_BIN|FILE_READ);
if(handle>0)
{
value=FileReadInteger(h1,2);
FileClose(handle);
}
double FileReadNumber( int handle)从文件中读取数字,只能在CSV里使用
:: 输入参数
handle - FileOpen()返回的句柄
示例:
int handle;
int value;
handle=FileOpen("filename.csv", FILE_CSV, ';');
if(handle>0)
{
value=FileReadNumber(handle);
FileClose(handle);
}
string FileReadString( int handle, int length=0)从文件中读取字符串
:: 输入参数
handle - FileOpen()返回的句柄
length - 读取字符串长度
示例:
int handle;
string str;
handle=FileOpen("filename.csv", FILE_CSV|FILE_READ);
if(handle>0)
{
str=FileReadString(handle);
FileClose(handle);
}
bool FileSeek( int handle, int offset, int origin)移动指针移动到某一点,如果成功返回true
:: 输入参数
handle - FileOpen()返回的句柄
offset - 设置的原点
origin - SEEK_CUR从当前位置开始 SEEK_SET从文件头部开始 SEEK_END 从文件尾部开始
示例:
int handle=FileOpen("filename.csv", FILE_CSV|FILE_READ, ';');
if(handle>0)
{
FileSeek(handle, 10, SEEK_SET);
FileReadInteger(handle);
FileClose(handle);
handle=0;
}
int FileSize( int handle)返回文件大小
:: 输入参数
handle - FileOpen()返回的句柄
示例:
int handle;
int size;
handle=FileOpen("my_table.dat", FILE_BIN|FILE_READ);
if(handle>0)
{
size=FileSize(handle);
Print("my_table.dat size is ", size, " bytes");
FileClose(handle);
}
int FileTell( int handle)返回文件读写指针当前的位置
:: 输入参数
handle - FileOpen()返回的句柄
示例:
int handle;
int pos;
handle=FileOpen("my_table.dat", FILE_BIN|FILE_READ);
// reading some data
pos=FileTell(handle);
Print("current position is ", pos);
int FileWrite( int handle, ... )向文件写入数据
:: 输入参数
handle - FileOpen()返回的句柄
... - 写入的数据
示例:
int handle;
datetime orderOpen=OrderOpenTime();
handle=FileOpen("filename", FILE_CSV|FILE_WRITE, ';');
if(handle>0)
{
FileWrite(handle, Close[0], Open[0], High[0], Low[0], TimeToStr(orderOpen));
FileClose(handle);
}
int FileWriteArray( int handle, object array[], int start, int count)向文件写入数组
:: 输入参数
handle - FileOpen()返回的句柄
array[] - 要写入的数组
start - 写入的开始点
count - 写入的项目数
示例:
int handle;
double BarOpenValues[10];
// copy first ten bars to the array
for(int i=0;i<10; i++)
BarOpenValues[i]=Open[i];
// writing array to the file
handle=FileOpen("mydata.dat", FILE_BIN|FILE_WRITE);
if(handle>0)
{
FileWriteArray(handle, BarOpenValues, 3, 7); // writing last 7 elements
FileClose(handle);
}
int FileWriteDouble( int handle, double value, int size=DOUBLE_VALUE)向文件写入浮点型数据
:: 输入参数
handle - FileOpen()返回的句柄
value - 要写入的值
size - 写入的格式,DOUBLE_VALUE (8 bytes, default)或FLOAT_VALUE (4 bytes).
示例:
int handle;
double var1=0.345;
handle=FileOpen("mydata.dat", FILE_BIN|FILE_WRITE);
if(handle<1)
{
Print("can't open file error-",GetLastError());
return(0);
}
FileWriteDouble(h1, var1, DOUBLE_VALUE);
//...
FileClose(handle);
int FileWriteInteger( int handle, int value, int size=LONG_VALUE)向文件写入整型数据
:: 输入参数
handle - FileOpen()返回的句柄
value - 要写入的值
size - 写入的格式,CHAR_VALUE (1 byte),SHORT_VALUE (2 bytes),LONG_VALUE (4 bytes, default).
示例:
int handle;
int value=10;
handle=FileOpen("filename.dat", FILE_BIN|FILE_WRITE);
if(handle<1)
{
Print("can't open file error-",GetLastError());
return(0);
}
FileWriteInteger(handle, value, SHORT_VALUE);
//...
FileClose(handle);
int FileWriteString( int handle, string value, int length)向文件写入字符串数据
:: 输入参数
handle - FileOpen()返回的句柄
value - 要写入的值
length - 写入的字符长度
示例:
int handle;
string str="some string";
handle=FileOpen("filename.bin", FILE_BIN|FILE_WRITE);
if(handle<1)
{
Print("can't open file error-",GetLastError());
return(0);
}
FileWriteString(h1, str, 8);
FileClose(handle);
全局变量函数 [Global Variables Functions]
bool GlobalVariableCheck( string name)
检查全局变量是否存在
:: 输入参数
name - 全局变量的名称
示例:
// check variable before use
if(!GlobalVariableCheck("g1"))
GlobalVariableSet("g1",1);
bool GlobalVariableDel( string name) 删除全局变量
:: 输入参数
name - 全局变量的名称
示例:
// deleting global variable with name "gvar_1"
GlobalVariableDel("gvar_1");
double GlobalVariableGet( string name)获取全局变量的值
:: 输入参数
name - 全局变量的名称
示例:
double v1=GlobalVariableGet("g1");
//---- check function call result
if(GetLastError()!=0) return(false);
//---- continue processing
double GlobalVariableGet( string name)获取全局变量的值
:: 输入参数
name - 全局变量的名称
示例:
double v1=GlobalVariableGet("g1");
//---- check function call result
if(GetLastError()!=0) return(false);
//---- continue processing
datetime GlobalVariableSet( string name, double value )设置全局变量的值
:: 输入参数
name - 全局变量的名称
value - 全局变量的值
示例:
//---- try to set new value
if(GlobalVariableSet("BarsTotal",Bars)==0)
return(false);
//---- continue processing
bool GlobalVariableSetOnCondition( string name, double value, double check_value)有条件的设置全局变量的值
:: 输入参数
name - 全局变量的名称
value - 全局变量的值
check_value - 检查变量的值
示例:
int init()
{
//---- create global variable
GlobalVariableSet("DATAFILE_SEM",0);
//...
}
int start()
{
//---- try to lock common resource
while(!IsStopped())
{
//---- locking
if(GlobalVariableSetOnCondition("DATAFILE_SEM",1,0)==true) break;
//---- may be variable deleted?
if(GetLastError()==ERR_GLOBAL_VARIABLE_NOT_FOUND) return(0);
//---- sleeping
Sleep(500);
}
//---- resource locked
// ... do some work
//---- unlock resource
GlobalVariableSet("DATAFILE_SEM",0);
}
void GlobalVariablesDeleteAll( ) 删除所有全局变量
示例:
GlobalVariablesDeleteAll();
数学运算函数 [Math & Trig]
double MathAbs( double value)
返回数字的绝对值
:: 输入参数
value - 要处理的数字
示例:
double dx=-3.141593, dy;
// calc MathAbs
dy=MathAbs(dx);
Print("The absolute value of ",dx," is ",dy);
// Output: The absolute value of -3.141593 is 3.141593
double MathArccos( double x)计算反余弦值
:: 输入参数
value - 要处理的数字,范围-1到1
示例:
double x=0.32696, y;
y=asin(x);
Print("Arcsine of ",x," = ",y);
y=acos(x);
Print("Arccosine of ",x," = ",y);
//Output: Arcsine of 0.326960=0.333085
//Output: Arccosine of 0.326960=1.237711
double MathArcsin( double x) 计算反正弦值
:: 输入参数
x - 要处理的值
示例:
double x=0.32696, y;
y=MathArcsin(x);
Print("Arcsine of ",x," = ",y);
y=acos(x);
Print("Arccosine of ",x," = ",y);
//Output: Arcsine of 0.326960=0.333085
//Output: Arccosine of 0.326960=1.237711
double MathArctan( double x)计算反正切值
:: 输入参数
x - 要处理的值
示例:
double x=-862.42, y;
y=MathArctan(x);
Print("Arctangent of ",x," is ",y);
//Output: Arctangent of -862.42 is -1.5696
double MathCeil( double x)返回向前进位后的值
:: 输入参数
x - 要处理的值
示例:
double y;
y=MathCeil(2.8);
Print("The ceil of 2.8 is ",y);
y=MathCeil(-2.8);
Print("The ceil of -2.8 is ",y);
/*Output:
The ceil of 2.8 is 3
The ceil of -2.8 is -2*/
double MathCos( double value)计算余弦值
:: 输入参数
value - 要处理的值
示例:
double pi=3.1415926535;
double x, y;
x=pi/2;
y=MathSin(x);
Print("MathSin(",x,") = ",y);
y=MathCos(x);
Print("MathCos(",x,") = ",y);
//Output: MathSin(1.5708)=1
// MathCos(1.5708)=0
double MathExp( double d)
Returns value the number e raised to the power d. On overflow, the function returns INF (infinite) and on underflow, MathExp returns 0.
:: 输入参数
d - A number specifying a power.
示例:
double x=2.302585093,y;
y=MathExp(x);
Print("MathExp(",x,") = ",y);
//Output: MathExp(2.3026)=10
double MathFloor( double x)返回向后进位后的值
:: 输入参数
x - 要处理的值
示例:
double y;
y=MathFloor(2.8);
Print("The floor of 2.8 is ",y);
y=MathFloor(-2.8);
Print("The floor of -2.8 is ",y);
/*Output:
The floor of 2.8 is 2
The floor of -2.8 is -3*/
double MathLog( double x)计算对数
:: 输入参数
x - 要处理的值
示例:
double x=9000.0,y;
y=MathLog(x);
Print("MathLog(",x,") = ", y);
//Output: MathLog(9000)=9.10498
double MathMax( double value1, double value2) 计算两个值中的最大值
:: 输入参数
value1 - 第一个值
value2 - 第二个值
示例:
double result=MathMax(1.08,Bid);
double MathMin( double value1, double value2) 计算两个值中的最小值
:: 输入参数
value1 - 第一个值
value2 - 第二个值
示例:
double result=MathMin(1.08,Ask);
double MathMod( double value, double value2) 计算两个值相除的余数
:: 输入参数
value - 被除数
value2 - 除数
示例:
double x=-10.0,y=3.0,z;
z=MathMod(x,y);
Print("The remainder of ",x," / ",y," is ",z);
//Output: The remainder of -10 / 3 is -1
double MathPow( double base, double exponent)计算指数
:: 输入参数
base - 基数
exponent - 指数
示例:
double x=2.0,y=3.0,z;
z=MathPow(x,y);
Printf(x," to the power of ",y," is ", z);
//Output: 2 to the power of 3 is 8
int MathRand( )取随机数
示例:
MathSrand(LocalTime());
// Display 10 numbers.
for(int i=0;i<10;i++ )
Print("random value ", MathRand());
double MathRound( double value) 取四舍五入的值
:: 输入参数
value - 要处理的值
示例:
double y=MathRound(2.8);
Print("The round of 2.8 is ",y);
y=MathRound(2.4);
Print("The round of -2.4 is ",y);
//Output: The round of 2.8 is 3
// The round of -2.4 is -2
double MathSin( double value)计算正弦数
:: 输入参数
value - 要处理的值
示例:
double pi=3.1415926535;
double x, y;
x=pi/2;
y=MathSin(x);
Print("MathSin(",x,") = ",y);
y=MathCos(x);
Print("MathCos(",x,") = ",y);
//Output: MathSin(1.5708)=1
// MathCos(1.5708)=0
double MathSqrt( double x)计算平方根
:: 输入参数
x - 要处理的值
示例:
double question=45.35, answer;
answer=MathSqrt(question);
if(question<0)
Print("Error: MathSqrt returns ",answer," answer");
else
Print("The square root of ",question," is ", answer);
//Output: The square root of 45.35 is 6.73
void MathSrand( int seed)通过Seed产生随机数
:: 输入参数
seed - 随机数的种子
示例:
MathSrand(LocalTime());
// Display 10 numbers.
for(int i=0;i<10;i++ )
Print("random value ", MathRand());
double MathTan( double x)计算正切值
:: 输入参数
x - 要计算的角度
示例:
double pi=3.1415926535;
double x,y;
x=MathTan(pi/4);
Print("MathTan(",pi/4," = ",x);
//Output: MathTan(0.7856)=1
物体函数 [Object Functions]
bool ObjectCreate( string name, int type, int window, datetime time1, double price1, datetime time2=0, double price2=0, datetime time3=0, double price3=0)
创建物件
:: 输入参数
name - 物件名称
type - 物件类型.
window - 物件所在窗口的索引值
time1 - 时间点1
price1 - 价格点1
time2 - 时间点2
price2 - 价格点2
time3 - 时间点3
price3 - 价格点3
示例:
// new text object
if(!ObjectCreate("text_object", OBJ_TEXT, 0, D'2004.02.20 12:30', 1.0045))
{
Print("error: can't create text_object! code #",GetLastError());
return(0);
}
// new label object
if(!ObjectCreate("label_object", OBJ_LABEL, 0, 0, 0))
{
Print("error: can't create label_object! code #",GetLastError());
return(0);
}
ObjectSet("label_object", OBJPROP_XDISTANCE, 200);
ObjectSet("label_object", OBJPROP_YDISTANCE, 100);
bool ObjectDelete( string name) 删除物件
:: 输入参数
name - 物件名称
示例:
ObjectDelete("text_object");
string ObjectDescription( string name) 返回物件描述
:: 输入参数
name - 物件名称
示例:
// writing chart's object list to the file
int handle, total;
string obj_name,fname;
// file name
fname="objlist_"+Symbol();
handle=FileOpen(fname,FILE_CSV|FILE_WRITE);
if(handle!=false)
{
total=ObjectsTotal();
for(int i=-;i {
obj_name=ObjectName(i);
FileWrite(handle,"Object "+obj_name+" description= "+ObjectDescription(obj_name));
}
FileClose(handle);
}
int ObjectFind( string name) 寻找物件,返回物件的索引值
:: 输入参数
name - 物件名称
示例:
if(ObjectFind("line_object2")!=win_idx) return(0);
double ObjectGet( string name, int index) 获取物件的值
:: 输入参数
name - 物件名称
index - 取值属性的索引
示例:
color oldColor=ObjectGet("hline12", OBJPROP_COLOR);
string ObjectGetFiboDescription( string name, int index) 取物件的斐波纳契数列地描述
:: 输入参数
name - 物件名称
index - 斐波纳契数列的等级索引
示例:
#include
...
string text;
for(int i=0;i<32;i++)
{
text=ObjectGetFiboDescription(MyObjectName,i);
//---- check. may be objects's level count less than 32
if(GetLastError()!=ERR_NO_ERROR) break;
Print(MyObjectName,"level: ",i," description: ",text);
}
int ObjectGetShiftByValue( string name, double value) 取物件的位移值
:: 输入参数
name - 物件名称
value - 价格
示例:
int shift=ObjectGetShiftByValue("MyTrendLine#123", 1.34);
double ObjectGetValueByShift( string name, int shift) 取物件位移后的值
:: 输入参数
name - 物件名称
shift - 位移数
示例:
double price=ObjectGetValueByShift("MyTrendLine#123", 11);
bool ObjectMove( string name, int point, datetime time1, double price1) 移动物件
:: 输入参数
name - 物件名称
point - 调整的索引
time1 - 新的时间
price1 - 新的价格
示例:
ObjectMove("MyTrend", 1, D'2005.02.25 12:30', 1.2345);
string ObjectName( int index) 取物件名称
:: 输入参数
index - 物件的索引
示例:
int obj_total=ObjectsTotal();
string name;
for(int i=0;i {
name=ObjectName(i);
Print(i,"Object name is " + name);
}
int ObjectsDeleteAll( int window, int type=EMPTY) 删除所有物件
:: 输入参数
window - 物件所在的窗口索引
type - 删除物件的类型
示例:
ObjectsDeleteAll(2, OBJ_HLINE); // removes all horizontal line objects from window 3 (index 2).
bool ObjectSet( string name, int index, double value) 设置物件的值
:: 输入参数
name - 物件的名称
index - 物件属性的索引值
value - 新的属性值
示例:
// moving first coord to last bar time
ObjectSet("MyTrend", OBJPROP_TIME1, Time[0]);
// setting second fibo level
ObjectSet("MyFibo", OBJPROP_FIRSTLEVEL+1, 1.234);
// setting object visibility. object will be shown only on 15 minute and 1 hour charts
ObjectSet("MyObject", OBJPROP_TIMEFRAMES, OBJ_PERIOD_M15 | OBJ_PERIOD_H1);
bool ObjectSetFiboDescription( string name, int index, string text) 设置物件斐波纳契数列的描述
:: 输入参数
name - 物件的名称
index - 物件斐波纳契数列的索引值
text - 新的描述
示例:
ObjectSetFiboDescription("MyFiboObject,2,"Second line");
bool ObjectSetText( string name, string text, int font_size, string font=NULL, color text_color=CLR_NONE) 设置物件的描述
:: 输入参数
name - 物件的名称
text - 文本
font_size - 字体大小
font - 字体名称
text_color - 字体颜色
示例:
ObjectSetText("text_object", "Hello world!", 10, "Times New Roman", Green);
void ObjectsRedraw( ) 重绘所有物件
示例:
int ObjectsTotal( ) 取物件总数
示例:
int obj_total=ObjectsTotal();
string name;
for(int i=0;i {
name=ObjectName(i);
Print(i,"Object name is for object #",i," is " + name);
}
int ObjectType( string name) 取物件类型
:: 输入参数
name - 物件的名称
示例:
if(ObjectType("line_object2")!=OBJ_HLINE) return(0);
预定义变量 [Pre-defined Variables]
double Ask
通货的买入价
示例:
if(iRSI(NULL,0,14,PRICE_CLOSE,0)<25)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"My order #2",3,D'2005.10.10 12:30',Red);
return;
}
int Bars返回图表中的柱数
示例:
int counter=1;
for(int i=1;i<=Bars;i++)
{
Print(Close[i-1]);
}
double Bid通货的卖价
示例:
if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
{
OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"My order #2",3,D'2005.10.10 12:30',Red);
return(0);
}
double Close[]返回指定索引位置的收盘价格
示例:
int handle, bars=Bars;
handle=FileOpen("file.csv",FILE_CSV|FILE_WRITE,';');
if(handle>0)
{
// write table columns headers
FileWrite(handle, "Time;Open;High;Low;Close;Volume");
// write data
for(int i=0; i
FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);
FileClose(handle);
}
int Digits返回当前通货的汇率小数位
示例:
Print(DoubleToStr(Close[i-1], Digits));
double High[]返回指定索引位置的最高价格
示例:
int handle, bars=Bars;
handle=FileOpen("file.csv", FILE_CSV|FILE_WRITE, ';');
if(handle>0)
{
// write table columns headers
FileWrite(handle, "Time;Open;High;Low;Close;Volume");
// write data
for(int i=0; i
FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);
FileClose(handle);
}
double Low[]返回指定索引位置的最低价格
示例:
int handle, bars=Bars;
handle=FileOpen("file.csv", FILE_CSV|FILE_WRITE, ";");
if(handle>0)
{
// write table columns headers
FileWrite(handle, "Time;Open;High;Low;Close;Volume");
// write data
for(int i=0; i
FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);
FileClose(handle);
}
double Open[]返回指定索引位置的开盘价格
示例:
int handle, bars=Bars;
handle=FileOpen("file.csv", FILE_CSV|FILE_WRITE, ';');
if(handle>0)
{
// write table columns headers
FileWrite(handle, "Time;Open;High;Low;Close;Volume");
// write data
for(int i=0; i
FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);
FileClose(handle);
}
double Point返回当前图表的点值
示例:
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,Red);
datetime Time[]返回指定索引位置的时间
示例:
int handle, bars=Bars;
handle=FileOpen("file.csv", FILE_CSV|FILE_WRITE, ';');
if(handle>0)
{
// write table columns headers
FileWrite(handle, "Time;Open;High;Low;Close;Volume");
// write data
for(int i=0; i
FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);
FileClose(handle);
}
double Volume[]返回指定索引位置的成交量
示例:
int handle, bars=Bars;
handle=FileOpen("file.csv", FILE_CSV|FILE_WRITE, ';');
if(handle>0)
{
// write table columns headers
FileWrite(handle, "Time;Open;High;Low;Close;Volume");
// erite data
for(int i=0; i
FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);
FileClose(handle);
)
字符串函数 [String Functions]
string StringConcatenate( ... )
字符串连接
:: 输入参数
... - 任意值,用逗号分割
示例:
string text;
text=StringConcatenate("Account free margin is ", AccountFreeMargin(), "Current time is ", TimeToStr(CurTime()));
// slow text="Account free margin is " + AccountFreeMargin() + "Current time is " + TimeToStr(CurTime())
Print(text);
int StringFind( string text, string matched_text, int start=0)在字符串中寻找符合条件的字符串返回索引位置
:: 输入参数
text - 被搜索的字符串
matched_text - 需要搜索的字符串
start - 搜索开始索引位置
示例:
string text="The quick brown dog jumps over the lazy fox";
int index=StringFind(text, "dog jumps", 0);
if(index!=16)
Print("oops!");
int StringGetChar( string text, int pos) 取字符串中的某一个字符
:: 输入参数
text - 字符串
pos - 取字符的位置
示例:
int char_code=StringGetChar("abcdefgh", 3);
// char code 'c' is 99
int StringLen( string text) 返回字符串长度
:: 输入参数
text - 字符串
示例:
string str="some text";
if(StringLen(str)<5) return(0);
string StringSetChar( string text, int pos, int value) 在字符串中设置一个字符
:: 输入参数
text - 字符串
pos - 设置字符的位置
value - 新的字符
示例:
string str="abcdefgh";
string str1=StringSetChar(str, 3, 'D');
// str1 is "abcDefgh"
string StringSubstr( string text, int start, int count=EMPTY) 从字符串中截取一段字符串
:: 输入参数
text - 字符串
start - 开始索引位置
count - 截取字符数
示例:
string text="The quick brown dog jumps over the lazy fox";
string substr=StringSubstr(text, 4, 5);
// subtracted string is "quick" word
string StringTrimLeft( string text) 字符串左侧去空格
:: 输入参数
text - 字符串
示例:
string str1=" Hello world ";
string str2=StringTrimLeft(str);
// after trimming the str2 variable will be "Hello World "
string StringTrimRight( string text)字符串右侧去空格
:: 输入参数
text - 字符串
示例:
string str1=" Hello world ";
string str2=StringTrimRight(str);
// after trimming the str2 variable will be " Hello World"
标准常量 [Standard Constants]
Applied price enumeration
价格类型枚举
示例:
Constant
|
Value
|
Description
|
PRICE_CLOSE
|
0
|
收盘价
|
PRICE_OPEN
|
1
|
开盘价
|
PRICE_HIGH
|
2
|
最高价
|
PRICE_LOW
|
3
|
最低价
|
PRICE_MEDIAN
|
4
|
最高价和最低价的平均价
|
PRICE_TYPICAL
|
5
|
最高价、最低价和收盘价的平均价
|
PRICE_WEIGHTED
|
6
|
开、收盘价和最高最低价的平均价
|
Drawing shape style enumeration画图形状样式枚举,
形状:
Constant
|
Value
|
Description
|
DRAW_LINE
|
0
|
Drawing line.
|
DRAW_SECTION
|
1
|
Drawing sections.
|
DRAW_HISTOGRAM
|
2
|
Drawing histogram.
|
DRAW_ARROW
|
3
|
Drawing arrows (symbols).
|
DRAW_NONE
|
12
|
No drawing.
|
样式:
Constant
|
Value
|
Description
|
STYLE_SOLID
|
0
|
The pen is solid.
|
STYLE_DASH
|
1
|
The pen is dashed.
|
STYLE_DOT
|
2
|
The pen is dotted.
|
STYLE_DASHDOT
|
3
|
The pen has alternating dashes and dots.
|
STYLE_DASHDOTDOT
|
4
|
The pen has alternating dashes and double dots.
|
Error codes错误代码,使用GetLastError()可返回错误代码,错误代码定义在stderror.mqh文件里,可以使用ErrorDescription()取得说明
#include
void SendMyMessage(string text)
{
int check;
SendMail("some subject", text);
check=GetLastError();
if(check!=ERR_NO_MQLERROR) Print("Cannot send message, error: ",ErrorDescription(check));
}
交易服务器返回的错误:
Constant
|
Value
|
Description
|
ERR_NO_ERROR
|
0
|
No error returned.
|
ERR_NO_RESULT
|
1
|
No error returned, but the result is unknown.
|
ERR_COMMON_ERROR
|
2
|
Common error.
|
ERR_INVALID_TRADE_PARAMETERS
|
3
|
Invalid trade parameters.
|
ERR_SERVER_BUSY
|
4
|
Trade server is busy.
|
ERR_OLD_VERSION
|
5
|
Old version of the client terminal.
|
ERR_NO_CONNECTION
|
6
|
No connection with trade server.
|
ERR_NOT_ENOUGH_RIGHTS
|
7
|
Not enough rights.
|
ERR_TOO_FREQUENT_REQUESTS
|
8
|
Too frequent requests.
|
ERR_MALFUNCTIONAL_TRADE
|
9
|
Malfunctional trade operation.
|
ERR_ACCOUNT_DISABLED
|
64
|
Account disabled.
|
ERR_INVALID_ACCOUNT
|
65
|
Invalid account.
|
ERR_TRADE_TIMEOUT
|
128
|
Trade timeout.
|
ERR_INVALID_PRICE
|
129
|
Invalid price.
|
ERR_INVALID_STOPS
|
130
|
Invalid stops.
|
ERR_INVALID_TRADE_VOLUME
|
131
|
Invalid trade volume.
|
ERR_MARKET_CLOSED
|
132
|
Market is closed.
|
ERR_TRADE_DISABLED
|
133
|
Trade is disabled.
|
ERR_NOT_ENOUGH_MONEY
|
134
|
Not enough money.
|
ERR_PRICE_CHANGED
|
135
|
Price changed.
|
ERR_OFF_QUOTES
|
136
|
Off quotes.
|
ERR_BROKER_BUSY
|
137
|
Broker is busy.
|
ERR_REQUOTE
|
138
|
Requote.
|
ERR_ORDER_LOCKED
|
139
|
Order is locked.
|
ERR_LONG_POSITIONS_ONLY_ALLOWED
|
140
|
Long positions only allowed.
|
ERR_TOO_MANY_REQUESTS
|
141
|
Too many requests.
|
ERR_TRADE_MODIFY_DENIED
|
145
|
Modification denied because order too close to market.
|
ERR_TRADE_CONTEXT_BUSY
|
146
|
Trade context is busy.
|
MT4返回的运行错误:
Constant
|
Value
|
Description
|
ERR_NO_MQLERROR
|
4000
|
No error.
|
ERR_WRONG_FUNCTION_POINTER
|
4001
|
Wrong function pointer.
|
ERR_ARRAY_INDEX_OUT_OF_RANGE
|
4002
|
Array index is out of range.
|
ERR_NO_MEMORY_FOR_FUNCTION_CALL_STACK
|
4003
|
No memory for function call stack.
|
ERR_RECURSIVE_STACK_OVERFLOW
|
4004
|
Recursive stack overflow.
|
ERR_NOT_ENOUGH_STACK_FOR_PARAMETER
|
4005
|
Not enough stack for parameter.
|
ERR_NO_MEMORY_FOR_PARAMETER_STRING
|
4006
|
No memory for parameter string.
|
ERR_NO_MEMORY_FOR_TEMP_STRING
|
4007
|
No memory for temp string.
|
ERR_NOT_INITIALIZED_STRING
|
4008
|
Not initialized string.
|
ERR_NOT_INITIALIZED_ARRAYSTRING
|
4009
|
Not initialized string in array.
|
ERR_NO_MEMORY_FOR_ARRAYSTRING
|
4010
|
No memory for array string.
|
ERR_TOO_LONG_STRING
|
4011
|
Too long string.
|
ERR_REMAINDER_FROM_ZERO_DIVIDE
|
4012
|
Remainder from zero divide.
|
ERR_ZERO_DIVIDE
|
4013
|
Zero divide.
|
ERR_UNKNOWN_COMMAND
|
4014
|
Unknown command.
|
ERR_WRONG_JUMP
|
4015
|
Wrong jump (never generated error).
|
ERR_NOT_INITIALIZED_ARRAY
|
4016
|
Not initialized array.
|
ERR_DLL_CALLS_NOT_ALLOWED
|
4017
|
DLL calls are not allowed.
|
ERR_CANNOT_LOAD_LIBRARY
|
4018
|
Cannot load library.
|
ERR_CANNOT_CALL_FUNCTION
|
4019
|
Cannot call function.
|
ERR_EXTERNAL_EXPERT_CALLS_NOT_ALLOWED
|
4020
|
Expert function calls are not allowed.
|
ERR_NOT_ENOUGH_MEMORY_FOR_RETURNED_STRING
|
4021
|
Not enough memory for temp string returned from function.
|
ERR_SYSTEM_BUSY
|
4022
|
System is busy (never generated error).
|
ERR_INVALID_FUNCTION_PARAMETERS_COUNT
|
4050
|
Invalid function parameters count.
|
ERR_INVALID_FUNCTION_PARAMETER_VALUE
|
4051
|
Invalid function parameter value.
|
ERR_STRING_FUNCTION_INTERNAL_ERROR
|
4052
|
String function internal error.
|
ERR_SOME_ARRAY_ERROR
|
4053
|
Some array error.
|
ERR_INCORRECT_SERIES_ARRAY_USING
|
4054
|
Incorrect series array using.
|
ERR_CUSTOM_INDICATOR_ERROR
|
4055
|
Custom indicator error.
|
ERR_INCOMPATIBLE_ARRAYS
|
4056
|
Arrays are incompatible.
|
ERR_GLOBAL_VARIABLES_PROCESSING_ERROR
|
4057
|
Global variables processing error.
|
ERR_GLOBAL_VARIABLE_NOT_FOUND
|
4058
|
Global variable not found.
|
ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE
|
4059
|
Function is not allowed in testing mode.
|
ERR_FUNCTION_NOT_CONFIRMED
|
4060
|
Function is not confirmed.
|
ERR_SEND_MAIL_ERROR
|
4061
|
Send mail error.
|
ERR_STRING_PARAMETER_EXPECTED
|
4062
|
String parameter expected.
|
ERR_INTEGER_PARAMETER_EXPECTED
|
4063
|
Integer parameter expected.
|
ERR_DOUBLE_PARAMETER_EXPECTED
|
4064
|
Double parameter expected.
|
ERR_ARRAY_AS_PARAMETER_EXPECTED
|
4065
|
Array as parameter expected.
|
ERR_HISTORY_WILL_UPDATED
|
4066
|
Requested history data in updating state.
|
ERR_END_OF_FILE
|
4099
|
End of file.
|
ERR_SOME_FILE_ERROR
|
4100
|
Some file error.
|
ERR_WRONG_FILE_NAME
|
4101
|
Wrong file name.
|
ERR_TOO_MANY_OPENED_FILES
|
4102
|
Too many opened files.
|
ERR_CANNOT_OPEN_FILE
|
4103
|
Cannot open file.
|
ERR_INCOMPATIBLE_ACCESS_TO_FILE
|
4104
|
Incompatible access to a file.
|
ERR_NO_ORDER_SELECTED
|
4105
|
No order selected.
|
ERR_UNKNOWN_SYMBOL
|
4106
|
Unknown symbol.
|
ERR_INVALID_PRICE_PARAM
|
4107
|
Invalid price.
|
ERR_INVALID_TICKET
|
4108
|
Invalid ticket.
|
ERR_TRADE_NOT_ALLOWED
|
4109
|
Trade is not allowed.
|
ERR_LONGS__NOT_ALLOWED
|
4110
|
Longs are not allowed.
|
ERR_SHORTS_NOT_ALLOWED
|
4111
|
Shorts are not allowed.
|
ERR_OBJECT_ALREADY_EXISTS
|
4200
|
Object exists already.
|
ERR_UNKNOWN_OBJECT_PROPERTY
|
4201
|
Unknown object property.
|
ERR_OBJECT_DOES_NOT_EXIST
|
4202
|
Object does not exist.
|
ERR_UNKNOWN_OBJECT_TYPE
|
4203
|
Unknown object type.
|
ERR_NO_OBJECT_NAME
|
4204
|
No object name.
|
ERR_OBJECT_COORDINATES_ERROR
|
4205
|
Object coordinates error.
|
ERR_NO_SPECIFIED_SUBWINDOW
|
4206
|
No specified subwindow.
|
Ichimoku Kinko Hyo modes enumeration指标模式枚举
Ichimoku
Constant
|
Value
|
Description
|
MODE_TENKANSEN
|
1
|
Tenkan-sen.
|
MODE_KIJUNSEN
|
2
|
Kijun-sen.
|
MODE_SENKOUSPANA
|
3
|
Senkou Span A.
|
MODE_SENKOUSPANB
|
4
|
Senkou Span B.
|
MODE_CHINKOUSPAN
|
5
|
Chinkou Span.
|
Indicators line identifiers指标线标示符
指标线模式,使用在 iMACD(), iRVI() 和 iStochastic() 中:
Constant
|
Value
|
Description
|
MODE_MAIN
|
0
|
Base indicator line.
|
MODE_SIGNAL
|
1
|
Signal line.
|
指标线模式,使用在 iADX() 中:
Constant
|
Value
|
Description
|
MODE_MAIN
|
0
|
Base indicator line.
|
MODE_PLUSDI
|
1
|
+DI indicator line.
|
MODE_MINUSDI
|
2
|
-DI indicator line.
|
指标线模式,使用在 iBands(), iEnvelopes(), iEnvelopesOnArray(), iFractals() and iGator() 中:
Constant
|
Value
|
Description
|
MODE_UPPER
|
1
|
Upper line.
|
MODE_LOWER
|
2
|
Lower line.
|
Market information identifiers市场信息标识
Constant
|
Value
|
Description
|
MODE_LOW
|
1
|
Low day price.
|
MODE_HIGH
|
2
|
High day price.
|
MODE_TIME
|
5
|
The last incoming quotation time.
|
MODE_BID
|
9
|
Last incoming bid price.
|
MODE_ASK
|
10
|
Last incoming ask price.
|
MODE_POINT
|
11
|
Point size.
|
MODE_DIGITS
|
12
|
Digits after decimal point.
|
MODE_SPREAD
|
13
|
Spread value in points.
|
MODE_STOPLEVEL
|
14
|
Stop level in points.
|
MODE_LOTSIZE
|
15
|
Lot size in the base currency.
|
MODE_TICKVALUE
|
16
|
Tick value.
|
MODE_TICKSIZE
|
17
|
Tick size.
|
MODE_SWAPLONG
|
18
|
Swap of the long position.
|
MODE_SWAPSHORT
|
19
|
Swap of the short position.
|
MODE_STARTING
|
20
|
Market starting date (usually used for future markets).
|
MODE_EXPIRATION
|
21
|
Market expiration date (usually used for future markets).
|
MODE_TRADEALLOWED
|
22
|
Trade is allowed for the symbol.
|
MessageBox return codes消息窗口返回值
Constant
|
Value
|
Description
|
IDOK
|
1
|
OK button was selected.
|
IDCANCEL
|
2
|
Cancel button was selected.
|
IDABORT
|
3
|
Abort button was selected.
|
IDRETRY
|
4
|
Retry button was selected.
|
IDIGNORE
|
5
|
Ignore button was selected.
|
IDYES
|
6
|
Yes button was selected.
|
IDNO
|
7
|
No button was selected.
|
IDTRYAGAIN
|
10
|
Try Again button was selected.
|
IDCONTINUE
|
11
|
Continue button was selected.
|
MessageBox behavior flags消息窗口行为代码
消息窗口显示的按钮种类:
Constant
|
Value
|
Description
|
MB_OK
|
0x00000000
|
The message box contains one push button: OK. This is the default.
|
MB_OKCANCEL
|
0x00000001
|
The message box contains two push buttons: OK and Cancel.
|
MB_ABORTRETRYIGNORE
|
0x00000002
|
The message box contains three push buttons: Abort, Retry, and Ignore.
|
MB_YESNOCANCEL
|
0x00000003
|
The message box contains three push buttons: Yes, No, and Cancel.
|
MB_YESNO
|
0x00000004
|
The message box contains two push buttons: Yes and No.
|
MB_RETRYCANCEL
|
0x00000005
|
The message box contains two push buttons: Retry and Cancel.
|
MB_CANCELTRYCONTINUE
|
0x00000006
|
Windows 2000: The message box contains three push buttons: Cancel, Try Again, Continue. Use this message box type instead of MB_ABORTRETRYIGNORE.
|
消息窗口显示图标的类型:
Constant
|
Value
|
Description
|
MB_ICONSTOP, MB_IC***, MB_ICONHAND
|
0x00000010
|
A stop-sign icon appears in the message box.
|
MB_ICONQUESTION
|
0x00000020
|
A question-mark icon appears in the message box.
|
MB_ICONEXCLAMATION, MB_ICONWARNING
|
0x00000030
|
An exclamation-point icon appears in the message box.
|
MB_ICONINFORMATION, MB_ICONASTERISK
|
0x00000040
|
An icon consisting of a lowercase letter i in a circle appears in the message box.
|
消息窗口默认按钮设置:
Constant
|
Value
|
Description
|
MB_DEFBUTTON1
|
0x00000000
|
The first button is the default button. MB_DEFBUTTON1 is the default unless MB_DEFBUTTON2, MB_DEFBUTTON3, or MB_DEFBUTTON4 is specified.
|
MB_DEFBUTTON2
|
0x00000100
|
The second button is the default button.
|
MB_DEFBUTTON3
|
0x00000200
|
The third button is the default button.
|
MB_DEFBUTTON4
|
0x00000300
|
The fourth button is the default button.
|
Moving Average method enumeration移动平均线模式枚举,iAlligator(), iEnvelopes(), iEnvelopesOnArray, iForce(), iGator(), iMA(), iMAOnArray(), iStdDev(), iStdDevOnArray(), iStochastic()这些会调用此枚举
Constant
|
Value
|
Description
|
MODE_SMA
|
0
|
Simple moving average,
|
MODE_EMA
|
1
|
Exponential moving average,
|
MODE_SMMA
|
2
|
Smoothed moving average,
|
MODE_LWMA
|
3
|
Linear weighted moving average.
|
Object properties enumeration物件属性枚举
Constant
|
Value
|
Description
|
OBJPROP_TIME1
|
0
|
Datetime value to set/get first coordinate time part.
|
OBJPROP_PRICE1
|
1
|
Double value to set/get first coordinate price part.
|
OBJPROP_TIME2
|
2
|
Datetime value to set/get second coordinate time part.
|
OBJPROP_PRICE2
|
3
|
Double value to set/get second coordinate price part.
|
OBJPROP_TIME3
|
4
|
Datetime value to set/get third coordinate time part.
|
OBJPROP_PRICE3
|
5
|
Double value to set/get third coordinate price part.
|
OBJPROP_COLOR
|
6
|
Color value to set/get object color.
|
OBJPROP_STYLE
|
7
|
Value is one of STYLE_SOLID, STYLE_DASH, STYLE_DOT, STYLE_DASHDOT, STYLE_DASHDOTDOT constants to set/get object line style.
|
OBJPROP_WIDTH
|
8
|
Integer value to set/get object line width. Can be from 1 to 5.
|
OBJPROP_BACK
|
9
|
Boolean value to set/get background drawing flag for object.
|
OBJPROP_RAY
|
10
|
Boolean value to set/get ray flag of object.
|
OBJPROP_ELLIPSE
|
11
|
Boolean value to set/get ellipse flag for fibo arcs.
|
OBJPROP_SCALE
|
12
|
Double value to set/get scale object property.
|
OBJPROP_ANGLE
|
13
|
Double value to set/get angle object property in degrees.
|
OBJPROP_ARROWCODE
|
14
|
Integer value or
arrow enumeration to set/get arrow code object property.
|
OBJPROP_TIMEFRAMES
|
15
|
Value can be one or combination (bitwise addition) of
object visibility constants to set/get timeframe object property.
|
OBJPROP_DEVIATION
|
16
|
Double value to set/get deviation property for Standard deviation objects.
|
OBJPROP_FONTSIZE
|
100
|
Integer value to set/get font size for text objects.
|
OBJPROP_CORNER
|
101
|
Integer value to set/get anchor corner property for label objects. Must be from 0-3.
|
OBJPROP_XDISTANCE
|
102
|
Integer value to set/get anchor X distance object property in pixels.
|
OBJPROP_YDISTANCE
|
103
|
Integer value is to set/get anchor Y distance object property in pixels.
|
OBJPROP_FIBOLEVELS
|
200
|
Integer value to set/get Fibonacci object level count. Can be from 0 to 32.
|
OBJPROP_FIRSTLEVEL+ n
|
210
|
Fibonacci object level index, where n is level index to set/get. Can be from 0 to 31.
|
Object type enumeration物件类型枚举
Constant
|
Value
|
Description
|
OBJ_VLINE
|
0
|
Vertical line. Uses time part of first coordinate.
|
OBJ_HLINE
|
1
|
Horizontal line. Uses price part of first coordinate.
|
OBJ_TREND
|
2
|
Trend line. Uses 2 coordinates.
|
OBJ_TRENDBYANGLE
|
3
|
Trend by angle. Uses 1 coordinate. To set angle of line use
ObjectSet() function.
|
OBJ_REGRESSION
|
4
|
Regression. Uses time parts of first two coordinates.
|
OBJ_CHANNEL
|
5
|
Channel. Uses 3 coordinates.
|
OBJ_STDDEVCHANNEL
|
6
|
Standard deviation channel. Uses time parts of first two coordinates.
|
OBJ_GANNLINE
|
7
|
Gann line. Uses 2 coordinate, but price part of second coordinate ignored.
|
OBJ_GANNFAN
|
8
|
Gann fan. Uses 2 coordinate, but price part of second coordinate ignored.
|
OBJ_GANNGRID
|
9
|
Gann grid. Uses 2 coordinate, but price part of second coordinate ignored.
|
OBJ_FIBO
|
10
|
Fibonacci retracement. Uses 2 coordinates.
|
OBJ_FIBOTIMES
|
11
|
Fibonacci time zones. Uses 2 coordinates.
|
OBJ_FIBOFAN
|
12
|
Fibonacci fan. Uses 2 coordinates.
|
OBJ_FIBOARC
|
13
|
Fibonacci arcs. Uses 2 coordinates.
|
OBJ_EXPANSION
|
14
|
Fibonacci expansions. Uses 3 coordinates.
|
OBJ_FIBOCHANNEL
|
15
|
Fibonacci channel. Uses 3 coordinates.
|
OBJ_RECTANGLE
|
16
|
Rectangle. Uses 2 coordinates.
|
OBJ_TRIANGLE
|
17
|
Triangle. Uses 3 coordinates.
|
OBJ_ELLIPSE
|
18
|
Ellipse. Uses 2 coordinates.
|
OBJ_PITCHFORK
|
19
|
Andrews pitchfork. Uses 3 coordinates.
|
OBJ_CYCLES
|
20
|
Cycles. Uses 2 coordinates.
|
OBJ_TEXT
|
21
|
Text. Uses 1 coordinate.
|
OBJ_ARROW
|
22
|
Arrows. Uses 1 coordinate.
|
OBJ_LABEL
|
23
|
Text label. Uses 1 coordinate in pixels.
|
Object visibility enumeration物件显示枚举
Constant
|
Value
|
Description
|
OBJ_PERIOD_M1
|
0x0001
|
Object shown is only on 1-minute charts.
|
OBJ_PERIOD_M5
|
0x0002
|
Object shown is only on 5-minute charts.
|
OBJ_PERIOD_M15
|
0x0004
|
Object shown is only on 15-minute charts.
|
OBJ_PERIOD_M30
|
0x0008
|
Object shown is only on 30-minute charts.
|
OBJ_PERIOD_H1
|
0x0010
|
Object shown is only on 1-hour charts.
|
OBJ_PERIOD_H4
|
0x0020
|
Object shown is only on 4-hour charts.
|
OBJ_PERIOD_D1
|
0x0040
|
Object shown is only on daily charts.
|
OBJ_PERIOD_W1
|
0x0080
|
Object shown is only on weekly charts.
|
OBJ_PERIOD_MN1
|
0x0100
|
Object shown is only on monthly charts.
|
OBJ_ALL_PERIODS
|
0x01FF
|
Object shown is on all timeframes.
|
NULL
|
0
|
Object shown is on all timeframes.
|
EMPTY
|
-1
|
Hidden object on all timeframes.
|
Predefined Arrow codes enumeration预定义箭头代码枚举
Constant
|
Value
|
Description
|
SYMBOL_THUMBSUP
|
67
|
Thumb up symbol ( C ).
|
SYMBOL_THUMBSDOWN
|
68
|
Thumb down symbol ( D ).
|
SYMBOL_ARROWUP
|
241
|
Arrow up symbol ( ñ ).
|
SYMBOL_ARROWDOWN
|
242
|
Arrow down symbol ( ò ).
|
SYMBOL_STOPSIGN
|
251
|
Stop sign symbol ( û ).
|
SYMBOL_CHECKSIGN
|
252
|
Check sign symbol ( ü ).
|
Constant
|
Value
|
Description
|
|
1
|
Upwards arrow with tip rightwards ( ? ).
|
|
2
|
Downwards arrow with tip rightwards ( ? ).
|
|
3
|
Left pointing triangle ( ? ).
|
|
4
|
En Dash symbol (–).
|
SYMBOL_LEFTPRICE
|
5
|
Left sided price label.
|
SYMBOL_RIGHTPRICE
|
6
|
Right sided price label.
|
Series array identifier系列数组标识符
Constant
|
Value
|
Description
|
MODE_OPEN
|
0
|
Open price.
|
MODE_LOW
|
1
|
Low price.
|
MODE_HIGH
|
2
|
High price.
|
MODE_CLOSE
|
3
|
Close price.
|
MODE_VOLUME
|
4
|
Volume, used in Lowest() and Highest() functions.
|
MODE_TIME
|
5
|
Bar open time, used in ArrayCopySeries() function.
|
Special constants特殊常量
Constant
|
Value
|
Description
|
NULL
|
0
|
Indicates empty state of the string.
|
EMPTY
|
-1
|
Indicates empty state of the parameter.
|
EMPTY_VALUE
|
0x7FFFFFFF
|
Default custom indicator empty value.
|
CLR_NONE
|
0xFFFFFFFF
|
Indicates empty state of colors.
|
WHOLE_ARRAY
|
0
|
Used with array functions. Indicates that all array elements will be processed.
|
Time frame enumeration特殊常量
Constant
|
Value
|
Description
|
PERIOD_M1
|
1
|
1 minute.
|
PERIOD_M5
|
5
|
5 minutes.
|
PERIOD_M15
|
15
|
15 minutes.
|
PERIOD_M30
|
30
|
30 minutes.
|
PERIOD_H1
|
60
|
1 hour.
|
PERIOD_H4
|
240
|
4 hour.
|
PERIOD_D1
|
1440
|
Daily.
|
PERIOD_W1
|
10080
|
Weekly.
|
PERIOD_MN1
|
43200
|
Monthly.
|
0 (zero)
|
0
|
Time frame used on the chart.
|
Trade operation enumeration交易类型
Constant
|
Value
|
Description
|
OP_BUY
|
0
|
Buying position.
|
OP_SELL
|
1
|
Selling position.
|
OP_BUYLIMIT
|
2
|
Buy limit pending position.
|
OP_SELLLIMIT
|
3
|
Sell limit pending position.
|
OP_BUYSTOP
|
4
|
Buy stop pending position.
|
OP_SELLSTOP
|
5
|
Sell stop pending position.
|
Uninitialize reason codes末初始化理由代码
Constant
|
Value
|
Description
|
REASON_REMOVE
|
1
|
Expert removed from chart.
|
REASON_RECOMPILE
|
2
|
Expert recompiled.
|
REASON_CHARTCHANGE
|
3
|
symbol or timeframe changed on the chart.
|
REASON_CHARTCLOSE
|
4
|
Chart closed.
|
REASON_PARAMETERS
|
5
|
Inputs parameters was changed by user.
|
REASON_ACCOUNT
|
6
|
Other account activated.
|
Wingdings symbols图形符号代码
|
32
|
!
|
33
|
"
|
34
|
#
|
35
|
$
|
36
|
%
|
37
|
&
|
38
|
'
|
39
|
(
|
40
|
)
|
41
|
*
|
42
|
+
|
43
|
,
|
44
|
-
|
45
|
.
|
46
|
/
|
47
|
0
|
48
|
1
|
49
|
2
|
50
|
3
|
51
|
4
|
52
|
5
|
53
|
6
|
54
|
7
|
55
|
8
|
56
|
9
|
57
|
:
|
58
|
;
|
59
|
<
|
60
|
=
|
61
|
>
|
62
|
?
|
63
|
@
|
64
|
A
|
65
|
B
|
66
|
C
|
67
|
D
|
68
|
E
|
69
|
F
|
70
|
G
|
71
|
H
|
72
|
I
|
73
|
J
|
74
|
K
|
75
|
L
|
76
|
M
|
77
|
N
|
78
|
O
|
79
|
P
|
80
|
Q
|
81
|
R
|
82
|
S
|
83
|
T
|
84
|
U
|
85
|
V
|
86
|
W
|
87
|
X
|
88
|
Y
|
89
|
Z
|
90
|
[
|
91
|
\
|
92
|
]
|
93
|
^
|
94
|
_
|
95
|
`
|
96
|
a
|
97
|
b
|
98
|
c
|
99
|
d
|
100
|
e
|
101
|
f
|
102
|
g
|
103
|
h
|
104
|
i
|
105
|
j
|
106
|
k
|
107
|
l
|
108
|
m
|
109
|
n
|
110
|
o
|
111
|
p
|
112
|
q
|
113
|
r
|
114
|
s
|
115
|
t
|
116
|
u
|
117
|
v
|
118
|
w
|
119
|
x
|
120
|
y
|
121
|
z
|
122
|
{
|
123
|
|
|
124
|
}
|
125
|
~
|
126
|
|
127
|
?
|
128
|
?
|
129
|
?
|
130
|
?
|
131
|
?
|
132
|
?
|
133
|
?
|
134
|
?
|
135
|
?
|
136
|
?
|
137
|
?
|
138
|
?
|
139
|
?
|
140
|
?
|
141
|
?
|
142
|
?
|
143
|
?
|
144
|
?
|
145
|
'
|
146
|
?
|
147
|
?
|
148
|
?
|
149
|
?
|
150
|
?
|
151
|
?
|
152
|
?
|
153
|
?
|
154
|
?
|
155
|
?
|
156
|
?
|
157
|
?
|
158
|
?
|
159
|
|
160
|
¡
|
161
|
¢
|
162
|
£
|
163
|
¤
|
164
|
¥
|
165
|
¦
|
166
|
§
|
167
|
¨
|
168
|
©
|
169
|
ª
|
170
|
«
|
171
|
¬
|
172
|
|
173
|
®
|
174
|
¯
|
175
|
°
|
176
|
±
|
177
|
²
|
178
|
³
|
179
|
´
|
180
|
µ
|
181
|
¶
|
182
|
·
|
183
|
¸
|
184
|
¹
|
185
|
º
|
186
|
»
|
187
|
¼
|
188
|
½
|
189
|
¾
|
190
|
¿
|
191
|
À
|
192
|
Á
|
193
|
Â
|
194
|
Ã
|
195
|
Ä
|
196
|
Å
|
197
|
Æ
|
198
|
Ç
|
199
|
È
|
200
|
É
|
201
|
Ê
|
202
|
Ë
|
203
|
Ì
|
204
|
Í
|
205
|
Î
|
206
|
Ï
|
207
|
Ð
|
208
|
Ñ
|
209
|
Ò
|
210
|
Ó
|
211
|
Ô
|
212
|
Õ
|
213
|
Ö
|
214
|
×
|
215
|
Ø
|
216
|
Ù
|
217
|
Ú
|
218
|
Û
|
219
|
Ü
|
220
|
Ý
|
221
|
Þ
|
222
|
ß
|
223
|
à
|
224
|
á
|
225
|
â
|
226
|
ã
|
227
|
ä
|
228
|
å
|
229
|
æ
|
230
|
ç
|
231
|
è
|
232
|
é
|
233
|
ê
|
234
|
ë
|
235
|
ì
|
236
|
í
|
237
|
î
|
238
|
ï
|
239
|
ð
|
240
|
ñ
|
241
|
ò
|
242
|
ó
|
243
|
ô
|
244
|
õ
|
245
|
ö
|
246
|
÷
|
247
|
ø
|
248
|
ù
|
249
|
ú
|
250
|
û
|
251
|
ü
|
252
|
ý
|
253
|
þ
|
254
|
ÿ
|
255
|
Web colors table颜色表
Black
|
DarkGreen
|
DarkSlateGray
|
Olive
|
Green
|
Teal
|
Navy
|
Purple
|
Maroon
|
Indigo
|
MidnightBlue
|
DarkBlue
|
DarkOliveGreen
|
SaddleBrown
|
ForestGreen
|
OliveDrab
|
SeaGreen
|
DarkGoldenrod
|
DarkSlateBlue
|
Sienna
|
MediumBlue
|
Brown
|
DarkTurquoise
|
DimGray
|
LightSeaGreen
|
DarkViolet
|
FireBrick
|
MediumVioletRed
|
MediumSeaGreen
|
Chocolate
|
Crimson
|
SteelBlue
|
Goldenrod
|
MediumSpringGreen
|
LawnGreen
|
CadetBlue
|
DarkOrchid
|
YellowGreen
|
LimeGreen
|
OrangeRed
|
DarkOrange
|
Orange
|
Gold
|
Yellow
|
Chartreuse
|
Lime
|
SpringGreen
|
Aqua
|
DeepSkyBlue
|
Blue
|
Magenta
|
Red
|
Gray
|
SlateGray
|
Peru
|
BlueViolet
|
LightSlateGray
|
DeepPink
|
MediumTurquoise
|
DodgerBlue
|
Turquoise
|
RoyalBlue
|
SlateBlue
|
DarkKhaki
|
IndianRed
|
MediumOrchid
|
GreenYellow
|
MediumAquamarine
|
DarkSeaGreen
|
Tomato
|
RosyBrown
|
Orchid
|
MediumPurple
|
PaleVioletRed
|
Coral
|
CornflowerBlue
|
DarkGray
|
SandyBrown
|
MediumSlateBlue
|
Tan
|
DarkSalmon
|
BurlyWood
|
HotPink
|
Salmon
|
Violet
|
LightCoral
|
SkyBlue
|
LightSalmon
|
Plum
|
Khaki
|
LightGreen
|
Aquamarine
|
Silver
|
LightSkyBlue
|
LightSteelBlue
|
LightBlue
|
PaleGreen
|
Thistle
|
PowderBlue
|
PaleGoldenrod
|
PaleTurquoise
|
LightGrey
|
Wheat
|
NavajoWhite
|
Moccasin
|
LightPink
|
Gainsboro
|
PeachPuff
|
Pink
|
Bisque
|
LightGoldenRod
|
BlanchedAlmond
|
LemonChiffon
|
Beige
|
AntiqueWhite
|
PapayaWhip
|
Cornsilk
|
LightYellow
|
LightCyan
|
Linen
|
Lavender
|
MistyRose
|
OldLace
|
WhiteSmoke
|
Seashell
|
Ivory
|
Honeydew
|
AliceBlue
|
LavenderBlush
|
MintCream
|
Snow
|
White
|
|
|
|
|
技术指标调用 [Technical Indicator calls]
double iAC( string symbol, int timeframe, int shift)
计算 Bill Williams' Accelerator/Decelerator oscillator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
shift - 位移数
示例:
double result=iAC(NULL, 0, 1);
double iAD( string symbol, int timeframe, int shift) 计算 Accumulation/Distribution indicator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
shift - 位移数
示例:
double result=iAD(NULL, 0, 1);
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) 计算 Bill Williams' Alligator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
jaw_period - 颚线周期
jaw_shift - 颚线位移
teeth_period - 齿线周期
teeth_shift - 齿线位移
lips_period - 唇线周期
lips_shift - 唇线位移
ma_method - 移动平均线种类
applied_price - 应用价格类型
mode - 来源模式,MODE_GATORJAW,MODE_GATORTEETH 或MODE_GATORLIPS
shift - 位移数
double jaw_val=iAlligator(NULl, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, 1);
double iADX( string symbol, int timeframe, int period, int applied_price, int mode, int shift) 计算 Movement directional index 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
applied_price - 应用价格类型
mode - 来源模式,参见指标线分类枚举
shift - 位移数
if(iADX(NULL,0,14,PRICE_HIGH,MODE_MAIN,0)>iADX(NULL,0,14,PRICE_HIGH,MODE_PLUSDI,0)) return(0);
double iATR( string symbol, int timeframe, int period, int shift) 计算 Indicator of the average true range 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
shift - 位移数
if(iATR(NULL,0,12,0)>iATR(NULL,0,20,0)) return(0);
double iAO( string symbol, int timeframe, int shift) 计算 Bill Williams' Awesome oscillator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
shift - 位移数
double val=iAO(NULL, 0, 2);
double iBearsPower( string symbol, int timeframe, int period, int applied_price, int shift) 计算 Bears Power indicator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
applied_price - 应用价格类型
shift - 位移数
double val=iBearsPower(NULL, 0, 13,PRICE_CLOSE,0);
double iBands( string symbol, int timeframe, int period, int deviation, int bands_shift, int applied_price, int mode, int shift) 计算 Bollinger bands indicator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
deviation - 背离
bands_shift - Bands位移
applied_price - 应用价格类型
mode - 来源模式,参见指标线分类枚举
shift - 位移数
if(iBands(NULL,0,20,2,0,PRICE_LOW,MODE_LOWER,0)>Low[0]) return(0);
double iBandsOnArray( double array[], int total, int period, double deviation, int bands_shift, int mode, int shift) 从数组中计算 Bollinger bands indicator 的值
:: 输入参数
array[] - 数组数据
total - 总数据数量
period - 周期
deviation - 背离
bands_shift - Bands位移
applied_price - 应用价格类型
mode - 来源模式,参见指标线分类枚举
shift - 位移数
if(iBands(NULL,0,20,2,0,PRICE_LOW,MODE_LOWER,0)>Low[0]) return(0);
double iBullsPower( string symbol, int timeframe, int period, int applied_price, int shift) 计算 Bulls Power indicator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
applied_price - 应用价格类型
shift - 位移数
double val=iBullsPower(NULL, 0, 13,PRICE_CLOSE,0);
double iCCI( string symbol, int timeframe, int period, int applied_price, int shift) 计算 Commodity channel index 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
applied_price - 应用价格类型
shift - 位移数
if(iCCI(NULL,0,12,0)>iCCI(NULL,0,20,0)) return(0);
double iCCIOnArray( double array[], int total, int period, int shift) 从数组中计算 Commodity channel index 的值
:: 输入参数
array[] - 数组数据
total - 总数据数量
period - 周期
shift - 位移数
if(iCCIOnArray(ExtBuffer,total,12,0)>iCCI(NULL,0,20,PRICE_OPEN, 0)) return(0);
double iCustom( string symbol, int timeframe, string name, ... , int mode, int shift) 计算 自定义指标 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
name - 自定义指标名称
... - 自定义指标参数
mode - 来源模式,参见指标线分类枚举
shift - 位移数
double val=iCustom(NULL, 0, "SampleInd",13,1,0);
double iDeMarker( string symbol, int timeframe, int period, int shift) 计算 DeMarker indicator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
shift - 位移数
double val=iDeMarker(NULL, 0, 13, 1);
double iEnvelopes( string symbol, int timeframe, int ma_period, int ma_method, int ma_shift, int applied_price, double deviation, int mode, int shift)计算 Envelopes indicator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
ma_period - 移动平均线周期
ma_method - 移动平均线模式
ma_shift - 移动平均线位移
applied_price - 应用价格类型
deviation - 背离
mode - 来源模式,参见指标线分类枚举
shift - 位移数
double val=iEnvelopes(NULL, 0, 13,MODE_SMA,10,PRICE_CLOSE,0.2,MODE_UPPER,0);
double iEnvelopesOnArray( double array[], int total, int ma_period, int ma_method, int ma_shift, double deviation, int mode, int shift)从数组中计算 Envelopes indicator 的值
:: 输入参数
array[] - 数组数据
total - 总数据数量
ma_period - 移动平均线周期
ma_method - 移动平均线模式
ma_shift - 移动平均线位移
deviation - 背离
mode - 来源模式,参见指标线分类枚举
shift - 位移数
double val=iEnvelopesOnArray(ExtBuffer, 0, 13, MODE_SMA, 0.2, MODE_UPPER,0 );
double iForce( string symbol, int timeframe, int period, int ma_method, int applied_price, int shift) 计算 Force index 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
ma_method - 移动平均线模式
applied_price - 应用价格类型
shift - 位移数
double val=iForce(NULL, 0, 13,MODE_SMA,PRICE_CLOSE,0);
double iFractals( string symbol, int timeframe, int mode, int shift) 计算 Fractals 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
mode - 来源模式,参见指标线分类枚举
shift - 位移数
double val=iFractals(NULL, 0, MODE_UPPER,0);
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) 计算 Fractals 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
jaw_period - 颚线周期
jaw_shift - 颚线位移
teeth_period - 齿线周期
teeth_shift - 齿线位移
lips_period - 唇线周期
lips_shift - 唇线位移
ma_method - 移动平均线种类
applied_price - 应用价格类型
mode - 来源模式,参见指标线分类枚举
shift - 位移数
double jaw_val=iGator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_UPPER, 1);
double iIchimoku( string symbol, int timeframe, int tenkan_sen, int kijun_sen, int senkou_span_b, int mode, int shift) 计算 Ichimoku Kinko Hyo 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
tenkan_sen - 转换线
jkijun_sen - 基准线
senkou_span_b - 参考范围b
mode - 来源模式,参见指标线分类枚举
shift - 位移数
double tenkan_sen=iIchimoku(NULL, 0, 9, 26, 52, MODE_TENKANSEN, 1);
double iBWMFI( string symbol, int timeframe, int shift) 计算 Bill Williams Market Facilitation index 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
shift - 位移数
double val=iBWMFI(NULL, 0, 0);
double iMomentum( string symbol, int timeframe, int period, int applied_price, int shift) 计算 Momentum indicator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
applied_price - 应用价格类型
shift - 位移数
if(iMomentum(NULL,0,12,PRICE_CLOSE,0)>iMomentum(NULL,0,20,PRICE_CLOSE,0)) return(0);
double iMomentumOnArray( double array[], int total, int period, int shift) 从数组中计算 Momentum indicator 的值
:: 输入参数
array[] - 数组数据
total - 总数据数量
period - 周期
shift - 位移数
if(iMomentumOnArray(mybuffer,100,12,0)>iMomentumOnArray(mubuffer,100,20,0)) return(0);
double iMFI( string symbol, int timeframe, int period, int shift) 计算 Money flow index 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
shift - 位移数
if(iMFI(NULL,0,14,0)>iMFI(NULL,0,14,1)) return(0);
double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift) 计算 Moving average indicator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
ma_shift - 移动平均线位移
ma_method - 移动平均线模式
applied_price - 应用价格类型
shift - 位移数
AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);
double iMAOnArray( double array[], int total, int period, int ma_shift, int ma_method, int shift) 从数组中计算 Moving average indicator 的值
:: 输入参数
array[] - 数组数据
total - 总数据数量
period - 周期
ma_shift - 移动平均线位移
ma_method - 移动平均线模式
shift - 位移数
double macurrent=iMAOnArray(ExtBuffer,0,5,0,MODE_LWMA,0);
double macurrentslow=iMAOnArray(ExtBuffer,0,10,0,MODE_LWMA,0);
double maprev=iMAOnArray(ExtBuffer,0,5,0,MODE_LWMA,1);
double maprevslow=iMAOnArray(ExtBuffer,0,10,0,MODE_LWMA,1);
//----
if(maprev=macurrentslow)
Alert("crossing up");
double iOsMA( string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int shift) 计算 Moving Average of Oscillator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
fast_ema_period - 快均线周期
slow_ema_period - 慢均线周期
signal_period - 信号周期
applied_price - 应用价格类型
shift - 位移数
if(iOsMA(NULL,0,12,26,9,PRICE_OPEN,1)>iOsMA(NULL,0,12,26,9,PRICE_OPEN,0)) return(0);
double iMACD( string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int mode, int shift) 计算 Moving averages convergence/divergence 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
fast_ema_period - 快均线周期
slow_ema_period - 慢均线周期
signal_period - 信号周期
applied_price - 应用价格类型
mode - 来源模式,参见指标线分类枚举
shift - 位移数
if(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0)) return(0);
double iOBV( string symbol, int timeframe, int applied_price, int shift) 计算 On Balance Volume indicator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
shift - 位移数
double val=iOBV(NULL, 0, PRICE_CLOSE, 1);
double iSAR( string symbol, int timeframe, double step, double maximum, int shift) 计算 On Balance Volume indicator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
step - 步幅
maximum - 最大值
shift - 位移数
if(iSAR(NULL,0,0.02,0.2,0)>Close[0]) return(0);
double iRSI( string symbol, void timeframe, int period, int applied_price, int shift) 计算 Relative strength index 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
applied_price - 应用价格类型
shift - 位移数
if(iRSI(NULL,0,14,PRICE_CLOSE,0)>iRSI(NULL,0,14,PRICE_CLOSE,1)) return(0);
double iRSIOnArray( double array[], int total, int period, int shift) 从数组中计算 Relative strength index 的值
:: 输入参数
array[] - 数组数据
total - 总数据数量
period - 周期
shift - 位移数
if(iRSIOnBuffer(ExtBuffer,1000,14,0)>iRSI(NULL,0,14,PRICE_CLOSE,1)) return(0);
double iRVI( string symbol, int timeframe, int period, int mode, int shift)计算 Relative Vigor index 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
mode - 来源模式,参见指标线分类枚举
shift - 位移数
double val=iRVI(NULL, 0, 10,MODE_MAIN,0);
double iStdDev( string symbol, int timeframe, int ma_period, int ma_method, int ma_shift, int applied_price, int shift) 计算 Standard Deviation indicator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
ma_period - 移动平均线周期
ma_method - 移动平均线模式
ma_shift - 移动平均线位移
applied_price - 应用价格类型
shift - 位移数
double val=iStdDev(NULL,0,10,MODE_EMA,0,PRICE_CLOSE,0);
double iStdDevOnArray( double array[], int total, int ma_period, int ma_method, int ma_shift, int shift) 从数组中计算 Standard Deviation indicator 的值
:: 输入参数
array[] - 数组数据
total - 总数据数量
ma_period - 移动平均线周期
ma_method - 移动平均线模式
ma_shift - 移动平均线位移
shift - 位移数
double val=iStdDevOnArray(ExtBuffer,100,10,MODE_EMA,0,0);
double iStochastic( string symbol, int timeframe, int %Kperiod, int %Dperiod, int slowing, int method, int price_field, int mode, int shift) 计算 Stochastic oscillator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
%Kperiod - %K线周期
%Dperiod - %D线周期
slowing - 减速量
method - 移动平均线种类
price_field - 价格领域参数: 0 - Low/High or 1 - Close/Close.
mode - 来源模式,参见指标线分类枚举
shift - 位移数
if(iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0)>iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0))
return(0);
double iWPR( string symbol, int timeframe, int period, int shift) 计算 Larry William's percent range indicator 的值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
period - 周期
shift - 位移数
if(iWPR(NULL,0,14,0)>iWPR(NULL,0,14,1)) return(0);
int iBars( string symbol, int timeframe) 返回制定图表的数据数
:: 输入参数
symbol - 通货标识
timeframe - 时间线
Print("Bar count on the 'EUROUSD' symbol with PERIOD_H1 is",iBars("EUROUSD",PERIOD_H1));
int iBarShift( string symbol, int timeframe, datetime time, bool exact=false) 在制定图表中搜索数据
:: 输入参数
symbol - 通货标识
timeframe - 时间线
time - 时间
exact - 是否精确的
datetime some_time=D'2004.03.21 12:00';
int shift=iBarShift("EUROUSD",PERIOD_M1,some_time);
Print("shift of bar with open time ",TimeToStr(some_time)," is ",shift);
double iClose( string symbol, int timeframe, int shift) 返回制定图表的收盘价
:: 输入参数
symbol - 通货标识
timeframe - 时间线
shift - 位移数
Print("Current bar for USDCHF H1: ",iTime("USDCHF",PERIOD_H1,i),", ", iOpen("USDCHF",PERIOD_H1,i),", ",
iHigh("USDCHF",PERIOD_H1,i),", ", iLow("USDCHF",PERIOD_H1,i),", ",
iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i));
double iHigh( string symbol, int timeframe, int shift) 返回制定图表的最高价
:: 输入参数
symbol - 通货标识
timeframe - 时间线
shift - 位移数
Print("Current bar for USDCHF H1: ",iTime("USDCHF",PERIOD_H1,i),", ", iOpen("USDCHF",PERIOD_H1,i),", ",
iHigh("USDCHF",PERIOD_H1,i),", ", iLow("USDCHF",PERIOD_H1,i),", ",
iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i));
double iLow( string symbol, int timeframe, int shift) 返回制定图表的最低价
:: 输入参数
symbol - 通货标识
timeframe - 时间线
shift - 位移数
Print("Current bar for USDCHF H1: ",iTime("USDCHF",PERIOD_H1,i),", ", iOpen("USDCHF",PERIOD_H1,i),", ",
iHigh("USDCHF",PERIOD_H1,i),", ", iLow("USDCHF",PERIOD_H1,i),", ",
iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i));
double iOpen( string symbol, int timeframe, int shift) 返回制定图表的开盘价
:: 输入参数
symbol - 通货标识
timeframe - 时间线
shift - 位移数
Print("Current bar for USDCHF H1: ",iTime("USDCHF",PERIOD_H1,i),", ", iOpen("USDCHF",PERIOD_H1,i),", ",
iHigh("USDCHF",PERIOD_H1,i),", ", iLow("USDCHF",PERIOD_H1,i),", ",
iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i));
datetime iTime( string symbol, int timeframe, int shift) 返回制定图表的时间
:: 输入参数
symbol - 通货标识
timeframe - 时间线
shift - 位移数
Print("Current bar for USDCHF H1: ",iTime("USDCHF",PERIOD_H1,i),", ", iOpen("USDCHF",PERIOD_H1,i),", ",
iHigh("USDCHF",PERIOD_H1,i),", ", iLow("USDCHF",PERIOD_H1,i),", ",
iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i));
double iVolume( string symbol, int timeframe, int shift) 返回制定图表的成交量
:: 输入参数
symbol - 通货标识
timeframe - 时间线
shift - 位移数
Print("Current bar for USDCHF H1: ",iTime("USDCHF",PERIOD_H1,i),", ", iOpen("USDCHF",PERIOD_H1,i),", ",
iHigh("USDCHF",PERIOD_H1,i),", ", iLow("USDCHF",PERIOD_H1,i),", ",
iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i));
int Highest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0) 返回制定图表的某段数据的最高值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
type - 数据类型
count - 计算范围
start - 开始点
double val;
// calculating the highest value in the range from 5 element to 25 element
// indicator charts symbol and indicator charts time frame
val=High[Highest(NULL,0,MODE_HIGH,20,4)];
int Lowest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0) 返回制定图表的某段数据的最高值
:: 输入参数
symbol - 通货标识
timeframe - 时间线
type - 数据类型
count - 计算范围
start - 开始点
double val=Low[Lowest(NULL,0,MODE_LOW,10,10)];
交易函数 [Trading Functions]
int HistoryTotal( )
返回历史数据的数量
// retrieving info from trade history
int i,hstTotal=HistoryTotal();
for(i=0;i {
//---- check selection result
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Access to history failed with error (",GetLastError(),")");
break;
}
// some work with order
}
bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE) 对订单进行平仓操作。
:: 输入参数
ticket - 订单编号
lots - 手数
price - 平仓价格
slippage - 最高划点数
Color - 标记颜色
示例:
if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
{
OrderClose(order_id,1,Ask,3,Red);
return(0);
}
bool OrderCloseBy( int ticket, int opposite, color Color=CLR_NONE) 对订单进行平仓操作。
:: 输入参数
ticket - 订单编号
opposite - 相对订单编号
Color - 标记颜色
示例:
if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
{
OrderCloseBy(order_id,opposite_id);
return(0);
}
double OrderClosePrice( ) 返回订单的平仓价
示例:
if(OrderSelect(ticket,SELECT_BY_POS)==true)
Print("Close price for the order ",ticket," = ",OrderClosePrice());
else
Print("OrderSelect failed error code is",GetLastError());
datetime OrderCloseTime( ) 返回订单的平仓时间
示例:
if(OrderSelect(10,SELECT_BY_POS,MODE_HISTORY)==true)
{
datetime ctm=OrderOpenTime();
if(ctm>0) Print("Open time for the order 10 ", ctm);
ctm=OrderCloseTime();
if(ctm>0) Print("Close time for the order 10 ", ctm);
}
else
Print("OrderSelect failed error code is",GetLastError());
string OrderComment( ) 返回订单的注释
示例:
string comment;
if(OrderSelect(10,SELECT_BY_TICKET)==false)
{
Print("OrderSelect failed error code is",GetLastError());
return(0);
}
comment = OrderComment();
// ...
double OrderCommission( ) 返回订单的佣金数
示例:
if(OrderSelect(10,SELECT_BY_POS)==true)
Print("Commission for the order 10 ",OrderCommission());
else
Print("OrderSelect failed error code is",GetLastError());
bool OrderDelete( int ticket) 删除未启用的订单
:: 输入参数
ticket - 订单编号
示例:
if(Ask>var1)
{
OrderDelete(order_ticket);
return(0);
}
datetime OrderExpiration( ) 返回代办订单的有效日期
示例:
if(OrderSelect(10, SELECT_BY_TICKET)==true)
Print("Order expiration for the order #10 is ",OrderExpiration());
else
Print("OrderSelect failed error code is",GetLastError());
double OrderLots( ) 返回选定订单的手数
示例:
if(OrderSelect(10,SELECT_BY_POS)==true)
Print("lots for the order 10 ",OrderLots());
else
Print("OrderSelect failed error code is",GetLastError());
int OrderMagicNumber( ) 返回选定订单的指定编号
示例:
if(OrderSelect(10,SELECT_BY_POS)==true)
Print("Magic number for the order 10 ", OrderMagicNumber());
else
Print("OrderSelect failed error code is",GetLastError());
bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE) 对订单进行平仓操作。
:: 输入参数
ticket - 订单编号
price - 平仓价格
stoploss - 止损价
takeprofit - 获利价
expiration - 有效期
Color - 标记颜色
示例:
if(TrailingStop>0)
{
SelectOrder(12345,SELECT_BY_TICKET);
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss() {
OrderModify(OrderTicket(),Ask-10*Point,Ask-35*Point,OrderTakeProfit(),0,Blue);
return(0);
}
}
}
double OrderOpenPrice( ) 返回选定订单的买入价
示例:
if(OrderSelect(10, SELECT_BY_POS)==true)
Print("open price for the order 10 ",OrderOpenPrice());
else
Print("OrderSelect failed error code is",GetLastError());
datetime OrderOpenTime( )返回选定订单的买入时间
示例:
if(OrderSelect(10, SELECT_BY_POS)==true)
Print("open time for the order 10 ",OrderOpenTime());
else
Print("OrderSelect failed error code is",GetLastError());
void OrderPrint( ) 将订单打印到窗口上
示例:
if(OrderSelect(10, SELECT_BY_TICKET)==true)
OrderPrint();
else
Print("OrderSelect failed error code is",GetLastError());
bool OrderSelect( int index, int select, int pool=MODE_TRADES) 选定订单
:: 输入参数
index - 订单索引
select - 选定模式,SELECT_BY_POS,SELECT_BY_TICKET
pool - Optional order pool index. Used when select parameter is SELECT_BY_POS.It can be any of the following values:
MODE_TRADES (default)- order selected from trading pool(opened and pending orders),
MODE_HISTORY - order selected from history pool (closed and canceled order).
示例:
if(OrderSelect(12470, SELECT_BY_TICKET)==true)
{
Print("order #12470 open price is ", OrderOpenPrice());
Print("order #12470 close price is ", OrderClosePrice());
}
else
Print("OrderSelect failed error code is",GetLastError());
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) 发送订单
:: 输入参数
symbol - 通货标示
cmd - 购买方式
volume - 购买手数
price - 平仓价格
slippage - 最大允许滑点数
stoploss - 止损价
takeprofit - 获利价
comment - 注释
magic - 自定义编号
expiration - 过期时间(只适用于待处理订单)
arrow_color - 箭头颜色
示例:
int ticket;
if(iRSI(NULL,0,14,PRICE_CLOSE,0)<25)
{
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,"My order #2",16384,0,Green);
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
}
double OrderStopLoss( ) 返回选定订单的止损
示例:
if(OrderSelect(ticket,SELECT_BY_POS)==true)
Print("Stop loss value for the order 10 ", OrderStopLoss());
else
Print("OrderSelect failed error code is",GetLastError());
int OrdersTotal( ) 返回总订单数
示例:
int handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");
if(handle<0) return(0);
// write header
FileWrite(handle,"#","open price","open time","symbol","lots");
int total=OrdersTotal();
// write open orders
for(int pos=0;pos {
if(OrderSelect(pos,SELECT_BY_POS)==false) continue;
FileWrite(handle,OrderTicket(),OrderOpenPrice(),OrderOpenTime(),OrderSymbol(),OrderLots());
}
FileClose(handle);
int OrdersTotal( ) 返回总订单数
示例:
if(OrderSelect(order_id, SELECT_BY_TICKET)==true)
Print("Swap for the order #", order_id, " ",OrderSwap());
else
Print("OrderSelect failed error code is",GetLastError());
double OrderSwap( ) 返回指定订单的汇率
示例:
if(OrderSelect(order_id, SELECT_BY_TICKET)==true)
Print("Swap for the order #", order_id, " ",OrderSwap());
else
Print("OrderSelect failed error code is",GetLastError());
string OrderSymbol( ) 返回指定订单的通货标识
示例:
if(OrderSelect(12, SELECT_BY_POS)==true)
Print("symbol of order #", OrderTicket(), " is ", OrderSymbol());
else
Print("OrderSelect failed error code is",GetLastError());
double OrderTakeProfit( ) 返回指定订单的获利点数
示例:
if(OrderSelect(12, SELECT_BY_POS)==true)
Print("Order #",OrderTicket()," profit: ", OrderTakeProfit());
else
Print("OrderSelect() âåðíóë îøèáêó - ",GetLastError());
int OrderTicket( ) 返回指定订单的编号
示例:
if(OrderSelect(12, SELECT_BY_POS)==true)
order=OrderTicket();
else
Print("OrderSelect failed error code is",GetLastError());
int OrderType( ) 返回指定订单的类型
示例:
int order_type;
if(OrderSelect(12, SELECT_BY_POS)==true)
{
order_type=OrderType();
// ...
}
else
Print("OrderSelect() âåðíóë îøèáêó - ",GetLastError());
窗口函数 [Window Functions]
double PriceOnDropped( )
Returns price part of dropped point where expert or script was dropped. This value is valid when expert or script dropped by mouse.
Note: For custom indicators this value is undefined.
示例:
double drop_price=PriceOnDropped();
datetime drop_time=TimeOnDropped();
//---- may be undefined (zero)
if(drop_time>0)
{
ObjectCreate("Dropped price line", OBJ_HLINE, 0, drop_price);
ObjectCreate("Dropped time line", OBJ_VLINE, 0, drop_time);
}
datetime TimeOnDropped( ) 示例:
Returns time part of dropped point where expert or script was dropped. This value is valid when expert or script dropped by mouse.
Note: For custom indicators this value is undefined.
double drop_price=PriceOnDropped();
datetime drop_time=TimeOnDropped();
//---- may be undefined (zero)
if(drop_time>0)
{
ObjectCreate("Dropped price line", OBJ_HLINE, 0, drop_price);
ObjectCreate("Dropped time line", OBJ_VLINE, 0, drop_time);
}
int WindowFind( string name) 返回窗口的索引号
:: 输入参数
name - 指标简称
示例:
int win_idx=WindowFind("MACD(12,26,9)");
int WindowHandle( string symbol, int timeframe) 返回窗口的句柄
:: 输入参数
symbol - 通货标识
timeframe - 时间线
示例:
int win_handle=WindowHandle("USDX",PERIOD_H1);
if(win_handle!=0)
Print("Window with USDX,H1 detected. Rates array will be copied immediately.");
bool WindowIsVisible( int index) 返回窗口是否可见
:: 输入参数
index - 窗口索引号
示例:
int maywin=WindowFind("MyMACD");
if(maywin>-1 && WindowIsVisible(maywin)==true)
Print("window of MyMACD is visible");
else
Print("window of MyMACD not found or is not visible");
int WindowOnDropped( ) 示例:
Returns window index where expert, custom indicator or script was dropped. This value is valid when expert, custom indicator or script dropped by mouse.
if(WindowOnDropped()!=0)
{
Print("Indicator 'MyIndicator' must be applied to main chart window!");
return(false);
}
int WindowsTotal( ) 返回窗口数
示例:
Print("Windows count = ", WindowsTotal());
int WindowXOnDropped( ) 示例:
Returns x-axis coordinate in pixels were expert or script dropped to the chart. See also WindowYOnDropped(), WindowOnDropped()
Print("Expert dropped point x=",WindowXOnDropped()," y=",WindowYOnDropped());/div>
int WindowYOnDropped( ) 示例:
Returns y-axis coordinate in pixels were expert or script dropped to the chart. See also WindowYOnDropped(), WindowOnDropped()
Print("Expert dropped point x=",WindowXOnDropped()," y=",WindowYOnDropped());